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

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

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

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

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

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

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

Будут оценены некоторые примеры (желательно на Python или PHP). Спасибо заранее!

Ответ 1

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

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

Ответ 2

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

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

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

Процедуры ISMIR доступны онлайн. Здесь вы можете найти ценный материал: http://www.ismir.net/

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

Ответ 3

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

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

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

Ответ 4

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

https://github.com/dpwe/audfprint

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

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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

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

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

Ответ 9

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

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

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