Mikrofon

Beim Erfassen von Audioinhalten empfängt das Audio-HAL einen openInputStream-Aufruf, der ein AudioSource-Argument enthält, um anzugeben, wie Mikrofoneingaben verarbeitet werden sollen.

Für die Quelle VOICE_RECOGNITION ist ein Stereomikrofon-Stream erforderlich, auf den (falls verfügbar) eine Echounterdrückung angewendet wurde, aber keine andere Verarbeitung.

Mehrkanal-Mikrofoneingang

Wenn Sie Audio von einem Gerät mit mehr als zwei Kanälen (Stereo) aufnehmen möchten, verwenden Sie anstelle einer Positionsindexmaske (z. B. CHANNEL_IN_LEFT) eine Channelindexmaske. 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 von setChannelMask festgelegten Wert (maximal zwei Channels).

Gleichzeitige Aufnahme

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 dürfen gleichzeitig mit einer regulären Quelle (z. B. dem Mikrofon) erfasst werden. HwAudioSource wird nicht als Teil der Einschränkungen für die gleichzeitige Erfassung 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 diese Geräte explizit identifizieren und AudioRecord.setPreferredDevice() verwenden, um die standardmäßige Quellauswahl von Android zu umgehen.