Beim Erfassen von Audio empfängt die Audio HAL einen openInputStream-Aufruf mit einem AudioSource-Argument, das angibt, wie die Mikrofoneingabe verarbeitet werden soll.
Die Quelle VOICE_RECOGNITION erwartet einen Stereo-Mikrofonstream mit Echounterdrückung (falls verfügbar), aber ohne weitere Verarbeitung.
Mehrkanal-Mikrofoneingabe
Wenn Sie Audio von einem Gerät mit mehr als zwei Kanälen (Stereo) erfassen möchten, verwenden Sie 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, verwendet AudioRecord nur den mit 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 Nutzers. Im Rahmen dieser Einschränkungen werden virtuelle Quellen wie AUDIO_SOURCE_FM_TUNER ignoriert und können gleichzeitig mit einer regulären Eingabe (z. B. dem Mikrofon) erfasst werden.
HwAudioSource unterliegt nicht den Einschränkungen für die gleichzeitige Erfassung.
Apps, die mit AUDIO_DEVICE_IN_BUS-Geräten oder mit sekundären AUDIO_DEVICE_IN_FM_TUNER-Geräten funktionieren sollen, müssen diese Geräte explizit identifizieren und AudioRecord.setPreferredDevice() verwenden, um die Standardlogik für die Quellenauswahl von Android zu umgehen.