Ingresso microfono

Quando acquisisce l'audio, l'HAL audio riceve una chiamata openInputStream che include un argomento AudioSource per indicare come deve essere elaborato l'input del microfono.

L'origine VOICE_RECOGNITION prevede uno stream del microfono stereo con un effetto di cancellazione eco (se disponibile), ma senza altre elaborazioni.

Input del 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 l'acquisizione simultanea degli input, ma con restrizioni per proteggere la privacy dell'utente. Nell'ambito di queste restrizioni, le origini virtuali come AUDIO_SOURCE_FM_TUNER vengono ignorate e possono essere acquisite contemporaneamente a un input normale (ad esempio il microfono). HwAudioSource non è considerato parte delle restrizioni di acquisizione simultanea.

Le app progettate per funzionare con i dispositivi AUDIO_DEVICE_IN_BUS o con i dispositivi AUDIO_DEVICE_IN_FM_TUNER secondari devono basarsi sull'identificazione esplicita di questi dispositivi e sull'utilizzo di AudioRecord.setPreferredDevice() per ignorare la logica di selezione dell'origine predefinita di Android.