Entrée micro

Lors de la capture audio, le HAL audio reçoit un appel openInputStream qui inclut un argument AudioSource pour indiquer comment l'entrée du micro doit être traitée.

La source VOICE_RECOGNITION attend un flux de micro stéréo avec un effet d'annulation de l'écho (si disponible), mais sans aucun autre traitement.

Entrée micro multicanal

Pour capturer l'audio d'un appareil comportant plus de deux canaux (stéréo), utilisez un masque d'index de canal au lieu d'un masque d'index de position (tel que CHANNEL_IN_LEFT). Par exemple :

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);

Lorsque setChannelMask et setChannelIndexMask sont définis, AudioRecord n'utilise que la valeur définie par setChannelMask (deux canaux maximum).

Capture simultanée

Depuis Android 10, le framework Android est compatible avec la capture simultanée des entrées, mais avec des restrictions pour protéger la confidentialité de l'utilisateur. Dans le cadre de ces restrictions, les sources virtuelles telles que AUDIO_SOURCE_FM_TUNER sont ignorées et peuvent être capturées simultanément avec une entrée standard (comme le micro). HwAudioSource n'est pas considéré comme faisant partie des restrictions de capture simultanée.

Les applications conçues pour fonctionner avec des appareils AUDIO_DEVICE_IN_BUS ou des appareils secondaires AUDIO_DEVICE_IN_FM_TUNER doivent s'appuyer sur l'identification explicite de ces appareils et utiliser AudioRecord.setPreferredDevice() pour contourner la logique de sélection de source par défaut d'Android.