Einzelnen Beitrag anzeigen

64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#7

Re: BASS_StreamCreateFile: Access violation

  Alt 20. Apr 2008, 15:10
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
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat