Как я могу в реальном времени определять высоту тона в .Net? - PullRequest
2 голосов
/ 21 ноября 2010

Я хочу создать программу, которая обнаружит ноту, которая воспроизводится перед микрофоном. Я тестирую функцию FFT Naudio, но с тестами, которые я сделал в Audacity, кажется, что FFT не определяет правильно высоту тона. Я играл на С5, но самый высокий пик был на Е7.

Я изменил первый выпадающий список в окне частотного анализа на «расширенную автокорреляцию», и после этого самый высокий пик был на уровне C5.

Я погуглил "расширенную автокорреляцию" и мне не повезло.

Ответы [ 3 ]

2 голосов
/ 21 ноября 2010

Скорее всего, вас сбили гармоники.Вы пробовали тестировать синусоидальной волной, чтобы увидеть, находится ли БПФ вашего NAudio на стадионе?

См. Эти ссылки: http://cnx.org/content/m11714/latest/

http://www.gamedev.net/community/forums/topic.asp?topic_id=506592&whichpage=1&#3306838

Строка 48 вSpectrum.cpp в исходном коде Audacity кажется близким к тому, что вы хотите.Они также ссылаются на документ IEEE Толонена и Карьялайнена .

1 голос
/ 21 ноября 2010

Самым высоким пиком в звуковом спектре не обязательно является музыкальная высота, которую воспримет человек, особенно в звуке с сильными обертонами.Это связано с тем, что высота звука - это феномен человеческого восприятия, поэтому мозг часто определяет частоты, которых нет даже в форме волны.

Методы автокорреляции оценки частоты или высоты тона (грубо говоря, определение того, насколько далеко друг от друга повторяется даже забавный и / или несинусоидальный сигнал), обычно лучше соответствует тому, что человек назвал бы тоном,Причиной различных улучшений алгоритма автокорреляции является то, что простая автокорреляция найдет почти бесконечное число повторяющихся длин волн (например, если она повторяется каждые 1 секунду, она также повторяется дважды каждые 2 секунды и т. Д.) Так что хитрость заключается в том, чтобы взвесить корреляциюкаким-то образом статистически лучше соответствовать тому, что человек догадывается о той же форме волны.

1 голос
/ 21 ноября 2010

Что ж, если вы можете жить с GPLv2, почему бы не взглянуть на исходный код Audacity?

http://audacity.sourceforge.net/download/beta_source

...