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



我打算在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音频。输出音频也似乎是一个音频上混到立体声的通道。

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

这可能是Android Stack内部的问题吗?或者这更可能是OEM提供的代码的问题?

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

下配置:
<android source tree>/hardware/<OEM>/audio/audiohardware.h

这个问题的替代方案是将音频路由出ALSA,并通过unix域流套接字绕过android堆栈。这可以在应用程序层通过android localSockets访问。

相关内容

  • 没有找到相关文章

最新更新