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.