Saat merekam audio, Audio HAL menerima panggilan openInputStream
yang menyertakan argumen AudioSource
untuk menunjukkan bagaimana input mikrofon harus diproses.
Sumber VOICE_RECOGNITION
mengharapkan aliran mikrofon stereo yang memiliki efek pembatalan gema (jika tersedia) namun tidak ada pemrosesan lain yang diterapkan padanya.
Masukan mikrofon multi-saluran
Untuk menangkap audio dari perangkat dengan lebih dari dua saluran (stereo), gunakan masker indeks saluran, bukan masker indeks posisi (seperti CHANNEL_IN_LEFT
). Misalnya:
final AudioFormat audioFormat = new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(44100)
.setChannelIndexMask(0xf /* 4 channels, 0..3 */)
.build();
final AudioRecord audioRecord = new AudioRecord.Builder()
.setAudioFormat(audioFormat)
.build();
audioRecord.setPreferredDevice(someAudioDeviceInfo);
Jika setChannelMask
dan setChannelIndexMask
disetel, AudioRecord
hanya menggunakan nilai yang disetel oleh setChannelMask
(maksimum dua saluran).
Penangkapan secara bersamaan
Mulai Android 10, framework Android mendukung pengambilan input secara bersamaan , namun dengan batasan untuk melindungi privasi pengguna. Sebagai bagian dari pembatasan ini, sumber virtual seperti AUDIO_SOURCE_FM_TUNER
diabaikan, dan diperbolehkan untuk diambil secara bersamaan bersama dengan input reguler (seperti mikrofon). HwAudioSource
tidak dianggap sebagai bagian dari pembatasan pengambilan bersamaan.
Aplikasi yang dirancang untuk berfungsi dengan perangkat AUDIO_DEVICE_IN_BUS
atau perangkat AUDIO_DEVICE_IN_FM_TUNER
sekunder harus mengandalkan identifikasi perangkat tersebut secara eksplisit dan menggunakan AudioRecord.setPreferredDevice()
untuk melewati logika pemilihan sumber default Android.