Java:比较两个音频文件,看它们是否是相同的“音乐”

时间:2012-08-16 13:19:00

标签: java audio

我正在处理音乐流媒体服务,我遇到了一个问题:如何比较两个音频文件,看它们是否代表同一首歌。文件可能没有相同的扩展名(例如OGG,mp3,wma),但可能仍然是同一首歌,并且它们可能具有不同的比特率和音量级别。

4 个答案:

答案 0 :(得分:6)

搜索“音频指纹识别”。可能的解决方案可能是this librarythis paper

答案 1 :(得分:2)

我查看了Google的开源lib musicg API: http://code.google.com/p/musicg/

它是Java并提供两个音频文件的相似性指标。

答案 2 :(得分:1)

您可以使用Open Source echoprint

基本上,您将生成本地歌曲的指纹,并将其与歌曲数据库(如果找到)进行比较。

如果你想比较两首歌曲,你需要做的是用第一首歌曲创建一个本地数据库,然后尝试匹配你自己数据库中的第二首歌曲。如果找到,意味着它们是相同的。

请注意,“成为同一首歌”的概念很棘手。实际上,指纹的作用是比较歌曲的许多部分,试图匹配这些很多部分。这意味着即使您对音频有干扰(如人们说话,背景噪音等),您也可以匹配一首歌曲,因为大部分音频都与原作相似。

There is a paper explaining how echoprint works in details

答案 3 :(得分:0)

对于这样的事情(因为我做了一些音频制作),你需要某种能够进行频谱分析的算法(可能使用FFT - 快速傅里叶变换)。
请检查此question here

相关问题