Entrada de micrófono

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.