Ingresso microfono

Durante l'acquisizione dell'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 un flusso microfonico stereo con un effetto di cancellazione dell'eco (se disponibile) ma ad esso non viene applicata alcuna altra elaborazione.

Ingresso microfono multicanale

Per acquisire l'audio da un dispositivo con più di due canali (stereo), utilizzare una maschera di indice di canale anziché una maschera di indice posizionale (come CHANNEL_IN_LEFT ). Per 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 che setChannelIndexMask , AudioRecord utilizza solo il valore impostato da setChannelMask (massimo due canali).

Cattura simultanea

A partire da Android 10, il framework Android supporta l'acquisizione simultanea di input, ma con restrizioni per proteggere la privacy dell'utente. Come parte di queste restrizioni, le sorgenti virtuali come AUDIO_SOURCE_FM_TUNER vengono ignorate e possono essere acquisite contemporaneamente insieme a un ingresso normale (come il microfono). HwAudioSource non è considerato parte delle restrizioni sull'acquisizione simultanea.

Le app progettate per funzionare con dispositivi AUDIO_DEVICE_IN_BUS o con dispositivi AUDIO_DEVICE_IN_FM_TUNER secondari devono fare affidamento sull'identificazione esplicita di tali dispositivi e sull'utilizzo di AudioRecord.setPreferredDevice() per ignorare la logica di selezione della sorgente predefinita di Android.