Entrada do microfone

Ao capturar o áudio, a HAL de áudio recebe uma chamada openInputStream que inclui um argumento AudioSource para indicar como a entrada de microfone deve ser processados.

A fonte VOICE_RECOGNITION espera um stream de microfone estéreo que tenha um o efeito de cancelamento de eco (se disponível), mas nenhum outro processamento é aplicado a ele.

Entrada de microfone multicanal

Para capturar áudio de um dispositivo com mais de dois canais (estéreo), use um máscara de índice de canais em vez da máscara de índice de posicionamento (como CHANNEL_IN_LEFT). Por exemplo:

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 são definidos, AudioRecord usa somente o valor definido por setChannelMask (máximo de dois canais).

Captura simultânea

A partir do Android 10, o framework do Android oferece suporte Captura simultânea de entradas, mas com restrições para proteger a privacidade do usuário. Como parte dessas restrições, fontes virtuais, como AUDIO_SOURCE_FM_TUNER, são ignoradas e têm permissão para ser capturadas simultaneamente com uma entrada regular (como o microfone). HwAudioSource não é considerado parte das restrições de captura simultânea.

Apps criados para funcionar com dispositivos AUDIO_DEVICE_IN_BUS ou com contas secundárias AUDIO_DEVICE_IN_FM_TUNER dispositivos precisam identificar explicitamente os e usar AudioRecord.setPreferredDevice() para ignorar o Android lógica padrão de seleção de origem.