我正在使用以下代码在应用程序中录制语音消息的音频。
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.VOICE_COMMUNICATION而不是MediaRecorder.AudioSource.MIC)在录制经过预处理的纯音频方面非常有帮助。
但是,最近我发现在一些最近更新到Android 10的设备上报告了一些录制文件为空的问题。应该注意的是,并非所有Android 10设备都存在这些问题,只有少数设备(例如诺基亚6.1和小米A2。
没有错误或异常,只有空的音频输出文件。
如果我使用MediaRecorder.AudioSource.MIC),则不会出现此问题。
我发现以下与Android 10和VOICE_COMMUNICATION 有关的信息。Android 10发行版包含以下与VOICE_COMMUNICATION进行捕获的要求。
基于此,我使用以下代码检查了AcousticEchoCanceler,AutomaticGainControl和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
任何有关此的帮助表示赞赏。