![]() |
BASS_StreamCreateFile: Access violation
Hallo DP,
DIESER
Delphi-Quellcode:
Code bereitet mir jedesmal einen AccessViolation!
BASS_channelstop(Channel);
Channel := BASS_StreamCreateFile(FALSE, PChar(PlayList.strings[SongNumber]), 0, 0, 0); BASS_ChannelPlay(Channel, False); Ich nutze hier die BASS.dll, habe sie im FormCreate mit
Delphi-Quellcode:
initialisiert, und versuche per Timer aus dem spielenden Channel die FFTData zu nutzen.
BASS_Init(-1, 44100, 0, Application.Handle, nil);
Aber an der Stelle BASS_StreamCreateFile... bekomme ich immer den Access violation mit Assembler-Code... Ideen? mfg Sebi |
Re: BASS_StreamCreateFile: Access violation
Was sagt denn die Definition von BASS_StreamCreateFile ?
Welche parameter werden da übergeben. gruss Emil |
Re: BASS_StreamCreateFile: Access violation
Ich glaube du musst den Channel erst freigeben, bevor du einen neuen Lädst.
|
Re: BASS_StreamCreateFile: Access violation
@emil
Delphi-Quellcode:
So sieht die function BASS_StreamCreateFile in der "bass.pas" aus,
function BASS_StreamCreateFile(mem: BOOL; f: Pointer; offset, length: QWORD; flags: DWORD): HSTREAM; stdcall; external bassdll;
wobei ich DAS Zitat:
Aber vielleicht liegt es ja auch gar nicht an StreamCreateFile denn es ist ja öfter so dass IDEs den Fehler in der nächsten, und somit falschen, Zeile anzeigen... @nico Hmm, ok, das werde ich mal veruschen, geht wahrscheinlich per
Delphi-Quellcode:
oder wie?
BASS_StreamFree(...);
mfg Sebi |
Re: BASS_StreamCreateFile: Access violation
Also, schnell noch hinterherschieben ^^
Wenn
Delphi-Quellcode:
richtig ist, dann bringt es leider nichts...
BASS_StreamFree(Channel);
Channel ist in dem Fall ja mein Handle, da definiert als DWORD. mfg Sebi |
Re: BASS_StreamCreateFile: Access violation
Überprüfe doch mal ob der Stream überhaupt geöffnet wird.
Delphi-Quellcode:
Ansonsten könnte es sein das es hiemit "PlayList.strings[SongNumber]" Probleme gibt?
if Channel<>0 then
if not BASS_ChannelPlay(Channel, True) then Error('Error playing stream!') else else Error('Error opening stream!'); |
Re: BASS_StreamCreateFile: Access violation
Also, hier mal ein Codeausschnitt:
Delphi-Quellcode:
Das ist die Prozedur die jedesmal aufgerufen wird, wenn ein SOng gespielt werden soll!
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; Bereits vorher ist die Bass.dll per
Delphi-Quellcode:
initialisiert.
BASS_Init(-1, 44100, 0, Application.Handle, nil);
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 |
Re: BASS_StreamCreateFile: Access violation
Vielleicht bringt es was:
Wenn ich das Programm statt in der IDE ganz normale als EXE laufen lasse, geht es einfach aus - wobei das zu erwarten war ^^ mfg Sebi |
Re: BASS_StreamCreateFile: Access violation
Mhhh... ich könnte mir vorstellen, dass der Fehler kommt weil der TBassPlayer auf die selbe DLL zugreift wie der normale Funtkionsaufruf (der Bassplayer macht ja auch nichts anderes).
Versuche doch mal die BassPlayer sachen auszukommentieren oder einfach den Bassplayer um die Vis zu erweitern. Könntest du vieleicht auch mal dein Projekt anhängen? |
Re: BASS_StreamCreateFile: Access violation
Liste der Anhänge anzeigen (Anzahl: 1)
@nico
Hmm, die Überlegung ist sehr gut! Das könnte natürlich durchaus sein... Natürlich kann ich das Projekt mal hier anhängen. Ich verwende aber neben der TBassDLLPlayer und halt der Bass.pas auch die Komponente AlphaControls LE (Lite) von ![]() ![]() Diese beiden Dinge werdet ihr wohl brauchen um den MediaPlayer ganz korrekt laufen zu lassen... Unten ist dass eine ZIP mit allem, außer den oben genannten Dingen, die ihr aber einfach herunterladen könnt... Schaut euch den Code bitte an, ist teilweise auskommentiert, aber vieles erklärt sich von selbst - für seinen Programmierer ^^ Wenn ihr irgendwas nicht versteht und euch wundert was ich da für nen Mist mache, dann sagt das ruhig, bin auch für jeden Verbesserungsvorschlag dankbar ;) mfg Sebi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz