【问题标题】:How do you disable AGC on the HTC EVO (Supersonic)?如何在 HTC EVO(超音速)上禁用 AGC?
【发布时间】:2010-06-09 02:23:03
【问题描述】:

我正在开发一个应用程序,该应用程序需要对从麦克风捕获的原始 PCM 音频执行识别算法。在我测试过的所有 Android 设备上,PCM 数据都是可用的(即原始音频数据)。新的 Sprint EVO 不是这种情况。

Sprint EVO 的麦克风上有 AGC(自动增益控制),它会破坏数据,使我们的识别算法不再起作用。

我相信这是 HTC 为此设备(可能还有未来的设备)添加到操作系统的一项功能。我已经在使用相同操作系统版本 (2.1) 的其他一些设备上测试了我们的应用程序,这些其他设备运行正常.

很遗憾,HTC 尚未发布此设备上使用的代码。我预计我可能必须使用 JNI 才能绕过此特定设备,我愿意这样做,但如果无法访问 HTC 源,我不知道从哪里开始。

没有办法扭转 AGC 的影响,所以我一直在努力解决它。

更具体的信息:

我正在使用 AudioRecorder 来访问原始 PCM 数据。我尝试了一些使用 MediaRecorder 记录 AMR 数据的程序,这些记录也表现出相同的 AGC 属性。

我还没有尝试过的一件事是编写自己的例程来使用 MediaRecorder 并使用 setAudioSource(AudioSource.VOICE_RECOGNITION)。我能在这个标志上找到的唯一文档来自 Android 参考,它简单地说明“如果可用,麦克风音频源已针对语音识别进行了调整,否则其行为类似于 DEFAULT。”这可能是我需要的,但需要额外的步骤来解码 AMR 数据以获取 PCM 数据(如果必须,我会这样做。)

如果有人知道这个新“功能”的任何信息,我们将不胜感激。具体来说,如果我能回答以下任何问题,我的生活会好很多:

  1. 这个新功能是 HTC 特有的吗?
  2. HTC 何时会发布他们的 EVO/Supersonic 代码库?
  3. 是否有其他人遇到此问题并找到解决此问题的方法?
  4. AudioSource.VOICE_RECOGNITION 真的能阻止 AGC 吗?
  5. AudioSource.VOICE_RECOGNITION 的存在是否表明预计这将在未来的设备中更常见,并且此标志是绕过它的规定?

任何其他线索、提示、提示将不胜感激。

【问题讨论】:

    标签: android audio-recording


    【解决方案1】:

    事实证明,我在浏览 Android git depot 时找到了解决方案:

    AudioRecord ar = 
        new AudioRecord(MediaRecorder.AudioSource.VOICE_RECOGNITION, ...);
    

    对于运行 OS 2.1 及更高版本的设备,这允许您接收不受 AGC 影响且仍是高质量 16 位 PCM 数据流的音频流。

    我将我的应用程序定位为 1.5 及更高版本,直到 API 级别 7 (OS 2.1) 才支持此 VOICE_RECOGNITION 标志。但是,由于 EVO 运行 v2.1,而且我相对确信这对于 OS 2.1 之前的任何设备都不会出现问题,因此简单的版本检查将解决方案仅限于那些需要/支持一下。

    【讨论】:

      【解决方案2】:

      不幸的是,

      AudioRecord ar = 
          new AudioRecord(MediaRecorder.AudioSource.VOICE_RECOGNITION, ...);
      

      不是通用解决方案。即使选择了 MediaRecorder.AudioSource.VOICE_RECOGNITION,一些制造商也会应用 AGC。他们只是忽略了谷歌的“兼容性定义”。见How avoid automatic gain control with AudioRecord?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        • 2013-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多