Mikrofoneingabe

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.