Копирую с того ответа:
Точно такой же вопрос, над которым люди в старом AudioScrobbler и сейчас в MusicBrainz работают с давних пор. На данный момент, проект на Python, который может помочь в ваших поисках, это Picard, который будет помечать аудио файлы (не только файлы MPEG 1 Layer 3) GUID (на самом деле, несколькими), и с этого момента, сопоставление тегов будет довольно простым.
Если вы предпочитаете делать это как собственный проект, libofa может быть полезен. Возможно, больше всего вам поможет документация к обертке Python.
Во-первых, вам нужно изменить домен сравнения. Анализ исходных образцов из несжатых файлов ни к чему не приведет. Ваша мера расстояния будет основана на одной или нескольких функциях, которые вы извлекаете из аудиосэмплов. В Википедии перечислены следующие функции, которые обычно используются для Acoustic Fingerprinting :
Характеристики восприятия, часто используемые звуковыми отпечатками пальцев, включают среднюю частоту пересечения нуля, расчетный темп, средний спектр, спектральную ровность, отчетливые тона в наборе диапазонов , и пропускная способность.
У меня нет программных решений для вас, но вот интересная попытка обратного проектирования системы YouTube Audio ID. Он используется для обнаружения нарушения авторских прав, аналогичная проблема.
На самом деле это нетривиальная задача. Я не думаю, что какая-либо стандартная библиотека может это сделать. Вот возможный подход:
Библиотеки Python:
дополнительное осложнение.Ваши песни могут иметь разную продолжительность молчания в начале. Поэтому, чтобы избежать ложноотрицательных результатов, вам может потребоваться дополнительный шаг:
3.1. Сканируйте данные PCM с самого начала, пока звуковая энергия не превысит заданный порог. (Например, вычислить среднеквадратичное значение со скользящим окном из 10 выборок и остановиться, когда оно превышает 1% от динамического диапазона). Затем отбросьте все данные до этого момента.