Durante l'acquisizione audio, l'HAL audio riceve una chiamata openInputStream che
include un argomento AudioSource per indicare come deve essere elaborato l'input del microfono.
La sorgente VOICE_RECOGNITION prevede uno stream del microfono stereo con un
effetto di cancellazione dell'eco (se disponibile), ma senza altre elaborazioni.
Ingresso microfono multicanale
Per acquisire l'audio da un dispositivo con più di due canali (stereo), utilizza una maschera
di indice del canale anziché una maschera di indice posizionale (ad esempio CHANNEL_IN_LEFT).
Ad esempio:
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);
Quando sono impostati sia setChannelMask sia setChannelIndexMask, AudioRecord utilizza
solo il valore impostato da setChannelMask (massimo due canali).
Acquisizione simultanea
A partire da Android 10, il framework Android supporta
la registrazione simultanea degli input, ma con
limitazioni per proteggere la privacy dell'utente. Nell'ambito di queste limitazioni,
le sorgenti virtuali come AUDIO_SOURCE_FM_TUNER vengono ignorate e possono
essere acquisite contemporaneamente a un input normale (come il microfono).
HwAudioSource non è considerato parte delle limitazioni relative all'acquisizione simultanea.
Le app progettate per funzionare con dispositivi AUDIO_DEVICE_IN_BUS o con dispositivi secondari AUDIO_DEVICE_IN_FM_TUNER devono basarsi sull'identificazione esplicita di questi dispositivi e utilizzare AudioRecord.setPreferredDevice() per ignorare la logica di selezione della sorgente predefinita di Android.