如何以编程方式比较2个音频文件?

时间:2011-08-08 08:18:35

标签: iphone ipad audio-processing

我想以编程方式比较2个音频文件。 例如:我的iPhone应用程序中有一个声音文件,然后我录制另一个。我想检查现有声音是否与录制的声音匹配( - 类似于语音识别)。

我该如何做到这一点?

7 个答案:

答案 0 :(得分:24)

这就是所谓的音频指纹识别。存在一些开源项目,您可以从中获得一些想法。看看这里:Audio Fingerprint - MusicBrainz

答案 1 :(得分:13)

让服务器进行音频指纹计算,无论如何都不适合移动设备。然后您的移动应用程序将您的文件上传到服务器并获取分析结果以供显示。所以我认为实现它的编程语言并不重要。以下是一些AF实现。

Java:http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/

VC ++:http://code.google.com/p/musicip-libofa/

c#:http://www.codeproject.com/KB/WPF/duplicates.aspx

答案 2 :(得分:4)

我知道很久以前就已经问过这个问题,但一个明确的答案可以帮助其他人。

  1. 来自Echoprint的(网站:echoprint.me/start)将帮助您解决以下问题:

    • 重复删除大集合
    • 识别(Track,Artist ...)硬盘或服务器上的歌曲
    • 使用您的数据运行Echoprint服务器
    • 识别iOS设备上的歌曲

    PS:有关更多面向音乐的功能,您可以查看 API here 列表。

  2. 如果您想自己实施指纹识别,您应该阅读列为参考文献here的文档,并且可能会在Google上查看 musicip-libofa代码

  3. 希望这会有所帮助;)

答案 3 :(得分:3)

听起来像Shazam可能会有所帮助。

网上有一些文章在讨论这个问题,包括我刚才读过的this文章。

使用Shazam技术进行分析将为并排比较提供一个很好的起点。

答案 4 :(得分:3)

我很感兴趣,我发现了另一种Java over sourge forge的解决方案。你可以从SVN中检索代码。

http://sourceforge.net/projects/comparisong/

看看它,让我知道它是否适合你。

欢呼声

答案 5 :(得分:2)

  • 应用带通滤波器以降低噪音
  • 标准化幅度
  • 计算互相关

它可能相当Mhz密集。

DSP详细信息在众所周知的文本中:

  • 数字信号处理 Alan V. Oppenheim和Ronald W. Schafer

答案 6 :(得分:1)

我认为您也可以尝试从两个音频轨道中选择几个第二个样本,将它们的幅度调整为正常,并使用带通滤波器降低噪声并尝试使用相关器。

例如,你可以拍摄其中一个的5秒样本并使其滑过第二个样本,计算交叉核心化时间。 (小心如果你拿一个太小的小袋,你可能会有很高的相关性,如果没有被消除,你会因为信号的裁剪和交叉相关而软化副作用)。 之后你可以收集一个带有交叉相关结果的数组并得到最大值的索引。

然后你应该通过实验设置threshould o决定你什么时候假设小袋为b。这将根据您所比较的音轨的质量而改变。

我实施了一个验证器,用于接收和区分无线通信中的前导码。我的脚本实际上是在matlab中完成的。如果您有兴趣,我可以尝试找到共同部分并发送给您。

在论坛中粘贴hene将是一个太长的代码。如果你想让我知道,我会尽快发送给你。

欢呼声