self.terminate solltest du tunlichst unterlassen.
Verwende dafür removesync der bass-
api
Außerdem wird die callback durch Bass_SYNC_END nicht beendet
sondern lediglich wie bei dir die function @EndSync aufgerufen wenn der Song beendet wurde.
Dort kannst du dann festlegen über 'user' ob du die callback beenden oder
den nächsten Titel abspielen willst.
Sample
Delphi-Quellcode:
interface
....
const
um_MusicEnd = wm_User + 400;
TfrmMain =
class(TForm)
private
EndSync : HSync;
procedure MusicEnd(
var Msg: TMessage);
message um_MusicEnd;
end;
implementation
procedure SyncProc(
Handle: HSync; Channel, Data: DWORD; User: DWORD);
stdcall;
begin
case User
of
1:
begin
PostMessage(frmMain.Handle, um_MusicEnd, 0, 0);
end;
end;
end;
procedure TfrmMain.btnPlayClick(Sender: TObject);
begin
EndSync := Bass_ChannelSetSync(Stream, Bass_SYNC_END, 0, @SyncProc, 1);
end;
procedure TfrmMain.MusicEnd(
var Msg: TMessage);
begin
//hier rein was passieren soll ....
end;
gruss Emil