Сравните два аудиофайла

В принципе, у меня много аудиофайлов, представляющих одну и ту же песню. Однако некоторые из них хуже качества, чем оригиналы, и некоторые из них редактируются там, где они больше не соответствуют оригинальной песне. То, что я хотел бы сделать, это программно сравнить эти аудиофайлы с оригиналом и посмотреть, какие из них соответствуют этой песне, независимо от качества. Прямое сравнение, очевидно, не будет работать, потому что качество файлов меняется.

Я считаю, что это можно сделать, анализируя структуру песен и сравнивая с оригиналом, но я ничего не знаю об аудиоинженерии, так что это не очень помогает. Все песни одного формата (MP3). Кроме того, я использую Python, поэтому, если есть привязки для него, это будет фантастично; если нет, то для JVM или даже для родной библиотеки было бы хорошо, если оно работает на Linux, и я могу понять, как его использовать.

  • Как читать тег ID3 в MP3 с помощью Python?
  • Как я однозначно идентифицирую содержимое медиафайла в Python, а не метаданные?
  • Пигмент Python AVBin - Как установить AVBin
  • Как объединить файлы в Python?
  • Загрузка Mp3 с использованием Python в Windows управляет песней, однако в Linux это не
  • Использование pyDub для измельчения длинного аудиофайла
  • Воспроизведение файлов MP3 с помощью Python
  • Поиск длины mp3-файла
  • 3 Solutions collect form web for “Сравните два аудиофайла”

    Копирование из этого ответа:

    Точно такой же вопрос, что люди из старого AudioScrobbler и в настоящее время в MusicBrainz давно работали. Пока что проект Python, который может помочь в ваших поисках, – это Picard , в котором будут помечены аудиофайлы (а не только файлы MPEG 1 Layer 3) с GUID (фактически, несколько из них), и с этого момента, теги довольно просты.

    Если вы предпочитаете делать это как собственный проект, libofa может помочь. Документация для оболочки Python, возможно, поможет вам больше всего.

    На самом деле это не тривиальная задача. Я не думаю, что любая готовая библиотека может это сделать. Вот возможный подход:

    1. Декодируйте mp3 в PCM.
    2. Убедитесь, что данные PCM имеют определенную частоту дискретизации, которую вы выбираете заранее (например, 16 кГц). Вам нужно будет перепрограммировать песни с разной частотой дискретизации. Высокая частота выборки не требуется, так как в любом случае вам нужно нечеткое сравнение, но слишком низкая частота дискретизации потеряет слишком много деталей.
    3. Нормализовать данные PCM (т. Е. Найти максимальное значение выборки и перемасштабировать все образцы, чтобы образец с наибольшей амплитудой использовал весь динамический диапазон формата данных, например, если формат образца подписан 16 бит, то после нормализации максимальная амплитуда образца должна иметь значение 32767 или -32767 ).
    4. Разделить аудиоданные на кадры с фиксированным количеством выборок (например: 1000 выборок на кадр).
    5. Преобразование каждого кадра в область спектра ( FFT ).
    6. Вычислить корреляцию между последовательностями кадров, представляющими две песни. Если корреляция больше определенного порога, предположите, что песни одинаковы.

    Библиотеки Python:

    • PyMedia (для шага 1)
    • NumPy (для обработки данных) – также см. Эту статью для некоторой вводной информации

    Дополнительное осложнение. Вначале ваши песни могут иметь разную тишину. Поэтому, чтобы избежать ложных негативов, вам может потребоваться дополнительный шаг:

    3.1. Сканируйте данные PCM с самого начала, пока звуковая энергия не превысит предопределенный порог. (Например, вычислить RMS с раздвижным окном из 10 образцов и остановиться, когда он превышает 1% от динамического диапазона). Затем отбросьте все данные до этой точки.

    Во-первых, вам придется изменить свой домен сравнения. Анализ необработанных образцов из несжатых файлов не даст вам нигде. Ваша дистанционная мера будет основана на одной или нескольких функциях, которые вы извлекаете из образцов аудио. В Википедии перечислены следующие функции, обычно используемые для акустической отпечатки пальцев :

    Перцептивные характеристики, часто используемые звуковыми отпечатками пальцев, включают в себя среднюю скорость пересечения нуля, расчетный темп, средний спектр, спектральную плоскостность, выдающиеся тона в диапазоне полос и ширину полосы.

    У меня нет программных решений для вас, но вот интересная попытка реконструировать систему Audio Audio YouTube. Он используется для обнаружения нарушений авторских прав, аналогичная проблема.

    Python - лучший язык программирования в мире.