32

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

我怎样才能做到这一点?

4

4 回答 4

13

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

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

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

C#:https ://web.archive.org/web/20190128062416/https://www.codeproject.com/Articles/206507/Duplicates-detector-via-audio-fingerprinting

于 2011-08-11T16:37:07.747 回答
5

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

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

    • 对大集合进行重复数据删除
    • 识别(曲目、艺术家...)硬盘或服务器上的歌曲
    • 使用您的数据运行 Echoprint 服务器
    • 识别 iOS 设备上的歌曲

    PS:更多面向音乐的功能,您可以在此处查看API列表。

  2. 如果您想自己实现指纹识别,您应该阅读此处列为参考的文档,并可能查看Google Code 上的 musicip-libofa

希望这会有所帮助;)

于 2013-04-15T19:26:38.697 回答
3
  • 应用带通滤波器以减少噪音
  • 归一化幅度
  • 计算互相关

它可以是相当 Mhz 密集型的。

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

  • Alan V. Oppenheim 和 Ronald W. Schafer 的数字信号处理
于 2011-08-18T05:13:07.777 回答
2

我认为您也可以尝试从两个音轨中选择几秒钟的样本,将它们的幅度标准化并使用带通滤波器降低噪声,然后尝试使用相关器。

例如,您可以对其中一个进行 5 秒的采样,然后让它滑过第二个,计算您在任何时候移动的交叉相关性。(请注意,如果您使用的数据包太小,则可能会在未预料到的情况下具有很高的相关性,并且由于信号的裁剪和互相关,您会减轻副作用)。之后你可以收集一个包含所有互相关结果的数组并获得最大值的索引。

然后,您应该通过实验设置阈值,以决定何时假设 pachet 与 b 相同。这将根据您正在比较的音轨的质量而改变。

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

在论坛中粘贴的代码太长了。如果你想告诉我,我会尽快寄给你。

干杯

于 2011-08-18T11:30:21.737 回答