麦克风输入

时间:2010-03-19 12:44:21

标签: android

我正在尝试构建一个使用Android检测手枪镜头的小工具。它是手枪射手训练辅助工具的一部分,可以告诉他们射击是如何及时分配的,我使用HTC Tattoo进行测试。

我使用MediaRecorder及其getMaxAmplitude方法在过去的1/100秒内获得最高幅度,但它不能按预期工作;语音给我从getMaxAmplitude的值在0到约25000范围内,而手枪射击(或喊叫!)只达到约15000.采样频率为8kHz时,应该有一些具有相当高水平的样本。

任何知道这些东西如何运作的人?是否在注册最大振幅之前应用了滤波器。如果是这样,它是硬件还是软件?

谢谢,     /乔治

4 个答案:

答案 0 :(得分:0)

似乎有一个AGC(自动增益控制)滤波器。您还应该能够通过其频率特性识别镜头。我希望它能够出现在大多数可听频谱中,但需要一个频谱分析仪(应用市场上有一些,如SpectralView),并尝试通过其频率“签名”和幅度来识别事件。如果你拍手,你得到的最大幅度是多少?你也可以试着用一些东西覆盖手机来消除声音,就像几层布一样

答案 1 :(得分:0)

似乎AGC在媒体录音机中。当我使用AudioRecord时,我可以使用振幅检测镜头,即使它有时会对除镜头之外的声音做出反应。这不是问题,因为射击者在拍摄时通常不会产生任何其他噪音。 但我也会做一些FFT来完善它: - )

答案 2 :(得分:0)

听起来你发现了你的agc问题。还有一个建议是:我不确定FFT是否适合这项工作。使用滑动功率估算器可能会有更好的检测和更低的CPU使用率。

e.g。 signal => square =>移动平均线=>峰值检测

使用定点数学可以非常有效地实现上述所有功能,这非常适合移动Android平台。

您可以通过搜索“Parseval定理”和“CIC过滤器”(级联积分梳)找到更多信息

答案 3 :(得分:0)

对于迟到的回复表示歉意;在我开始寻找其他问题之前,我没有看到这个问题...

我已经开始申请做我认为你正在尝试的事情。这是一个基于音频的圈计时器(用于开始/停止录音的按钮,以及用于圈设置的大声音频噪音)。它还没有完成,但可能会为你提供一个良好的入门基础。

现在,它允许您监控来自麦克风的信号音量,并设置环境噪音量。它也使用新的BSD许可证,因此请随时查看代码:http://code.google.com/p/audio-timer/。它被设置为使用1.5 API来包含尽可能多的设备。

它还没有完成,因为它有两个主要问题:

  1. 由于请求的频率不受支持,音频捕获当前不适用于模拟设备
  2. 计时器功能尚不起作用 - 专注于首先获取音频捕获。
  3. 我正在调查频率支持,但Android似乎没有办法找出支持哪些频率而无需每个设备的试用和错误。

    我还在我的本地开发机器上有一些额外的代码来创建listview项目的布局以显示“lap”信息。但是,由于频率问题而陷入困境。但是由于显示和音频捕获已经相当多了,使用系统时间来填充定时信息的显示值应该相对简单,然后添加将数据表导出到a的能力应该不会太难。 SD卡上的CSV。

    如果您想加入此项目,或者您有任何疑问,请与我们联系。