在一些运行Android 10的设备上,使用MediaRecorder.AudioSource.VOICE_COMMUNICATION录制的音频为空。

10

我正在使用以下代码在应用程序中录制语音消息的音频。

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

对此的任何帮助都将不胜感激。


https://dev59.com/Gbbna4cB1Zd3GeqPfbVB - Kirguduck
1
你链接的帖子谈到了MediaRecorder.AudioSource.VOICE_CALL。而我使用的是MediaRecorder.AudioSource.VOICE_COMMUNICATION。我相信它们之间有一些区别。另外,我不是在录制通话,而是在录制消息应用程序中的普通音频消息。此外,它并不在所有Android 10设备上失败,只是在我之前提到的一些设备上失败。 - binaryKarmic
1个回答

1
我最终使用MediaRecorder.AudioSource.VOICE_RECOGNITION而不是MediaRecorder.AudioSource.VOICE_COMMUNICATION在所有Android版本上。
我们在15多个不同的设备上进行了采样,并发现MediaRecorder.AudioSource.VOICE_RECOGNITION与大多数包括高端和中端手机在内的设备兼容性最好。
据我了解,在一些设备上原始问题似乎是OEM实现Android 10和VOICE_COMMUNICATION时存在的问题https://source.android.com/devices/audio/implement-pre-processing

我在 Nokia 6.1 上遇到了完全相同的问题,确实关闭 Google 助手有所帮助。但是如果我真的想使用 VOICE_COMMUNICATION 音频源怎么办?我不能要求我们的客户禁用他们的助手,而且我想能够使用音频预处理功能,如声学回声消除。也许我可以手动设置不同的音频效果,但如果您有其他建议,将不胜感激) - Alexey Ershov
1
我理解你的想法。这里的问题似乎是OEMs存在错误的实现,他们可能会在未来修复,所以依赖它没有意义。您可以进行一些自定义修复,例如观察录制的音频,在几秒钟后说出来。如果为空并且操作系统版本高于10,则提供用户关闭助手或使用VOICE_RECOGNITION切换到稍低质量的选项。 - binaryKarmic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接