Trommel-BPM in einer lauten WAV-Datei erkennen


12

Ich suche nach Algorithmen, um das folgende Problem zu lösen: Wie kann ich bei einer lauten .wav-Tonaufnahme (etwas Wind + Reibungsgeräusch am Mikrofon) den BPM eines leisen Schlagzeugschlags erkennen?

Ich habe versucht, das Thema zu googeln, aber die Ergebnisse sind ziemlich schlecht, da sowohl für die Analyse als auch für die Erzeugung von Fingerabdruck-IDs viel MP3-Software zur Verfügung steht. Keiner von ihnen liefert Informationen darüber, wie man es tatsächlich macht.

Ich kenne Algorithmen zum Entfernen des Rauschens, habe aber immer noch das Problem, BPM zu erkennen. Und je nachdem, wie das BPM-Problem gelöst ist, muss ich möglicherweise nicht einmal entstören (da die Drum tendenziell in den niedrigeren Frequenzen und das Rauschen in den höheren liegt, ist möglicherweise ein einfacher Tiefpass ausreichend für die Vorverarbeitung).


1
Das klingt ähnlich wie bei meinem Schnarcherkennungsproblem .
Daniel R Hicks

Antworten:


13

Eine Methode, die bei einem relativ starken Schlagzeugschlag funktioniert, besteht darin, die Stärke der STFT der Wellenform zu ermitteln und sie dann nur in der Zeitdimension automatisch zu korrelieren. Der Peak der Autokorrelationsfunktion ist der Beat oder ein Submultiple davon.

Dies ist gleichbedeutend mit dem Aufteilen des Signals in viele verschiedene Frequenzbänder, dem Ermitteln der Amplitudenhüllkurve, dem automatischen Korrelieren jeder Hüllkurve und dem anschließenden Summieren dieser. Das Rauschen und andere Teile der Musik werden durch die Kreuzkorrelationsoperation herausgemittelt.

Dies liegt daran, dass Schlagzeugschläge bei vielen Frequenzen (vertikale Linien) einen kurzlebigen Klang erzeugen, während andere Teile der Musik bei nur wenigen Frequenzen (horizontale Linien) langlebig sind und Rauschen bei allen Frequenzen langlebig, aber zufällig ist. Sie können die Beat-Wiederholung sehen, wenn Sie sich eine STFT ansehen:

Bildbeschreibung hier eingeben

Ich habe mir das für ein Schulprojekt ausgedacht, um einen einzelnen BPM-Wert für ganze Musikdateien zu finden, aber es könnte auch an einen Audiostream mit wechselndem BPM angepasst werden. Sie müssen Blöcke verarbeiten, die mindestens doppelt so lang sind wie der Zeitraum des BPM, den Sie suchen.


FFT ist eine allgemein nützliche Technik zum Auffinden periodischer Signale. Wenn das Signal nicht ganz so regelmäßig ist, wie Sie es möchten, kann es zu kleinen Schwierigkeiten kommen: Ein Schlagzeuger kann im Laufe eines Songs schneller oder langsamer werden - absichtlich oder nicht - und dies kann die FFT-Ergebnisse beeinträchtigen im Frequenzbereich.
Rethunk

1
@Rethunk: Wenn sich der BPM im Laufe der Zeit ändert, müssen Sie dies in Stücken tun und den BPM für jeden finden.
Endolith

Beachten Sie, dass Beats häufig mit Musik assoziiert werden und Sie in diesem Bild auch einen anderen Teil der Musik sehen: horizontale Linien, die die Höhe im Beat ändern. Es gibt also grundsätzlich drei Energiebeiträge: Beats (Vertikale), Noten (Horizontale) und Rauschen (Rest).
MSalters

@MSalters: Die Noten können aber auch korrelieren
Endolith

4

Autokorrelation ist sicherlich eine gute grundlegende Methode dafür. Es gibt einige Dinge, die Sie tun können, um dies möglicherweise weiter zu verbessern:

  1. Wenn Sie das Frequenzspektrum Ihrer Trommel kennen, filtern Sie das Signal mit einem Bandpass, sodass nur die für die Trommel relevanten Frequenzen übrig bleiben. Abhängig von der Trommel kann dies recht eng sein und sollte den größten Teil des Rauschens beseitigen.
  2. Berechnen Sie dann die Zeitbereichshüllkurve des Signals ("lossy peak" ist der einfachste Weg, dies zu tun) mit einer Zeitkonstante, die grob auf die Länge der Trommelschläge abgestimmt ist.
  3. Führen Sie dann die Autokorrelation durch
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.