Also, hier mal ein Codeausschnitt:
Delphi-Quellcode:
procedure TJP.PlaySong(SongNumber: integer);
var SongSecTime: String;
begin
if (fileexists(PlayList.Strings[SongNumber])) then //existierender Song ->
begin
BassPlayer.LoadFromFile(PlayList.Strings[SongNumber]); //Lied laden in DLLPlayer
BassPlayer.Play; //und abspielen
BASS_channelstop(Channel); //Channel ggf. stoppen
if Channel<>0 then //Error-Blockade (siehe unten im Beitrag)
if not BASS_ChannelPlay(Channel, True) then SHowMessage('Error playing stream!')
else
else SHowMessage('Error opening stream!');
Channel := BASS_StreamCreateFile(FALSE, PChar(PlayList.strings[SongNumber]), 0, 0, 0); {Hier kommt der tolle Error}
SongBalken.Max := BassPlayer.SongLength; //Trackbar anpassen
SongBalken.position := 0; //und resetten
lbSongTimeMax.Caption := IntToStr(BassPlayer.SongLength div 60); //Liedzeiten in Label schreiben
if (BassPlayer.SongLength div 60 < 10) then lbSongTimeMax.caption := '0' + lbSongTimeMax.caption;
SongSecTime := IntToStr(BassPlayer.SongLength mod 60);
if (BassPlayer.SongLength mod 60 < 10) then SongSecTime := '0' + SongSecTime;
lbSongTimeMax.Caption := lbSongTimeMax.caption + ':' + SongSecTime;
end
else ShowMessage('Ungültige Datei!'); //andernfalls ungültige Datei melden!
end;
Das ist die Prozedur die jedesmal aufgerufen wird, wenn ein SOng gespielt werden soll!
Bereits vorher ist die Bass.dll per
BASS_Init(-1, 44100, 0, Application.Handle, nil);
initialisiert.
BassPlayer ist ein TBassDLLPlayer, wo ich den herhab weiß ich ehrlich nicht mehr, aber er funktioniert sehr gut!
Hier in der Prozedur sieht man dass ich umsteigen möchte vom TBassDLLPlayer auf die BASS.dll weil mit dem DLLPlayer keine Visualisierung möglich ist!
So habe ich 2 getrennte Systeme - den BassPlayer und die Bass.dll - natürlich nur vorrübergehend, damit ich jederzeit abbrechen kann und in mein altes Schema verfallen kann - sollte es nicht funktionieren (Nachteil: 2 verscheidene gleichzeitig gespielte Lieder ^^).
Der oberste Code macht SO keinen Sinn, da der "Error" kommen MUSS!
Aber wenn ich den if-Teil UNTER die Zuweisung des Channel verlege, bekomme ich meinen hübschen Assembler-Code-Error sofort, HIER erst nach dem Klick auf "OK" der "ShowMessage".
Somit muss der Fehler in dieser Zuweisung liegen, wie seht ihr das?
mfg Sebi