Lors de la capture audio, l'interface 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 autre traitement appliqué.
Entrée micro multicanal
Pour capturer l'audio d'un appareil avec plus de deux canaux (stéréo), utilisez un masque d'index de canal au lieu d'un masque d'index positionnel (tel que CHANNEL_IN_LEFT). 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 prend en charge
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 normale (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 avec des appareils AUDIO_DEVICE_IN_FM_TUNER secondaires doivent identifier explicitement ces appareils et utiliser AudioRecord.setPreferredDevice() pour contourner la logique de sélection de source par défaut d'Android.