Алгоритмы обнаружения аккордов?
Я разрабатываю программное обеспечение, которое зависит от обнаружения музыкальных аккордов. Я знаю некоторые алгоритмы определения высоты тона, методы, основанные на кепстральном анализе или автокорреляции, но они в основном сосредоточены на распознавании монофонического материала. Но мне нужно работать с каким-то полифоническим распознаванием, то есть несколькими шагами одновременно, как в аккорде; кто-нибудь знает какие-то хорошие исследования или решения по этому вопросу?
В настоящее время я разрабатываю некоторые алгоритмы, основанные на БПФ, но если у кого-то есть идея по некоторым алгоритмам или методам, которые я могу использовать, это будет очень полезно.
Ответы
Ответ 1
Это неплохой проект с открытым исходным кодом:
https://patterns.enm.bris.ac.uk/hpa-software-package
Он обнаруживает аккорды на основе хромаграммы - хорошее решение, разбивает окно всего спектра на массив шаговых классов (размер: 12) с поплавковыми значениями. Затем аккорды могут быть обнаружены с помощью скрытой марковской модели.
.. должен предоставить вам все, что вам нужно.:)
Ответ 2
У автора Capo, программы транскрипции для Mac, есть довольно глубокий блог. В записи "Примечание по автоматическому табулированию" есть несколько хороших точек отскока:
Я начал исследовать различные методы автоматической транскрипции в середине 2009 года, потому что мне было интересно узнать, как далеко продвинулась эта технология и может ли она быть интегрирована в будущую версию Capo.
Каждый из этих алгоритмов автоматической транскрипции начинается с некоторого промежуточного представления аудиоданных, а затем переводит их в символическую форму (то есть, отмечает начало и длительность).
Здесь я столкнулся с некоторыми вычислительно дорогими спектральными представлениями (непрерывное вейвлет-преобразование (CWT), константа Q-преобразование (CQT) и др.). Я реализовал все эти спектральные преобразования, чтобы я мог также реализовать алгоритмы, представленные в работах читал. Это дало бы мне представление о том, будут ли они работать на практике.
У Capo есть впечатляющая технология. Отличительной особенностью является то, что его основной вид не является частотной спектрограммой, как большинство других аудиопрограмм. Он представляет звук как пианино с нотами, видимыми невооруженным глазом.
![]()
(источник: supermegaultragroovy.com)
(Примечание: жесткие заметки были нарисованы пользователем. Нечеткие пятна под ними - это то, что показывает Капо.)
Ответ 3
Значительное совпадение между обнаружением аккордов и обнаружением ключа, и поэтому вы можете найти некоторые из моих предыдущих ответов, чтобы этот вопрос был полезен, поскольку он имеет несколько ссылок на документы и тезисы. Получение хорошего полифонического распознавателя невероятно сложно.
Моя собственная точка зрения на это заключается в том, что применение полифонического распознавания для извлечения заметок, а затем попытка обнаружить аккорды из заметок - это неправильный способ сделать это. Причина в том, что это двусмысленная проблема. Если у вас есть два сложных тона ровно на октаву, то невозможно определить, есть ли одна или две ноты (если у вас нет дополнительного контекста, такого как знание гармонического профиля). Каждая гармоника C5 также является гармоникой C4 (и C3, C2 и т.д.). Поэтому, если вы попробуете основной аккорд в полифоническом распознавателе, вы, скорее всего, выберете целую последовательность заметок, которые гармонично связаны с вашим аккордом, но не обязательно записки, которые вы играли. Если вы используете метод определения высоты тона на основе автокорреляции, то вы увидите этот эффект достаточно четко.
Вместо этого я думаю, что лучше искать шаблоны, созданные некоторыми формами аккордов (Major, Minor, 7th и т.д.).
Ответ 4
См. мой ответ на этот вопрос:
Как я могу выполнить обнаружение тангажа в реальном времени в .Net?
Ссылка на эту статью IEEE в основном на то, что вы ищете: http://ieeexplore.ieee.org/Xplore/login.jsp?reload=true&url=/iel5/89/18967/00876309.pdf?arnumber=876309
Гармоники отбрасывают вас. Кроме того, люди могут найти основы в звуке, даже если фундаментального нет! Подумайте о чтении, но покрывая половину букв. Мозг заполняет пробелы.
Контекст других звуков в миксе и то, что было раньше, очень важно для восприятия заметок.
Ответ 5
Это очень сложная проблема с сопоставлением шаблонов, возможно подходящая для техники ИИ, например, для обучения нейронных сетей или генетических алгоритмов.
В принципе, в каждый момент времени вы догадываетесь, сколько нот играет, ноты, инструменты, которые воспроизводили ноты, амплитуды и продолжительность заметки. Затем вы суммируете величины всех гармоник и обертонов, которые генерируют все эти инструменты при воспроизведении на этом томе в тот момент в его конверте (атака, распад и т.д.). Вычтите сумму всех этих гармоник из спектра вашего сигнала, а затем минимизируйте разницу по всем возможностям. Распознавание образов шума/плуга/скручивания переходного шума/и т.д. в самом начале заметки также может быть важно. Затем сделайте некоторый анализ решений, чтобы убедиться, что ваш выбор имеет смысл (например, кларнет не внезапно превратился в трубу, играющую другую ноту и обратно 80 мс позже), чтобы минимизировать вероятность ошибки.
Если вы можете ограничить свой выбор (например, только 2 флейты играют только четвертные ноты и т.д.), особенно для инструментов с очень ограниченной энергией обертонов, это затрудняет задачу.
Ответ 6
Также http://www.schmittmachine.com/dywapitchtrack.html
Библиотека dywapitchtrack вычисляет высоту звукового потока в реальном времени. Шаг - основная частота сигнала ( "нота" воспроизводится или исполняется). Он выражается как поплавок в Гц.
И http://clam-project.org/ может немного помочь.
Ответ 7
Это сообщение немного устарело, но я подумал, что добавлю следующую статью к обсуждению:
Klapuri, Ансси; Многоязычный анализ полифонической музыки и речевых сигналов с использованием звуковой модели; IEEE TRANSACTIONS НА АУДИО, РЕЧЕ И ОБРАБОТКУ ЯЗЫКОВ, VOL. 16, NO. 2, ФЕВРАЛЬ 2008 255
Статья действует как обзор литературы по многокритериальному анализу и обсуждает метод, основанный на слуховой модели:
![введите описание изображения здесь]()
(Изображение взято из статьи. Я не знаю, должен ли я получить разрешение на его публикацию.)