Ingresso microfono

Durante l'acquisizione dell'audio, l'HAL audio riceve una chiamata openInputStream che include un argomento AudioSource per indicare come dovrebbe essere l'input del microfono elaborati.

La sorgente VOICE_RECOGNITION prevede uno stream con microfono stereo con un effetto di cancellazione dell'eco (se disponibile), ma non viene applicata alcuna altra elaborazione.

Ingresso microfono multicanale

Per acquisire l'audio da un dispositivo con più di due canali (stereo), utilizza una maschera dell'indice del canale invece della maschera dell'indice posizionale (ad es. 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 setChannelMask e setChannelIndexMask sono impostati, AudioRecord utilizza solo il valore impostato da setChannelMask (massimo due canali).

Acquisizione simultanea

A partire da Android 10, il framework Android supporta Acquisizione simultanea degli input, ma con restrizioni per proteggere la privacy dell'utente. Nell'ambito di queste restrizioni, origini virtuali come AUDIO_SOURCE_FM_TUNER vengono ignorate e possono essere verranno acquisiti contemporaneamente insieme a un normale ingresso (come il microfono). HwAudioSource non è considerato parte delle limitazioni di acquisizione simultanea.

App progettate per funzionare con AUDIO_DEVICE_IN_BUS dispositivi o con app AUDIO_DEVICE_IN_FM_TUNER dispositivi devono basarsi sull'identificazione esplicita dispositivi e l'uso di AudioRecord.setPreferredDevice() per bypassare Android logica di selezione dell'origine predefinita.