When capturing audio, the Audio HAL receives an
openInputStream call that
AudioSource argument to indicate how microphone input should be
VOICE_RECOGNITION source expects a stereo microphone stream that has an
echo cancellation effect (if available) but no other processing applied to it.
Multi-channel microphone input
To capture audio from a device with more than two channels (stereo), use a
channel index mask instead of positional index mask (such as
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);
setChannelIndexMask are set,
only the value set by
setChannelMask (maximum of two channels).
As of Android 10, the Android framework supports
Concurrent capture of inputs, but with
restrictions to protect the user’s privacy. As part of these restrictions,
virtual sources such as
AUDIO_SOURCE_FM_TUNER are ignored, and are allowed to
be captured concurrently along with a regular input (such as the microphone).
HwAudioSource is not considered part of the concurrent capture restrictions.
Apps designed to work with
AUDIO_DEVICE_IN_BUS devices or with secondary
AUDIO_DEVICE_IN_FM_TUNER devices must rely on explicitly identifying those
devices and using
AudioRecord.setPreferredDevice() to bypass the Android
default source selection logic.