Veri Formatları

Android kullanan ses çok çeşitli veri formatları içten ve kamu API'ler, bunların bir alt kümesini ortaya dosya biçimleri ve Donanım Soyutlama Katmanı (HAL).

Özellikleri

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 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 anlamlı bit sayısı.
Konteynır boyutu
Bir örneği depolamak veya iletmek için kullanılan bit sayısı. Genellikle bu, bit derinliği ile aynıdır, ancak bazen hizalama için ek dolgu bitleri tahsis edilir. Örneğin, 32 bitlik bir sözcük içinde 24 bitlik bir örnek bulunabilir.
hizalama
Kap boyutu bit derinliği tam olarak eşit ise, temsili paketlenmiş olarak adlandırılır. Aksi takdirde temsil paketli değildir. Örneğin anlamlı bitleri, tipik olarak, kabın en solundaki (en anlamlı) veya en sağdaki (en az önemli) bit ile hizalanır. Bit derinliği bir değil, sadece zaman terimleri kullanmak geleneksel paketlenmiş ve paketli değildir ikisinin güç .
imza
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üzleri de, sıkıştırılmamış PCM ses verileri için en yaygın temsilidir.

Sabit nokta sayısı önce ve sonra basamak sabit (sabit) sayıda kök noktası . Bizim temsiller Tüm kullanmak tabanını 2 biz basamağı için biraz yerine ve ikili nokta ya da sadece radix noktası için işaret biçimde,. Noktasının solunda bit tamsayı parçasıdır ve noktasının sağındaki parçalarıdır kesirli kısmı .

Sabit noktalı değerlere genellikle saklanır ve tamsayı değerleri olarak manipüle edilir, çünkü tamsayı PCM konuşur. Sabit nokta olarak yorumlama örtüktür.

Biz kullanmak ikinin tamamlayıcısı tüm değerler birinin birimlerinde nerede şu tutar, böylece tüm imzalanmış sabit nokta gösterimlerine için LSB :

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

Q ve U notasyonu

Çeşitli vardır simgelerinin bir tamsayı sabit nokta gösterimi için. Biz kullanmak Q notasyonu Q m. N aracı tam sayı bit ve n fraksiyonel bit m. Değer ikiye tümleyende ifade edilse de "Q" bir bit olarak sayılır. Toplam bit sayısı m + n + 1 'dir.

Um. m, tam sayı bit ve n fraksiyonel bit, ve sıfır bit olarak bir "U" sayısı: n işaretsiz sayı içindir. Toplam bit sayısı m + n.

Tamsayı kısmı nihai sonuçta kullanılabilir veya geçici olabilir. İkinci durumda, tam sayı kısmını oluşturan bitleri bekçi bit denir. Koruma bitleri, nihai değer aralık dahilinde olduğu veya aralık dahilinde olması için sıkıştırılabildiği sürece, bir ara hesaplamanın taşmasına izin verir. Kayan nokta birimi ise Not sabit nokta guard bit, solda olduğu bekçi rakam yuvarlama hatası azaltmak için kullanılabilir ve sağdadır edilir.

Kayan nokta gösterimi

Kayan nokta nokta konumu değişebilir olan sabit bağlantısı, bir alternatiftir. Kayan noktanın başlıca avantajları şunlardır:

  • Büyük baş mesafesi ve dinamik aralık ; kayan noktalı aritmetik, ara hesaplama sırasında nominal aralıkları aşmayı tolere eder ve yalnızca sonunda değerleri sabitler
  • Sonsuzluklar ve NaN gibi özel değerler için destek
  • Birçok durumda kullanımı daha kolay

Tarihsel olarak, kayan nokta aritmetiği, tamsayı veya sabit nokta aritmetiğinden daha yavaştı, ancak kontrol akışı kararlarının bir hesaplamanın değerine dayalı olmaması koşuluyla, kayan noktanın daha hızlı olması artık yaygın bir durum.

Ses için Android biçimleri

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

gösterim
Emlak Q0.15 Q0.7 1 Q0.23 Q0.31 yüzer
Konteyner
bit
16 8 24 ya da 32 2 32 32
önemli bitler
işareti dahil
16 8 24 24 ya da 32 2 25 3
tavan boşluğu
dB cinsinden
0 0 0 0 126 4
Dinamik aralık
dB cinsinden
90 42 138 138 ila 186 900 5

Yukarıdaki tüm sabit noktalı biçimlerin nominal aralığı -1.0 ila +1.0 eksi bir LSB'dir. İkisinin tümleyen gösterimi nedeniyle pozitif değerden bir negatif değer daha var.

Dipnotlar:

  1. Yukarıdaki tüm formatlar, imzalı örnek değerleri ifade eder. 8 bit biçimi genellikle "imzasız" olarak adlandırılan, ama aslında bir önyargı ile imzalı değerdir edilir 0.10000000 .
  2. Q0.23, 24 bit (üç 8 bit bayt, küçük endian) olarak paketlenebilir veya 32 bit olarak paketten çıkarılabilir. Paketlenmemişse, anlamlı bitler ya MSB'ye doğru işaret uzatma dolgulu (Q8.23) LSB'ye doğru sağa hizalanır veya LSB'ye doğru sıfır dolgulu MSB'ye doğru sola hizalanır (Q0.31). Q0.31 teorik olarak 32 anlamlı bite 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 bit artı bir gizli bit ve işaret bitine sahiptir ve toplamda 25 anlamlı bit ile sonuçlanır. Denormal sayılar daha az önemli bit var.
  4. Tek duyarlıklı kayan nokta, büyük boşluk payını açıklayan ±1.7e+38'e kadar değerleri ifade edebilir.
  5. Gösterilen dinamik aralık, nominal maksimum değer ±1.0'a kadar olan denormaller içindir. Gibi bazı mimari özgü kayan nokta uygulamaları o Not NEON denormals desteklemez.

Dönüşümler

Bu bölüm anlatılır veri dönüşümleri çeşitli temsiller arasında.

Kayan nokta dönüşümleri

Q, m arasında bir değer dönüştürmek için. n kayan noktaya biçimlendirmek:

  1. Değeri bir tam sayıymış gibi kayan noktaya dönüştürün (noktayı yok sayarak).
  2. 2 ile çarpın - n.

Örneğin, bir 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 kuralları takip eder:

  • Tek duyarlıklı kayan nokta nominal aralığı ±1.0'dır, ancak ara değerler için tam aralık ±1.7e+38'dir. Harici gösterim (ses cihazlarına çıkış gibi) için kayan nokta ve sabit nokta arasındaki dönüştürme, bu aralığı aşan değerler için sıkıştırma ile yalnızca nominal aralığı dikkate alacaktır. Özellikle, +1.0 sabit nokta biçimine dönüştürüldüğünde, +1.0 eksi bir LSB'ye sabitlenir.
  • Denormaller (alt normaller) ve hem +/- 0.0'a temsilde 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ırlandırılacaktır. Genellikle ikincisi, sabit nokta biçimine dönüştürmek 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, +/- 1.0 ile sessizce sabit sınırlanabilir veya sessizce 0.0'a dönüştürülebilir veya bir hatayla sonuçlanabilir.

Sabit nokta dönüşümleri

Farklı Q m arasında dönüşümler. n biçimleri bu kuralları uygulayın:

  • M artırıldığında, işaret sol tam sayı bölümü boyunca uzanır.
  • M azaldığında tamsayı kısmını deler.
  • Artırıldığında n sıfır sağda fraksiyonel kısmını uzatmak.
  • N'nin azaltılır ya titreme, yuvarlak ya da sağ fazla fraksiyonel bit kesecek.

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

Basit bir sağa kaydırma imzaladığı 1. Not tarafından imzalanan doğru kayması daha sonra Q7.23 dönüştürmek Q7.24 için 2 oranında imzalı bölünmeyi yapmak, veya eşdeğer Q7.24 tamsayı miktara işaret biti eklemek ve eşdeğer değildir 2 ile imzalı bir bölme.

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

Bu ise, bir dönüşüm kayıpsız tersi : bir dönüşüm A için B için C sonuçları A = C . Aksi takdirde dönüşüm kayıplı .

Kayıpsız dönüşümleri izin gidiş-dönüş biçimi dönüştürme .

25 veya daha az anlamlı 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.