Hi, ich bin ein Anfänger in der Audiokodierung und arbeite in einer Pitch-Tracking-DLL, mit der ich versuchen werde, eine Art Open-Source-Version des Videospiels Rocksmith als Lernerfahrung zu erstellen.
Bisher habe ich es geschafft, die FFT zu arbeiten, damit ich die Tonhöhenfrequenz (Hz) erkennen kann, indem ich einen Algorithmus verwende und die folgende Tabelle die Oktave (2. bis 6.) und die Note (C bis B) für gespielte Note.
Der nächste Schritt besteht darin, die Saite zu erkennen, damit ich den Bund bestimmen kann.
Ich habe darüber nachgedacht und in der Theorie kann ich damit arbeiten, ich werde wissen, wenn der Benutzer die richtige Note spielt, aber das Spiel könnte "Hack" sein, weil es das Hz nicht benutzen kann Erkennen, ob eine Note in der richtigen Zeichenfolge gespielt wird. Zum Beispiel ist 5. Saite + 1. Bund = C4 261.63Hz gleich 6. Saite + 5. Bund = C4 261.63Hz .
Die Wahrscheinlichkeit, dass ein Benutzer eine Note in der falschen Saite spielt und es richtig macht, ist gering, aber ich denke, es wäre wirklich gut, die Saite zu kennen, damit ich den Spielern ein Fehler-Feedback geben kann string (Wie Sie sollten eine Zeichenfolge nach oben oder unten gehen).
Weißt du, was ich tun kann, um die Saite zu erkennen? Vielen Dank im Voraus :)
[Bearbeiten]
Die Gitarre und die Saiten, die wir verwenden, beeinflussen das Timbre, so dass das Analysieren der Klangfarbe kein einfacher Weg ist, Saiten zu erkennen:
"Variationen in der Klangfarbe auf Ihrer Gitarre werden durch eine enorme Anzahl von Faktoren von Pickup Design und Position, die natürlichen Resonanzen und Dämpfung in Ihrer Gitarre aufgrund des verwendeten Holzes (das ist eine andere Art von Holz!) und produziert seine Konstruktion und Form, das Maß und Alter Ihrer Saiten, Ihre Spieltechnik, wo Sie die Saite bücken und zupfen, und so weiter. "
Ein einfacher FFT-Peak-Schätzer ist aufgrund vieler potentiell starker Obertöne kein guter Gitarrentondetektor / -schätzer. Es gibt robustere Tonhöhenschätzungsalgorithmen (Suchstapelüberlauf und DSP.stackexchange). Wenn die Spieler jedoch jede Saite auf ihren individuellen, sowohl offenen als auch gespielten, Instrumenten vorcharakterisieren müssen, könnte ein FFT-Fingerabdruck dieser Charakterisierungen in der Lage sein, die gleiche Note, die auf verschiedenen Saiten gespielt wird, auf einigen Gitarren zu unterscheiden. Die dickeren Saiten geben etwas unterschiedliche Energieverhältnisse in einigen der höheren Obertöne sowie verschiedene Mengen leichter Inharmonizität ab.
Das könnte ein bisschen spät sein, weil der Beitrag ein Jahr alt ist. Aber hier ist eine Lösung, die ich nach langer Recherche für die Tonhöhenerkennung einer Gitarre herausgefunden habe.
Dies ist, warum FFT nicht funktioniert:
Sie können FFT nicht verwenden, da das Ergebnis ein lineares Array ergibt und der Klang logarithmisch berechnet wird (exponentieller Abstand zwischen den Noten). Plus, FFT gibt Ihnen eine Reihe von Bins, in denen Ihre Frequenz sein könnte, es gibt Ihnen nicht das genaue Ergebnis.
Das ist, was ich vorschlage:
Benutze dywapitchtrack. Es ist eine Bibliothek, die einen Wavelet-Algorithmus verwendet, der direkt auf Ihrer Welle arbeitet, anstatt große Bins wie FFT zu berechnen.
Beschreibung: Die dywapitchtrack basiert auf einem maßgeschneiderten Algorithmus von sehr hoher Qualität: beide sehr genau (Genauigkeit & lt; 0,05 Halbtöne), sehr niedrige Latenzzeit (& lt; 23 ms) und Sehr niedrige Fehlerrate. Es wurde gründlich auf menschliche Stimme getestet. Es kann am besten als dynamischer Wavelet-Algorithmus (dywa) beschrieben werden:
DOWNLOAD: Ссылка
VERWENDUNG (C ++): Lege die .c und .h dorthin, wo du sie brauchst und importiere sie in dein Projekt
enthält die Header-Datei
%Vor%Wenn der Puffer voll ist (der Puffer muss eine Auflösung von 44100 und eine Länge von 2 haben, meins ist 2048):
%Vor%Und voilà, thePitch enthält genau das, was Sie brauchen. (zögern Sie nicht zu fragen, wenn etwas unklar ist)
Die anderen Antworten scheinen eine einfache Tonhöhenerkennungsmethode vorzuschlagen. Es ist jedoch etwas, was Sie erforschen müssen.
Vergleiche insbesondere die Obertöne des 5. Saiten 1. Bunds mit dem 6. Saitenzug 5. Bund. Sehen Sie sich nur 261.63 * 2, 261.63 * 3, * 4 usw. an. Versuchen Sie auch, 261.63 * 0.5 zu betrachten. Vergleichen Sie die Amplituden der beiden Signale bei diesen Frequenzen. Möglicherweise gibt es ein Muster, das erkannt werden könnte.
Tags und Links c# audio fft pitch-tracking guitar