Обнаружение основной частоты

Там этот технологический фестиваль в ИИТ-Бомбее, Индия, где они проводят мероприятие под названием "Артботы", где мы должны проектировать артботов с художественными способностями. У меня была идея о музыкальном роботе, который берет песню в качестве входных данных, обнаруживает ноты в песне и воспроизводит ее на фортепиано. Мне нужен какой-то метод, который поможет мне вычислить высоты нот песни. Любая идея/предложение о том, как это сделать?

Ответ 1

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

Самый быстрый способ, который я могу придумать, - использовать библиотеку BASS. Он содержит готовую к использованию функцию, которая может дать вам данные FFT из устройства записи по умолчанию. Взгляните на пример кода "lifpec", который поставляется с BASS.

Кстати, необработанных данных FFT недостаточно для определения основной частоты. Вам нужен алгоритм, например Harmonic Product Spectrum, чтобы получить F0.

Еще одно соображение - источник звука. Если вы собираетесь делать FFT и применять на нем спектр гармонических продуктов. Вам нужно будет убедиться, что на входе имеется только один источник звука. Если он содержит несколько источников, например, в современных песнях, будет рассмотрено много частот.

Теория спектра гармонических продуктов

Если входной сигнал является музыкальной нотой, то его спектр должен состоять из серии пиков, соответствующих основная частота с гармоническим компоненты с целыми кратными основная частота. Следовательно, когда мы сжимают спектр несколькими times (downsampling) и сравнить его с исходным спектром, мы можем видеть что самая сильная гармоническая пиковая линия вверх. Первый пик в оригинале спектр совпадает со вторым пика в спектре, сжатом фактор двух, совпадающий с третий пик в спектре сжатый в три раза. Следовательно, когда различные спектры умноженные вместе, результат будет формируют явный пик на фундаментальном частота.

Метод

Сначала мы делим входной сигнал на сегментов, применяя окно Ханнинга, где размер окна и размер хопа данный как вход. Для каждого окна, мы используем кратковременный фурье Преобразование для преобразования входного сигнала от временной области до частоты домен. Когда вход находится в частотной области, мы применяем Гармонический спектр каждое окно.

HPS включает два этапа: понижающая дискретизация и умножение. к вниз, мы сжимаем спектр дважды в каждом окне путем повторной дискретизации: в первый раз мы сжимаем первоначальный спектр на два и второй раз, тремя. Когда это завершено, мы умножаем три спектров и найти частота, соответствующая пику (максимальное значение). Этот конкретный частота представляет собой фундаментальную частота этого конкретного окна.

Ограничения метода HPS

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

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

from: http://cnx.org/content/m11714/latest/

Ответ 2

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

DAFX содержит около 30 страниц, посвященных определению высоты тона, с примерами и кодом Matlab.

Ответ 4

Попробуйте отслеживание шага YAAPT, которое обнаруживает основную частоту как в частотной, так и в частотной областях. Вы можете загрузить исходный код Matlab из ссылки и посмотреть пики на выходе FFT, используя часть спектрального процесса.

Пакет Python http://bjbschmitt.github.io/AMFM_decompy/pYAAPT.html#

Ответ 5

Вы пробовали Статья в Википедии об обнаружении тангажа? Он содержит несколько ссылок, которые могут вам интересны.

Кроме того, здесь список приложений и библиотек DSP, где вы можете сориентироваться. В списке упоминаются пакеты программного обеспечения Linux, но многие из них являются кросс-платформенными, и есть много исходного кода, на который вы можете смотреть.

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

Ответ 6

Просто мысль - но вам нужно обрабатывать цифровой аудиопоток в качестве входных данных?

Если нет, подумайте об использовании символического представления музыки (например, MIDI). Затем звуки нот будут указаны явно, и вы можете очень легко синтезировать звуки (и движения), соответствующие высоте, ритму и многим другим музыкальным параметрам.

Если вам нужно проанализировать цифровой аудиопоток (mp3, wav, live input и т.д.), помните, что, хотя определение высоты тона простых монофонических звуков довольно продвинуто, определение полифонического тона является нерешенной проблемой. В этом случае вы можете найти мой ответ на этот вопрос полезным.

Ответ 7

Для извлечения основной частоты мелодии из полифонической музыки вы можете попробовать подключаемый модуль MELODIA: http://mtg.upf.edu/technologies/melodia

Извлечение F0 всех инструментов в песне (отслеживание с несколькими F0) или их переписывание в заметки - еще более сложная задача. Как извлечение мелодии, так и музыкальная транскрипция по-прежнему являются открытыми исследовательскими проблемами, поэтому, независимо от используемого алгоритма/инструмента, не ожидайте получения идеальных результатов для.

Ответ 8

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

Алгоритм, который вы хотите использовать, будет зависеть от типа музыки, которую вы слушаете. Если вы хотите, чтобы люди подбирали пение, есть много хороших алгоритмов, разработанных специально для голоса. (Что там, где большая часть исследований.) Если вы пытаетесь подобрать конкретные инструменты, вам нужно быть немного более креативными. Голос-алгоритмы могут быть простыми, потому что диапазон голоса пения человека обычно ограничен примерно 100-2000 Гц. (Разговор гораздо более узкий). Однако основные частоты на фортепиано составляют около 27 Гц. до 4200 Гц, поэтому вы имеете дело с более широким диапазоном, который обычно игнорируется алгоритмами определения высоты тона голоса.

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

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

Ответ 9

Вам нужен анализатор спектра. Возможно, вы сможете выполнить БПФ при записи аналогового входа, но многое зависит от разрешения записи.

Ответ 10

что сразу приходит в голову:

  • отфильтровать очень низкие частоты (барабаны, басовая линия),
  • отфильтровать высокие частоты (гармоники)
  • FFT,
  • найдите пики на выходе FFT для мелодии

Я не уверен, если это работает для очень полифонических звуков - возможно, для Google для "БПФ, анализа, мелодии и т.д.", вернет больше информации о возможных проблемах.

рассматривает