![]() |
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 |
Re: BASS_StreamCreateFile: Access violation
*push*
Leute, wie siehts aus? Ich komm einfach net weiter, der blöde Access Violation nervt schon n bissl xD Hat jemand vll mal ne ähnliche Erfahrung bei seinem Player-Bau gemacht? Kennt jemand den TBassDLLPlayer...wär da die normale Bass.dll besser? Dann würde ich einfach umsteigen und hoffen...aber egtl will ich mein Problem nicht umgehen sondern erkennen und lösen... mfg Sebi |
Re: BASS_StreamCreateFile: Access violation
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Ich habe mir das Projekt leider grade eben erst runtergeladen... Aber die exe funzt bei mir wunderbar. Wann genau soll der Fehler kommen? Könnte es vieleicht an deiner Bass.dll version liegen? Hast du zwei verschiedene in Verwendung? Wo liegt denn deine Bass.dll? Probier mal die die ich benutze (im Anhang) |
Re: BASS_StreamCreateFile: Access violation
Wie dumm von mir niko xDDDDDDDDDD * 1000
Ich habe hier die EXE reingestellt SBER vorher den Teil mit dem Fehler als Kommentar definiert... rofl! Deine Bass.dll habe ich mir aber trotzdem mal geladen, aber es brachte keine Besserung... Vll siehst du dir mal den Code im Projekt an...such einfach nach "SetScrollBar", in der Prozedur liegt auch der auskommentierte Fehler-Part... |
Re: BASS_StreamCreateFile: Access violation
Bzw. doch...deine dll brachte eine "besserung", mein access violation ist jetzt NICHT mehr in dieser assembler-code-anzeige sondern taucht einfach so auf!
aber den grund dafür sehe ich immer noch nicht... ps: meine dll war 4,5kb größer als deine ^^ und älter |
Re: BASS_StreamCreateFile: Access violation
Du mal ne ganz andere Sache.
Die Komponente kann sogar Visualisierungen! Nimm doch einfach die hier ![]() |
Re: BASS_StreamCreateFile: Access violation
Na perfekt...
Ich hatte die Visualisierungsmöglichkeit also di ganze Zeit? -.- xD Thx niko! |
Re: BASS_StreamCreateFile: Access violation
So, hab ichs mir doch gedacht...
Ich FINDE die visualisierungs-funktion nicht -.- Wie dumm... Ich weiß zwar den Equalizer zu initialisieren, zu ändern, die Rechte und Linke lautsprecherausschläge anzuzeigen, aber ich finde nirgends etwas wie man die sch**ß FFTData der GetFFTData in was brauchbares, also INTEGER oder sonst was umwandelt ODER aber direkt das als ganzes in ein canvas/painbox was weiß ich, überträgt... Wer weiß denn vll wie das da geht bei der TBassDLLPlayer? mfg Sebi |
Re: BASS_StreamCreateFile: Access violation
Das findest du in dem Beispiel welches ich mal hochgeladen habe.
Ich weiß leider nicht mehr wie der Thread hieß aber benutz doch einfach die Forensuche. (War aufjedenfall auch ein Thread von dir ;-) |
Re: BASS_StreamCreateFile: Access violation
Schau dir mal die BassAVEngine und die Spectrumunit in diesem OpenSourceprojekt an.
![]() Vor dem starten die ini mit Hand anpassen. Wal |
Re: BASS_StreamCreateFile: Access violation
@niko
XD Jaja stimmt, das kannte ich noch, hab den Thread gefunden gehabt... Aber ich habs einfach nicht hinbekommen -.- die dort verwendeten Funktionen ordentlich umzusetzen! Als ich nämlich damit arbeiten wollte, kam dieser AccessViolation - das eigentliche Thema dieses Threads - WAHRSCHEINLICH hast du recht und es liegt daran dass die TBassDLLPlayer ebenfalls die Bass.dll benutzen... Stattdessen versuche ich jetzt mal die TBassDLLPlayer um die Visualisierungsfunktion die ich mir vorgestellt hatte, zu erweitern. Reicht es wenn ich den Code der Besipiele des SampleVis reinkopiere, auf meine Objekte abändere...wahrscheinlich, oder? Nur wie bekomme ich es hin dass statt auf eine Bitmap auf ein schon existierendes TImage "gemalt" wird, eigentlich doch nur auf die Image-Canvas umproggen, oder net? Ach ich weiß au net ^^ Muss die TBassDLLPlayer mal anpassen - ich melde mich wieder !!! ;) Thx2all mfg Sebi |
Re: BASS_StreamCreateFile: Access violation
|
Re: BASS_StreamCreateFile: Access violation
Ja das hatte ich schon gefunden...
Mein explizites "Problem" ist ja nicht WIE man eine Visualisierung DARSTELLT sondern wie man die FFTData-Daten ^^ in was brauchbares wie integer etc umwandelt! Meine "Visualisierungsfläche" ist weder ein Kreis noch eine grade Fläche, deshalb reicht es mir zu wissen wie das mit den FFTData-Daten geht, dann wäre mir schon geholfen... |
Re: BASS_StreamCreateFile: Access violation
Bei meinen Beispielen ist doch jeglicher Quellcode vorhanden.
Da kannst du dir doch alles ansehen und für deine Bedürfnisse das herausnehmen was du brauchst. Verwunderte Grüsse Thorsten |
Re: BASS_StreamCreateFile: Access violation
:( dann bin ich zu blöd die zu finden...
:wall: :pale: :wiejetzt: |
Re: BASS_StreamCreateFile: Access violation
Wie jetzt?
Du hattest doch geschrieben das du das gesehen hast, wieso kannst du das jetzt nicht finden? Such doch im Quellcode einfach mal in allen Dateien des Projektes (Strg+F, zweiter Reiter) nach GetFFT oder GetWave. ![]() Du must dich schon damit beschäftigen, ich weiss das das nicht so einfach ist. Aber das was du vorhast ist ja auch nichts einfaches. Schau dir auch mal im ![]() Gruss Thorsten |
Re: BASS_StreamCreateFile: Access violation
@Thorsten
ja du hast ja recht. ich hatte gedacht es gäbe halt was...naja einfacheres solch eine visualisierung umzusetzen - ähnlich wie man left-/rightpeak auch ganz! einfach umsetzen kann. in deinem besipiel muss ich dann mal rumwühlen durch die vielen dateien... seeya mfg Sebi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 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