C/C++/Obj-C Real-time-Algorithmus, um festzustellen, Note (nicht die Tonhöhe) von Vocal Input
Will ich erkennen nicht die Tonhöhe, aber die pitch Klasse einer gesungenen note.
So, ob es C4 oder C5 ist nicht wichtig: Sie müssen sowohl erkannt als C.
Vorstellen, den 12 Halbtönen angeordnet auf einer Uhr Gesicht, mit der Nadel nach, um die pitch-Klasse. Das ist, was ich nach! im Idealfall würde ich mag in der Lage sein zu sagen, ob die gesungene note ist spot-on oder leicht ausschalten.
Dies ist nicht ein Duplikat des zuvor gestellten Fragen, wie es führt in die Zwänge, die:
- ist die Schallquelle ein einzigen menschlichen Stimme, hoffentlich mit vernachlässigbarer hintergrund-Interferenz (ich kann zwar die Notwendigkeit einer Auseinandersetzung mit dieser)
- die Oktave ist nicht wichtig, nur die pitch-Klasse
BEARBEITEN -- Links:
Echtzeit-Erkennung der Tonhöhe
Mit der Apple-FFT und Beschleunigen Framework
Ja, du bist das Rad neu erfinden. Warum nicht diese existieren für PC? Es sieht viel besser aus als Sing & Finden.
Off-topic: Hmm, gerade gefunden was neues die vielleicht besser, äh gut...
Off-topic: Hmm, gerade gefunden was neues die vielleicht besser, äh gut...
InformationsquelleAutor P i | 2010-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meisten der Frequenz-algorithmen, zitiert in anderen Antworten nicht gut für die Stimme. Um zu sehen, warum dies ist so intuitiv, beachten Sie, dass alle Vokale in einer Sprache, die gesungen werden können, an eine Besondere note. Obwohl alle diese Vokale haben sehr unterschiedliche Frequenzen, würden Sie alle haben zu sein erkannt als die gleiche note. Keine note-Erkennung Algorithmus für Stimmen berücksichtigt werden muss irgendwie. Darüber hinaus, der menschlichen Sprache und Lied enthält viele fricatives, von denen viele haben keine implizite pitch in.
In der Allgemeinen (nicht voice Fall) die Funktion die du suchst heißt chroma-feature und es ist ein ziemlich großer Körper der Arbeit auf das Thema. Es ist ähnlich bekannt wie die harmonic pitch class Profil. Die original-Referenz-Papier auf das Konzept Tayuka Fujishima "Echtzeit-Akkord Anerkennung der Musikalische Sound: Ein System Mit Common Lisp Music". Die Wikipedia-Eintrag hat eine übersicht über eine modernere Variante des Algorithmus. Es gibt eine Reihe von kostenlosen Papiere und MATLAB-Implementierungen der chroma-feature-Erkennung.
Aber, da Sie die Konzentration auf die menschliche Stimme, und da die menschliche Stimme natürlich enthält jede Menge Obertöne, was Sie sind praktisch auf der Suche für dieses spezielle Szenario ist ein Grundfrequenz Erkennung Algorithmus, oder f0-Erkennung-Algorithmus. Es gibt mehrere solcher algorithmen explizit abgestimmt für Sprach -. Auch, hier ist eine weithin zitiert Algorithmus, das funktioniert auf mehrere Stimmen auf einmal. Sie würden dann überprüfen Sie die Gefundene Frequenz gegenüber der gleichschwebenden Stimmung und dann finden Sie den nächsten match.
Da ich vermute, dass du versuchst zu bauen, einen pitch detector und/oder Korrektor a la Autotune, die Sie verwenden möchten, können M. Morise ausgezeichnete WELT Implementierung, die es erlaubt, schnell und gute Erkennung und änderung von f0 auf voice-streams.
Schließlich, bewusst sein, dass es nur ein paar vocal-pitch-Detektoren, die gut innerhalb des vocal fry registrieren. Fast alle von Ihnen, darunter WELT -, nicht auf vocal fry sowie sehr niedrigen Stimmen. Eine Reihe von Abhandlungen beziehen sich auf vocal fry als "knarrende Stimme" und entwickelte spezielle algorithmen helfen mit, die Art von Stimme, die input-spezifisch.
InformationsquelleAutor johnwbyrd
Siehe meine Antwort hier für immer glatte FREQUENZ-Erkennung: https://stackoverflow.com/a/11042551/1457445
Soweit schnappen Sie diese Frequenz auf die nächstgelegene note -- hier ist eine Methode, die ich erstellt für meine tuner-app:
Diese Rückkehr der MIDI-Noten-Wert (http://www.phys.unsw.edu.au/jw/notes.html)
Um eine Zeichenfolge, die aus diesen MIDI-Noten-Wert:
Ein Beispiel für die Umsetzung der pitch-Detektion mit Ausgang glätten, betrachten Sie musicianskit.com/developer.php
440.0 für die meisten Orchester-Zwecke. Check out wikipedia-Eintrag auf pitch standards - en.wikipedia.org/wiki/A440_(pitch_standard)
Vielen Dank, ich freue mich auf Ihre Autokorrelation Beispiel-Projekt, wie sieht es Griff Rauschen vom mic-Erkennung?
InformationsquelleAutor Kpmurphy91
Pitch ist eine menschliche psycho-Wahrnehmungs-Phänomene. Peak Frequenzgang ist nicht das gleiche wie entweder pitch oder pitch-Klasse. FFT und DFT-Methoden werden nicht direkt am Spielfeld, nur die Frequenz. Weder wird die zero-crossing-Messungen funktionieren gut für die menschliche Stimme zu Quellen. Versuchen Sie, AMDF, ASDF, Autokorrelation oder cepstral-Methoden. Es gibt auch viele wissenschaftliche arbeiten zu dem Thema pitch-Schätzung.
Es ist eine weitere lange Liste von pitch estimation algorithmen hier.
Bearbeitet zudem: Apple SpeakHere und aurioTouch Beispiel-apps (verfügbar für iOS dev center) enthalten Beispiel-source-code für das abrufen von PCM-sample-Blöcke von den iPhone mic.
InformationsquelleAutor hotpaw2
Wenn Sie suchen, für die pitch-Klasse, sollten Sie einen Blick auf die chromagram (http://labrosa.ee.columbia.edu/matlab/chroma-ansyn/)
Können Sie auch einfach dectect die f0 - (mit so etwas wie YIN-Algorithmus) und zurück, das entsprechende Halbton, die meisten fundamental frequency estimation-algorithmen leiden Oktave Fehler
Ich glaube nicht, dass er wollte umkehren, Chromagram aber in der Tat gibt er eine freie Implementierung in matlab auf hist web-Seite
InformationsquelleAutor lizzie
Führen Sie eine Diskrete Fourier-Transform auf Proben Ihrer Eingangs-Wellenform, die dann die Summe der Werte entsprechen, die für gleichwertige Noten in anderen Oktaven. Nehmen Sie den größten Wert als die dominante Frequenz.
Können Sie wahrscheinlich feststellen, einige der bestehenden DFT-code in Objective C, der zu Ihren Bedürfnissen passt.
Die DFT ist ein Baustein, der in vielen pitch-Detektions-algorithmen, aber es ist kein Ersatz für eine echte pitch-Detektions-Algorithmus.
+1 für die Idee, aus der Summe der Werte z.B. alle C ' s.
hotpaw2, Könnten Sie näher erläutern, einen Kommentar abgeben? Ich habe mir das Spektrogramm einer weiblichen Stimme, und es scheint zu bestehen aus einer Grundfrequenz zusammen mit seinen Oberwellen. jetzt bin ich verwirrt...
InformationsquelleAutor Nick Johnson
Aufstellen von Informationen, wie ich es finden...
Pitch detection Algorithmus auf Wikipedia ist ein guter Ort, um zu starten. Es listet ein paar Methoden, die nicht für die Bestimmung der Oktave, das ist okay für meine Zwecke.
Eine gute Erklärung der Autokorrelation gefunden werden kann hier (warum nicht Wikipedia, die Dinge einfach so??).
punto! 😉 .....
InformationsquelleAutor P i
Schließlich habe ich den Verschluss auf diese, Dank diese Artikel von DSP-Dimension
Der Artikel enthält Quellcode.
Er im Grunde führt eine FFT. dann erklärt er, dass die Frequenzen nicht übereinstimmen spot on mit dem Zentrum der bin-Sie fallen im Abstrich über die nahe gelegenen Behältern in einer Art Glockenkurve. und er erklärt, wie extrahieren Sie die genaue Frequenz aus, diese Daten in einem zweiten Durchlauf (FFT als im ersten Durchgang).
der Artikel geht dann weiter, pitch-shift, ich kann Sie einfach löschen Sie den code.
beachten Sie, dass Sie liefern eine kommerzielle Bibliothek, die tut die gleiche Sache (und weit mehr) nur super optimiert. es gibt eine Kostenlose version der Bibliothek, die würde wohl alles tun, was ich brauche, obwohl ich da gearbeitet haben durch die iOS-audio-subsystem, könnte ich genauso gut umsetzen, es selbst.
für das Protokoll, ich fand eine alternative Möglichkeit, Sie zu extrahieren Sie die genaue Frequenz, die durch eine annähernd quadratische Kurve über der Lagerplatz und seine zwei Nachbarn hier. Ich habe keine Ahnung, was ist die relative Genauigkeit zwischen diesen beiden Ansätzen.
InformationsquelleAutor P i
Wie andere erwähnt haben, sollten Sie eine pitch-Detektions-Algorithmus. Da, der Boden ist gut abgedeckt werde ich auf ein paar Einzelheiten Ihrer Frage. Sie sagte, dass Sie suchen, für die pitch-Klasse der Hinweis. Jedoch, den Weg zu finden, dies ist die Berechnung der Frequenz der note, und verwenden Sie dann eine Tabelle zu konvertieren, um die pitch-Klasse, Oktave und Cent. Ich weiß nicht von irgendeiner Weise zu erhalten, die pitch-Klasse, ohne dabei die Grundfrequenz.
Benötigen Sie ein Echtzeit-pitch-Detektions-Algorithmus. In der Bewertung der algorithmen achten Sie auf die Latenz impliziert jeder Algorithmus, verglichen mit der Genauigkeit, die Sie wünschen. Obwohl einige algorithmen, die besser sind als andere, grundsätzlich müssen Sie Handel der eine für den anderen und können nicht wissen, die beiden mit Sicherheit -- ähnlich wie die heisenbergsche Unschärferelation. (Wie können Sie wissen, die note ist C4, wenn nur ein Bruchteil eines Zyklus gehört hat?)
Ihre "Glättung" der Ansatz ist äquivalent zu einem digital-filter, die verändern die Frequenz-Charakteristik der Stimme. Kurz gesagt, kann es stören mit Ihren versuchen zur Schätzung der Tonhöhe. Wenn Sie ein Interesse in digitalen audio -, digitalen Filter sind grundlegende und nützliche tools in diesem Bereich, und ein faszinierendes Thema neben. Es hilft, einen starken mathematischen hintergrund, Sie zu verstehen, aber die Sie nicht unbedingt benötigen, um die grundlegende Idee.
Auch, Ihre zero-crossing-Methode ist eine einfache Methode zur Abschätzung der Periode einer Wellenform und damit die Tonhöhe. Es kann auf diese Weise getan, aber nur mit einer Menge von Heuristiken und fine-tuning. (Im wesentlichen, die Entwicklung einer Reihe von "Kandidaten" - Plätze und versuchen zu schließen, die dominante. Eine Menge von speziellen Fällen entstehen wird, zu verwechseln. Auf die schnelle ist die less 'N'.) Sie finden es viel einfacher zu beginnen mit einem " frequency domain pitch-Detektions-Algorithmus.
InformationsquelleAutor jbarlow
wenn Sie neu Anfänger kann dies sehr hilfreich sein. Es wird sowohl auf Java und IOS.
dywapitchtrack für ios
dywapitchtrack für java
InformationsquelleAutor ugur