2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
マイク入力
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
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 のデフォルト ソース選択ロジックをバイパスする必要があります。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-26 UTC。"],[],[],null,["# Microphone input\n\nWhen capturing audio, the Audio HAL receives an `openInputStream` call that\nincludes an `AudioSource` argument to indicate how microphone input should be\nprocessed.\n\nThe `VOICE_RECOGNITION` source expects a stereo microphone stream that has an\necho cancellation effect (if available) but no other processing applied to it.\n\nMulti-channel microphone input\n------------------------------\n\nTo capture audio from a device with more than two channels (stereo), use a\nchannel index mask instead of positional index mask (such as `CHANNEL_IN_LEFT`).\nFor example: \n\n final AudioFormat audioFormat = new AudioFormat.Builder()\n .setEncoding(AudioFormat.ENCODING_PCM_16BIT)\n .setSampleRate(44100)\n .setChannelIndexMask(0xf /* 4 channels, 0..3 */)\n .build();\n final AudioRecord audioRecord = new AudioRecord.Builder()\n .setAudioFormat(audioFormat)\n .build();\n audioRecord.setPreferredDevice(someAudioDeviceInfo);\n\nWhen both `setChannelMask` and `setChannelIndexMask` are set, `AudioRecord` uses\nonly the value set by `setChannelMask` (maximum of two channels).\n\nConcurrent capture\n------------------\n\nAs of Android 10, the Android framework supports\n[Concurrent capture](/docs/core/audio/concurrent) of inputs, but with\nrestrictions to protect the user's privacy. As part of these restrictions,\nvirtual sources such as `AUDIO_SOURCE_FM_TUNER` are ignored, and are allowed to\nbe captured concurrently along with a regular input (such as the microphone).\n`HwAudioSource` is not considered part of the concurrent capture restrictions.\n\nApps designed to work with `AUDIO_DEVICE_IN_BUS` devices or with secondary\n`AUDIO_DEVICE_IN_FM_TUNER` devices must rely on explicitly identifying those\ndevices and using `AudioRecord.setPreferredDevice()` to bypass the Android\ndefault source selection logic."]]