麥克風輸入

擷取音訊時,音訊 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);

如果同時設定了 setChannelMasksetChannelIndexMaskAudioRecord 會使用 僅限 setChannelMask 設定的值 (最多兩個聲道)。

並行擷取

自 Android 10 起,Android 架構支援 輸入內容的並行擷取,但 以保護使用者隱私根據這些限制 系統會忽略 AUDIO_SOURCE_FM_TUNER 等虛擬來源, 與一般輸入 (如麥克風) 同時擷取。 HwAudioSource 不算是並行擷取限制的一部分。

可與 AUDIO_DEVICE_IN_BUS 部裝置或次要裝置搭配使用的應用程式 AUDIO_DEVICE_IN_FM_TUNER 裝置必須能夠明確識別這些裝置 裝置,並使用 AudioRecord.setPreferredDevice() 略過 Android 預設的來源選取邏輯。