如何使用 android.media.AudioRecord
进行录音,而无需任何智能手机制造商依赖的花哨信号处理,如自动增益控制 (AGC) 和/或均衡、噪声抑制、回声消除、 ...只是纯粹的麦克风信号?
背景
MediaRecorder.AudioSource
提供九个常量,
DEFAULT
和MIC
最初在那里,VOICE_UPLINK
、VOICE_DOWNLINK
和VOICE_CALL
添加到 API 级别 4,CAMCORDER
和VOICE_RECOGNITION
添加到 API 7,VOICE_COMMUNICATION
添加到 API 11,REMOTE_SUBMIX
添加到 API 19,但第三方应用程序不可用。
但它们都不能在所有智能手机上做到干净利落。相反,我似乎必须自己弄清楚,哪个设备使用哪些信号处理 block 的组合,哪些 MediaRecorder.AudioSource
常量。
在 API 级别 20 中添加第十个常量(如 PURE_MIC
)会很好。
但只要没有这个,我还能做什么呢?
最佳答案
简短的回答是“无”。
AudioSources 对应于各种逻辑音频输入设备,具体取决于您连接到手机的配件和当前用例,这又对应于物理设备(主内置麦克风、辅助麦克风、有线耳机麦克风, 等等) 不同的调音。
物理设备和调谐的每种此类组合都由 OEM 进行调整,以满足外部要求(例如 CTS、运算符(operator)要求等)和 OEM 本身设定的内部声学要求。此过程可能会导致在硬件编解码器或多媒体 DSP 级别将各种滤波器(例如 AGC、噪声抑制、均衡等)引入音频输入路径。
虽然 PURE_MIC
源可能对某些应用程序有用,但它不是今天可用的东西。
在许多设备上,您可以通过使用 amixer
写入硬件编解码器的 ALSA 控件来控制诸如麦克风增益甚至滤波器链之类的东西。但是,这显然是一种非常特定于平台的方法,而且我还怀疑您必须以根用户或音频用户身份运行才能执行此操作。
关于android - 如何避免使用 AudioRecord 进行自动增益控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14377481/