Сравнение звуковых файлов, если они не полностью идентичны - PullRequest
25 голосов
/ 23 января 2009

Есть ли способ программно сравнить два звуковых файла, чтобы определить, идентичны они или почти идентичны? Это не mp3-файлы и не содержат ID3 или других метаданных, а представляют собой обычные wav-файлы. Сравнение значений контрольной суммы может не сработать, поскольку они могут быть не полностью идентичными.

Ответы [ 4 ]

13 голосов
/ 23 января 2009

В статье Википедии об акустической дактилоскопии упоминается ряд продуктов, включая libfooid с открытым исходным кодом. По сути, вы рассматриваете возможность перехода в частотную область, принимая грубые уровни в относительно небольшом количестве полос (скажем, 32), чтобы получить строку, которая представляет собой что-то вроде 25 мс звука, сделать это для всего файла, а затем выполнить нечеткое сравнение этих строк для разных файлов. Это довольно сложно, но нужно сделать - сравнение реальных сэмплов ни к чему не приведет, так как простое изменение громкости на несколько процентов приведет к потере всего соответствия.

8 голосов
/ 23 января 2009

Процесс сравнения набора звуков по сходствам называется Content Based Audio Индексирование , Извлечение и Отпечатки пальцев в исследованиях в области компьютерных наук.

Один из способов сделать это:

1) Выполнить несколько бит обработки сигнала для каждого аудиофайла, чтобы извлечь такие функции, как высота тона, частотный спектр, автокорреляция, динамический диапазон, переходные процессы и т. Д.

2) Поместите все функции для каждого аудиофайла в многомерный массив и поместите каждый многомерный массив в базу данных

3) Используйте методы оптимизации (такие как градиентное спуск ), чтобы найти лучшее соответствие для данного аудиофайла в вашей базе данных многомерных данных.

Хитрость в том, чтобы сделать это хорошо, заключается в том, какие функции

Есть несколько проектов, которые делают подобные вещи, включая MusicBrainz и EchoNest .

Echonest имеет один из самых простых API , которые я видел в этом пространстве. Очень легко начать.

P.S. Нет, я не работаю на Echonest и не знаю никого, кто там работает.

2 голосов
/ 23 января 2009

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

1 голос
/ 23 января 2009

Вы можете сравнить два файла WAV по выборкам и рассчитать среднюю разницу по выборкам. Чтобы ускорить процесс, вы можете использовать тот же метод, но сравнить каждый 10-й образец или каждый 100-й образец и получить по существу одинаковое значение (два файла, которые не совпадают или даже близки, будут иметь огромную среднюю разницу для выборки ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...