音频文件匹配程序
Posted
技术标签:
【中文标题】音频文件匹配程序【英文标题】:Audio File Matching Program 【发布时间】:2011-01-21 12:09:56 【问题描述】:我正在尝试在 iPhone 中编写一个程序,它可以将两个音频文件(例如 WAV)作为输入,比较它们,然后输出一个数字,告诉您音频文件的相似程度。
如果有人做过类似的事情,知道如何去做,或者只是有一些想法,请告诉我。任何事情都将不胜感激。
具体问题:什么语言适合?做起来有多难(多少 小时,大约)?我在哪里可以找到好的音频库/工具来源?
谢谢!
【问题讨论】:
【参考方案1】:我想说这很困难,与其说是实现,不如说是想出一个“相似”的合理定义。
也就是说,您可能正在研究诸如自相关和 FFT 之类的技术,它们都是 CPU 密集型任务,所以我会说一种完全编译的语言(C、C++,不了解 Objective-C ) 至少对于实际计算是最合适的。此外,对于此类任务,您面临的平台动力不足(如果只是因为未压缩的音频文件非常大),因此您需要进行相当多的优化。
这本书:http://www.dspguide.com/ 对于所有与 DSP 相关的内容都非常简洁。
【讨论】:
【参考方案2】:听起来与“Shazam”的功能相似 - 顺便说一下,很棒的 iPhone 应用,如果你还没有,请检查一下(它也是免费的)。
不久前有一篇关于 Shazam 工作原理的文章,read it here。它采用声学指纹并将其与其他歌曲的指纹进行比较,返回最接近的匹配项。
我想说有很多数学,可能是一些矩阵,也许还有傅里叶变换涉及指纹识别,然后尝试比较音频。
-
编程可能需要很长时间。不过,如果您的数学技能能够胜任,那听起来是个不错的挑战 :-)
-
编辑: 原来在我链接的网站上有一些源代码。它是用 Java 编写的,但在您开始编写自己的代码之前非常值得一看。 Source code here
【讨论】:
您好 Jordan,感谢您的回复,我查看了 Shazam 网站,但没有获得源代码。你能帮帮我吗? redcode.nl/blog/2010/06/creating-shazam-in-java - 这不是 Shazam,而是试图复制 Shazam 的源代码。【参考方案3】:我正在一个语音识别应用程序上用 Java 做类似的事情。
我建议使用 MFCC(需要计算 FFT)进行特征提取,使用神经网络或其他类型的机器学习技术进行训练和识别。您使用从参考 wav 文件中提取的特征来训练 NN,更准确地说,是从该音频文件的连续相等长度的切片/窗口中提取的。然后,您使用 NN 来检测另一个文件是否也被分割成片,是否具有相同的特征。
这是您可以详细阐述以进一步制定您自己的规范或您希望您的应用程序做什么的基本思想。
就 Objective C 中的库而言,我认为您可以找到一些用于信号处理部分(FFT 等)的库,而对于机器学习部分,我不知道您能找到什么。
至于编程时间很难估计,因为它取决于很多细节。我会在某个地方说大约一周,但这只是一个公平的估计。
ps:MFCC 代表 Mel-Frequency Coeficients:http://en.wikipedia.org/wiki/Mel-frequency_cepstrum
【讨论】:
以上是关于音频文件匹配程序的主要内容,如果未能解决你的问题,请参考以下文章
AVAudioPlayer 持续时间与音频文件的实际持续时间不匹配