Einzelnen Beitrag anzeigen

Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

BASS.dll (FX): BPM aus RecordStream

  Alt 3. Mai 2016, 18:39
Hallo,

ich bin noch recht neu in der Verwendung der BASS.dll (und der BASS_FX ebenso).

Ich möchte den Ton, welcher via LineIn den PC erreicht, hinsichtlich BPM analysieren (oder bei jedem Beat benachrichtigt werden).

Bisher analysiere ich nur die Gesamtlautstärke (Peak) des Streams und versuche mir da mit diversen Algorithmen etwas auszulesen - klappt meistens auch, ist aber sehr störanfällig.

Hier erstmal die Initialisierung des Streams:

Delphi-Quellcode:
if (not BASS_RecordInit(-1)) then
begin
    Error('Error init record');
end else begin
    ChannelR := BASS_RecordStart(44100, 1, 0, @DuffRecording, NIL);
    if ChannelR = 0 then
      begin
        startedR := False;
          Error('Error starting recording!');
      end
    else
      begin
        // BASS_FX_BPM_CallbackSet(ChannelR, @bpmproc, 4, Makelong(45,230), BASS_FX_BPM_MULT2, 0); <- Problem
        startedR := True;
      end;
end;
Sobald ich die kommentierte Zeile wieder benutze, wird das Callback einmal aufgerufen und gibt einen recht beliebig wirkenden Wert aus. Anschließend bricht das Programm mit einer Array Index out Of Bounds ab.

Delphi-Quellcode:
procedure bpmproc(aStream: DWord; bpm: single; user: DWord);
begin
    Form3.Label3.Caption := FloatToStr(bpm);
end;
Benutze ich eine falsche Methode der bass_fx.dll oder wo liegt das Problem?!

Viele Grüße
  Mit Zitat antworten Zitat