我打算在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访问。