Forum: PC-Programmierung AutoBPM, genialer BPMcounter, wie funktioniert der?


von Paul H. (powl)


Lesenswert?

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.

von Kai G. (runtimeterror)


Lesenswert?

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.

von Paul H. (powl)


Lesenswert?

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

von Kai G. (runtimeterror)


Lesenswert?

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

von Kai G. (runtimeterror)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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

von DG1RTO (Gast)


Lesenswert?

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

von Kai G. (runtimeterror)


Lesenswert?

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
Noch kein Account? Hier anmelden.