Länge einer MOD, IT, XM, MID ... Datei ermitteln

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Länge einer MOD, IT, XM, MID ... Datei ermitteln

Beitrag von Lukaso »

Hallo,

wie kann ich die Länge in ms von den o.g. Dateien ermitteln?
Habe in Fmod nur den Befehl für die Laufzeit gefunden ein passender befehl wie "FSOUND_Stream_GetLengthMs()" fehlt bei FMUSIC ganz.

Danke für eure Hilfe :allright:

Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Re: Länge einer MOD, IT, XM, MID ... Datei ermitteln

Beitrag von traumatic »

Lukaso hat geschrieben:Hallo,

wie kann ich die Länge in ms von den o.g. Dateien ermitteln?
Habe in Fmod nur den Befehl für die Laufzeit gefunden ein passender befehl wie "FSOUND_Stream_GetLengthMs()" fehlt bei FMUSIC ganz.

Danke für eure Hilfe :allright:

Lukaso
Ich weiß zwar keine direkte Antwort auf Deine Frage, möchte aber folgendes
zu bedenken geben:

MOD, IT, XM und alle anderen Tracker-Formate sind Pattern-Basiert und oftmals
so erstellt, dass sie in einer Endlosschleife laufen - es dürfte also schwierig sein,
die Gesamtlänge in Sekunden zu ermitteln.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

In mods/midis, etc. ist die Spielzeit nicht gespeichert.
Auch kann man sie nicht so einfach bestimmen, da zwischendrin Tempoänderungen auftauchen können, loops, etc. Bei mods gehen sogar Endlosschleifen.
Einige Workarounds finden sich hier:
(Entweder Spielzeit aus Anzahl der Orders berechnen, was wohl ganz gut klappen soll, oder einmal komplett auf leise und in schnell durchspielen)
http://www.fmod.org/forum/viewtopic.php?t=1089
!UD2
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

Froggerprogger hat geschrieben:In mods/midis, etc. ist die Spielzeit nicht gespeichert.
Auch kann man sie nicht so einfach bestimmen, da zwischendrin Tempoänderungen auftauchen können, loops, etc. Bei mods gehen sogar Endlosschleifen.
Einige Workarounds finden sich hier:
(Entweder Spielzeit aus Anzahl der Orders berechnen, was wohl ganz gut klappen soll, oder einmal komplett auf leise und in schnell durchspielen)
http://www.fmod.org/forum/viewtopic.php?t=1089
Super Danke! :allright:
Werde es mir mal anschauen!


Nochwas: Mir ist gerade aufgefallen, bei MIDI Dateien (*.mid) dauert die Prüfung ob etwas Abgespielt wird durch "FMUSIC_IsPlaying(hmusic) & $FF = #True" extrem lange. Da ich in einer Schleife jeden durchlauf checke ob etwas abgespielt wird, merke ich einen hohen Performanceeinbruch bei allen anderen Formaten außer MIDIs gehts ohne probs ....

Danke :allright:

Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Lukaso hat geschrieben:Nochwas: Mir ist gerade aufgefallen, bei MIDI Dateien (*.mid) dauert die Prüfung ob etwas Abgespielt wird durch "FMUSIC_IsPlaying(hmusic) & $FF = #True" extrem lange. Da ich in einer Schleife jeden durchlauf checke ob etwas abgespielt wird, merke ich einen hohen Performanceeinbruch bei allen anderen Formaten außer MIDIs gehts ohne probs ....
Hmmm. Seltsam. Liegt vielleicht daran, dass fmod das Midis-Abspielen nicht selbst übernimmt, sondern auch nur ans System weiterleitet. Was heißt den langsam ?
Vielleicht ist FMUSIC_IsFinished da geeigneter ?
!UD2
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

Froggerprogger hat geschrieben:Hmmm. Seltsam. Liegt vielleicht daran, dass fmod das Midis-Abspielen nicht selbst übernimmt, sondern auch nur ans System weiterleitet. Was heißt den langsam ?
Vielleicht ist FMUSIC_IsFinished da geeigneter ?
Mit FMUSIC_IsFinished kann ich leider nix anfangen.
Mit deiner behauptung hast du recht, er Spielt es über die APIs ab.
Muß wohl auf die MIDI unterstüzung bis FMOD 4 kommt, verzichten.
http://www.fmod.org/forum/viewtopic.php?t=2490


Hat jemand zufällig ne ahnung wann FMOD 4 kommen soll?

MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Fmod Ex (== Fmod 4.0) gab es Ende Januar als letzte Pre-Beta.
Die nächste Version soll wohl die öffentliche Beta werden, kann sich also eigentlich längstens nur noch um Wochen handeln.
Wer aber Interesse hat, sich jetzt schon Fmod Ex anzusehen, kann sich per Email für das geschlossene Fmod Ex-Forum auf http://www.fmod.org/forum/ anmelden. Darin gibt's u.a. den Downloadlink für die derzeitige Pre-Beta.

P.S.: Hinter deinem obigem Link gab es auch den Tipp von jemandem, den Befehl Fmusic_IsPlaying in einen seperaten Thread auszulagern.
Kannst Du ja mal Probieren, so etwa wie:

Code: Alles auswählen

; Achtung: Pseudocode, per Copy&Paste sicherlich nicht lauffähig.
Global IsPlaying.l

Procedure Thread_IsPlaying(*ch)
  While IsPlaying
    IsPlaying = FMUSIC_IsPlaying(*ch) & $FF
  Wend
EndProcedure

*ch = FMUSIC_Play(...)
IsPlaying = 1
CreateThread(@Thread_IsPlaying(*ch))

While IsPlaying
  ; Rest Code
Wend
!UD2
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

@Froggerprogger
Hab jetzt auch zugang zum FMODEx Forum, habe mir es mal heruntergeladen. Hat sich echt viel getan. :allright:
Naja, ich warte lieber bis es Final ist und deine passende Lib dazu erschienen ist :allright: :allright:

Werde mir nochmal das mitm Thread anschauen :wink:

Danke für deine Hilfe :allright:
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

Kann es sein das FMOD Ex Objekt Orientiert Programmiert wurde?
Fällt da nicht die unterstüzung mit PB flach? :|

MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Das wird weiterhin funktionieren. Ich habe mit fmod ex auch schon ein bißchen rumgespielt. Allerdings wird nicht unbedingt alles 'einfacher', obwohl strukturierter.
Da man Z.B. nun auch beliebig viele unabhängige Instanzen von fmod gleichzeitig öffnen kann, muss man bei den meisten Funktionen nun immer einen Pointer auf die Instanz mitliefern, was immer einen Parameter mehr bedeutet.
Auch ist der Rückgabewert nirgendwo mehr ein Pointer auf z.B. einen Sound, sondern immer ein FMOD_RESULT. D.h. ist der Rückgabewert = #FMOD_OK = 0, so ist alles in Ordnung, ansonsten erhält man direkt einen von zigzig möglichgen Fehlercodes. Den Pointer auf den Sound erhält man dann, indem man der Funktion eine Variable als Referenz, also z.B. @sound1 übergibt.

Alles in allem macht das auf mich bisher einen sehr wohl strukturierten und einheitlichen Eindruck, wenn auch es nicht so einfach ist wie PB's LoadSound(...) PlaySound(...)
!UD2
Antworten