我正在尝试在iPhone中编写程序,而不是将两个音频文件(例如WAV)作为输入,比较它们,并吐出一个数字,告诉你音频文件的相似程度。
如果某人做过类似的事情,知道该怎么做,或者只是想出一些想法,请告诉我。任何事都将受到高度赞赏。
具体问题:哪种语言适合?它有多难(多少个 小时,大致)?我在哪里可以找到音频库/工具的良好来源?
谢谢!
答案 0 :(得分:2)
我说这很难,不是实施,而是提出'相似'的合理定义。
那就是说,您可能正在研究自相关和FFT这两种技术,这两种技术都是CPU密集型任务,所以我要说一种完全编译的语言(C,C ++,不知道Objective-C) )至少对于实际计算是最合适的。此外,你正面临着一个有点动力不足的平台来完成这些任务(如果只是因为未压缩的音频文件非常大),所以你需要进行一些优化。
本书:http://www.dspguide.com/非常简洁,可读取与DSP相关的所有内容。
答案 1 :(得分:0)
听起来类似于'Shazam'所做的 - 顺便说一句,真的很棒的iPhone应用程序,如果你还没有(它也是免费的),请查看它。
前段时间有一篇关于Shazam如何运作的文章read it here。它采用声学指纹并将其与其他歌曲的指纹进行比较,返回最接近的匹配。
我想说有很多数学,可能是一些矩阵,也许傅里叶变换涉及指纹识别,然后尝试比较音频。
-
可能需要一段时间来编程。如果你的数学技能达到了它,听起来像是一个很好的挑战: - )
-
编辑:结果是我链接的网站上有一些源代码。它是用Java编写的,但在开始编写自己的文档之前,这是值得一看的。 Source code here
答案 2 :(得分:0)
我正在使用语音识别应用程序在Java上进行类似的工作。
我建议使用MFCC(需要计算FFT)进行特征提取和神经网络或其他一些用于训练和识别的机器学习技术。您可以使用从参考wav文件中提取的特征来训练NN,更准确地说,从该音频文件的连续相等长度切片/窗口中训练NN。然后使用NN检测另一个文件(也分为多个切片)是否具有相同的功能。
这是您可以详细说明您自己的规范,或者您希望应用程序完成的基本构思。
就目标C中的库而言,我认为您可以找到一些用于信号处理部分(FFT等)的机器学习部分我不知道您能找到什么。
至于编程时间,很难估计,因为它取决于很多细节。我会说约一个星期,但这只是一个公平的估计。
ps:MFCC代表Mel-Frequency Coeficients:http://en.wikipedia.org/wiki/Mel-frequency_cepstrum