Вопрос

Я хочу постройте что-то похожее на Тунатический или Мидоми (попробуйте их, если вы не уверены, что они делают) и мне интересно, какие алгоритмы мне пришлось бы использовать;Идея, которая у меня есть о работе таких приложений, примерно такова:

  1. у вас есть большая база данных с несколькими песнями
  2. для каждой песни в 1. уменьшите качество / скорость передачи данных (например, до 64 Кбит /с) и вычислите звуковой "хэш".
  3. у вас есть звук / отрывок музыки, который вы хотите идентифицировать
  4. для песни в 3. уменьшите качество / скорость передачи данных (снова до 64 Кбит/с) и вычислите звуковой "хэш".
  5. если 4. звуковой хэш есть в любом из 2. звуковые хэши возвращают подобранную музыку

Я думал о снижении качества / скорости передачи данных из-за шумов окружающей среды и различий в кодировке.

На правильном ли я пути? Кто-нибудь может предоставить мне какие-нибудь конкретная документация или примеры?Мидори , кажется , даже узнает hum's, это потрясающе впечатляет!Как они это делают?

Существуют ли звуковые хэши, или это что-то, что я просто выдумал?Если да, то как я могу их вычислить?И что еще более важно, как я могу проверить, есть ли child-hash находится в father-hash?

Как бы я поступил на вашем месте создание аналогичной системы с помощью Python (возможно, встроенного модуля) или PHP?

Мы будем очень признательны за некоторые примеры (предпочтительно на Python или PHP).Заранее спасибо!

Это было полезно?

Решение

Я работал над крутым фреймворком, реализующим несколько методов поиска музыкальной информации.Я вряд ли эксперт (редактировать:на самом деле я далеко не эксперт, просто чтобы уточнить), но я могу сказать, что быстрое преобразование Фурье используется повсюду с этими штуками.Анализ Фурье — штука странная, но его применение довольно простое.По сути, вы можете получить много информации об аудио, анализируя его в частотной области, а не во временной.Вот что дает вам анализ Фурье.

Это может быть немного не по теме того, что вы хотите сделать.В любом случае, в проекте есть несколько интересных инструментов, с которыми можно поиграть, а также просмотреть исходный код самой основной библиотеки: http://marsyas.sness.net

Другие советы

Я занимаюсь исследованиями в области поиска музыкальной информации (MIR).Основополагающей работой по дактилоскопии в музыке является работа Хайтсмы и Калкера, написанная примерно в 2002-03 годах.Google должен предоставить вам это.

Я прочитал ранний (действительно ранний;до 2000 года) белая книга о методе Шазама.На этом этапе они просто в основном обнаруживали спектровременные пики, а затем хэшировали эти пики.Я уверен, что эта процедура эволюционировала.

Оба этих метода учитывают сходство музыки на уровне сигнала, то есть она устойчива к искажениям окружающей среды.Я не думаю, что это хорошо работает для query-by-humming (QBH).Однако это другая (но связанная) проблема с другими (но связанными) решениями, поэтому вы можете найти решения в литературе.(Слишком много, чтобы перечислять здесь.)

Материалы дела ISMIR находятся в свободном доступе в Интернете.Там можно найти ценные вещи: http://www.ismir.net/

Я согласен с использованием существующей библиотеки, такой как Marsyas.Зависит от того, чего вы хотите.Я думаю, что Numpy / Scipy здесь незаменим.Простые вещи можно написать на Python самостоятельно.Черт возьми, если вам нужны такие вещи, как STFT, MFCC, я могу отправить вам код по электронной почте.

Недавно я портировал свою систему снятия отпечатков пальцев на основе звуковых ориентиров на Python:

https://github.com/dpwe/audifprint

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

Это может соответствовать только одному и тому же треку, поскольку оно основано на мелких деталях частот и разницы во времени - оно даже не будет соответствовать различным дублям, тем более кавер-версиям или мычанию.Насколько я понимаю, Midomi/SoundHound работает путем сопоставления шумов друг с другом (например,с помощью динамическое искажение времени), затем содержит набор созданных человеком связей между наборами мычаний и предполагаемым музыкальным треком.

Сопоставление жужжания непосредственно с музыкальной дорожкой («Запрос по напеванию») является постоянной исследовательской проблемой поиска музыкальной информации, но все еще довольно сложной.Вы можете увидеть тезисы по ряду систем, оцененных в прошлом году на Результаты MIREX 2013 QBSH.

MFCC, извлеченный из музыки, очень полезен для поиска сходства тембров между песнями.чаще всего это используется для поиска похожих песен.Как отметил Даррен, Marsyas — это инструмент, который можно использовать для извлечения MFCC и поиска похожих песен путем преобразования MFCC в одно векторное представление.

Помимо MFCC, Rhythm также используется для поиска сходства песен.В журнале представлено немного статей. Мирекс 2009

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

Тот Самый Проект MusicBrainz поддерживает такую базу данных.Вы можете делать запросы к нему на основе отпечатка пальца.

Проект существует уже некоторое время и в прошлом использовал разные отпечатки пальцев.Видишь здесь для составления списка.

Последний отпечаток пальца, который они используют, - это Акустид.Есть тот самый Хромапринт библиотека (также с привязками Python), где вы можете создавать такие отпечатки пальцев.Вы должны предоставить ему необработанные PCM-данные.

Недавно я написал библиотеку на Python, которая выполняет декодирование (используя FFmpeg) и предоставляет такие функции, как генерация отпечатка AcoustID (используя Chromaprint) и другие вещи (также для воспроизведения потока через PortAudio).Видишь здесь.

Прошло много времени с тех пор, как я в последний раз занимался обработкой сигналов, но вместо понижающей дискретизации вам следует взглянуть на представления в частотной области (например, БПФ или ДКП).Затем вы можете создать своего рода хэш и найти в базе данных песню с этой последовательностью.

Сложность заключается в том, чтобы сделать этот поиск быстрым (возможно, некоторые статьи по поиску генов могут представлять интерес).Я подозреваю, что iTunes также обнаруживает инструменты, чтобы сузить поиск.

Я читал статью о методе, с помощью которого определенная служба поиска музыкальной информации (имена не упоминаются) делает это - путем расчета кратковременного преобразования Фурье по образцу аудио.Затем алгоритм выделяет «пики» в частотной области, т.е.временные положения и частоты, которые имеют особенно большую амплитуду, и использует время и частоту этих пиков для генерации хеш-функции.Оказывается, хеш имеет на удивление мало коллизий между различными выборками, а также выдерживает потерю примерно 50% пиковой информации.....

В настоящее время я разрабатываю систему поиска музыки, используя ActionScript 3.Идея состоит в том, чтобы сначала проанализировать аккорды и отметить кадры (на данный момент это ограничено mp3-файлами), где частота резко меняется (меняется мелодия и игнорируются шумы).После этого я делаю то же самое с входным звуком и сопоставляю результаты с инвертированными файлами.Соответствующий определяет подходящую песню.

Для метода Акселя, думаю, не стоит волноваться по поводу запроса, пение это или просто мычание, так как вы не реализуете программу распознавания речи.Но мне интересен ваш метод, использующий хэш-функции.Не могли бы вы мне это объяснить?

Для запроса с помощью функции жужжания это сложнее, чем решение для снятия отпечатков пальцев. Сложность заключается в следующем:

  • как эффективно собирать базу данных мелодий в реальном приложении?Многие демонстрационные системы используют MIDI для сборки, но стоимость MIDI-решения крайне недоступна для компании.
  • как бороться с изменением времени, например, гул пользователя может быть быстрым или медленным.использовать DTW?да, DTW — очень хорошее решение для работы с временными рядами с временными отклонениями, НО оно требует слишком большой нагрузки на процессор.
  • как сделать индекс временных рядов?

Вот демонстрационный запрос, выполненный в рамках проекта с открытым исходным кодом: https://github.com/EmilioMolina/QueryBySingingHumming, может быть ссылкой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top