有没有办法以编程方式比较两个声音文件,以确定它们是相同还是几乎相同?这些不是mp3文件,没有任何ID3或其他元数据,而是普通的wav文件。比较校验和值可能不起作用,因为它们可能不完全相同。
答案 0 :(得分:13)
wikipedia article on acoustic fingerprinting提及了许多产品,包括opensource libfooid。基本上你正在考虑进入频域,在相对较少的频段(比如32)上采用粗略的水平,给你一个代表25ms声音的字符串,为整个文件做这个,然后做一个不同文件的这些字符串的模糊比较。这是相当复杂的,但需要做 - 比较实际的样本不会让你到任何地方就像一个简单的体积移动几个百分点将抛出整个匹配。
答案 1 :(得分:8)
比较一组相似声音的过程在计算机科学研究中称为基于内容的音频Indexing,Retrieval和Fingerprinting。
这样做的一种方法是:
1)在每个音频文件上运行几位信号处理,以提取特征,例如音高随时间变化,频谱,自相关,动态范围,瞬态等。
2)将每个音频文件的所有功能放入多维数组中,并将每个多维数组转储到数据库中
3)使用优化技术(例如gradient descent)找到多维数据库中给定音频文件的最佳匹配。
使这项工作做得好的诀窍是哪些功能
有几个项目可以执行此类操作,包括MusicBrainz和EchoNest。
Echonest有我在这个领域见过的simplest APIs之一。很容易上手。
P.S。不,我不为Echonest工作,也不认识在那里工作的人。
答案 2 :(得分:2)
你可以尝试的一件事就是给你一个相当不错的文件指纹就是Fourier transform并查看文件中存在的不同频率的分布。仍然很可能制作两个具有相同傅里叶变换的非常不同的声音文件,但如果您的文件来自非人为的来源,则这种情况有点不太可能......
答案 3 :(得分:1)
您可以逐个样本地比较两个WAV文件,并计算每个样本的平均差异。为了加快速度,您可以使用相同的方法,但比较每10个样本或每100个样本,并得出基本相同的值(两个不相同或甚至关闭的文件将具有巨大的每个样本平均差异)。