Seite 1 von 2

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

Verfasst: 25.02.2005 20:50
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

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

Verfasst: 25.02.2005 21:21
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.

Verfasst: 25.02.2005 21:28
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

Verfasst: 25.02.2005 21:33
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

Verfasst: 25.02.2005 21:50
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 ?

Verfasst: 27.02.2005 20:28
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

Verfasst: 27.02.2005 21:30
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

Verfasst: 02.03.2005 19:42
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:

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

MFG Lukaso

Verfasst: 12.03.2005 13:03
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(...)