bin*_*mic 10 android android-mediarecorder android-10.0
我正在使用以下代码在应用程序中录制语音消息的音频。
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();
Run Code Online (Sandbox Code Playgroud)
使用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()
Run Code Online (Sandbox Code Playgroud)
并在搭载 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
对此的任何帮助表示赞赏。
我最终在所有 Android 版本上使用MediaRecorder.AudioSource.VOICE_RECOGNITION而不是MediaRecorder.AudioSource.VOICE_COMMUNICATION 。
我们最终在 15 种以上不同的设备上进行了采样,发现MediaRecorder.AudioSource.VOICE_RECOGNITION最适合大多数设备,包括高端和中端手机。
据我了解,某些设备上的少数设备面临的原始问题似乎是 OEM 针对 Android 10 和 VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing的实现问题
| 归档时间: |
|
| 查看次数: |
1351 次 |
| 最近记录: |