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

6
我正在开发一款音乐流媒体服务,遇到了一个问题:如何比较两个音频文件是否代表同一首歌曲。这些文件可能没有相同的扩展名(例如OGG,mp3,wma),但仍然可能是同一首歌,而它们可能具有不同的比特率和音量水平。
4个回答

6

2
我建议你查看谷歌的开源音乐库 musicg API: http://code.google.com/p/musicg/ 它是用Java编写的,可以比较两个音频文件的相似度。

1
你可以使用开源的Echoprint
基本上,你会生成本地歌曲的指纹,并将其与歌曲数据库进行比较,以确定是否存在。
如果你想比较两首歌曲,你需要创建一个包含第一首歌曲的本地数据库,然后尝试在自己的数据库中匹配第二首歌曲。如果找到了,那么它们就是相同的。
请注意,“相同歌曲”的概念有些棘手。实际上,指纹比较的是歌曲的许多部分,试图匹配这些部分。这意味着,即使音频中有干扰(如人声、背景噪音等),你也能够匹配一首歌曲,因为大部分音频都与原始音频相似。 有一篇论文详细解释了Echoprint的工作原理

0

对于像这样的问题(因为我有一些音频制作经验),您需要一些能够执行频谱分析的算法(可能使用FFT-快速傅里叶变换)。
请查看此链接


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