Hallo,
schon hunderte von male aufgetaucht die Frage aber irgendwie nie zu Ende gebracht....
Auch ich hab versucht mit der Bass.dll / Bassfx.dll die BPM eines Signals welches am LineIn liegt auszulesen.
Devicelist erstellen klappt super...
Delphi-Quellcode:
i:=0;
while BASS_RecordGetDeviceInfo(i,Info) do
Begin
Devicelistbox.Items.Add(PAnsichar(Info.name));
Inc(i);
end;
if Devicelistbox.Items.Count>0 then Devicelistbox.ItemIndex:=0;
Devicelist Doubleclick schliesse proforma und öffnet dann das neue Device, klappt auch.
Hier auch der Callback BASS_FX_BPM_CallbackSet…
Delphi-Quellcode:
procedure TForm1.DevicelistboxDblClick(Sender: TObject);
begin
BASS_RecordFree();
Form1.BPM_Label.Caption:='
-.-';
if not BASS_RecordInit(Devicelistbox.ItemIndex)
then
begin
form1.Caption:=('
Cant initialize device');
exit;
end;
Channel := BASS_RecordStart(44100, 0, 0, @DuffRecording,
NIL);
BASS_FX_BPM_CallbackSet(Channel, @BPMPROC, 2.5, MAKELONG(60,180), 0,
nil);
if Channel = 0
then
Begin
form1.Caption:='
Cant start recording !!';
exit;
End
else
form1.Caption:='
Recording '+Devicelistbox.Items[Devicelistbox.ItemIndex];
end;
// Callback
procedure BPMPROC (
handle: DWORD; bpm: single; user: Pointer);
stdcall;
begin
Form1.BPM_Label.Caption:=Floattostr(RoundTo(bpm,-2));
end;
Der Callback wird auch aufgerufen und ein BPM Wert angezeigt. Der ist leider fürchterlich schwankend
und passt im Grunde nicht...hab schon mit diversen Zeiten von 1....6 Sekunden (Im Code oben 2.5 Sekunden ) gespielt.
Besser wird's nicht....anbei auch die exe von dem Elend incl. der
DLL´s . Die sind aktuell...
Lokal spiele ich die Musik auf dem gleichem PC und hab Audio in/out per Klinke verbunden.
Kämpft jemand anderes im gleichem Krieg und kennt das Problem ???
Gruss
Calli