捕獲音訊時,音訊 HAL 會收到一個openInputStream
調用,其中包含一個AudioSource
參數來指示麥克風輸入應如何處理。
VOICE_RECOGNITION
來源需要具有迴聲消除效果(如果可用)的立體聲麥克風串流,但不對其應用其他處理。
多通道麥克風輸入
若要從具有兩個以上通道(立體聲)的裝置擷取音頻,請使用通道索引遮罩而不是位置索引遮罩(例如CHANNEL_IN_LEFT
)。例如:
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);
當setChannelMask
和setChannelIndexMask
同時設定時, AudioRecord
僅使用setChannelMask
設定的值(兩個通道的最大值)。
並發捕獲
從 Android 10 開始,Android 框架支援並發擷取輸入,但有限制以保護使用者的隱私。作為這些限制的一部分,虛擬來源(例如AUDIO_SOURCE_FM_TUNER
將被忽略,並允許與常規輸入(例如麥克風)同時捕獲。 HwAudioSource
不被視為並發捕獲限制的一部分。
設計為與AUDIO_DEVICE_IN_BUS
裝置或輔助AUDIO_DEVICE_IN_FM_TUNER
裝置搭配使用的應用程式必須依賴明確辨識這些裝置並使用AudioRecord.setPreferredDevice()
繞過 Android 預設來源選擇邏輯。