Veri biçimleri

Android, dahili olarak çok çeşitli ses verisi formatlarını kullanır ve bunların bir alt kümesini genel API'lerde, dosya formatlarında ve Donanım Soyutlama Katmanında (HAL) kullanıma sunar.

Özellikler

Ses veri formatları ö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 formatıdır. FLAC kayıpsız sıkıştırılmış bir formattır, MP3 ve AAC ise kayıplı sıkıştırılmış formatlardır.
Bit derinliği
Ses örneği başına önemli bit sayısı.
Konteynır boyutu
Bir örneği depolamak veya iletmek için kullanılan bit sayısı. Genellikle bu, bit derinliğiyle aynıdır, ancak bazen hizalama için ek dolgu bitleri tahsis edilir. Örneğin, 24 bitlik bir örnek, 32 bitlik bir kelimenin içinde yer alabilir.
Hizalama
Konteyner boyutu bit derinliğine tam olarak eşitse temsil, paketlenmiş olarak adlandırılır. Aksi takdirde temsil paketinden çıkarılır . Numunenin önemli bitleri tipik olarak kabın ya en soldaki (en anlamlı) ya da en sağdaki (en az anlamlı) bitiyle hizalanır. Paketlenmiş ve paketlenmemiş terimlerini yalnızca bit derinliği ikinin katı olmadığında kullanmak gelenekseldir.
İmza
Numunelerin imzalı veya imzasız olup olmadığı.
Temsil
Sabit nokta veya kayan nokta; aşağıya bakınız.

Sabit nokta gösterimi

Sabit nokta, özellikle donanım arayüzlerinde sıkıştırılmamış PCM ses verilerinin en yaygın temsilidir.

Sabit noktalı bir sayının, taban noktasından önce ve sonra sabit (sabit) sayıda rakamı vardır. Tüm gösterimlerimiz 2 tabanını kullanır, bu nedenle rakam yerine bit'i ve taban noktası yerine ikili noktayı veya basitçe noktayı kullanırız. Noktanın solundaki bitler tamsayı kısmı, sağındaki bitler ise kesirli kısımdır .

Tamsayı PCM'den bahsediyoruz çünkü sabit nokta değerleri genellikle tamsayı değerleri olarak depolanır ve işlenir. Sabit nokta olarak yorumlanması örtülüdür.

Tüm işaretli sabit nokta gösterimleri için ikinin tamamlayıcısını kullanırız; bu nedenle, tüm değerlerin bir LSB'nin birimlerinde olduğu durumlarda aşağıdakiler geçerlidir:

|largest negative value| = |largest positive value| + 1

Q ve U notasyonu

Bir tamsayıda sabit nokta gösterimi için çeşitli gösterimler vardır. Q notasyonunu kullanıyoruz: Q m . 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ı olarak ifade edilir. Toplam bit sayısı m + n + 1'dir.

U m . n işaretsiz sayılar içindir: m tamsayı biti ve n kesirli bit ve "U" sıfır bit olarak sayılır. Toplam bit sayısı m + n'dir .

Tamsayı kısmı nihai sonuçta kullanılabilir veya geçici olabilir. İkinci durumda, tam sayı kısmını oluşturan bitlere koruma bitleri denir. Koruma bitleri, nihai değer aralık dahilinde olduğu veya aralık içinde olacak şekilde sıkıştırılabildiği sürece, bir ara hesaplamanın taşmasına izin verir. Sabit noktalı koruma bitlerinin solda olduğunu, kayan noktalı birim koruma basamaklarının ise yuvarlama hatasını azaltmak için kullanıldığını ve sağda olduğunu unutmayın.

Kayan nokta gösterimi

Kayan nokta , noktanın konumunun değişebildiği sabit noktaya bir alternatiftir. Kayan noktanın başlıca avantajları şunlardır:

  • Daha fazla boşluk payı ve dinamik aralık ; kayan nokta aritmetiği, ara hesaplama sırasında nominal aralıkların aşılmasını tolere eder ve değerleri yalnızca sonda sabitler
  • Sonsuzluklar ve NaN gibi özel değerler için destek
  • Birçok durumda kullanımı daha kolay

Geçmişte, kayan noktalı aritmetik, tam sayı veya sabit noktalı aritmetikten daha yavaştı, ancak kontrol akışı kararlarının bir hesaplamanın değerine dayanmaması koşuluyla artık kayan noktanın daha hızlı olması yaygındır.

Ses için Android formatları

Ses için başlıca Android formatları aşağıdaki tabloda listelenmiştir:

Gösterim
Mülk Q0.15 Q0.7 1 Q0.23 Q0.31 batmadan yüzmek
Konteyner
bitler
16 8 24 veya 32 2 32 32
Önemli parçalar
işaret dahil
16 8 24 24 veya 32 2 25 3
Boşluk payı
dB cinsinden
0 0 0 0 126 4
Dinamik aralık
dB cinsinden
90 42 138 138'den 186'ya 900 5

Yukarıdaki tüm sabit nokta formatlarının nominal aralığı -1,0 ila +1,0 eksi bir LSB'dir. İkinin tümleyen temsili nedeniyle pozitif değerden bir negatif değer daha vardır.

Dipnotlar:

  1. Yukarıdaki tüm formatlar imzalı örnek değerleri ifade eder. 8 bitlik format genellikle "imzasız" olarak adlandırılır, ancak aslında 0.10000000 önyargılı işaretli bir değerdir.
  2. Q0.23, 24 bit (üç adet 8 bit bayt, küçük endian) halinde paketlenebilir veya 32 bit olarak paketlenebilir. Paketlenmemişse, önemli bitler ya MSB'ye doğru işaret uzatma dolgusu ile LSB'ye doğru sağa dayalıdır (Q8.23) ya da LSB'ye doğru sıfır dolgulu MSB'ye doğru sola dayalıdır (Q0.31). Q0.31 teorik olarak 32 anlamlı bit'e kadar izin verir, ancak Q0.31'i kabul eden donanım arayüzleri nadiren tüm bitleri kullanır.
  3. Tek duyarlıklı kayan nokta, 23 açık bitin yanı sıra bir gizli bit ve işaret bitine sahiptir, bu da toplamda 25 önemli bit anlamına gelir. Normal olmayan sayıların anlamlı bitleri daha azdır.
  4. Tek duyarlıklı kayan nokta, ±1,7e+38'e kadar değerleri ifade edebilir, bu da büyük boşluk payını açıklar.
  5. Gösterilen dinamik aralık, nominal maksimum değer ±1,0'a kadar olan denormaller içindir. NEON gibi mimariye özgü bazı kayan nokta uygulamalarının denormalleri desteklemediğini unutmayın.

Dönüşümler

Bu bölümde çeşitli gösterimler arasındaki veri dönüşümleri anlatılmaktadır.

Kayan nokta dönüşümleri

Bir değeri Q m'den dönüştürmek için. n biçiminden kayan noktaya dönüştürme:

  1. Değeri bir tamsayıymış gibi kayan noktaya dönüştürün (noktayı göz ardı ederek).
  2. 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'dır, ancak ara değerler için tam aralık ±1,7e+38'dir. Harici temsil için (örneğin, ses cihazlarına çıkış) kayan nokta ve sabit nokta arasındaki dönüşüm, yalnızca nominal aralığı dikkate alacak ve bu aralığı aşan değerler için sıkıştırma yapılacaktır. Özellikle, +1,0 sabit nokta formatına dönüştürüldüğünde +1,0 eksi bir LSB'ye sabitlenir.
  • Temsilde denormallere (normal altı) ve her iki +/- 0,0'a izin verilir, ancak işlem sırasında sessizce 0,0'a dönüştürülebilir.
  • Sonsuzluklar ya işlemlerden geçecek ya da sessizce +/- 1,0 ile sınırlanacak. Genellikle ikincisi sabit nokta formatına dönüşüm içindir.
  • NaN davranışı tanımsızdır: Bir NaN, aynı NaN olarak yayılabilir veya Varsayılan NaN'ye dönüştürülebilir, sessizce +/- 1,0 ile sınırlandırılabilir veya sessizce 0,0'a dönüştürülebilir veya bir hatayla sonuçlanabilir.

Sabit nokta dönüşümleri

Farklı Qm arasındaki dönüşümler. n format şu kurallara uyar:

  • m artırıldığında işaret soldaki tamsayı kısmını uzatır.
  • m azaldığında tam sayı kısmını sıkıştırın.
  • N arttığında sıfır sağdaki kesirli kısmı uzatır.
  • N azaldığında, sağdaki fazla kesirli bitleri ya titretin, yuvarlayın ya da kesin.

Örneğin, bir Q4.27 değerini Q0.15'e (titreme veya yuvarlama olmadan) dönüştürmek için, Q4.27 değerini 12 bit sağa kaydırın ve 16 bit işaretli aralığı aşan sonuçları sabitleyin. Bu, Q temsilinin noktasını hizalar.

Q7.24'ü Q7.23'e dönüştürmek için işaretli bir sayıyı 2'ye bölün veya işaret bitini Q7.24 tam sayı miktarına eşdeğer şekilde ekleyin ve ardından işaretli sağa kaydırmayı 1 ile yapın. Basit işaretli sağa kaydırmanın şuna eşdeğer olmadığını unutmayın: imzalı bir sayı 2'ye bölünür.

Kayıplı ve kayıpsız dönüşümler

Bir dönüşüm tersinir ise kayıpsızdır : A B ve C dönüşüm A = C sonucunu verir. Aksi takdirde dönüşüm kayıplıdır .

Kayıpsız dönüşümler gidiş-dönüş format dönüşümüne izin verir.

25 veya daha az önemli bit içeren sabit nokta gösteriminden kayan noktaya dönüşümler kayıpsızdır. Kayan noktadan herhangi bir ortak sabit nokta gösterimine dönüşümler kayıplıdır.

,

Android, dahili olarak çok çeşitli ses verisi formatlarını kullanır ve bunların bir alt kümesini genel API'lerde, dosya formatlarında ve Donanım Soyutlama Katmanında (HAL) kullanıma sunar.

Özellikler

Ses veri formatları ö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 formatıdır. FLAC kayıpsız sıkıştırılmış bir formattır, MP3 ve AAC ise kayıplı sıkıştırılmış formatlardır.
Bit derinliği
Ses örneği başına önemli bit sayısı.
Konteynır boyutu
Bir örneği depolamak veya iletmek için kullanılan bit sayısı. Genellikle bu, bit derinliğiyle aynıdır, ancak bazen hizalama için ek dolgu bitleri tahsis edilir. Örneğin, 24 bitlik bir örnek, 32 bitlik bir kelimenin içinde yer alabilir.
Hizalama
Konteyner boyutu bit derinliğine tam olarak eşitse temsil, paketlenmiş olarak adlandırılır. Aksi takdirde temsil paketinden çıkarılır . Numunenin önemli bitleri tipik olarak kabın ya en soldaki (en anlamlı) ya da en sağdaki (en az anlamlı) bitiyle hizalanır. Paketlenmiş ve paketlenmemiş terimlerini yalnızca bit derinliği ikinin katı olmadığında kullanmak gelenekseldir.
İmza
Numunelerin imzalı veya imzasız olup olmadığı.
Temsil
Sabit nokta veya kayan nokta; aşağıya bakınız.

Sabit nokta gösterimi

Sabit nokta, özellikle donanım arayüzlerinde sıkıştırılmamış PCM ses verilerinin en yaygın temsilidir.

Sabit noktalı bir sayının, taban noktasından önce ve sonra sabit (sabit) sayıda rakamı vardır. Tüm gösterimlerimiz 2 tabanını kullanır, bu nedenle rakam yerine bit'i ve taban noktası yerine ikili noktayı veya basitçe noktayı kullanırız. Noktanın solundaki bitler tamsayı kısmı, sağındaki bitler ise kesirli kısımdır .

Tamsayı PCM'den bahsediyoruz çünkü sabit nokta değerleri genellikle tamsayı değerleri olarak depolanır ve işlenir. Sabit nokta olarak yorumlanması örtülüdür.

Tüm işaretli sabit nokta gösterimleri için ikinin tamamlayıcısını kullanırız; bu nedenle, tüm değerlerin bir LSB'nin birimlerinde olduğu durumlarda aşağıdakiler geçerlidir:

|largest negative value| = |largest positive value| + 1

Q ve U notasyonu

Bir tamsayıda sabit nokta gösterimi için çeşitli gösterimler vardır. Q notasyonunu kullanıyoruz: Q m . 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ı olarak ifade edilir. Toplam bit sayısı m + n + 1'dir.

U m . n işaretsiz sayılar içindir: m tamsayı biti ve n kesirli bit ve "U" sıfır bit olarak sayılır. Toplam bit sayısı m + n'dir .

Tamsayı kısmı nihai sonuçta kullanılabilir veya geçici olabilir. İkinci durumda, tam sayı kısmını oluşturan bitlere koruma bitleri denir. Koruma bitleri, nihai değer aralık dahilinde olduğu veya aralık içinde olacak şekilde sıkıştırılabildiği sürece, bir ara hesaplamanın taşmasına izin verir. Sabit noktalı koruma bitlerinin solda olduğunu, kayan noktalı birim koruma basamaklarının ise yuvarlama hatasını azaltmak için kullanıldığını ve sağda olduğunu unutmayın.

Kayan nokta gösterimi

Kayan nokta , noktanın konumunun değişebildiği sabit noktaya bir alternatiftir. Kayan noktanın başlıca avantajları şunlardır:

  • Daha fazla boşluk payı ve dinamik aralık ; kayan nokta aritmetiği, ara hesaplama sırasında nominal aralıkların aşılmasını tolere eder ve değerleri yalnızca sonda sabitler
  • Sonsuzluklar ve NaN gibi özel değerler için destek
  • Birçok durumda kullanımı daha kolay

Geçmişte, kayan noktalı aritmetik, tam sayı veya sabit noktalı aritmetikten daha yavaştı, ancak kontrol akışı kararlarının bir hesaplamanın değerine dayanmaması koşuluyla artık kayan noktanın daha hızlı olması yaygındır.

Ses için Android formatları

Ses için başlıca Android formatları aşağıdaki tabloda listelenmiştir:

Gösterim
Mülk Q0.15 Q0.7 1 Q0.23 Q0.31 batmadan yüzmek
Konteyner
bitler
16 8 24 veya 32 2 32 32
Önemli parçalar
işaret dahil
16 8 24 24 veya 32 2 25 3
Boşluk payı
dB cinsinden
0 0 0 0 126 4
Dinamik aralık
dB cinsinden
90 42 138 138'den 186'ya 900 5

Yukarıdaki tüm sabit nokta formatlarının nominal aralığı -1,0 ila +1,0 eksi bir LSB'dir. İkinin tümleyen temsili nedeniyle pozitif değerden bir negatif değer daha vardır.

Dipnotlar:

  1. Yukarıdaki tüm formatlar imzalı örnek değerleri ifade eder. 8 bitlik format genellikle "imzasız" olarak adlandırılır, ancak aslında 0.10000000 önyargılı işaretli bir değerdir.
  2. Q0.23, 24 bit (üç adet 8 bit bayt, küçük endian) halinde paketlenebilir veya 32 bit olarak paketlenebilir. Paketlenmemişse, önemli bitler ya MSB'ye doğru işaret uzatma dolgusu ile LSB'ye doğru sağa dayalıdır (Q8.23) ya da LSB'ye doğru sıfır dolgulu MSB'ye doğru sola dayalıdır (Q0.31). Q0.31 teorik olarak 32 anlamlı bit'e kadar izin verir, ancak Q0.31'i kabul eden donanım arayüzleri nadiren tüm bitleri kullanır.
  3. Tek duyarlıklı kayan nokta, 23 açık bitin yanı sıra bir gizli bit ve işaret bitine sahiptir, bu da toplamda 25 önemli bit anlamına gelir. Normal olmayan sayıların anlamlı bitleri daha azdır.
  4. Tek duyarlıklı kayan nokta, ±1,7e+38'e kadar değerleri ifade edebilir, bu da büyük boşluk payını açıklar.
  5. Gösterilen dinamik aralık, nominal maksimum değer ±1,0'a kadar olan denormaller içindir. NEON gibi mimariye özgü bazı kayan nokta uygulamalarının denormalleri desteklemediğini unutmayın.

Dönüşümler

Bu bölümde çeşitli gösterimler arasındaki veri dönüşümleri anlatılmaktadır.

Kayan nokta dönüşümleri

Bir değeri Q m'den dönüştürmek için. n biçiminden kayan noktaya dönüştürme:

  1. Değeri bir tamsayıymış gibi kayan noktaya dönüştürün (noktayı göz ardı ederek).
  2. 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'dır, ancak ara değerler için tam aralık ±1,7e+38'dir. Harici temsil için (örneğin, ses cihazlarına çıkış) kayan nokta ve sabit nokta arasındaki dönüşüm, yalnızca nominal aralığı dikkate alacak ve bu aralığı aşan değerler için sıkıştırma yapılacaktır. Özellikle, +1,0 sabit nokta formatına dönüştürüldüğünde +1,0 eksi bir LSB'ye sabitlenir.
  • Temsilde denormallere (normal altı) ve her iki +/- 0,0'a izin verilir, ancak işlem sırasında sessizce 0,0'a dönüştürülebilir.
  • Sonsuzluklar ya işlemlerden geçecek ya da sessizce +/- 1,0 ile sınırlanacak. Genellikle ikincisi sabit nokta formatına dönüşüm içindir.
  • NaN davranışı tanımsızdır: Bir NaN, aynı NaN olarak yayılabilir veya Varsayılan NaN'ye dönüştürülebilir, sessizce +/- 1,0 ile sınırlandırılabilir veya sessizce 0,0'a dönüştürülebilir veya bir hatayla sonuçlanabilir.

Sabit nokta dönüşümleri

Farklı Qm arasındaki dönüşümler. n format şu kurallara uyar:

  • m artırıldığında işaret soldaki tamsayı kısmını uzatır.
  • m azaldığında tam sayı kısmını sıkıştırın.
  • N arttığında sıfır sağdaki kesirli kısmı uzatır.
  • N azaldığında, sağdaki fazla kesirli bitleri ya titretin, yuvarlayın ya da kesin.

Örneğin, bir Q4.27 değerini Q0.15'e (titreme veya yuvarlama olmadan) dönüştürmek için, Q4.27 değerini 12 bit sağa kaydırın ve 16 bit işaretli aralığı aşan sonuçları sıkıştırın. Bu, Q temsilinin noktasını hizalar.

Q7.24'ü Q7.23'e dönüştürmek için işaretli bir sayıyı 2'ye bölün veya işaret bitini Q7.24 tam sayı miktarına eşdeğer şekilde ekleyin ve ardından işaretli sağa kaydırmayı 1 ile yapın. Basit işaretli sağa kaydırmanın şuna eşdeğer olmadığını unutmayın: imzalı bir sayı 2'ye bölünür.

Kayıplı ve kayıpsız dönüşümler

Bir dönüşüm tersinir ise kayıpsızdır : A B ve C dönüşüm A = C sonucunu verir. Aksi takdirde dönüşüm kayıplıdır .

Kayıpsız dönüşümler gidiş-dönüş format dönüşümüne izin verir.

25 veya daha az önemli bit içeren sabit nokta gösteriminden kayan noktaya dönüşümler kayıpsızdır. Kayan noktadan herhangi bir ortak sabit nokta gösterimine dönüşümler kayıplıdır.