我正在使用以下代码在应用程序中录制语音消息的音频。
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设备都存在这些问题,只有少数设备,如Nokia 6.1和Mi A2。
没有错误或异常,只有空音频输出文件。
如果我使用 MediaRecorder.AudioSource.MIC ,则不会出现此问题。
我找到了与Android 10和VOICE_COMMUNICATION相关的以下信息:Android 10发布包括使用VOICE_COMMUNICATION进行捕获的以下要求。
基于此,我使用以下代码检查了AcousticEchoCanceler、AutomaticGainControl和NoiseSuppressor的可用性。
AcousticEchoCanceler.isAvailable()
AutomaticGainControl.isAvailable()
NoiseSuppressor.isAvailable()
在Mi A2和OnePlus 6运行Android 10的设备上发现了相同的结果。这两个设备都显示可用的AcousticEchoCanceler和NoiseSuppressor以及不可用的AutomaticGainControl。
由于这个问题并不是所有Android设备都存在,我不想退回使用MediaRecorder.AudioSource.MIC。同时,没有任何错误、异常或区别性因素告诉我何时要退回到MediaRecorder.AudioSource.MIC。
更新:关闭Mi A2上的Google助手后,问题得到解决。可能是这个提示:https://developer.android.com/guide/topics/media/sharing-audio-input
对此的任何帮助都将不胜感激。