Bei der Audioaufnahme empfängt die Audio-HAL einen openInputStream
Aufruf, der ein AudioSource
Argument enthält, um anzugeben, wie Mikrofoneingaben verarbeitet werden sollen.
Die Quelle VOICE_RECOGNITION
erwartet einen Stereo-Mikrofon-Stream, der über einen Echounterdrückungseffekt verfügt (sofern verfügbar), auf den jedoch keine andere Verarbeitung angewendet wird.
Mehrkanaliger Mikrofoneingang
Um Audio von einem Gerät mit mehr als zwei Kanälen (Stereo) aufzunehmen, verwenden Sie eine Kanalindexmaske anstelle einer Positionsindexmaske (z. B. CHANNEL_IN_LEFT
). Zum 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 durch setChannelMask
festgelegten Wert (maximal zwei Kanäle).
Gleichzeitige Erfassung
Ab Android 10 unterstützt das Android-Framework die gleichzeitige Erfassung von Eingaben, jedoch mit Einschränkungen zum Schutz der Privatsphäre des Benutzers. Im Rahmen dieser Einschränkungen werden virtuelle Quellen wie AUDIO_SOURCE_FM_TUNER
ignoriert und dürfen gleichzeitig mit einem regulären Eingang (z. B. dem Mikrofon) erfasst werden. HwAudioSource
wird nicht als Teil der gleichzeitigen Aufnahmebeschränkungen 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 darauf angewiesen sein, diese Geräte explizit zu identifizieren und AudioRecord.setPreferredDevice()
zu verwenden, um die Android-Standardquellenauswahllogik zu umgehen.