Beim Erfassen von Audioinhalten empfängt das Audio-HAL einen openInputStream
-Aufruf, der ein AudioSource
-Argument enthält, um anzugeben, wie Mikrofoneingaben verarbeitet werden sollen.
Für die Quelle VOICE_RECOGNITION
ist ein Stereomikrofon-Stream erforderlich, auf den (falls verfügbar) eine Echounterdrückung angewendet wurde, aber keine andere Verarbeitung.
Mehrkanal-Mikrofoneingang
Wenn Sie Audio von einem Gerät mit mehr als zwei Kanälen (Stereo) aufnehmen möchten, verwenden Sie anstelle einer Positionsindexmaske (z. B. CHANNEL_IN_LEFT
) eine Channelindexmaske. Beispiel:
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);
Wenn sowohl setChannelMask
als auch setChannelIndexMask
festgelegt sind, verwendet AudioRecord
nur den von setChannelMask
festgelegten Wert (maximal zwei Channels).
Gleichzeitige Aufnahme
Ab Android 10 unterstützt das Android-Framework die gleichzeitige Erfassung von Eingaben, jedoch mit Einschränkungen zum Schutz der Privatsphäre des Nutzers. Im Rahmen dieser Einschränkungen werden virtuelle Quellen wie AUDIO_SOURCE_FM_TUNER
ignoriert und dürfen gleichzeitig mit einer regulären Quelle (z. B. dem Mikrofon) erfasst werden.
HwAudioSource
wird nicht als Teil der Einschränkungen für die gleichzeitige Erfassung betrachtet.
Apps, die für die Verwendung mit AUDIO_DEVICE_IN_BUS
-Geräten oder mit sekundären AUDIO_DEVICE_IN_FM_TUNER
-Geräten entwickelt wurden, müssen diese Geräte explizit identifizieren und AudioRecord.setPreferredDevice()
verwenden, um die standardmäßige Quellauswahl von Android zu umgehen.