Einzelnen Beitrag anzeigen

Marco Steinebach

Registriert seit: 4. Aug 2006
502 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: synchronisation via message und bass?

  Alt 17. Jun 2007, 14:48
Hallo Listers,
Ersteinmal vielen herzlichen Dank für die vielen Tips und Hinweise.
Hier jetzt nochmal, als Zusammenfassung, das setzen eines SyncPoints via Message, für alle, die's gebrauchen können.

1. Das Init der BASS.DLL kann so bleiben, wie man es kennt:
  if (not BASS_Init(1, 44100, 0, Application.handle, nil)) then Hat den Vorteil das auf jedenfall alle Messages, die die BASS.DLL ggf. verschickt, auch bei der Application ankommen.

2. brauchen wir die Message die generiert wird, wenn das Ende eines Titels erreicht ist:
Delphi-Quellcode:
const
  WM_BASS_EOF = WM_User + 1;
3. Das setzen des Sync-Handles:
Delphi-Quellcode:
// hs ist der Handle (HSYNC) für die Sync-Prozedur, um ihn ,ggf.
// wieder entfernen zu können.
// sh ein Channel
    hs := BASS_ChannelSetSync(sh, BASS_SYNC_END or BASS_Sync_Message, 0, SyncProc(WM_BASS_EOF), 0);
Den TypeCast schlagen übrigens auch die Entwickler im Forum von Un4Seen vor. Also anstatt der Prozedur-Adresse wird hier die Message selbst übergeben die gesendet werden soll, wenn das Ende erreicht ist.
4. und zu guter letzt, braucht es noch den Message-Handler. Ich habe das mit einem TApplicationEvents-Objekt gelöst, einfach auf die Hauptform platzieren, doppelklick auf OnMessage und dann sieht's so aus:
Delphi-Quellcode:
procedure THauptFormular.AppEventsMessage(var Msg: tagMSG;
  var Handled: Boolean);
begin
  If Msg.Message = WM_BASS_EOF then
  begin
    // mach was, denn das Ende des Titels ist jetzt erreicht.
  end;
end;
Das ganze funktioniert hier wirklich ganz brav!
Viele herzliche Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat