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.