Al capturar audio, la HAL de audio recibe una llamada de openInputStream
que
Incluye un argumento AudioSource
para indicar cómo debe ser la entrada del micrófono.
se procesan.
La fuente VOICE_RECOGNITION
espera una transmisión de micrófono estéreo con un
efecto de cancelación del eco (si está disponible), pero no se aplicó ningún otro procesamiento.
Entrada de micrófono multicanal
Para capturar audio desde un dispositivo con más de dos canales (estéreo), usa un
máscara del índice del canal en lugar de una máscara del í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 tanto setChannelMask
como setChannelIndexMask
, AudioRecord
usa
solo el valor establecido por setChannelMask
(máximo de dos canales)
Captura simultánea
A partir de Android 10, el framework de Android admite
Captura simultánea de entradas, pero con
para proteger la privacidad del usuario. Como parte de estas restricciones,
fuentes virtuales como AUDIO_SOURCE_FM_TUNER
se ignoran y pueden
simultáneamente junto con una entrada normal (como el micrófono).
HwAudioSource
no se considera parte de las restricciones de captura simultáneas.
Apps diseñadas para funcionar con dispositivos AUDIO_DEVICE_IN_BUS
o con dispositivos
Los dispositivos AUDIO_DEVICE_IN_FM_TUNER
deben identificarlos explícitamente
y usar AudioRecord.setPreferredDevice()
para omitir la interfaz
la lógica de selección de fuentes predeterminada.