Beim Aufzeichnen von Audio empfängt die Audio HAL einen openInputStream
-Aufruf mit einem AudioSource
-Argument, das angibt, wie die Mikrofoneingabe verarbeitet werden soll.
Für die VOICE_RECOGNITION
-Quelle wird ein Stereomikrofonstream mit einem Echounterdrückungseffekt (falls verfügbar) erwartet, der aber sonst nicht verarbeitet wird.
Mehrkanaliger Mikrofoneingang
Wenn du Audio von einem Gerät mit mehr als zwei Kanälen (Stereo) aufnehmen möchtest, verwende eine Kanalindexmaske anstelle einer Positionsindexmaske (z. B. CHANNEL_IN_LEFT
).
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, wird für AudioRecord
nur der von setChannelMask
festgelegte Wert verwendet (maximal zwei Kanäle).
Gleichzeitige Erfassung
Seit Android 10 unterstützt das Android-Framework die gleichzeitige Erfassung von Eingaben, jedoch mit Einschränkungen zum Schutz der Privatsphäre der Nutzer. Im Rahmen dieser Einschränkungen werden virtuelle Quellen wie AUDIO_SOURCE_FM_TUNER
ignoriert und dürfen gleichzeitig mit einer regulären Eingabe (z. B. dem Mikrofon) erfasst werden.
HwAudioSource
wird nicht als Teil der Einschränkungen für gleichzeitige Aufnahmen betrachtet.
Apps, die für die Verwendung mit AUDIO_DEVICE_IN_BUS
-Geräten oder sekundären AUDIO_DEVICE_IN_FM_TUNER
-Geräten entwickelt wurden, müssen diese Geräte explizit identifizieren und AudioRecord.setPreferredDevice()
verwenden, um die Standardlogik zur Auswahl der Android-Quelle zu umgehen.