AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Beat Detection ?

Ein Thema von Blamaster · begonnen am 11. Jan 2010 · letzter Beitrag vom 13. Jan 2010
Antwort Antwort
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

Beat Detection ?

  Alt 11. Jan 2010, 15:15
Hi,

ich versuche gerade mit Hilfe der bass.dll eine Beaterkennung zu ralisieren.

Mein Ansatz dazu sieht bisher so aus:

Delphi-Quellcode:
function BeatDetection(area: integer): bool;
var
  fft: array[1..512] of single;
  fft_area: array[1..32] of single;
  i, x: integer;
begin
  BASS_ChannelGetData(RecChannel, @fft, BASS_DATA_FFT512);

  for i := 1 to 32 do
  begin
    for x := 1 to 256 do
    begin
      if (x <= (i * 8)) and (x > (i - 1) * 8) then
      begin
        fft_area[i] := fft_area[i] + fft[x];
      end;
    end;
    fft_area[i] := fft_area[i] / 8;
  end;

  if sum_old > 0 then
  begin
    if fft_area[area] >= sum_old * 1.2 then
      result := true
    else
      result := false;
  end;

  sum_old := fft_area[area];
end;
Die Idee zu dem code ist folgende:
1. FFT Daten in 32 prüfbare Bereiche aufteilen
2. Einzelne Bereiche durch 8 teilen um den Durchschnitt der 8 im Bereich gespeichterten FFT Daten zu ermitteln
3. Prüfen ob die neu ermittelten Daten um den Faktor (hier jetzt 1.2) größer sind, wenn ja Beat erkennt wenn Nein dann nicht

Nun sind meine Fragen dazu ob ich im obigen Code einen Denkfehler habe, oder ob es allgemein einen schlauere bzw. bessere Art gibt einen Beat zu erkennen.

mfg Blamaster
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Beat Detection ?

  Alt 11. Jan 2010, 16:01
Einzige Anmerkung wäre, dass sich in der üblichen westlichen Pop- und Rockmusik ein Beat meist stark im Bassanteil wiederspiegelt. Daher könnte es sinnig sein lediglich tiefere Frequenzen bis ca. 100 Hz zu betrachten. Hat auch den Vorteil, dass du weniger summieren musst, und dadurch etwas schneller bist

Evtl. ließe sich noch ein adaptives System bauen, dass den Faktor anpassen kann. Wenn der gerade erkannte Beat z.B. ungewöhnlich schnell oder langsam ist (oder garnix erkannt wird), den Faktor erhöhen bzw. senken, bis sich der Erkannte Beat in einem üblichen Rahmen bewegt (so 80 - 250 bpm wäre schon ein großzügiger Bereich).
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#3

Re: Beat Detection ?

  Alt 11. Jan 2010, 16:08
Hi,

Danke für deine antwort.

Zitat:
Daher könnte es sinnig sein lediglich tiefere Frequenzen bis ca. 100 Hz zu betrachten.
Wie kann man bei den FFT Daten Frequenzen < 100Hz finden ?

Mfg Blamaster
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Beat Detection ?

  Alt 11. Jan 2010, 16:23
Eine FFT (bzw. generell Fourier Transformation) ist ein Verfahren, dass ein Signal vom Zeit-Amplituden Raum in den Frequenz-Amplituden Raum transformiert. Das heisst du bist im Grunde schon fertig, und musst einfach nur die paar ersten Elemente im Array betrachten (0=DC Offset; 1=niedrigster Frequenzbereich; 2=nächst höherer Bereich usw.). Welche Frequenzen nun genau in welchem Index abgebildet sind, hängt von der Sampleanzahl (und damit implizit von der Samplefrequenz und des Zeitabschnittes) ab.
Ich komme grad irgendwie nicht an die Wikipedia, aber ich meine die Artikel zu FFT und der Fourier Transformation allgemein sind sehr brauchbar, und mindestens einen Blick wert - ich meine da auch schon gesehen zu haben wie der Zusammenhang Sampleanzahl/Frequenzbänder läuft, nagel mich aber jetzt nicht drauf fest
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#5

Re: Beat Detection ?

  Alt 11. Jan 2010, 16:41
Wenn man nur die niedrigen Frequenzen bis 100 Hz oder ähnlich messen möchte, kann übrigens statt FFT einen ganz normalen Tiefpassfilter benutzen (z.B. State Variable Filter). Das verbraucht nur einen Bruchteil der Resourcen.
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#6

Re: Beat Detection ?

  Alt 11. Jan 2010, 17:58
@Medium

Danke,

sprich dann mache ich ja aktuell gerade auhcn icht wirklich was anders, denn ich Teile ja sozusagen die FFT Daten in 32 Bereich mit steigender Frequenz auf.

Und über den area Wert kann ich ja dann auswählen welchen Frequenzbereich ich prüfen möchte. (Auch wenn ich dannn nur grob schätzen kann in welchem Frequenzbereich ich da gerade liege)

Ich habe gerade noch eine Seite gefunde, die sich mit dem Thema Beatdetection auseinandersetzt.

http://www.gamedev.net/reference/pro...beatdetection/

Ich verstehe aber leide rnicht alles dort beschriebene (bzw. das geschriebene schon aber die Formeln nicht).

Könnte ich irgendetwas von dem dort geschriebenen noch zu Verbesserung meiner Funktion nutzen ?

mfg Blamaster
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#7

Re: Beat Detection ?

  Alt 12. Jan 2010, 21:52
Keiner mehr eine Idee ?
  Mit Zitat antworten Zitat
busybyte

Registriert seit: 15. Sep 2006
165 Beiträge
 
#8

Re: Beat Detection ?

  Alt 13. Jan 2010, 06:32
Denke nicht das das wirklich weiterhilft, mir ist nur gerade der Gedanke durch den Kopf geschossen, das eigentlich der Beat eine ziemlich niedrige Frequenz im Musikstück ist, also wäre es wieder eine FFT-Analyse aber mit welchen Parametern?
//Brainstorming
Der Beat oder vieleicht besser Takt, muss leider auch nicht unbedingt aus lauten Bässen bestehen,
z.b. Scorpions Wind of change, sondern ist wohl eher der zeitliche Abstand von irgendwelchen ansteigenden Flanken und/oder Pausen.
I love DiscCat
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#9

Re: Beat Detection ?

  Alt 13. Jan 2010, 22:07
Ich selbst versuche gerade das selbe. Zur Zeit erziele ich relativ gute Ergebnisse mit der FFT-Analyse, dabei Werte ich jedoch die Peaks des Höchsten Frequenzbandes aus (klinkt komisch, funktioniert aber ). Für mich war es sehr hilfreich mir die Erkennung zu Visualisieren, dazu zeichne ich mir einen Graphen mit dem Aktuellen Erkennungswert.

lg Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz