Сравните два звуковых файла [дубликат]

8
задан Sasha Chedygov 9 October 2014 в 05:43
поделиться

3 ответа

Копирую с того ответа:

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

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

4
ответ дан 5 December 2019 в 06:09
поделиться

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

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

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

6
ответ дан 5 December 2019 в 06:09
поделиться

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

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

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

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

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

17
ответ дан 5 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: