2009-09-23 4 views
9

Я пытаюсь выполнить детекцию основного тона в реальном времени с использованием C++. Я тестирую некоторый код от performous (http://performous.org/), потому что все остальное не сработало для меня. Я точно знаю, что это работает, но я просто не могу заставить его работать. Я пробовал это в течение нескольких недель, и я не смог получить код обнаружения тональности.Обнаружение тангажа в реальном времени с использованием FFT

+5

«не может работать» означает ??? (не будет компилироваться? не запускается?) превращает ваш компьютер в пламя?) –

+0

компилирует, но выводит частоты от 0 до 1024 – Niall

+0

и что не так? Средний C составляет 440 Гц, поэтому диапазон кажется разумным, если вы пробовали свой микрофон. Какие частоты вы ожидаете? – AShelly

ответ

10

Вместо использования микрофонного микрофона вы должны создать данные известной частоты и запустить их через программу и посмотреть, приведет ли он вам правильный результат. Затем вы можете добавить к нему гармоники и посмотреть, работает ли это. Данные реального мира слишком переменны для первоначального тестирования.

1

Исполняемый аудиокодек имеет некоторые оптимизации, пределы частоты и эвристики, которые делают его пригодным только для пения (и других аналогичных тонов). Оптимальный диапазон составляет около 80-600 Гц.

1

C/C++/Obj-C Real-time algorithm to ascertain Note (not Pitch) from Vocal Input

Проверьте принятый ответ на эту ссылку.

Я искал SO для ответа на эту проблему, и это самый полезный ресурс, который я нашел.

Оказывается, что Performous использует этот алгоритм, но это трудно сделать из Performous кода

EDIT: Я, наконец, удалось рабочее решение. напишите мне, если вы заинтересованы в sunfish | gmail | c0m