Ich habe keinen wirklichen Crossfading-Code. Darunter versteht man doch, dass gegen Ende des Liedes ausgeblendet wird, während das nächste eingeblendet wird, oder?
Nun, das mach ich einfach so, indem ich die Funktion SlideAttributes aus der bass.dll nehme. Ohne zweiten Stream, ohne zusätzlichen Timer, einfach so.
Ich habs jetzt nicht auswendig, aber das geht im Wesentlichen so (Syntax entsprechend anpassen):
Delphi-Quellcode:
// Aktuelles Handle auf den gerade abspielenden Titel ist "ch"
// Flag setzen, damit das Handle beim Beenden automatisch freigegeben wird
BASS_ChannelSetFlags(ch, BASS_STREAM_AUTOFREE);
//Aktuellen Stream ausblenden.
// -2 steht dabei für Lautstärke auf 0 und stoppen
// -1 und -101 lassen Balance und Samplerate (glaube ich) unverändert
BASS_ChannelSlideAttributes(ch,-1,-2,-101,FadingInterval)
// Da der aktuelle Stream jetzt automatisch ausgeblendet, gestoppt und freigegeben wird
// geht jetzt folgendes:
ch := BASS_StreamCreateFile(False, '
c:\MeinNeuesLied.mp3', 0, 0, 0);
// Lautstärke auf 0 setzen
BASS_ChannelSetAttributes(ch, -1, 0, -101);
// Mit dem Abspielen beginnen
BASS_ChannelPlay(ch , True);
// Einblenden
BASS_ChannelSlideAttributes(ch, -1, MainVolume, -101, FadingInterval);
MainVolume ist dabei die gewünschte Lautstärke, die der User z.B. an einer Trackbar einstellen kann, und FadingInterval ist die Länge, in der gefadet werden soll.