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 de suppression de l'écho (si disponible), mais aucun autre traitement ne lui est appliqué.
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 (par exemple, 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
(maximum de deux canaux).
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 standard (telle que 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 AUDIO_DEVICE_IN_FM_TUNER
secondaires doivent s'appuyer sur l'identification explicite de ces appareils et utiliser AudioRecord.setPreferredDevice()
pour contourner la logique de sélection de la source par défaut d'Android.