Mulai dari Android 5.0 (Lollipop), resampler audio kini sepenuhnya didasarkan pada filter FIR yang berasal dari fungsi sinkronisasi berjendela Kaiser. Sinkronisasi berjendela Kaiser menawarkan properti berikut:
- Penghitungan parameter desain yang mudah (riak stopband, bandwidth transisi, frekuensi cutoff, panjang filter).
- Cukup optimal untuk mengurangi energi stopband dibandingkan energi keseluruhan.
Lihat P.P. Vaidyanathan, Multirate Systems and Filter Banks, hal. 50 untuk mengetahui diskusi tentang Jendela Kaiser serta kondisi optimalnya dan hubungannya dengan Jendela Prolate Spheroidal.
Parameter desain otomatis dihitung berdasarkan penentuan kualitas internal dan rasio sampel yang diinginkan. Berdasarkan parameter desain, filter windowed-sinc akan dihasilkan. Untuk penggunaan musik, resampler untuk 44,1 hingga 48 kHz dan sebaliknya dihasilkan pada kualitas yang lebih tinggi daripada konversi frekuensi arbitrer.
Resampler audio memberikan kualitas yang lebih baik, serta kecepatan untuk mencapai kualitas tersebut. Namun, resampler dapat menimbulkan sejumlah kecil riak passband dan derau harmonis aliasing, serta dapat menyebabkan banyak kehilangan frekuensi tinggi dalam band transisi. Karena itu, hindari penggunaannya jika tidak perlu.
Praktik terbaik untuk pengambilan sampel dan pengambilan ulang sampel
Bagian ini menjelaskan beberapa praktik terbaik untuk membantu Anda menghindari masalah terkait frekuensi pengambilan sampel.
Memilih frekuensi sampling yang pas dengan perangkat
Secara umum, frekuensi sampling terbaik yang pas dengan perangkat adalah 44,1 kHz atau 48 kHz. Penggunaan frekuensi sampel di atas 48 kHz biasanya akan mengakibatkan penurunan kualitas karena resampler harus digunakan untuk memutar file tersebut.
Gunakan rasio pengambilan ulang sampel sederhana (polifase tetap vs terinterpolasi)
Resampler beroperasi dalam salah satu mode berikut:
- Mode polifase tetap. Koefisien filter untuk setiap polifase telah dihitung sebelumnya.
- Mode polifase terinterpolasi. Koefisien filter untuk setiap polifase harus diinterpolasikan dari dua polifase terdekat yang sudah dihitung sebelumnya.
Resampler beroperasi paling cepat dalam mode polifase tetap, saat rasio frekuensi input terhadap frekuensi output L/M (dengan mengeluarkan pembagi sekutu terbesar) memiliki M kurang dari 256. Misalnya, untuk konversi 44.100 ke 48.000, L = 147. M = 160,
Dalam mode polifase tetap, frekuensi sampling dikunci dan tidak berubah. Dalam mode polifase terinterpolasi, frekuensi sampling berupa perkiraan. Saat memutar audio pada perangkat 48 kHz, drift frekuensi sampling umumnya satu sampel selama beberapa jam. Biasanya hal ini bukan masalah, karena error perkiraan jauh lebih kecil daripada error frekuensi yang dihasilkan oleh oskilator quartz internal, drift termal, atau jitter (biasanya puluhan ppm).
Pilih frekuensi pengambilan sampel rasio sederhana seperti 24 kHz (1:2) dan 32 kHz (2:3) saat memutar audio di perangkat 48 kHz, meskipun rasio dan frekuensi pengambilan sampel lainnya mungkin diizinkan melalui AudioTrack.
Gunakan penambahan sampel dan bukan pengurangan sampel untuk mengubah frekuensi sampel
Frekuensi pengambilan sampel dapat diubah saat proses berjalan. Perincian perubahan tersebut didasarkan pada buffering internal (biasanya beberapa ratus sampel), bukan berdasarkan tiap-tiap sampel. Ini dapat digunakan untuk efek.
Jangan mengubah frekuensi pengambilan sampel secara dinamis saat melakukan downsampling (pengurangan sampel). Saat mengubah frekuensi pengambilan sampel setelah trek audio dibuat, perbedaan sekitar 5 hingga 10 persen dari frekuensi asli dapat memicu penghitungan ulang filter saat downsampling (untuk menekan aliasing dengan tepat). Tindakan ini dapat menghabiskan resource komputasi dan dapat menyebabkan bunyi klik yang terdengar jelas saat filter diganti secara real time.
Batasi downsampling hingga tidak lebih dari 6:1
Downsampling biasanya dipicu oleh persyaratan hardware. Jika menggunakan konverter Frekuensi Sampel untuk downsampling, coba batasi rasio downsampling hingga tidak lebih dari 6:1 agar penyembunyian aliasing bagus (misalnya, downsampling tidak lebih dari 48.000 hingga 8.000). Panjang filter disesuaikan agar cocok dengan rasio downsampling, tetapi Anda akan mengorbankan lebih banyak bandwidth transisi pada rasio downsampling yang lebih tinggi untuk menghindari peningkatan panjang filter yang berlebihan. Persoalan aliasing serupa tidak terjadi untuk upsampling (penambahan sampel). Perlu diketahui bahwa bagian pipeline audio tertentu mungkin menghalangi pengurangan sampel di atas 2:1.
Jika Anda mengkhawatirkan latensi, jangan lakukan pengambilan ulang sampel
Pengambilan ulang sampel mencegah track ditempatkan di jalur FastMixer, yang berarti latensi yang jauh lebih tinggi akan terjadi karena buffer tambahan yang lebih besar di jalur Mixer biasanya. Selain itu, ada penundaan implisit dari panjang filter resampler, meskipun biasanya hanya sekitar satu milidetik atau kurang, yang tidak sebesar buffering tambahan untuk jalur Mixer biasa (umumnya 20 milidetik).
Penggunaan audio floating point
Penggunaan bilangan floating point untuk merepresentasikan data audio dapat meningkatkan kualitas audio secara signifikan pada aplikasi audio berperforma tinggi. Floating point menawarkan kelebihan berikut:
- Rentang dinamis lebih lebar.
- Akurasi yang konsisten di seluruh rentang dinamis.
- Headroom lebih besar untuk mencegah clipping (penyesuaian nilai) selama penghitungan antara dan sementara.
Walaupun floating point dapat meningkatkan kualitas audio, terdapat beberapa kekurangan tertentu:
- Bilangan floating point menggunakan memori lebih banyak.
- Operasi floating point menggunakan properti yang tidak terduga, misalnya, penambahan yang bersifat tidak asosiatif.
- Penghitungan floating point terkadang dapat kehilangan presisi aritmetika akibat pembulatan atau algoritme yang secara numerik tidak stabil.
- Diperlukan pemahaman yang lebih mendalam untuk menggunakan floating point secara efektif agar mendapatkan hasil yang akurat dan dapat diproduksi kembali.
Sebelumnya, floating point dikenal tidak baik karena tidak tersedia atau lambat. Hal ini tetap terjadi pada prosesor kelas bawah dan prosesor sematan. Namun, prosesor di perangkat seluler modern kini memiliki floating point hardware dengan performa yang serupa (atau dalam beberapa kasus bahkan lebih cepat) daripada bilangan bulat. CPU modern juga mendukung SIMD (Single instruction, multiple data), yang dapat meningkatkan performa lebih lanjut.
Praktik terbaik untuk audio floating point
Praktik terbaik berikut akan membantu Anda menghindari masalah pada penghitungan floating point:
- Gunakan floating point presisi ganda untuk penghitungan yang jarang, misalnya menghitung koefisien filter.
- Perhatikan urutan operasi.
- Deklarasikan variabel eksplisit untuk nilai antara.
- Gunakan tanda kurung dengan bebas.
- Jika Anda mendapatkan hasil NaN atau tidak terbatas, gunakan penelusuran biner untuk menemukan lokasi kemunculannya.
Untuk audio floating point, encoding format audio AudioFormat.ENCODING_PCM_FLOAT
digunakan seperti pada ENCODING_PCM_16_BIT
atau ENCODING_PCM_8_BIT
untuk menentukan format data AudioTrack. Metode berlebih yang terkait, AudioTrack.write()
, menggunakan array float untuk mengirim data.
Kotlin
fun write( audioData: FloatArray, offsetInFloats: Int, sizeInFloats: Int, writeMode: Int ): Int
Java
public int write(float[] audioData, int offsetInFloats, int sizeInFloats, int writeMode)
Untuk informasi selengkapnya
Bagian ini mencantumkan beberapa referensi tambahan tentang pengambilan sampel dan floating point.
Pengambilan Sampel
Frekuensi sampel
- Sampling (signal processing) di Wikipedia.
Pengambilan ulang sampel
- Sample-rate conversion di Wikipedia.
- Sample Rate Conversion di source.android.com.
Kontroversi kedalaman bit tinggi dan kHz tinggi
- Video D/A and A/D | Digital Show and Tell oleh Christopher "Monty" Montgomery dari Xiph.Org.
- The Science of Sample Rates (When Higher Is Better - And When It Isn't).
- Audio Myths & DAW Wars
- 192kHz/24bit vs. 96kHz/24bit "debate"- Interesting revelation
Floating point
Halaman Wikipedia berikut berguna untuk memahami audio floating point:
- Audio bit depth
- Floating-point
- IEEE 754 floating-point
- Loss of significance (catastrophic cancellation)
- Numerical stability
Artikel berikut memberikan informasi tentang aspek floating point yang berdampak langsung pada desainer sistem komputer:
- What every computer scientist should know about floating-point arithmetic oleh David Goldberg, Xerox PARC (cetak ulang yang telah diedit).