Also ich blicke bei deinen ganzen Vars nicht durch...Ständig im Timer etwas wie StrToInt(Edit1.Text) zu machen halte ich auch für etwas ungünstig. Hier mal der betreffende Auszug aus der Timer-Prozedur meines Players. Die Funktionsnamen sollten einigermaßen selbsterklärend sein oder als Pseudo-Code angesehen werden.
In StopAndFree wird der laufende Stream gestoppt/ausgefadet, GetNExtAudioFile liefert das nächste abzuspielende Stück und FadingInterval ist das vom User gewünschte Fading-Intervall.
Delphi-Quellcode:
if (Bass_ChannelBytes2Seconds(MainStream,Bass_ChannelGetLength(MainStream))
- Bass_ChannelBytes2Seconds(MainStream,Bass_ChannelGetPosition(MainStream))
<= (FadingInterval DIV 1000))
//also: if "fast am Ende"
then
begin
// alten Stream stoppen und freigeben, vgl. Code oben
StopAndFree;
//Nächste Datei abspielen
Play(GetNextAudioFile, FadingInterval)
end;
Warum du in deiner Prozedur mehrere "Play" drinhast, ist mir nicht klar. Außerdem musst du ja nach dem Faden die Variablen p und p2 wieder so umhängen, dass das p2 zum p wird. Da halte ich es für einfacher, wenn man das Faden ganz der bass.dll überlässt, und beim Titelwechsel direkt den alten Stream "vergisst", während er sanft ausgeblendet wird.
Denselben Code musst du dann auch beim manuellen Titelwechsel ausführen.