PitchDetector für OS X

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PitchDetector für OS X

    Hallo Leute,

    ich habe unter folgender URL (demetrimiller.com/2011/01/25/pitch-detection-in-ios-4-x/) einen schönen PitchDetector für iOS gefunden, der mir anzeigt welche Frequenzen über das Mikrofon aufgenommen werden. Ich versuche seit längerer Zeit dieses Projekt auch auf OS X zum Laufen zu bringen, doch irgendwie ist das schwerer als gedacht :)

    Ich habe den PitchDetector nochmal in ein neues XCode-Project gepackt und das hier (dropbox.com/s/dymzj1ag48l595j/PitchDetectOSX.zip) als Datei hochgeladen. Das Original-Projekt findet sich unter github.com/irtemed88/PitchDetector.


    Irgendwie wird der InputCallback "RenderFFTCallback" nicht mehr angesprochen.


    Ich hoffe sehr, dass ihr mir helfen könnt.


    Viele Grüße,
    Hendrik
  • Wow - kann es sein, dass der Code keinen einzigen Fehler abfängt? Geh' mal im Debugger in -createAUProcessingGraph (RIOInterface) und schau' auf die Fehlermeldungen - da erlebst Du ein Feuerwerk. Der Callback wird wahrscheinlich nicht aufgerufen, weil es gar nicht erst zu einem funktionierenden AUGraph kommt.
    Multigrad - 360°-Produktfotografie für den Mac
  • Hallo mattik,


    Vielen Dank für deine Antwort.

    Ich habe den Code auf Basis von diesem Projekt (github.com/alexbw/novocaine) nochmal geändert und jetzt scheint das "input device" richtig erkannt zu werden. Außerdem wird jetzt auch der Callback aufgerufen.

    Leider werden die Frequenzen noch nicht richtig ausgegeben. Manchmal erscheinen ganz am Anfang verschiedene Frequenzen mit unterschiedlichen bin-Werten, doch nach kurzer Zeit wird dann nur noch "Dominant frequency: -21.533203 bin: -1 " ausgegeben.


    Hast du irgendeine Idee woran das liegen könnte?

    dropbox.com/s/dymzj1ag48l595j/PitchDetectOSX.zip


    Edit:

    In RIOInterface.mm in Zeile 414

    float curFreq = MagnitudeSquared(outputBuffer, outputBuffer[i+1]);

    wird die Frequenz berechnet. Nach kurzer Zeit ist sowohl outputBuffer[i] als auch outputBuffer[i+1] gleich 0.

    Aber, wieso?

    Viele Grüße,
    Hendrik

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hefowe ()

  • Deine Buffer sind alle 0 - da kann eine FFT halt nichts rausrechnen. Ich habe in dem Code nicht weiter gesucht, weil ich Novocaine sehr unübersichtlich finde - das sieht alles wild zusammenkopiert aus und tut jede Menge unnötiges Zeug. Zudem kompiliert das Ding nirgendwo ohne Warnungen, da hat man doch gleich keine Lust mehr. Ich habe mal ein Beispiel (auf anderer Codebasis - finde ich übersichtlicher) drangehängt, das funktioniert - zumindest bei mir.
    Multigrad - 360°-Produktfotografie für den Mac