Entrée micro

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

La source VOICE_RECOGNITION attend un flux de microphone stéréo qui a un effet d'annulation d'écho (si disponible) mais aucun autre traitement ne lui est appliqué.

Entrée microphone 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 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 utilise uniquement 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 normale (telle que le microphone). 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 s'appuyer sur l'identification explicite de ces appareils et sur l'utilisation AudioRecord.setPreferredDevice() pour contourner la logique de sélection de source par défaut d'Android.