Audio HAL は、音声キャプチャ時に、マイク入力の処理方法を示す AudioSource
引数を含む openInputStream
呼び出しを受け取ります。
VOICE_RECOGNITION
ソースは、エコー キャンセル効果(可能な場合)以外には処理が一切適用されていないステレオ マイク ストリームを想定しています。
マルチチャンネル マイク入力
チャンネル数が 2 つ(ステレオ)を超えるデバイスから音声をキャプチャするには、位置インデックス マスク(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
によって設定された値(最大 2 チャンネル)のみを使用します。
同時キャプチャ
Android 10 では、Android フレームワークは入力の同時キャプチャをサポートしていますが、ユーザーのプライバシーを保護するための制限が設けられています。たとえば AUDIO_SOURCE_FM_TUNER
などの仮想ソースは無視されますが、通常の入力(マイクなど)とは同時キャプチャできます。HwAudioSource
は同時キャプチャ制限の一部と見なされません。
AUDIO_DEVICE_IN_BUS
デバイスまたはセカンダリ AUDIO_DEVICE_IN_FM_TUNER
デバイスで動作するように設計されているアプリは、明示的にこれらのデバイスを特定し、AudioRecord.setPreferredDevice()
を使って Android のデフォルト ソース選択ロジックをバイパスする必要があります。