比较音频文件是否完全相同

26

有没有办法通过编程比较两个音频文件是否完全相同或几乎相同?这些不是mp3文件,也没有ID3或其他元数据,而是普通的wav文件。仅比较校验和值可能行不通,因为它们可能不完全相同。

4个回答

14

声学指纹维基百科文章提到了一些产品,包括开源的libfooid。基本上,你需要进入频域,在相对较少的带宽(例如32个)上取大致水平,以给出代表类似于25ms声音的字符串,对整个文件执行此操作,然后对不同文件的这些字符串进行模糊比较。这相当复杂,但有必要 - 比较实际样本将导致无法匹配,因为即使是几个百分点的音量变化也会使整个匹配失效。


好的链接。OQ似乎暗示这些文件可能是相同的或非常相似的,这表明逐个样本比较可能有效。 - MusiGenesis

9
比较一组声音相似性的过程在计算机科学研究中称为基于内容的音频索引, 检索指纹识别
其中一种方法是:
1)对每个音频文件运行多个信号处理来提取特征,例如随时间变化的音高、频谱、自相关、动态范围、瞬态等。
2)将每个音频文件的所有特征放入一个多维数组中,并将每个多维数组转储到数据库中。
3)使用优化技术(如梯度下降)在多维数据库中查找给定音频文件的最佳匹配。
这个技巧的关键在于哪些功能。
有几个项目可以做到这样的事情,包括MusicBrainzEchoNest
EchoNest在这个领域拥有最简单的API之一。非常容易上手。
附注:我不工作在EchoNest,也不认识任何在那里工作的人。

2

你可以尝试的一件事,会为你提供一个相当不错的文件指纹,就是进行傅立叶变换,并查看文件中存在的不同频率的分布。虽然仍有可能制作出两个非常不同的声音文件,它们具有相同的傅立叶变换,但如果您的文件来自非人为制造的来源,这种情况可能性较小...


那么,为了比较文件,我需要找到2个FFT之间的相关性吗?(假设这将给我不太准确的结果) - Talha

0
你可以逐个样本比较两个WAV文件,并计算每个样本的平均差异。为了加快速度,你可以使用相同的方法,但是比较每10个样本或每100个样本,并得出基本相同的值(两个不同或不接近的文件将具有巨大的每个样本平均差异)。

如果一个文件在前面添加了1秒的静音,但其他方面完全相同,则此方法无效。 - rmeador
你需要先进行模式识别,然后尝试在检查样本之前将它们在时间上对齐。 - Eran Galperin
2
我同意这两点,但这将把这个问题从简单领域带到极其复杂的领域。 - MusiGenesis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接