13

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

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

我已经在网上对其进行了广泛的研究,但我找不到任何可以为这个特定问题提供解决方案的东西。尽管它可能是我读到的不同技术的组合,但最终将成为解决方案。

我已经实现
的东西同时播放歌曲和录制音频。

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

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

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

4

2 回答 2

1

您只想知道,环境中有多少噪音,并且您有两个信号,原始信号和记录信号?那么你的解决方案就很好了。您需要同步信号并找到一些数字,这会给您带来相似性。您甚至可以避免 fft 并使用原始信号(在适当的演示中)。

自相关是同步信号的好方法。Autocorellation-index 是一个数字,可以为您提供相似度。

当然,如果音量越低,噪音(相对于音乐)就越大,影响越大。由于您应该能够检测到音量,因此您应该能够添加一些校正因子。但由于这是一个“自然”问题,我猜每个算法都会有这个问题。

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

于 2012-10-01T11:21:28.843 回答
1

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

于 2013-07-03T16:37:09.503 回答