Mikrofoneingabe

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.