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.