代码之家  ›  专栏  ›  技术社区  ›  Sasha Chedygov

比较两个音频文件[副本]

  •  8
  • Sasha Chedygov  · 技术社区  · 14 年前

    基本上,我有很多代表同一首歌的音频文件。然而,其中一些比原来的质量差,一些被编辑到他们不匹配原来的歌曲了。我想做的是通过编程将这些音频文件与原始文件进行比较,看看哪些文件与那首歌相匹配,而不管质量如何。直接比较显然行不通,因为文件的质量不同。

    我相信这可以通过分析歌曲的结构并与原作进行比较来实现,但我对音频工程一无所知,所以这对我帮助不大。所有歌曲的格式都相同(MP3)。另外,我使用的是Python,所以如果有它的绑定,那就太棒了;如果没有,JVM甚至本机库也可以,只要它在Linux上运行,我就能知道如何使用它。

    3 回复  |  直到 10 年前
        1
  •  5
  •   Community CDub    7 年前

    复制自 that 回答:

    MusicBrainz Picard ,它将用GUID(实际上是其中的几个)标记音频文件(不仅仅是MPEG 1 Layer 3文件),从那时起,匹配标记就相当简单了。

    如果你想把它当作自己的项目来做, libofa 可能会有帮助。这个 documentation for the Python wrapper 也许对你帮助最大。

        2
  •  20
  •   atzz    14 年前

    这其实不是一件小事。我认为任何现成的图书馆都做不到。以下是一种可能的方法:

    1. 将mp3解码到PCM。
    2. 规范化PCM数据(即,找到最大样本值并重新缩放所有样本,以便具有最大振幅的样本使用数据格式的整个动态范围,例如,如果样本格式是有符号的16位,则在规范化后,最大振幅样本的值应为32767或-32767)。
    3. 将音频数据拆分为固定采样数的帧(例如:每帧1000个采样)。
    4. 将每个帧转换为频谱域( FFT ).

    Python库:

    额外的并发症。你的歌一开始可能会有不同的沉默时间。因此,为了避免误报,您可能需要额外的步骤:

        3
  •  6
  •   BenG    14 年前

    首先,你必须改变你的比较领域。分析未压缩文件中的原始样本将一无所获。距离度量将基于从音频样本中提取的一个或多个特征。Wikipedia列出了以下常用于 Acoustic Fingerprinting

    音频指纹通常利用的感知特征包括平均过零率、估计速度、平均频谱、频谱平坦度、一组频带上的突出音调和带宽。

    我没有程序化的解决方案,但这里有一个 interesting attempt 在反向工程YouTube音频识别系统。它是用来检测版权侵权的,类似的问题。