Как я могу сравнить 2 аудио файла программно? - PullRequest
32 голосов
/ 08 августа 2011

Я хочу сравнить 2 аудио файла программно. Например: в моем приложении для iPhone есть звуковой файл, а затем я записываю другой. Я хочу проверить, соответствует ли существующий звук записанному звуку или нет (- похоже на распознавание голоса).

Как мне это сделать?

Ответы [ 7 ]

24 голосов
/ 09 августа 2011

Это называется Audio Fingerprinting. Существуют проекты с открытым исходным кодом, из которых вы можете получить некоторые идеи. Взгляните сюда: Аудио отпечаток пальца - MusicBrainz .

13 голосов
/ 11 августа 2011

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

Java: http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/

VC ++: http://code.google.com/p/musicip-libofa/

c #: http://www.codeproject.com/KB/WPF/duplicates.aspx

4 голосов
/ 15 апреля 2013

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

  1. Библиотеки от Echoprint (веб-сайт: echoprint.me/start) помогут вам решить следующие проблемы:

    • Дублировать большую коллекцию
    • Определить (Track, Artist ...) песню на жестком диске или на сервере
    • Запустите сервер Echoprint с вашими данными
    • Определение песни на устройстве iOS

    PS: Для более музыкально ориентированных функций вы можете проверить список API здесь .

  2. Если вы хотите реализовать Снятие отпечатков пальцев самостоятельно, вам следует прочитать документы, перечисленные в качестве ссылок здесь , и, возможно, взглянуть на musicip-libofa on Google Code

Надеюсь, это поможет;)

3 голосов
/ 19 августа 2011

Мне стало интересно, и я нашел другое решение в Java, кроме sourge forge.Вы можете получить код из SVN.

http://sourceforge.net/projects/comparisong/

, посмотрите на него и дайте мне знать, сработало ли оно для вас.

ура

3 голосов
/ 12 августа 2011

Похоже, Shazam может помочь.

В Интернете есть несколько статей об этом, в том числе эта , которую я читал некоторое время назад.

Использование метода Shazam для анализа обеспечит отличную отправную точку для параллельного сравнения.

2 голосов
/ 18 августа 2011
  • Применение полосового фильтра для уменьшения шума
  • Нормализация для амплитуды
  • Вычисление взаимной корреляции

Может быть довольно интенсивно МГц.

Детали DSP приведены в хорошо известном тексте:

  • Цифровая обработка сигналов Алана В. Оппенгейма и Рональда Шафера
1 голос
/ 18 августа 2011

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

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

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

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

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

ура

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