在iPhone上播放歌曲时通过麦克风检测噪音

时间:2012-08-16 19:08:10

标签: ios iphone audio fft noise

我正在创建一个应该播放简单音轨的应用程序,让我知道在播放曲目时附近是否有噪音。这是通过在iPhone的扬声器上播放歌曲时从麦克风进行实时录制来完成的。任何不属于音乐播放的声音都被定义为噪音。

实现此功能的最简单方法是什么?

我在网上进行了相当广泛的研究,但是我找不到任何能指出这个特定问题的解决方案的东西。虽然它可能是我阅读的不同技术的组合,但最终将成为解决方案。

我已经实施的事情
同时播放歌曲和录制音频。

我尝试过的事情
注意:由于我们鼓励我们添加我们已尝试过的内容,因此我添加以下部分。但我绝不是说这是解决问题的正确方法,这只是我尝试过的事情。

我攻击了aurioTouch2示例应用程序:我所做的是回放一次歌曲并记录快速傅立叶变换值(以非常低的采样率保持记录数据的数量较低)。然后,当再次播放曲目时,我基本上计算(每时间步长)使用实时回放fft数据构建的输出图形与记录的fft数据之间的相关系数(所以当你放置时,你看到的'波浪'线)应用于fft模式) 这种“有点”有效。当房间内有过多的声音/噪音时,相关系数明显较低,但它不是非常敏感,也取决于记录fft数据时使用的音量。最后,我认为这可能不是最好的方法。

有人认为这是可能的吗?如果是这样,最好的方法是什么? 请询问您是否需要更多说明!

2 个答案:

答案 0 :(得分:1)

你只想知道,环境中有多少噪音,你有两个信号,原始信号和记录信号?那你的解决方案就完美了。您需要同步信号并找到一些数字,这样可以提供相似性。 您甚至可以避免fft并使用原始信号(在正确的演示中)。

自动校正是一种同步信号的好方法。 Autocorellation-index是一个可以提供相似性的数字。

当然,如果音量较低,则噪音(相对于音乐)更响亮并且具有更高的影响力。由于您应该能够检测音量,因此您应该能够添加一些校正因子。但由于这是一个“自然”问题,我猜每个算法都会遇到这个问题。

另一种解决方案是从记录信号中减去原始信号,然后你应该将噪声作为两个信号的差值。然后你也有噪音的力量......

答案 1 :(得分:1)

最后我们决定不在应用中执行此操作。 我有一个演示工作,我将首先对歌曲进行校准,收集一组最主要的频率,对环境室噪声做同样的事情,并在歌曲播放时在决策过程中使用这些频率。 它工作得很好,虽然我觉得它仍然需要大量的调整。凭借我对音频相关编程的有限知识,我能做到最好:)