Hi! http://www.pyramidedata.dk/autobpm.html Dort kann man sich den BPMcounter AutoBPM runterladen. Leider meldet sich der Autor auf keine eMail. Ich würde gerne wissen wie das dingchen funktioniert. Mein großer Traum ist es gerade das ding mal auf einen µC zu verbannen der mir die BPM zuverlässig zählt ;-) Scheinbar wird das Audiosignal in sein frequenzspektrum aufgeteilt, was nun das Programm allerdings damit anfängt ist mir noch nicht ganz geläufig. Das Faszinierende daran ist, dass es sogar komplizierte oder etwas verschleierte Rhythmen wie die von Salsa tadellos erkennt wo sogar ich gelegentlich Probleme hab. mfg Paul H.
Jetzt einfach mal ins Blaue würde ich das wie folgt berechnen: - Audiosignal stark downsamplen, so, dass nur noch die Frequenzen bis vielleicht 100 Hz oder 500 Hz übrigbleiben (44100 Hz 2 500 Hz ~= 44, also einfach über 64 Samples mitteln - π mal Daumen) - Dann die Amplitudenfolge berechnen (Differenz benachbarter Samples quadrieren und wegschreiben) - Die amplitudenfolge mit einer breiten FFT analysieren (je breiter das Fenster, desto besser die Ergebnisse - wie immer ;)) - Die Frequenz, bei der die FFT die größte Amplitude liefert ist die gesuchte bpm-Rate (oder ein Vielfaches oder ganzteiliges, wenn's nicht so gut läuft) Ist mit Sicherheit nicht das beste Verfahren, aber das sollte funktionieren und in 'nem Microcontroller locker Platz finden. ich habe das damals mit Resonatoren gemacht - Sau langsam, sah animiert aber cool aus. Die Ergebnisse werden besser, wenn du bei der FFT eine geeignete Fensterfunktion verwendest - zur Not einfach ein Dreieck. Hoffe, du kannst damit was anfangen - sonst frag einfach. Letztendlich ist eine bpm-Analyse nichts weiter als eine Frequenzbestimmung der Amplituden im unteren Frequenzband. Wenn ich gleich noch Zeit habe schau ich mir den Code mal an.
Hm ich glaube ich muss noch viel lernen. Tut mir leid wenn ich dämlich frag. Trotz deiner Erklärung in Klammern habe ich leider nicht verstanden was du mit Amplitudenfolge meinst ;-) Fast Fourier Transformation hab ich schon gehört. Damit meinst du eine Spektralanalyse der Amplitudenfolge? Was ist denn hier ein "Fenster"? :confused: Ich denke bevor wir von der konkreten Umsetzung reden ist dein (fast)Schlusssatz am wichtigsten: >Letztendlich ist eine bpm-Analyse nichts weiter als eine >Frequenzbestimmung der Amplituden im unteren Frequenzband. In wie fern haben die Amplituden hier frequenzen? Meinst du wie oft eine bestimmte Amplitude in einer bestimmten Zeit vorkommt? Ich komm mir grad richtig unwissend und blöd vor :-D Aber danke für die Erklärungen! mfg PoWl
Das Programm arbeitet anhand der kurzen Beschreibung wie folgt: Die nehmen auch einfach die Amplitudenfolgen, allerdings für alle drei Bänder. Halte ich persönlich für nicht ganz so sinnvoll - insbesondere die Mitten in denen sich Melodien und Stimmen befinden sind nicht so geeignet für die Bestimmung. Die Höhen gehen noch wegen der Percussions - da die aber selten ohne Bassbegleitung laufen, kann man die meiner Meinung nach auch weglassen. Danach einfach nach der Holzhammermethode: In dem gegebenen Frequenzintervall werden alle Wellenlängen (Samplingfrequenz / Testfrequenz) ausprobiert. Vermutlich findet zwischenzeitig auch ein Downsampling statt, um auf eine moderate Datenmenge zu kommen. Es wird ein Fenster mit der errechneten Wellenlänge gebildet. Dann wird aus dem gerade vergangenen Signal (Amplitudenfolge) ein Abschnitt mit n-facher Wellenlänge herausgeschnitten. Von diesem Abschnitt wird die Amplitudensumme (wieder quadrierte Differenzen) A gebildet. Jetzt wird der Abschnitt zyklisch per Addition in das Fenster übertragen (alles was rechts raushängt wird von links angefangen wieder fortgesetzt - einfacher modulo verwenden). Am Ende wird von dem Fenster wieder die Gesamtlautstärke B bestimmt. Das Verhältnis C = B / A ist bei derjenigen Fensterlänge am größten, bei der die Fensterlänge der BPM-Rate entspricht. Unpassende Fensterlängen sorgen dafür, dass sich das periodische Amplitudensignal teilweise aufhebt. Bei der passenden Fensterlänge gibt's kaum noch Auslöschungen. Das Problem, dass man sich bei der bpm-Bestimmung um ein Vielfaches vertut umgehen die einfach, durch die Vorgabe des Messintervalls. Da ist noch viel Platz für Optimierungen (und Erklärungen). Eine Kompromisslösung ist zuerst grob die Fourier-Variante durchzuführen um den Intervall zu bestimmen und dann mit der anderen Methode das Finetuning durchzuführen. Hoffe, das gibt dir schonmal einen groben Überblick. Gruß und gute Nacht Kai
Kein Thema - kann ja nicht wissen, wie viel du schon weißt ;) Fenster ist einfach ein Array-Intervall. Schau mal in Wikipedia unter Fensterung oder so nach. ich führ das hier bei Gelegenheit noch was näher aus... bin im Moment noch kurz angebunden.
Hi, da gibts nen Haufen wissenschaftliche Papers dazu, such einfach mal nach Schriften von den Leuten auf dieser Seite: http://www.music-ir.org/mirex2006/index.php/Audio_Beat_Tracking
aufwärm auch nach langer Zeit findet das Thema wiederkehrend Anhänger und Interessenten... (siehe www.cool-dmx.de) Von dort her bin ich befragt worden, wie das wohl ginge ;)) Hat sich mittlerweile jemand mit dieser Thematik befasst? Gruß DG1RTO
Hi, ich würde meine damaligen Ausführungen eigentlich nur nochmal wiederholen ... Gruß, Kai
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.