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