Entwickler-Ecke
Multimedia / Grafik - Fmod Ereigniss bei ende der datei?
JacFab - Sa 03.05.03 17:09
Titel: Fmod Ereigniss bei ende der datei?
Ich habe mehrere Dateien, die mit Fmod abgespielt werden sollen in einer liste. wenn eine mp3 durchgelaufen ist, soll also die nächste abgespielt werden.
Aber wie mache ich das, ohne einen timer zu benutzen, der die ganze zeit fragt, ob eine datei grade spielt?
Gibt es da eine callback funktion?
tommie-lie - Sa 03.05.03 20:19
FSOUND_Stream_SetEndCallback dürfte Funktion deiner Wahl sein
mimi - Sa 03.05.03 22:46
und wo willst du bitte überprüfen ob die datei zu ende gespielt wurde ?
du MUSST es in einem Timer überprüfen...... oder wo soll es geschen ?
tommie-lie - Sa 03.05.03 23:13
SetEndCallback übergibt man als ersten Parameter einen Stream (der, der überprüft werden soll, logischerweise ;-) ) und als zweiten einen Funktionspointer. Diese Funktions wird dann aufgerufen, sobald der Stream fertig ist mit Spielen (aber nicht, wenn er im Loop-Modus ist, steht alles in der Hilfedatei). In dieser Funktion kannst du dann zum Beispiel die nächste Datei abspielen (im gleichen Stream, dann wird beim Ende dieser Datei wieder die Funktion aufgerufen, aber vorsicht, dann braucht man irgendeine Abbruchbedingung, sonst spielt er endlos *g*).
mimi - Sa 03.05.03 23:21
Und wo muss man die funktion hinschreiben ?
gleich beim laden ?
währe ganz praktisch für mein problem:)
tommie-lie - Sa 03.05.03 23:59
Irgendwohin, nachdem die Datei geöffnet wurde (also der Stream einen gültigen Pointer darstellt).
Die Funktion, die aufgerufen wird, muss allerdings (aus irgendeinem Grund) außerhalb aller Klassen sein, darf also nicht in den private- oder public-Abschnitt der Form oder in sonst irgendeine Klasse.
Und die Funktion muss wie folgt deklariert sein:
Quelltext
1:
| function FUNKTIONSNAME(Stream: PFSoundStream; Buff: Pointer; Length, Param: Integer): ByteBool; cdecl; |
Es muss also eine Funktion sein und diese Parameter (in der Reihenfolge) haben, damit das klappt.
JacFab - So 04.05.03 01:18
danke auch an mimi, denn du hast genau die fragen gestellt, die ich sonst gestellt hätte!
alles klar.. ich denke so kriege ich das hin.
JacFab - So 04.05.03 01:51
es hat doch nicht geklappt.
ich weiß nicht, wie ich die funktion aufrufen soll, denn für was stehen die ganzen parameter bei
function FUNKTIONSNAME(Stream: PFSoundStream; Buff: Pointer; Length, Param: Integer): ByteBool; cdecl;
ich hab das bisher so geschrieben:
FSOUND_Stream_SetEndCallback(stream[1],SongEnde(stream[kanal],Nil,nil,1),1)
dies verursacht jedoch bisher einen fehler...
tommie-lie - So 04.05.03 12:36
nein nein nein.
Man muss für den Funktionspointer nicht die PArameter mit angeben. Nur den Funktionsnamen. Im SetEndCallback also nur SongEnde angeben, mehr nicht. Was die Parameter bedeuten, steht in der Hilfedatei.
JacFab - So 04.05.03 12:50
wenn ich keine parameter übergebe sagt er mir
"nicht genügend wirkliche parameter"
tommie-lie - So 04.05.03 14:20
Das ist seltsam.
Wie und wo ist denn deine SongStop-Funktion deklariert? Bei klappt das nämlich...
mimi - So 04.05.03 14:27
mm, ich werde es mal testen.... ich hatte nämlich eingige probleme damit, wie ich die musik wiederholen kann bzw eine neue apspielen kann wenn die alte vorbei zu ende ist, ich musst deshalb extra einen Trehd installiezieren um das zu ereichen weil der normale Timer kommt irgenwie nicht mit den DXTimer zurecht:)
Aber sollte es funktionieren were es eine sehr einfache möglichkeit....
JacFab - So 04.05.03 15:36
tommy kann ich dir vielleicht mal meinen code schicken und du guckst dir den error mal kurz an?
es ist nich so viel... da blickst du schnell durch!
Rool - So 04.05.03 15:39
Titel: ...
hast wahrscheinlich das @ vergessen...
JacFab - So 04.05.03 16:17
was für ein @?
tommie-lie - So 04.05.03 16:22
Stimmt, was für ein @? Bei mir klappt's auch ohne.
Oder hat Borland in Version 6 mal wieder alles neu gemacht? Welche Delphi-Version hast du denn? Unter D6PE läuft alles ohne @, ohne Parameter und ohne Fehlermeldungen...
Klar, Code kannst du mir schicken.
Rool - So 04.05.03 16:40
Titel: ...
Wenn man einer Funktion seine Callback-Funktion übergibt, übergibt man eigentlich immer einen Pointer auf die Funktion. DESWEGEN: @Funktionsname !!! (AddressOf)
tommie-lie - So 04.05.03 16:52
Echt? Nicht das ich wüsste... :roll:
Zumindest klappt's bei mir auch ohne @, und das ist auch gut so ;-)
Rool - So 04.05.03 21:03
Titel: ..
jo, stimmt. das ist aber ganz schön selten, wenn du mal mit windows-callbackfunktionen arbeiten solltest, musst du IMMER einen Pointer (mit @) übergeben!! hier geht es so, weil du nicht direkt einer C-DLL die Funktion übergibst, sondern erst der Delphi-Unit von FMod, die es dann in einen Pointer umwandelt!
tommie-lie - So 04.05.03 22:45
Tja, es lebe das DLL-Wrapping :mrgreen:
Edit: JacFab, geht's jetzt?
JacFab - Mo 05.05.03 12:04
Jo nu klappts alles wunderbar.
ich dachte immer, dass "zu wenig wirkliche parameter" wäre auf den funktionsaufruf bezogen. war aba auf
FSOUND_Stream_SetEndCallback
bezogen. vielen dank für eure hilfe!
mimi - Mo 05.05.03 17:24
toll und ich habe dafür ín meinem spiel extra einen trehd(oder wie diese dinger heißen) benutzt um das problem zu lösen :(
werde ich aber in der "Neuen Version" nicht machen:)
mimi - Sa 10.05.03 13:34
in der neuen version 3.62 scheint es diesen befel garnicht mehr zu geben....
jetzt habe ich nur noch ein klassen problem:
Quelltext
1: 2: 3: 4: 5:
| function NewMusik(Stream: PFSoundStream; Buff: Pointer; Length, Param: Integer): ByteBool; cdecl begin Randomize; PlayMusikFile( Random(High(PlayListe)) ); // ist in einer klasse drin und soll augerufen werden wie kann ich es lösen ? end; |
tommie-lie - Sa 10.05.03 19:33
Wie sonst auch, wenn man aus einer Funktion heraus eine andere aufrufen will, die nicht in der gleichen Klasse ist:
Quelltext
1:
| Klasse.Funktionsname(Parameterlist); |
mimi - Sa 10.05.03 20:59
naja das ging aber nicht so wie ich es haben wollte, ergal, es geht sowieso nicht....... was ich machen wollte, muss wohl einen andren weg dafür nehmen :(
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!