FMOD -> *.mod Includen?!

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:

FMOD -> *.mod Includen?!

Beitrag von Lukaso »

Hallo,

ich suche ein Example, wo gezeigt wird wie ich eine Includete Mod Datei zu abspielen bringe ausm Speicher heraus. Ich habe zwar ein Beispiel gefunden, dass war aber für MP3 Dateien (FSOUND_*) ich bräuchte das ganze für (FMUSIC_*) habe es schon mit FMUSIC_LoadSongEx probiert, nur rasselt mein Prog dabei ab :|

Würde mich über Tips freuen, habe es noch nicht so drauf mit "Memory" :wink:

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 »

Folgender Code läuft bei mir.
Der Trick ist, FMUSIC_LoadSongEx existiert - genau wie z.B. auch FSOUND_Stream_Open - in zwei Versionen.
FMUSIC_LoadSongEx erwartet einen String als 1sten Parameter.
FMUSIC_LoadSongEx2 erwartet einen Pointer (zusammen mit #FSOUND_LOADMEMORY gesetzt). Durch die 2. Funktion läßt sich die Typprüfung zur Kompilierzeit umgehen. Alternative wäre gewesen, immer nur einen Pointer zu übergeben, dann müßte man aber Strings ebenfalls als Pointer übergeben.

Code: Alles auswählen

FSOUND_Init(44100, 32, 0)

*hSong = FMUSIC_LoadSongEx2(?startinclude, 0, ?endinclude - ?startinclude, #FSOUND_LOADMEMORY, 0, 0)

If *hSong
  FMUSIC_PlaySong(*hSong)
Else
  Debug "error"
EndIf

Delay(5000)

FSOUND_Close()

End
startinclude:
IncludeBinary "70sgrove.mod"
endinclude:
!UD2
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

@Froggerprogger
Danke Funktionert Super :allright:
Der Befehl "FMUSIC_LoadSongEx2" hat mir gefehlt :wink:
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 »

@Froggerprogger
da duch dich so super mit FMOD auskennst, habe ich noch 2 Fragen an dich :wink:

1. Wie kann ich mir FSOUND_IsPlaying(1) auslesen ob etwas Abgespielt ist, bei mir bekomme ich immer einen Rückgabe wert, der ungefähr so aussieht: "19595776" wenn nix abgespielt wird, und "19595777" wenn etwas abgespielt wird, dass problem ist aber, dass sich der Rückgabert nach einter zeit (z.b. 1Tag) ändert! ( = #True geht deswegen nicht :cry: )

2. Ich Vergleiche mit

Code: Alles auswählen

FSOUND_Stream_GetLength(hstream) = FSOUND_Stream_GetPosition(hstream)
ob ein Lied zu ende ist, aber bei OGG Dateien geht dass nicht zu 100%, er erkennt fast nie das Ende. Habe es schon mit

Code: Alles auswählen

FSOUND_Stream_GetLength(hstream)-10 < FSOUND_Stream_GetPosition(hstream)
versucht wegen potenzieller messungenauigkeit, bring aber genauso wenig erfolg, dass Problem ist nur bei OGG Dateien anzutreffen, WMV MP3 WMA gehen alle ohne Probleme!


Danke für die 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
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Zu 1.
FSOUND_IsPlaying liefert ein 'signed char', also unter PB ein Wert vom Typ Byte. Daher kann in den restlichen 3 Bytes des Registers irgendein Unsinn stehen. Korrekt empfängst Du den Wert per:

Code: Alles auswählen

var.b = FSOUND_IsPlaying(1) : If var ...
oder direkt

Code: Alles auswählen

If FSOUND_IsPlaying(1) & $FF ...
Zu 2.
Weiss ich nix zu, aber wenn ich morgen Zeit habe(n sollte 8) ), dann schau ich mir das mal an.
!UD2
Antworten