2009-09-23 13 views
9

Ich versuche Echtzeit-Tonhöhenerkennung mit C++ zu tun. Ich teste etwas Code von performous (http://performous.org/), weil alles andere für mich nicht funktioniert hat. Ich weiß sicher, dass das funktioniert, aber ich kann es einfach nicht zur Arbeit bringen. Ich habe das seit ein paar Wochen versucht, und ich konnte keinen Tonhöhenerkennungscode bekommen.Echtzeit-Tonhöhenerkennung mit FFT

+5

"kann nicht zur Arbeit" bedeutet ??? (wird nicht kompiliert? wird nicht ausgeführt? verwandelt Ihren Computer in einen Flammenball?) –

+0

kompiliert, aber gibt Frequenzen von 0 bis etwa 1024 – Niall

+0

und was ist los damit? Middle C ist 440 Hz, so dass dieser Bereich vernünftig erscheint, wenn Sie Ihr Mikrofon abtasten. Welche Frequenzen erwarten Sie? – AShelly

Antwort

10

Anstatt die Eingabe vom Mikrofon zu verwenden, sollten Sie Daten einer bekannten einzelnen Frequenz erstellen und diese durch das Programm laufen lassen und sehen, ob es Ihnen das richtige Ergebnis liefert. Dann können Sie Obertöne hinzufügen und sehen, ob das funktioniert. Real-World-Daten sind einfach zu variabel für den ersten Test.

1

Performous Audio-Code hat einige Optimierungen, Frequenzgrenzen und Heuristiken, die es nur für Gesang (und andere ähnliche Töne) geeignet machen. Die optimale Reichweite liegt bei 80-600 Hz.

1

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

Überprüfen Sie die akzeptierte Antwort auf diesen Link.

Ich habe SO für eine Antwort auf dieses Problem durchsucht, und dies ist die nützlichste Ressource, die ich gefunden habe.

Es scheint, dass Performous diesen Algorithmus verwendet, aber es ist schwer vom Performous Code

EDIT zu entziffern: ich endlich eine funktionierende Lösung geschaffen habe. E-Mail mich, wenn interessiert sunfish | gmail | c0m