通过分析两个MP3文件';字节? 这是用C++或C来做的… 我知道我们可以读取MP3的元数据,但是任何人都可以更改这些信息,不是吗? 那么,有没有一种方法可以分析一个文件的内容,并将其与另一个文件进行比较,从而确定它是否是同一首歌呢

通过分析两个MP3文件';字节? 这是用C++或C来做的… 我知道我们可以读取MP3的元数据,但是任何人都可以更改这些信息,不是吗? 那么,有没有一种方法可以分析一个文件的内容,并将其与另一个文件进行比较,从而确定它是否是同一首歌呢,c++,c,mp3,byte,analysis,C++,C,Mp3,Byte,Analysis,编辑 很多有趣的事情我都没想到。尝试这一点都不是一个好主意。这是可能的,但非常困难 即使是相同的原始记录也可能通过不同的MP3编码器或具有不同设置的相同编码器进行不同的编码。。。当MP3被解码时会导致不同的结果。你需要建立一个听觉模型来“理解”差异有多大,并做出判断 然后是不同录音的问题。如果我唱《曾经在皇家大卫之城》而艾利德·琼斯唱这首歌,那是同一首歌吗?如果一首歌有两个不同的版本,其中一个版本的歌词稍有修改怎么办?琴键可能不同,可能在不同的音域中——各种各样的东西 两首歌有什么不同,但仍然算

编辑
很多有趣的事情我都没想到。尝试这一点都不是一个好主意。

这是可能的,但非常困难

即使是相同的原始记录也可能通过不同的MP3编码器或具有不同设置的相同编码器进行不同的编码。。。当MP3被解码时会导致不同的结果。你需要建立一个听觉模型来“理解”差异有多大,并做出判断

然后是不同录音的问题。如果我唱《曾经在皇家大卫之城》而艾利德·琼斯唱这首歌,那是同一首歌吗?如果一首歌有两个不同的版本,其中一个版本的歌词稍有修改怎么办?琴键可能不同,可能在不同的音域中——各种各样的东西

两首歌有什么不同,但仍然算是“同一首歌”?一旦决定了这一点,接下来就是实施它的小问题;)

不,没那么简单

您可以检查它们是否包含相同的编码数据,但:

  • 可能是不同的比特率
  • 可能是同一首歌,只差1/100秒
在这两种情况下,字节都不匹配


基本上,如果一个解决方案看起来太简单而不真实,它通常是这样的。

如果我真的必须这样做,我的第一次尝试是对两首歌进行傅里叶变换,并比较直方图。您可以使用FFTW(http://www.fftw.org/)进行傅里叶变换,然后将每个频率的差值平方相加,比较直方图。如果结果总和大于某个阈值(您必须通过实验确定),则认为歌曲不同,否则它们是相同的。

如果您在iTunes意义上的“相同录制”是指“相同歌曲”,则可以比较两个音频文件,但不能对编码文件逐字节进行比较,因为即使对于相同的格式,在编码时也会选择数据速率和压缩等变量

同样,同一记录的每个编码可能包括不同的引入/引出定时、不同的振幅和均衡,并且可能来自不同的原始源(乙烯基、CD、原始母版等)。因此,你需要一种将所有这些变量都考虑在内的比较方法,即使这样,你最终也会得到匹配的“可能性”,而不是最终的匹配

如果你真正的意思是“同一首歌”,即任何艺术家录制的任何作品和歌词都是相同的,那么在大多数情况下,你不可能得到很高的统计相关性,因为音高、节奏、音程、乐器安排都会有很大的不同


在“同一录制”场景中,可以应用相对简单的信号处理和统计技术,在“同一首歌”场景中,需要部署人工智能技术,即使这样,我怀疑结果也会很差。

如果要比较源自同一MP3的MP3文件,但是,如果使用不同的元数据标记,那么只需比较实际的音频数据就可以了。由于它源于相同的MP3编码,您应该能够进行逐字节比较。您必须比较所有字节。只需采样几首就足够了,这样就可以得到一个在另一首歌曲中几乎不可能找到的唯一键

如果文件是由不同的编码器生成的,则必须从数据中提取一些“模糊”特征键并比较这些键。很快,我可能会构造一个这样的算法:

  • 以标准比特率将音频解码为脉冲编码调制(wave)
  • 使用一些动态定位算法找到固定数量的特征起点。例如,找到从波的开始排列的前10个最高波峰,或者简单地在波中均匀分布(动态地固定第一个和最后一个位置是个好主意,因为不同的编码可能不会在完全相同的点开始和结束)。一个改进是在波浪中不太可能重复的位置选择特征点
  • 从特征点提取一组一维特征键标量。例如,对于每个特征,对以下n个样本值进行归一化,并计算过零次数、峰均比、平均过零距离、信号能量。目标是提取相对独特的鲁棒特征,即使信号中添加了一些噪声和失真,也仍然具有特征。这显然可以得到几乎无限的改善
  • 使用一些精度测量来比较两个文件的提取特征键(f.eks.9/10特征提取必须至少匹配其提取特征键中的4/5的99%)
特征提取方法的好处是,您可以为所有mp3文件和单个文件构建一个特征数据库,并询问以下问题:还有哪些媒体文件具有与此完全或几乎完全相同的特征。可以使用R*树或类似的方法非常有效地实现特征查找,可以使用R*树或类似的方法快速测量n维特征集之间的距离

上述技术本质上是SIFT等图像搜索算法的变体,SIFT可能是Photosynth和Google Goggles等应用程序的基础。在图像搜索中,过滤图像中相对独特的特征(例如形状的角)的良好候选点,然后对该特征周围的区域进行规格化