Android实时音频分析

14

我已经在网络上搜索过了,但我还是有些困惑(我相信如果有人想到这样的东西,他们也会有同样的困惑)。首先我想说,这不是为了做作业和/或获利。

我想创建一个应用程序,可以在你准备爆米花时听取微波炉的声音。它可以通过在弹跳之间设定一定的时间间隔(比如5-6秒),并发出警报来工作。再次声明,这只是一个能让我忙碌的项目,而不是为了上课。

无论如何,我现在遇到了困难,无法找到实时分析音频输入的方法。也就是说,我需要一种记录“弹跳”发生时间的方法。为了避免大家认为我没有对这个问题进行任何调查,我已经查看了thisSO问题,并广泛搜索了AudioRecord功能列表。

我觉得我可能需要对 read() 的其中一个版本进行处理,然后每隔大约2秒钟比较一次记录的音频和“砰”的录音(即如果 byte[] audioData 数组中70%或更多的数据与砰声相同,则记录时间)。有 Android 音频输入经验的人能告诉我是否正确?这不是要求你为我编写任何代码的问题,而是询问我是否走在正确的轨道上,如果不是,则应该朝哪个方向前进。


1
旧话题 https://dev59.com/uXE95IYBdhLWcg3wkeqq - PedroAGSantos
2
我已经在我的问题中引用了那个问题。我的问题更多的是关于我是否在针对实时音频分析的特定需求方向上走得正确。 - Vinay
3个回答

9

我认为有一种更简单的方法。

您可以使用MediaRecorder的getMaxAmplitude方法。

每当您的录音机检测到振幅的大幅跳跃时,您就已经检测到了爆米花!


非常感谢!我的朋友也建议我同样的事情,我想我会采用它(因为我一直忙于其他与学校有关的事情,所以还没有完成应用程序)。我给这个答案点赞。 - Vinay
你能将我的回答标记为正确的答案吗?我迫不及待想要获得这个应用程序! - gregm
gregm,虽然我会使用你的方法,但Andrew给了我一个很好的方向(我仍将使用他的方法进行音频实时分析),而且他先回答了。请不要个人化,我只是觉得他先回答了,所以不太合适取消他的答案作为答案。再次感谢您,我很高兴您迫不及待地想要这个应用程序(尽管它真的只是为了好玩/小项目),但请不要个人化。 - Vinay

6
请看以下代码(忽略播放部分):Playing back sound coming from microphone in real-time 基本上,您需要获取每个16位采样的值(这对应于该时间波的值)。使用采样率,您可以计算音量峰值之间的时间。我认为这可能会实现您想要的效果。

再次感谢您,安德鲁。我会尝试一下,如果有效的话,我会接受这个答案。 :-) - Vinay
所以这是一个很好的方向让我开始。我会接受这个答案。 - Vinay

5
这可能有点过头了,但MIT媒体实验室有一个叫做funf的框架:http://code.google.com/p/funf-open-sensing-framework/。他们已经创建了音频输入和一些分析(FFT等)的类,而且据我所见,文件保存或上传也已实现,他们处理了手机上大多数可用的传感器。你还可以从他们编写的代码中获得灵感,我认为那相当不错。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接