Umsetzbarkeit: BPM mit Pi erkennen (realtime)

  • Moin, für ein Projekt müsste ich in Echtzeit die BPM eines laufenden Tracks erkennen. Zum Takt soll dann eine Lichtorgel angehen.
    Nun hab ich mir schon einige Gedanken und Ideen dazu gemacht und wollte mal fragen, was wohl eher realisierbar mit dem Pi ist..(hinsichtlich Rechenaufwand etc.).

    Idee 1: Den Pi als MediaPlayer nutzen (Kein Problem, ansich) und über eine Art LoopBack das Audiosignal ziehen und dann, ja, den Algorithmus entwickeln um BPM zu erkennen.
    Idee 2: Externes Mikrofon über USB/GPIO anschließen, und so das Signal zuführen.

    Problem bei Idee 1: Ich kann den Rechenaufwand nicht einschätzen, da ich auch noch nicht weiß wie ich den Algorithmus realisiere, grundlegend war gedacht: Samples auf 100 pro Sekunde runterbrechen und dann eine Art Spitzenerkennung durchführen, dadurch dann auf die BPM schließen. Gibts noch keinen Ansatz zu.

    Problem bei Idee 2: Das Mikrofon müsste schon ein wenig Partypegel abkönnen müssen.

    Allgemein: Ich arbeite (ausschließlich) mit Qt5 und dementsprechend C++.

    Kann mir wer Tipps dazu geben, wie ich welchen Weg einschlagen will? Es soll am Ende kein DSP sein, noch iwas mit FFT, einfach nur die "Peaks" der Musik erkennen, und passend ein paar(anfangs erstmal nur EINE) LEDs einschalten.

    Gruß, Daniel

  • Hallo Danny08,

    ich kann Dir zwar nicht sagen, wie es Softwaren in der Realität bewerkstelligen, hätte aber eine Idee, wie ich vorgehen würde. Nachdem es sich ja beim BPM eher um sehr niedrige Frequenzen handelt, würde ich das Audiosignal direkt anzapfen und über einen Tiefpaß mit sehr niedriger Grenzfrequenz (ich schmeiße mal 10Hz in den Raum) laufen lassen (daß nimmt die hohen und ungewollten Frequenzen raus) und einem AD-Wandler zuführen. Zur Frequenzermittlung kannst Du dann ja so vorgehen, wie Du schon schriebst (Maximumsuche). Eine FFT wirst Du wohl nicht benötigen. :) Alternativ kannst Du Dir den Filter natürlich auch in Software bauen, hast dann aber das Problem, sehr viele Daten schubbsen zu müssen. Für die HW-Lösung würde ich einen Arduino verwenden. Da hast Du dann schon mal einen AD-Wandler und kannst diesen rechnen lassen. Das Ergebnis fragst Du dann vom Raspi ab.

    Gruß

    schnasseldag

  • Was willst du denn mit BPM? Soll die Lichtorgel dann 186 Lichtblitze pro Minute abgeben? Was machst du, wenn deine Berechnung 0,5% falsch ist und du nach 30 Sekunden komplett offbeat bist? Ne Lichtorgel reagiert normalerweise auf besonders hohe Amplituden in bestimmten Frequenzbereichen, damit es auch passend zum Takt blinkt... Vielleicht machst du dich mal in der Richtung schlau.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Zitat von "Gnom" pid='291804' dateline='1500576874'


    Was willst du denn mit BPM? Soll die Lichtorgel dann 186 Lichtblitze pro Minute abgeben? Was machst du, wenn deine Berechnung 0,5% falsch ist und du nach 30 Sekunden komplett offbeat bist? Ne Lichtorgel reagiert normalerweise auf besonders hohe Amplituden in bestimmten Frequenzbereichen, damit es auch passend zum Takt blinkt... Vielleicht machst du dich mal in der Richtung schlau.


    Lichtorgel war auch der falsche Begriff.
    Ich strebe eher an, quasi einen LED Streifen zu haben, der nach jedem Beat, einen "Schritt" weiter geht.
    Davon abgesehen das man im seltensten Fall 186BPM hat.
    Ich brauch in dem Fall wirklich nur die tiefen Frequenzen.


    schnasseldag
    10Hz ist wohl deutlich zu tief, wenn ich mit Tiefpass arbeite, dann eher zwischen 100 und 200Hz, im Kickbass Bereich.
    Aber danke für die grundlegende Idee.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!