Guten Abend, hier spricht ein blutiger Anfänger.
Also es geht um folgendes, ich hab zwar noch nicht viel praktische Erfahrung, wage mich aber trotzdem an folgendes Problem:
Es geht darum BPM eines Musikstücks zu messen, also einen Taktschlag. Das genügt fürs Erste als Vorinformation.
Hab auf Youtube was Schönes gefunden:
allerdings ist das nur für Musik geeignet, in der der Beat praktisch im Stück selbst per Drums angegeben wird, dann wird dieser niederfrequente Drumton rausgefiltert und gezählt.
Mir gehts darum für Soloinstrumente wie Geige und Klavier einen Takt rauszufinden. Bei der Geige reicht das Tonspektrum von etwa 100Hz bis etwa 2600Hz.
Meine Idee war jetzt folgende:
Man nutzt die Funktionen eines chromatischen Stimmgeräts.
Stellt euch z.B. ein Klavierstück vor. Jedesmal wenn eine neue Note kommt, bzw jedesmal wenn man auf eine Taste drückt, sei es auch dieselbe, wird vom Stimmgerät eine Änderung festgestellt. Man spielt z.B. ein A, dann ein E#. Es sind 2 Änderungen geschehen: einmal von "Nichts" auf A, dann von A auf E# bzw. wenn zwischen A und E# eine Pause eingelegt wird: von "Nichts" auf E#.
Diese beiden Änderungen sind praktisch meine Bewegung die ich mit den Fingern mache. Ich betätige 2 mal ne Taste. Diese Änderungen wird auf einer Zeitleiste gespeichert. Diese Änderungen, die auf der Zeitleiste als Peaks erscheinen, stellen dann die "Beats" dar.
Was denkt ihr darüber? Es ist also der Schaltplan eines chromatischen Stimmgeräts nötig, und ein Schaltplan der die Änderungen wahrnimmt und kurzzeitig mit einer gewissen zeitlichen Auflösung speichert.
Das ist das eine Problem. Ich weiß nicht ob es ratsam ist, zu viel in einem einzigen Beitrag zu schreiben, ich hätte jetzt noch als nächstes konkrete elektrotechnische Fragen angesprochen, aber das sparen wir uns für später auf. Ich hab wiegesagt keine Ahnung wie ich das umsetzen soll, ich habe z.B. die naive Vorstellung, dass man den Tonspektrum einer Geige mit einer rein analogen Schaltung aus Tief und Hochpässen rausfiltern und vollständig abdecken kann.
Es wäre richtig cool wenn ihr mir da weiterhelfen wollt, und mir Tipps und Verweise gibt, mit denen ich mich weiterbilden kann bzw mir konkrete Vorschläge gibt.
Vielleicht schaff ich es so, meine Pläne durchzusetzen bevor das Studium anfängt (angehender Physikstudent).
Ich weiß als Anfänger tendiert man ein bisschen dazu, sich von Profis alles vormachen zu lassen. Deshalb würde ich mich über Verweise freuen, die das Thema betreffen, um selbständig weiterarbeiten zu können. In Moment bin ich nur am rumüberlegen und hab noch nichts handfestes.
Danke im Voraus
PS: sind eigentlich für meine Zwecke kenntnisse über Fourieranalyse nötig? Das Stimmgerät muss ja zwischen Grundfrequenz und Harmonische unterscheiden...
» allerdings ist das nur für Musik geeignet, in der der Beat praktisch im » Stück selbst per Drums angegeben wird, dann wird dieser niederfrequente » Drumton rausgefiltert und gezählt.
Außer der Information im Musikstück selbst hast du leider nichts, was du als Beat nutzen kannst.
Du müßtest die "Geschwindigkeit" von Tonänderungen rausfinden. Die Fourieranalyse wäre da ein übergreifendes Verfahren. Das andere Ende der Methodik wäre das messen aller einzelnen Frequenzen. Das geht einem 9€99 Gitarrenstimmgerät, wenn du nur einen Ton spielst. (was passiert eigentlich, wenn ich mehrere Saiten anschlage? - mal bei Gelegenheit testen)
Dann hast du mal eine volle 4/4 Note, anschließend einen Lauf mit 1/16 Noten oder schneller. Was ist der Takt?
Außerdem kann über einem langen Grundton/Akkord ein Lauf liegen.
Ich schätze, das ist ein Thema für die Diplomarbeit, aber kein Bastelthema vor dem Studium. Evtl Signalprozessor anwenden, Fourieranalyse ...
Ich würde mir mal 2..5 verschiedene Musikstücke verschiedener Gattungen (Geigensolo, Rimski Korsakow Hummelflug als einfaches Beispiel, Ritt der Walküren .. etc) mal in der Fourieranalyse ansehen.
Findet man keine Beispiele außer der U-Musik mit harten Beats?
Aus einem Geigensolo wird es schwierig, die "Beats" rauszulösen.
» PS: sind eigentlich für meine Zwecke kenntnisse über Fourieranalyse nötig?
Macht ein passendes Programm und die Soundkarte Wäre übrigens ein sinnvoller Ansatz, um mal Mozart auf dem Schirm zu sehen. Unterschiedliche Auswertestrategien kann man dann immer noch versuchen - oder Strategien überhaupt.
Hallo,
ich würde über einen etwas anderen Ansatz nachdenken: Die verschiedenen Takte liegen ja in einem relativ eng eingrenzbaren Frequenzbereich. Da würde ich jetzt den langsamsten zu erfassenden (grund-)Takt wählen, und den Taktzyklus in einzelne Bereiche einteilen, kürzer wie die höchste zu erwartende Taktzahl. Dann nach Amplituden Maximum und Abstand erfassen und "einsortieren". So sollte man eine 2-dimensionale Darstellung bekommen, in der sich die Messwerte an bestimmten Orten häufen - aus diesem Bild liesse sich u. U. auf den Takt zurückschliessen. Um z. B. Geige oder Blasinstrumente mit zu integrieren, wären Einsatz und Ausklang mit zu erkennen. Die 3. Dimension könnte dann die Tonhöhe sein. Die Tonlänge kann dann ein mehrfaches des Grundtaktes betragen.
nur so eine Idee -
Viele Grüsse
Hartwig
Wie kann man abgesehen von der Taktbestimmung die 2.dimensionale Darstellung der Peaks elektronisch umsetzen?
Also nur die Äderungen der Töne/Noten im Musikstück. Dabei ist die Tonhöhe auch egal, bzw. ob grade 2 oder mehrere Töne gleichzeitig gespielt wurden oder sich überlappen.
Das Ziel wäre also eine 2D- Darstellung mit einer Timeline als X-achse und auf der Y-achse erscheinenden Änderungen bzw. Tasten-/Tonanschläge.
Hallo,
das Ziel wäre für mich nicht ein 2D-Darstellung. Dies wäre nur eine temporäre Präsentation der Daten, um daraus den Takt zu ermitteln. Die Darstellung wäre z.B. die Intervall-Länge auf der Zeitachse und die Anzahl je Intervall auf der Y-Achse.
Allerdings wird man damit noch nicht die volle Taktinformation bekommen - es wird noch eine weitere Mustererkennung erforderlich werden. Wie gesagt - das könnte ein Denkansatz sein. Ob die erfassten Daten eine derartige Auswertung zulassen, ist eine andere Frage. Aber wie HWS schon sagte, das hat eher den Umfang einer Diplomarbeit und ist keinesfalls eine Bastelei die man ohne erheblichen Messaufwand hinbekommt. Unser Gehör basiert auf einer recht komplexen Signalverarbeitung. Details in der Musik, die uns vielleicht sehr dominant erscheinen, können elektronisch u. U. schwer erfassbar sein. Also sind auch viele Vorversuche angesagt. Und schlußendlich ist es eine Frage der Mittel und Ausrüstung, die Dir zur Verfügung stehen. Hier: http://www.mikrocontroller.net/topic/279219 findest Du übrigens auch was zum Thema....
Grüsse
Hartwig
Nagut, vergessen wir was bisher gesagt wurde. Ich eröffne hiermit einen neuen Thread:
Ich möchte garkeinen Takt (mehr) bestimmen. Mir geht es nur um diese 2D Darstellung. Im Prinzip will ich am Ende ein Array,das gefüllt ist mit 0 und 1, und das z.B. 3 oder 4 Takte umfasst, also nur einpaar Sekunden. Dieses Array soll meinetwegen in Millisekunden-Genauigkeit sein, also wenn eine Musikpassage die aus 4 Takten besteht,z.B. 12 Sekunden dauert, dann sind das 12000 Array-Slots die 0 und 1 beinhalten. Überall wo ne 1 ist bedeutet: Hier hat eine Änderung stattgefunden, durch nen Notenschlag, oder durch das hizukommen und Überlappen durch eine neue Noten etc.
Ich denke das ist wirklich einfacher als eine richtige Audioanalyse im Rahmen einer Diplomarbeit. Meiner Meinung nach sollte das machbar sein, auch wenn es Präzisionsarbeit erfordert, denn wie schon gesagt wurde unterscheidet sich elektronische Audiowahrnehmung von der Menschlichen in ihrer Genauigkeit und Zuverlässigkeit.
Was ich dann später mit diesem Array anfange ist eine andere Sache, dazu kommen wir dann noch. Mein Plan ist nicht, aus diesen Array einen Takt zu extrahieren, sondern in Wirklichkeit will ich einen Referenztakt mit den Informationen aus dem Array vergleichen. Dazu aber später mehr. Ich will nicht alles gleich am Anfang preisgeben.
» Ich möchte garkeinen Takt (mehr) bestimmen. Mir geht es nur um diese 2D Darstellung.
nicht sinnvolle Vereinfachung.
» ...und das z.B. 3 oder 4 Takte umfasst,
Dazu müßtest du die Takte aber schon festgestellt / berechnet haben
Mach doch erstmal eine eindimensionale Fourieranalyse. Mir einer Soundkarte und erhältlicher Software einfach und kostenlos zu bewerkstelligen.
Und dann das ganze zweidimensional darstellen.
Per Autokorrelation (oder wasauchimmer) von hinten nach vorn die Takte aufreihen.
Jedenfalls sollte in jeder Zeile 4 gleiche Ereignisse auftreten (bei 4/4 Takt).
Ich weiss es auch nicht, sonst hätt ich dieses Gerät schon gebaut und diese Doktorarbeit geschrieben.
» eine Musikpassage die aus 4 Takten besteht,z.B. 12 Sekunden dauert..
Ein Metronom, dass 12 Sekunden für 4 Takte braucht ..
M. M. = Mälzels Metronom oder BPM = Beats per minute, das werden nie und nimmer 12 s, selbst bei Larghissimo.
Aber wie auch immer, versuche erstmal so eine 2D Darstellung, indem du die FFT mit einer Soundkarte erstmal beliebig zerhackst (und von vorn nach hinten stückchenweise auf dem Schirm darstellst) und dann die Trennstellen so berechnest, dass es eine aufgeräumte Darstellung mit 4 markanten Linien (bei 4/4) auf der Zeitachse ergibt.
» sind das 12000 Array-Slots die 0 und 1 beinhalten. Überall wo ne 1 ist » bedeutet: Hier hat eine Änderung stattgefunden, durch nen Notenschlag, oder » durch das hizukommen und Überlappen durch eine neue Noten etc.
Dazu müßtest du aber erstmal den Algorithmus zur Änderung des Notenschlages entwickelt haben ...
Und von den Analogwerten der FFT zu einer digitalen 0/1 in deinem Array ist es auch noch ein weiter Weg.
PS: zurückgehaltene "Geheiminformationen" des Projektes führten bisher unabänderlich zum Absturz der Forumsdiskussion.
"» unabänderlich zum Absturz der Forumsdiskussion."
anscheinend wahr. Also es geht um folgendes: Die Taktart wird per Benutzer angegeben, und eine Referenz-BPM. Diese beiden Informationen kriegt das Programm zusätzlich. Das macht es einfach. Das Programm weiß also, wie lang ein Takt ist (unter der Voraussetzung dass in jedem Takt pragmatisch eine feste Anzahl von Metronomschlägen stattfindet, beim 4/4 Takt 4 Schläge, bei 3/4 3, bei 2/4 2 usw...)
Übrigens: Wenn bei einem 4/4 Takt 4 Takte 12 Sekunden dauern, dann ist die BPM, vorausgesetzt in jedem Takt finden 4 Metronombeats statt, 60 BPM. Das ist eine allgemeine Zusammensetzung und Geschwindigkeit, keine festgelegten musikalischen Anweisungen.
Und was willst du dann noch aus der Musik "rausholen"? Ob der Interpret sauber den Takt einhält?
Stell einfach die nach Takt zerhackte Fourierdarstellung in 2D dar und schau, was bei rumkommt.
Wer das noch nicht gemacht hat (haben wohl die wenigsten) kann auch noch nicht das Ergebnis voraussagen.
» » und eine Referenz-BPM. » » Und was willst du dann noch aus der Musik "rausholen"? Ob der Interpret » sauber den Takt einhält? »
korrekt
Wie mach ich das mit der FFT? Gibts dafür Tools, oder muss ich dafür ein custom Programm in Matlab schreiben?
EDIT: Also im Prinzip braucht man nichts anderes als ein Stimmgerät, dass schnell reagiert, oder?
Problem ist aber wie schon von euch erwähnt wurde, wie ein Stimmgerät auf mehrere Noten gleichzeitig reagiert. Ein normaler Tuner wie ich ihn besitze, schwankt etwas. Wenn ich 2 Saiten anstreiche, dann wird natürlich aus programmtechnischen Gründen nur eine Note angezeigt,manchmal die eine, manchmal die andere, kommt auf die Intensitäten an. Inwiefern aber diese beiden Noten intern verarbeitet werden, das sieht man von außen ja nicht.
Auf einer Geige schafft man höchstens 6 Töne zu überlappen. Kommt auch
auf den Raum an, in dem gespielt wird. Können also etwas mehr als 6
sein.
Auf einem Klavier ist es mit Abstand mehr.
Es geht aber nicht unbedingt darum, einen zweiten oder dritten
hinzugekommenen Ton unbedingt als solchen zu identifizieren. Es geht nur
darum zwischen Vorher und Nachher zu unterscheiden. Vorher war es 1 Ton,
aufeinmal mischt sich was dazwischen und die Summe der beiden Töne
Nachher ist signifikant anders als Vorher.
» Wie mach ich das mit der FFT? Gibts dafür Tools,...
gib mal "soundkarte fft" in die Suchmaschine ein.
Welches Programm da am besten geeignet ist bzw welche Ergebnisse sich relsatv einfach weiterverarbeiten lassen - mußt du mal raussuchen...
Da es auch kostenfreie Programme gibt, würde ich einfach mal sehen, was dabei rauskommt und dann weiter entscheiden.
Ich weiß nicht, ob hier jemand schon in der Richtung gearbeitet hat. Zumindest die Autoren der FFT Software haben das, aber ob die hier mitlesen bzw dir helfen?
Also wenn es um Spektralanalyse geht, würde Audacity ausreichen. Allerdings wollen wir ja keine Spektralanalyse die über Sekunden geht, sondern eine Analyse eines 1 Millisekunden-Fensters. Und das für den gesamten Soundabschnitt. richtig? Bei Audacity müsste ich das ja per Hand machen, bei 12 Sekunden sind das 12000 Fenster
» wollen wir ja keine Spektralanalyse die über Sekunden geht, sondern eine » Analyse eines 1 Millisekunden-Fensters.
Allerdings immer wieder ein neues Fenster.
» bei 12 Sekunden sind das 12000 Fenster
Daher die Anforderung, die Daten gut weiterverarbeiten zu können.
Ob das Konzept mit einem Array von Nullen und Einsen so optimal ist, weiß ich nicht. Du willst jede Millisekunde sehen, ob sich im Spektrum was geändert hat?
Du weißt, daß Abtastrate und Frequenzauflösung von FFT direkt Proportional sind? Wieviele Frequenzen willst du innerhalb dieser Millisekunde feststellen? wie hoch muß dann die Abtastrate sein bzw wie klein der Sampleabstand auf der Zeitlinie?