如何避免使用AudioRecord进行自动增益控制?

Har*_*ger 14 api android audio-recording

如何在android.media.AudioRecord没有任何智能手机制造商相关的花式信号处理的情况下进行录音,如自动增益控制(AGC)和/或均衡,噪声抑制,回声消除,......只是纯麦克风信号?

背景

MediaRecorder.AudioSource 提供九个常数,

  • DEFAULT并且MIC最初在那里,
  • VOICE_UPLINK,VOICE_DOWNLINKVOICE_CALL在API级别4中添加,
  • CAMCORDERVOICE_RECOGNITION在API 7中添加,
  • VOICE_COMMUNICATION 在API 11中添加,
  • REMOTE_SUBMIX 在API 19中添加但不适用于第三方应用程序.

但是他们都没有在所有智能手机上做得干净.相反,我必须自己发现,哪个设备使用哪种信号处理块组合为MediaRecorder.AudioSource常数.

如果PURE_MIC在API级别20中添加第十个常量会很高兴.

但只要没有,我可以做些什么呢?

Mic*_*ael 7

简短的回答是"没什么".

AudioSources对应于各种逻辑音频输入设备,具体取决于您连接到手机的附件和当前用例,而后者又与物理设备(主要内置麦克风,辅助麦克风,有线耳机麦克风等)相对应.用不同的调音.

物流设备和调谐的每个这样的组合由OEM修整,以满足外部要求(例如CTS,操作员要求等)和OEM本身设定的内部声学要求.此过程可能会导致各种滤波器(如AGC,噪声抑制,均衡等)进入硬件编解码器或多媒体DSP级别的音频输入路径.

虽然某个PURE_MIC源可能对某些应用程序有用,但它并不是今天可用的.
在许多设备上,您可以通过使用amixer写入硬件编解码器的ALSA控件来控制麦克风增益,甚至可能是过滤器链.但是,这显然是一种非常特定于平台的方法,我还怀疑你必须以root用户或音频用户身份运行才能执行此操作.

  • 在我的问题和更多API级别之后的2年多之后,我仍然没有看到任何其他方式而不是尝试和错误.但如果有人可以添加不同内容的第二个答案,我仍然会很高兴. (4认同)
  • ASR通常会受益于纯音频,因为它在特征向量提取中具有自己的准AGC,并且通常用噪声训练.文档"Android 4.1兼容性定义"(2012年9月7日),第5.3节明确指出:使用VOICE_RECOGNITION,降噪处理和自动增益控制"必须禁用".制造商希望改变Android> = 4.1,然后PURE_MIC是没有必要的.但我有疑虑.所以,仍然是我的问题:还有另一种方式吗? (3认同)