基本上,我有很多代表同一首歌的音频文件。然而,其中一些质量比原始质量差,有些被编辑到它们与原始歌曲不再匹配的地方。我想要做的是以编程方式将这些音频文件与原始文件进行比较,看看哪些与该歌曲匹配,无论质量如何。直接比较显然不起作用,因为文件的质量各不相同。
我相信这可以通过分析歌曲的结构并与原作进行比较来完成,但我对音频工程一无所知,所以这对我没有多大帮助。所有歌曲的格式相同(MP3)。另外,我正在使用Python,所以如果有绑定,那就太棒了;如果没有,JVM甚至本地库的东西也可以,只要它在Linux上运行,我就可以弄清楚如何使用它。
答案 0 :(得分:17)
这实际上不是一项微不足道的任务。我不认为任何现成的库可以做到这一点。这是一种可能的方法:
Python库:
另外一个复杂因素。您的歌曲在开始时可能会有不同的沉默长度。因此,为了避免漏报,您可能需要一个额外的步骤:
3.1。从头开始扫描PCM数据,直到声能超过预定阈值。 (例如,用10个样本的滑动窗口计算RMS,当它超过动态范围的1%时停止)。然后丢弃所有数据,直到这一点。
答案 1 :(得分:6)
首先,您必须更改您的比较域。分析未压缩文件中的原始样本将无处可寻。您的距离测量将基于您从音频样本中提取的一个或多个功能。维基百科列出了Acoustic Fingerprinting常用的以下功能:
音频指纹经常利用的感知特征包括平均过零率,估计速度,平均频谱,频谱平坦度,一组频段的突出音调和带宽。
我没有针对您的程序化解决方案,但这是interesting attempt对YouTube音频ID系统进行逆向工程。它用于版权侵权检测,类似的问题。
答案 2 :(得分:4)
从that回复
复制完全相同的问题是,旧的AudioScrobbler和目前在MusicBrainz的人们很久以前一直在努力。目前,可以帮助您完成任务的Python项目是Picard,它将使用GUID(实际上是其中几个)标记音频文件(不仅是MPEG 1第3层文件),然后从那时开始在,匹配标签非常简单。
如果您希望将其作为自己的项目,libofa可能会有所帮助。 documentation for the Python wrapper或许会对你有所帮助。