Android çok çeşitli sesler kullanır veri biçimleri ve bunların bir alt kümesini herkese açık API'lerde gösterir. dosya biçimlerini, ve Donanım Soyutlama Katmanı (HAL).
Özellikler
Ses verisi biçimleri özelliklerine göre sınıflandırılır:
- Sıkıştırma
- . Sıkıştırılmamış, kayıpsız sıkıştırılmış veya kayıplı sıkıştırılmış. PCM, en yaygın sıkıştırılmamış ses biçimidir. FLAC, kayıpsız sıkıştırılmış bir biçimindedir, MP3 ve AAC ise kayıplı sıkıştırılmış biçimlerdir.
- Bit derinliği
- . Ses örneği başına anlamlı bit sayısı.
- Kapsayıcı boyutu
- . Bir örneği depolamak veya iletmek için kullanılan bit sayısı. Genellikle bit derinliğiyle aynıdır, ancak bazı durumlarda dolgu bitleri hizalama için ayrılır. Örneğin, 24 bitlik örnek, 32 bitlik bir kelime içinde bulunabilir.
- Hizalama
- . Kapsayıcı boyutu, bit derinliğine tam olarak eşitse bu gösterime paket adı verilir. Aksi takdirde temsil paketlenmemiş olarak da gönderebilirsiniz. Örneğin önemli kısımları genelde en soldaki (en önemli) veya en sağdakiyle hizalanır (en az önemli) bitini oluşturur. Geleneksel olarak paketlenmiş ve sınıfsız hale getirmek için derinlik değeri değil ikinin üssü.
- İmza
- . Örneklerin imzalı veya imzasız olup olmadığı.
- Representation
- . Sabit veya kayan nokta; aşağıya bakın.
Sabit nokta gösterimi
Sabit nokta sıkıştırılmamış PCM ses verilerinin en yaygın temsilidir. özellikle de donanım arayüzlerinde.
Sabit noktalı sayıların basamak sayısı sabittir radix noktasından önce ve sonra. Tüm temsillerimiz 2. taban Bu nedenle, basamak yerine bit yerine ve ikili nokta ya da rakip noktası için nokta ekleyin. Noktanın solundaki bitler tam sayıdır, noktanın sağındaki bitler ise kesirli kısım.
Tam sayı PCM'den bahsediyoruz, çünkü sabit noktalı değerler genellikle tam sayı değerleri olarak saklanır ve işlenir. Sabit nokta olarak yorumlama örtülüdür.
İkisinin tamamlayıcısını kullanırız sabit noktalı temsillerin hepsi için Tüm değerlerin tek bir birimde olduğu aşağıdakiler geçerlidir: LSB:
|largest negative value| = |largest positive value| + 1
Q ve U gösterimi
Farklı proje yönetimi notlar kullanmaya devam edecektir. Q notasyonunu kullanırız: Qm.n, m tam sayı biti ve n kesirli bit anlamına gelir. "Q" bir bit olarak sayılır, ancak değer ikinin tamamlayıcısıyla ifade edilir. Toplam bit sayısı m + n + 1'dir.
n, imzasız sayılar içindir: m tam sayı bitleri ve n kesirli bitleri, ve "U" olarak kabul edilir. Toplam bit sayısı m + n'dir.
Tam sayı bölümü, nihai sonuçta kullanılabilir veya geçici olabilir. Bu durumda, tam sayı parçasını oluşturan bitlere koruma bitleri için de geçerlidir. Koruma bitleri, ara hesaplamanın taşmasına izin verir. nihai değer aralık içinde olduğu veya aralık dahilinde olacak şekilde sabitlenebildiği sürece. Sabit noktalı koruma bitlerinin solda, kayan nokta biriminin ise solda olduğunu unutmayın güvenlik haneleri yuvarlama hatasını azaltmak için kullanılır ve sağdadır.
Kayan nokta temsili
Kayan nokta noktanın konumunun değişebileceği sabit noktanın alternatifidir. Kayan noktanın başlıca avantajları şunlardır:
- Daha yüksek boşluk ve dinamik aralık; nominal aralıkları aşan kayan nokta aritmetik toleransları hesaplama sırasında yalnızca değerleri sonda sabitler
- Sonsuzluk ve NaN gibi özel değerler için destek
- Birçok durumda daha kolaydır
Geçmişte, kayan nokta aritmetiği tam sayılardan veya sabit noktalardan daha yavaştı ama artık kayan noktanın daha hızlı olması yaygın hale geldi. sağlanan kontrol akışı kararları bir hesaplamanın değerine dayanmaz.
Ses için Android biçimleri
Ses için başlıca Android biçimleri aşağıdaki tabloda listelenmiştir:
Özellik | S0:15 | S0.7 1 | S0:23 | S0:31 | kayan | |
---|---|---|---|---|---|---|
Kapsayıcı bit |
16 | 8 | 24 veya 32 2 | 32 | 32 | |
İşaretçi dahil önemli bitler |
16 | 8 | 24 | 24 veya 32 2 | 25 3 | |
dB cinsinden boşluk payı |
0 | 0 | 0 | 0 | 126 4 | |
dB cinsinden dinamik aralık |
90 | 42 | 138 | 138 - 186 | 900 5 |
Yukarıdaki tüm sabit nokta biçimleri, -1,0 ile +1,0 eksi bir LSB arasında bir nominal aralığına sahiptir. nedeniyle pozitif değerden bir daha fazla negatif değer vardır temsilidir.
Dipnotlar:
-
Yukarıdaki tüm biçimler imzalı örnek değerleri ifade eder.
8 bit biçimi genellikle "imzasız" olarak adlandırılır ancak
bu aslında
0.10000000
ön yargısına sahip işaretli bir değerdir. - Q0.23, 24 bit (üç adet 8 bit bayt, küçük son) olarak veya paketlenmemiş bir saniyedir. Paketlenmemişse, önemli bitler ya sağa yaslanmış MSB'ye doğru tabela uzantısı dolgulu LSB'ye doğru (Q8.23), veya MSB'ye doğru sıfır dolguyla LSB'ye doğru sola yaslanmış (S0:31). Q0.31, teorik olarak 32 anlamlı bite izin verir. ancak Q0.31'i kabul eden donanım arayüzleri nadiren tüm bitleri kullanır.
- Tek duyarlıklı kayan noktanın 23 açık biti ile bir gizli biti ve işaret biti bulunur. Bu da toplamda 25 anlamlı bit oluşturur. Normal sayılar daha az anlamlı bite sahiptir.
- Tek duyarlıklı kayan nokta, ±1,7e+38'e kadar değerleri ifade edebilir. Bu da büyük olasılıktır.
- Gösterilen dinamik aralık, nominal maksimum değere kadar olan denormaller içindir değer ±1.0. Örneğin, NEON anormallikleri desteklemez.
Dönüşümler
Bu bölümde şu konular veri dönüşümleri müzakere tekniği de eklediniz.
Kayan nokta dönüşümleri
Qm.n biçiminden bir değeri kayan noktaya dönüştürmek için:
- Noktayı yoksayarak değeri tam sayıymış gibi kayan noktaya dönüştürün.
- 2-n ile çarpın.
Örneğin, Q4.27 dahili değerini kayan noktaya dönüştürmek için şunu kullanın:
float = integer * (2 ^ -27)
Kayan noktadan sabit noktaya dönüşümler şu kurallara uyar:
- Tek duyarlıklı kayan noktanın nominal aralığı ±1,0, ancak ara değerler için tam aralık ±1,7e+38 şeklindedir. Kayan nokta ile harici gösterim için sabit nokta arasında dönüşüm (ses cihazlarındaki çıkış gibi) yalnızca nominal aralığı dikkate alır ve bu aralığı aşan değerler için sınırlama uygulanır. Özellikle, +1.0 dönüştürüldüğünde sabit nokta biçiminde, +1,0 eksi bir LSB'ye sabitlenir.
- Normal dışı durumların (normal olmayanlar) ve +/- 0,0 değerlerinin temsili olarak kullanılmasına izin verilir. ancak işleme sırasında sessizce 0,0'a dönüştürülebilir.
- Sonsuzluklar, işlemlerden geçer veya sessizce kesin olarak kısıtlanır. olan değer +/- 1,0 olarak değiştirildi. Genel olarak ikincisi, sabit nokta biçimine dönüştürme işlemidir.
- NaN davranışı tanımsızdır: Bir NaN, özdeş bir NaN olarak yayılabilir veya değeri varsayılan NaN'ye dönüştürülür, sessizce +/- 1.0 ile sınırlandırılabilir veya dönüştürüldükten sonra sorun yaşanmaz.
Sabit nokta dönüşümleri
Farklı Qm.n biçimleri arasındaki dönüşümlerde aşağıdaki kurallara uyulur:
- m artırıldığında, soldaki tam sayı kısmını genişletin.
- m azaltıldığında tam sayı kısmını sabitleyin.
- n artırıldığında sıfır sağ taraftaki kesirli kısmı uzatın.
- n azaltıldığında, sağda bulunan kesirli fazla bitleri titreyin, yuvarlayın veya kırpın.
Örneğin, bir Q4.27 değerini Q0.15'e dönüştürmek için (dither veya yuvarlama), Q4.27 değerini 12 bit sağa kaydırın ve sonuçları sınırlayın izin verilmez. Bu, işin içine Q temsili.
7.24'ü Ç7.23'e dönüştürmek için imzalı bölünmeyi 2'ye yapın, veya eşdeğer olarak işaret bitini Q7.24 tam sayı miktarına ve ardından işaretli sağa kaydırmayı 1 ile ekleyin. Basit bir işaretli sağa kaymanın, işaretli bölmenin 2'ye bölmesine eşdeğer olmadığını unutmayın.
Kayıp ve kayıpsız dönüşümler
Dönüşüm kayıpsızdır
ters çevrilebilir:
A
- B
arası dönüşüm
A = C
dilinde C
sonuç.
Aksi takdirde, dönüşüm kayıp olur.
Kayıpsız dönüşüm izni gidiş dönüş biçimindeki dönüşüm.
25 veya daha az anlamlı bite sahip sabit nokta gösteriminden kayan noktaya dönüşümler kayıpsızdır. Kayan noktadan yaygın sabit nokta temsiline dönüşümler kayıptır.