Entrada de microfone

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

A fonte VOICE_RECOGNITION espera um fluxo de microfone estéreo que tenha um 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 uma máscara de índice de canal em vez de uma máscara de índice posicional (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 apenas o valor definido por setChannelMask (máximo de dois canais).

Captura simultânea

A partir do Android 10, a estrutura 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 podem ser capturadas simultaneamente junto com uma entrada normal (como o microfone). HwAudioSource não é considerado parte das restrições de captura simultânea.

Os aplicativos projetados para funcionar com dispositivos AUDIO_DEVICE_IN_BUS ou com dispositivos AUDIO_DEVICE_IN_FM_TUNER secundários devem depender da identificação explícita desses dispositivos e do uso de AudioRecord.setPreferredDevice() para ignorar a lógica de seleção de fonte padrão do Android.