[android] Android 10을 사용하는 일부 장치에서 MediaRecorder.AudioSource.VOICE_COMMUNICATION을 사용하여 녹음 된 오디오가 비어 있음

다음 코드를 사용하여 앱에서 음성 메시지의 오디오를 녹음하고 있습니다.

MediaRecorder audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
audioRecorder.setOutputFile(audioRecordingFile);
audioRecorder.prepare();
audioRecorder.start();

MediaRecorder.AudioSource.MIC) 대신 MediaRecorder.AudioSource.VOICE_COMMUNICATION을 사용하면 사전 처리 된 깨끗한 오디오를 녹음하는 데 매우 도움이됩니다.

그러나 최근에 기록 된 파일이 비어있는 일부 문제가 최근에 Android 10으로 업데이트 된 일부 장치에서보고되고 있음을 발견했습니다. 모든 Android 10 장치에 이러한 문제가있는 것은 아닙니다. 미 A2.

오류나 예외는 없지만 빈 오디오 출력 파일 만 있습니다.

내가 사용하는 경우 ) MediaRecorder.AudioSource.MIC을 다음 문제는 볼 수 없습니다.

Android 10 및 VOICE_COMMUNICATION과 관련된 다음 정보를 찾았습니다
. Android 10 릴리스에는 VOICE_COMMUNICATION으로 캡처하기위한 다음 요구 사항이 포함되어 있습니다.

이를 바탕으로 다음 코드를 사용하여 AcousticEchoCanceler, AutoGainControl 및 NoiseSuppressor의 가용성을 확인했습니다.

AcousticEchoCanceler.isAvailable()
AutomaticGainControl.isAvailable()
NoiseSuppressor.isAvailable()

그리고 Android 10의 Mi A2 및 OnePlus 6에서 동일한 결과를 찾았습니다. 두 장치 모두 AcousticEchoCanceler 및 NoiseSuppressor를 사용할 수있는 것으로 표시하고 AutomaticGainControl을 사용할 수없는 것으로 표시합니다.

이 문제가 모든 Android 기기에 존재하는 것은 아니기 때문에 MediaRecorder.AudioSource.MIC) 를 사용하고 싶지 않습니다 . 동시에 MediaRecorder.AudioSource.MIC 에 언제 폴백 해야하는지 알려주는 오류, 예외 또는 차별화 요소가 없습니다 .

업데이트 : Mi A2에서 Google Assistant가 꺼지면 문제가 해결됩니다. 이것은 포인터 일 수 있습니다 : https://developer.android.com/guide/topics/media/sharing-audio-input

이에 대한 도움을 주시면 감사하겠습니다.



답변

모든 안드로이드 버전에서 MediaRecorder.AudioSource.VOICE_COMMUNICATION 대신 MediaRecorder.AudioSource.VOICE_RECOGNITION 을 사용했습니다 .

우리는 15 개 이상의 서로 다른 장치에서 샘플을 채취 한 결과 MediaRecorder.AudioSource.VOICE_RECOGNITION 이 하이 엔드 및 미드 레인지 전화를 포함한 대부분의 장치에서 가장 잘 작동 한다는 것을 알았습니다 .

내 이해에 따르면 일부 장치의 일부 장치에서 발생하는 원래 문제는 Android 10 및 VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing 과 관련하여 OEM의 구현 문제처럼 보입니다.


답변