Al capturar audio, Audio HAL recibe una llamada openInputStream
que incluye un argumento AudioSource
para indicar cómo se debe procesar la entrada del micrófono.
La fuente VOICE_RECOGNITION
espera una transmisión de micrófono estéreo que tenga un efecto de cancelación de eco (si está disponible), pero no se le aplique ningún otro procesamiento.
Entrada de micrófono multicanal
Para capturar audio desde un dispositivo con más de dos canales (estéreo), use una máscara de índice de canal en lugar de una máscara de índice posicional (como CHANNEL_IN_LEFT
). Por ejemplo:
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);
Cuando se configuran setChannelMask
y setChannelIndexMask
, AudioRecord
usa solo el valor establecido por setChannelMask
(máximo de dos canales).
captura concurrente
A partir de Android 10, el marco de Android admite la captura simultánea de entradas, pero con restricciones para proteger la privacidad del usuario. Como parte de estas restricciones, las fuentes virtuales como AUDIO_SOURCE_FM_TUNER
se ignoran y se permite capturarlas simultáneamente junto con una entrada normal (como el micrófono). HwAudioSource
no se considera parte de las restricciones de captura simultánea.
Las aplicaciones diseñadas para funcionar con dispositivos AUDIO_DEVICE_IN_BUS
o con dispositivos AUDIO_DEVICE_IN_FM_TUNER
secundarios deben depender de la identificación explícita de esos dispositivos y del uso AudioRecord.setPreferredDevice()
para omitir la lógica de selección de fuente predeterminada de Android.