마이크 입력

오디오를 캡처할 때 오디오 HAL은 openInputStream 호출을 수신합니다. 이 호출에는 마이크 입력의 처리 방법을 나타내는 AudioSource 인수가 포함되어 있습니다.

VOICE_RECOGNITION 소스에는 에코 취소 효과(사용 가능한 경우)가 있지만 다른 처리가 적용되지 않은 스테레오 마이크 스트림이 필요합니다.

다중 채널 마이크 입력

채널이 3개 이상인 기기에서 오디오(스테레오)를 캡처하려면 위치 색인 마스크 대신 채널 색인 마스크(예: CHANNEL_IN_LEFT)를 사용합니다. 예를 들면 다음과 같습니다.

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);

setChannelMasksetChannelIndexMask가 모두 설정된 경우 AudioRecordsetChannelMask에 의해 설정한 값만(최대 채널 2개) 사용합니다.

동시 캡처

Android 10부터 Android 프레임워크는 입력 동시 캡처를 지원하지만 사용자 개인 정보 보호를 위한 제한사항이 있습니다. 이러한 제한사항의 일환으로 AUDIO_SOURCE_FM_TUNER와 같은 가상 소스가 무시되며 일반 입력(예: 마이크)과 함께 동시에 캡처될 수 있습니다. HwAudioSource는 동시 캡처 제한사항의 일부로 간주되지 않습니다.

AUDIO_DEVICE_IN_BUS 기기 또는 보조 AUDIO_DEVICE_IN_FM_TUNER 기기에서 작동하도록 설계된 앱은 Android 기본 소스 선택 로직을 우회하려면 명시적으로 이러한 기기를 식별하고 AudioRecord.setPreferredDevice()를 사용해야 합니다.