Android AudioRecord 配置与录制的音频不匹配

标签 android audio audio-recording android-4.4-kitkat tinyalsa

我打算在 Android 4.4.2 设备上录制立体声音频。但是,通过简单的录音应用程序(使用 AudioRecord)录制的音频与提供的配置不匹配。如果设备使用默认配置值,我希望在 logcat 中看到错误消息,但我可以看到提供的值似乎被 AudioHardware 和 AudioPolicyManagerBase 接受。

当前配置为:

recorder = new AudioRecord(Media.Recorder.MIC,
                           sampleRate,
                           AudioFormat.CHANNEL_IN_STEREO,
                           AudioFormat.ENCODING_PCM_16BIT,
                           audioBufferSizeInBytes);

更改 Media.Recorder.AudioSource 已成为尝试解决此问题的选项;但这并没有改变 Android 堆栈的行为方式——除了(可以理解的)配置无效时无法加载记录器。

更改 SampleRate 也表明输出没有明显变化 - 44.1kHz 和 16kHz 都是有效选项,但是在检查时都产生 16kHz 音频。输出音频也似乎是一个上混成立体声的音频 channel 。

TinyALSA/Tinycap 可用于捕获音频,这似乎符合预期。

这可能是 Android 堆栈中的问题吗?或者这更有可能是 OEM 提供的代码的问题?

最佳答案

在这种情况下,下混音频的原因是 HAL 中使用了 Speex 编解码器对立体声输入进行下混和降噪。

这是在以下配置的:

<android source tree>/hardware/<OEM>/audio/audiohardware.h

这个问题的替代方法是将音频路由到 ALSA 之外,并通过一个 unix 域流套接字绕过 android 堆栈。这可以在应用层使用 androids localSockets 访问。

关于Android AudioRecord 配置与录制的音频不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32458011/

相关文章:

Android:使用 Admob 的 Consent SDK 获取用户的位置

android - android中mmcblk0和mmcblk1的确切区别和含义?

java.lang.NumberFormatException : Invalid int: "3546504756", 这个错误是什么意思?

node.js - 使用 nodejs 具有音频录制功能的视频和音频混合器

java - 制作一个应用程序,只要打开应用程序就开始录音

iPhone XCode 在后台时无法重新激活音频捕获 session

android - 添加新基准模块时同步失败

android - 如何在 Android 中使用 ffmpeg 合并音频和视频文件?

c++ - MediaCapture如何使用录音

java - Android 在后台使用代码录制视频