Музыкальное распознавание и обработка сигналов

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

  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 года) белую книгу о методе Шазама. В этот момент они только в основном обнаружили спектрально-временные пики, а затем хэшировали пики. Я уверен, что эта процедура развилась.

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

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

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

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

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

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

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

https://github.com/dpwe/audfprint

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

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

Совпадение гула непосредственно с музыкальным треком («Query by humming») – постоянная исследовательская проблема в поиске музыки, но все еще довольно сложно. Вы можете увидеть тезисы для набора систем, оцененных в прошлом году на результатах MIBREX 2013 QBSH .

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

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

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

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

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

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

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

Последний отпечаток, который они используют, – AcoustId . Существует библиотека Chromaprint (также с привязками Python), где вы можете создавать такие отпечатки пальцев. Вы должны подать его необработанные данные PCM.

Недавно я написал библиотеку на Python, которая выполняет декодирование (используя FFmpeg), и предоставляет такие функции, как генерация отпечатка AcoustId (с использованием Chromaprint) и других вещей (также для воспроизведения потока через PortAudio). См. Здесь .

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

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

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