Это точно, что я делаю здесь как в моем прошлом году проект :) кроме одной вещи, что мой проект об отслеживании подачи человеческого певческого голоса (и у меня нет робота для проигрывания мелодии)
самый быстрый способ, которым я могу думать, должен использовать библиотека BASS . Это содержит готовую к использованию функцию, которая может дать Вам данные FFT из регистрирующего устройства по умолчанию. Смотрите на "livespec" пример кода, который идет с БАСОМ.
Между прочим, необработанные данные FFT будут недостаточно для определения основной частоты. Вам нужен алгоритм такой как [1 117] Гармонический Спектр продукта для получения F0.
Другое соображение является источником аудиосигналов. Если Вы собираетесь сделать FFT и применить Гармонический Спектр продукта на него. Необходимо будет удостовериться, что вход имеет только один источник аудиосигналов. Если это будет содержать многочисленные источники такой как в современных песнях то будет ко многим частотам для рассмотрения.
Гармоническая Теория
Спектра продукта, Если входной сигнал является музыкальной нотой, то ее спектр должен состоять из серии пиков, соответствуя основной частоте с гармоническими составляющими в целочисленных кратных числах основной частоты. Следовательно, когда мы сжимаем спектр, неоднократно (субдискретизирующий), и сравниваем его с исходным спектром, мы видим, что самые сильные гармонические пики выстраиваются в линию. Первый пик в исходном спектре совпадает со вторым пиком в спектре, сжатом фактором два, который совпадает с третьим пиком в спектре, сжатом фактором три. Следовательно, когда различные спектры умножаются вместе, результат сформирует ясный пик в основной частоте.
Метод
Первый, мы делим входной сигнал на сегменты путем применения окна Hanning, где размер окна и размер транзитного участка даны как вход. Для каждого окна мы используем Кратковременное преобразование Фурье для преобразования входного сигнала от временного интервала до частотной области. После того как вход находится в частотной области, мы применяем Гармонический метод Спектра продукта к каждому окну.
HPS включает два шага: субдискретизация и умножение. Для субдискретизации мы сжали спектр дважды в каждом окне путем передискретизации: в первый раз мы сжимаем исходный спектр два и во второй раз, три. После того как это завершается, мы умножаем эти три спектра вместе и находим частоту, которая соответствует пику (максимальное значение). Эта конкретная частота представляет основную частоту того конкретного окна.
Ограничения метода HPS
Некоторые хорошие функции этого метода включают: это является в вычислительном отношении недорогим, довольно стойким к аддитивному и мультипликативному шуму и корректируемым к другому виду исходных данных. Например, мы могли изменить количество сжатых спектров для использования, и мы могли заменить спектральное умножение спектральным дополнением. Однако, так как человеческое восприятие подачи является в основном логарифмическим, это означает, что низкие передачи могут быть прослежены менее точно, чем высокие передачи.
Другая серьезная нехватка метода HPS состоит в том, что это, его разрешение только так же хорошо как длина FFT, раньше вычисляло спектр. Если мы выполняем короткий и быстрый FFT, мы ограничены в количестве дискретных частот, которые мы можем рассмотреть. Чтобы получить более высокое разрешение в нашем выводе (и поэтому видеть меньше зернистости в нашем выводе подачи), мы должны взять более длинный FFT, который требует большего количества времени.
Просто комментарий: фундаментальная гармоника может также отсутствовать в (гармоническом) звуке, это не изменяет воспринятую подачу. Как предельный случай, если Вы берете прямоугольную волну (говорят, примечание C#) и полностью подавляют основную гармонику, воспринятым примечанием является все еще C#, в той же октаве . В некотором смысле, наш мозг может компенсировать отсутствие некоторых гармоник, даже первое, когда это предполагает примечание. Следовательно, для обнаружения подачи с методами частотной области необходимо принять во внимание весь гармоники (локальные максимумы в величине преобразования Фурье) и извлечь своего рода "наибольший общий делитель" их частот. Обнаружение подачи не является тривиальной проблемой вообще...
DAFX имеет приблизительно 30 страниц, выделенных для подачи обнаружения с кодом Matlab и примерами.
Автокорреляция - http://en.wikipedia.org/wiki/Autocorrelation
пересечение Нуля - http://en.wikipedia.org/wiki/Zero_crossing (этот метод используется в дешевых тюнерах гитары)
Просто мысль - но необходимо ли обработать поток цифрового аудио, как введено?
В противном случае рассматривают использование символьного представления музыки (такой как MIDI). Передачи примечаний будут тогда указаны явно, и можно синтезировать звуки (и перемещения) соответствие подаче, ритму и многим другим музыкальным параметрам чрезвычайно легко.
, Если необходимо проанализировать поток цифрового аудио (mp3, wav, живой вход, и т.д.) принимают во внимание, что, в то время как обнаружение подачи простых монофонических звуков вполне совершенствуется, полифоническое обнаружение подачи является нерешенной проблемой. В этом случае можно найти мой ответ на этот вопрос полезный.
Вы пробовали статья Википедии об обнаружении подачи ? Это содержит несколько ссылок, которые могут быть интересны Вам.
, Кроме того, вот список приложений DSP и библиотек , где можно ввести по абсолютному адресу вокруг. Список только упоминает пакеты программного обеспечения Linux, но многие из них являются межплатформенными, и существует много исходного кода, на который можно посмотреть.
Просто к вашему сведению, обнаруживая подачу примечаний в монофонической записи в досягаемости самых опытных DSP людей. Обнаружение передач всех примечаний, включая хорды и материал, намного более трудно.
Вам в основном нужен анализатор спектра. Вы смогли к FFT на записи аналогового входа, но много зависит от разрешения записи.
что сразу прибывает по моему мнению:
, я не уверен, если это будет работать на очень полифонические звуки - возможно, гуглящий для "FFT, анализа, то мелодия и т.д." возвратит больше информации о возможных проблемах.
отношения