Mikrofon

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.