Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Format Data

Android menggunakan berbagai macam format data audio secara internal, dan mengekspos subsetnya di API publik, format file , dan Hardware Abstraction Layer (HAL).

Properti

Format data audio diklasifikasikan menurut propertinya:

Kompresi
Tidak terkompresi , terkompresi lossless , atau terkompresi lossy . PCM adalah format audio terkompresi yang paling umum. FLAC adalah format terkompresi lossless, sedangkan MP3 dan AAC adalah format terkompresi lossy.
Kedalaman bit
Jumlah bit signifikan per sampel audio.
Ukuran wadah
Jumlah bit yang digunakan untuk menyimpan atau mengirimkan sampel. Biasanya ini sama dengan kedalaman bit, tetapi terkadang bit padding tambahan dialokasikan untuk penyelarasan. Misalnya, sampel 24-bit dapat dimasukkan dalam kata 32-bit.
Penjajaran
Jika ukuran wadah sama persis dengan kedalaman bit, representasi disebut dikemas . Jika tidak, representasi akan dibongkar . Bit signifikan dari sampel biasanya disejajarkan dengan bit paling kiri (paling signifikan) atau paling kanan (paling tidak signifikan) dari penampung. Merupakan hal konvensional untuk menggunakan istilah yang dikemas dan dibongkar hanya jika kedalaman bit bukan pangkat dua .
Signedness
Apakah sampel ditandatangani atau tidak.
Perwakilan
Baik titik tetap atau titik mengambang; Lihat di bawah.

Representasi titik tetap

Titik tetap adalah representasi paling umum untuk data audio PCM yang tidak dikompresi, terutama pada antarmuka perangkat keras.

Bilangan titik tetap memiliki jumlah digit tetap (konstan) sebelum dan sesudah titik radix . Semua representasi kami menggunakan basis 2 , jadi kami mengganti bit untuk digit , dan titik biner atau hanya titik untuk titik radix . Bit di sebelah kiri titik adalah bagian bilangan bulat, dan bit di sebelah kanan titik adalah bagian pecahan .

Kita berbicara tentang integer PCM , karena nilai fixed-point biasanya disimpan dan dimanipulasi sebagai nilai integer. Interpretasi sebagai titik tetap bersifat implisit.

Kami menggunakan komplemen dua untuk semua representasi titik tetap yang ditandatangani, jadi berikut ini berlaku di mana semua nilai berada dalam unit satu LSB :

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

Notasi Q dan U.

Ada berbagai notasi untuk representasi titik tetap dalam bilangan bulat. Kami menggunakan notasi Q: Q m . n berarti m bit integer dan n bit pecahan. "Q" dihitung sebagai satu bit, meskipun nilainya dinyatakan dalam komplemen dua. Jumlah total bit adalah m + n + 1.

U m . n adalah untuk bilangan unsigned: m bit integer dan n bit pecahan, dan "U" dihitung sebagai bit nol. Jumlah total bit adalah m + n .

Bagian bilangan bulat dapat digunakan dalam hasil akhir, atau bersifat sementara. Dalam kasus terakhir, bit yang membentuk bagian integer disebut bit penjaga . Bit penjaga memungkinkan kalkulasi perantara meluap, selama nilai akhir berada dalam jangkauan atau dapat dijepit agar berada dalam jangkauan. Perhatikan bahwa bit penjaga titik tetap ada di sebelah kiri, sedangkan digit penjaga unit titik mengambang digunakan untuk mengurangi kesalahan pembulatan dan berada di sebelah kanan.

Representasi floating point

Floating point merupakan alternatif dari fixed point dimana letak titik dapat berbeda-beda. Keuntungan utama floating-point meliputi:

  • Ruang kepala lebih besar dan jangkauan dinamis ; aritmatika floating-point mentolerir melebihi rentang nominal selama komputasi menengah, dan hanya nilai klem di akhir
  • Dukungan untuk nilai-nilai khusus seperti infinities dan NaN
  • Lebih mudah digunakan dalam banyak kasus

Secara historis, aritmatika floating-point lebih lambat dari integer atau aritmatika fixed-point, tetapi sekarang sudah umum untuk floating-point menjadi lebih cepat, asalkan keputusan aliran kontrol tidak didasarkan pada nilai komputasi.

Format Android untuk audio

Format utama Android untuk audio tercantum dalam tabel di bawah ini:

Notasi
Properti P0.15 P0.7 1 P0.23 P0.31 mengapung
Wadah
bit
16 8 24 atau 32 2 32 32
Bit yang signifikan
termasuk tanda
16 8 24 24 atau 32 2 25 3
Ruang utama
dalam dB
0 0 0 0 126 4
Rentang dinamis
dalam dB
90 42 138 138 hingga 186 900 5

Semua format titik tetap di atas memiliki kisaran nominal -1,0 hingga +1,0 dikurangi satu LSB. Ada satu nilai negatif lebih dari nilai positif karena representasi komplemen keduanya.

Catatan kaki:

  1. Semua format di atas nilai sampel yang ditandatangani secara ekspres. Format 8-bit biasanya disebut "unsigned", tetapi sebenarnya ini adalah nilai yang ditandatangani dengan bias 0.10000000 .
  2. Q0.23 dapat dikemas menjadi 24 bit (tiga byte 8-bit), atau diurai dalam 32 bit. Jika dibongkar, bit signifikan diratakan ke kanan ke arah LSB dengan bantalan ekstensi tanda ke arah MSB (Q8.23), atau rata kiri ke arah MSB dengan pengisian nol ke arah LSB (Q0.31). Q0.31 secara teoritis mengizinkan hingga 32 bit signifikan, tetapi antarmuka perangkat keras yang menerima Q0.31 jarang menggunakan semua bit.
  3. Titik mengambang presisi tunggal memiliki 23 bit eksplisit ditambah satu bit tersembunyi dan bit tanda, menghasilkan total 25 bit yang signifikan. Bilangan denormal memiliki bit signifikan lebih sedikit.
  4. Titik mengambang presisi tunggal dapat mengekspresikan nilai hingga ± 1.7e + 38, yang menjelaskan ruang kepala yang besar.
  5. Rentang dinamis yang ditampilkan adalah untuk perubahan bentuk hingga nilai maksimum nominal ± 1,0. Perhatikan bahwa beberapa implementasi floating point khusus arsitektur seperti NEON tidak mendukung denormals.

Konversi

Bagian ini membahas konversi data antara berbagai representasi.

Konversi floating point

Untuk mengubah nilai dari Q m . format n ke floating point:

  1. Ubah nilai menjadi floating point seolah-olah itu adalah bilangan bulat (dengan mengabaikan titik).
  2. Kalikan dengan 2 - n .

Misalnya, untuk mengubah nilai internal Q4.27 menjadi floating point, gunakan:

float = integer * (2 ^ -27)

Konversi dari floating point ke fixed point mengikuti aturan berikut:

  • Titik mengambang presisi tunggal memiliki kisaran nominal ± 1.0, tetapi kisaran penuh untuk nilai antara adalah ± 1.7e + 38. Konversi antara floating point dan fixed point untuk representasi eksternal (seperti output ke perangkat audio) hanya akan mempertimbangkan kisaran nominal, dengan penjepitan untuk nilai yang melebihi kisaran tersebut. Secara khusus, ketika +1.0 diubah ke format titik tetap, itu dijepit ke +1.0 dikurangi satu LSB.
  • Denormals (subnormal) dan keduanya +/- 0,0 diperbolehkan dalam representasi, tetapi dapat secara diam-diam diubah menjadi 0,0 selama pemrosesan.
  • Infinities akan melewati operasi atau akan dibatasi secara diam-diam hingga +/- 1.0. Umumnya yang terakhir adalah untuk konversi ke format titik tetap.
  • Perilaku NaN tidak ditentukan: NaN dapat menyebar sebagai NaN yang identik, atau dapat diubah menjadi NaN Default, mungkin secara diam-diam dibatasi hingga +/- 1.0, atau secara diam-diam diubah menjadi 0.0, atau mengakibatkan kesalahan.

Konversi titik tetap

Konversi antara Q m yang berbeda. n format mengikuti aturan ini:

  • Ketika m dinaikkan, tanda perpanjang bagian bilangan bulat di kiri.
  • Ketika m berkurang, jepit bagian integer.
  • Jika n dinaikkan, nol memperpanjang bagian pecahan di kanan.
  • Ketika n dikurangi, baik dither, bulatkan, atau potong bit pecahan berlebih di kanan.

Misalnya, untuk mengubah nilai Q4.27 menjadi Q0.15 (tanpa dither atau rounding), geser ke kanan nilai Q4.27 sebanyak 12 bit, dan jepit hasil apa pun yang melebihi rentang bertanda 16-bit. Ini sejalan dengan titik representasi Q.

Untuk mengubah Q7.24 ke Q7.23, lakukan pembagian bertanda 2, atau tambahkan bit tanda ke kuantitas integer Q7.24, dan kemudian tandatangani shift kanan sebesar 1. Perhatikan bahwa pergeseran kanan bertanda sederhana tidak sama dengan pembagian bertanda tangan dengan 2.

Konversi lossy dan lossless

Konversi tidak memiliki kerugian jika dapat dibalik : konversi dari A ke B ke C menghasilkan A = C Jika tidak, konversinya adalah lossy .

Konversi lossless mengizinkan konversi format bolak-balik .

Konversi dari representasi titik tetap dengan 25 bit signifikan atau kurang ke titik mengambang tidak memiliki kerugian. Konversi dari floating point ke representasi fixed point umum adalah lossy.