【发布时间】: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 数据(如果必须,我会这样做。)
如果有人知道这个新“功能”的任何信息,我们将不胜感激。具体来说,如果我能回答以下任何问题,我的生活会好很多:
- 这个新功能是 HTC 特有的吗?
- HTC 何时会发布他们的 EVO/Supersonic 代码库?
- 是否有其他人遇到此问题并找到解决此问题的方法?
- AudioSource.VOICE_RECOGNITION 真的能阻止 AGC 吗?
- AudioSource.VOICE_RECOGNITION 的存在是否表明预计这将在未来的设备中更常见,并且此标志是绕过它的规定?
任何其他线索、提示、提示将不胜感激。
【问题讨论】: