Как я могу сравнить 2 аудиофайла программно?

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

Как я могу это сделать?

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

  • Если вы хотите внедрить Fingerprinting самостоятельно, вы должны прочитать документы, перечисленные в качестве ссылок здесь, и, вероятно, посмотрите на musicip-libofa в коде Google

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

Ответ 4

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

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

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

Ответ 5

Мне стало интересно, и я нашел другое решение в Java над кузницей. yo может извлечь код из SVN.

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

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

веселит

Ответ 6

  • Применение полосового фильтра для снижения уровня шума
  • Нормализовать для амплитуды
  • Рассчитать взаимную корреляцию

Это может быть довольно интенсивно Mhz.

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

  • Обработка цифровых сигналов Алан В. Оппенгейм и Рональд У. Шафер.

Ответ 7

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

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

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

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

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

веселит