Ergebnis 1 bis 18 von 18

Thema: Anhand der bpm (beats per minute) die ms-Dauer eines einzelnen Beats ermitteln

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #16
    Gut gut... nach dem ganzen Geschwätz würde ich folgenden Plan vorschlagen, um die ganze Sache recht einfach hinzubekommen:

    Dazu sollten die Audiodaten aber bereits decodiert in irgendeinem Buffer bereit liegen, auf den man Zugriff hat. Somit erspart man sich irgendwelche Prügeleien mit Audioformaten und die Decodierung wird ohnehin zum Abspielen benötigt. Da wahrscheinlich recht einfache elektronische Musik zum Einsatz kommt, sollten die Resultate brauchbar sein.

    Es gibt einen Parameter (zwischen 0 und 1), der als Grundlage für den Grenzwert fungiert. Den müsste man durch Ausprobieren so einstellen, dass die Resultate ausreichend sind.

    Durchgang 1: Du suchst das Maximum im Buffer. Einfach Array durchgehen und das Maximum merken.
    Durchgang 2: Das Maximum wird mit dem Parameter multipliziert. Dies bildet den Grenzwert. In einfacher elektronischer Musik kann man die Eigenschaft ausnutzen, dass die rhythmus-bestimmenden Anteile deutlich lauter sind als der Rest. Damit erspart man sich das Gefummel mit Frequenzen komplett und sucht einfach nur die Spitzen in den Rohdaten, die über dem Grenzwert liegen. In diesem Durchgang gehst du also wieder das Array durch und ignorierst alle Werte unterhalb vom Grenzwert. Beim Auftreten von Werten über dem Grenzwert suchst du eine Spitze. Wie man das macht, bleibt jedem selbst überlassen. Man kann es auf verschiedene Weisen machen, manche einfacher als andere und das Resultat wird besser oder schlechter. Eventuell rumprobieren. Ein erster Ansatz wäre, beim Durchgehen des Arrays den aktuellen Wert mit dem vorherigen zu vergleichen, wenn der vorherige über dem Grenzwert lag. Liefert der Vergleich einen starken Abfall, dann fügt man den Index in eine Auflistung der Spitzen ein. Nach dem Abfall muss erst wieder ein Anstieg erfolgen, damit die Möglichkeit einer Spitze gegeben ist.
    Aber dort kann man ein wenig herumspielen und probieren, bis die Resultate gut genug sind.
    Durchgang 3: Du gehst die Liste mit den Indices der Spitzen durch und rechnest daraus deren Zeiten aus (Index durch Abtastrate). Damit bekommst du eine Liste von Peaks mit Zeitangaben in Sekunden.


    Btw. ich hab vor einigen Jahren mal ein Progrämmchen entwickelt, welches angespielte Noten auf einem an den Line-In angeschlossenen Bass richtig erkennt. Sowohl die Zeit als auch den Notenwert. Weiterhin konnte es auch in Echtzeit Beats in Musik erkennen, die ein angeschlossenes Mikrofon etc. gerade aufnimmt. Hat ziemlich gut funktioniert und der PeakDetector war ähnlich wie der Vorschlag, den ich oben geschrieben habe. Die Idee, die ich damals bei meinem Projekt hatte, wurde mittlerweile ja auch kommerziell umgesetzt und nennt sich RockSmith, wenn ich mich nicht irre. Tja.. wär ich mal an dem Projekt drangeblieben

    Geändert von Mono (01.10.2013 um 14:23 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •