Seite 1 von 1

FMOD - Die "...2()"-Befehle in PB

Verfasst: 04.02.2005 17:11
von Lebostein
Hallo,

durch Zufall und herumprobieren (wollte einen Sound über eine Speicheradresse laden) bin ich auf den Befehl FSOUND_Sample_Load2() und FMUSIC_LoadSongEx2() gestoßen. Sind diese zusätzlichen und scheinbar geheimen :) "...2()"-PB-Funktionen für FMOD irgendwo aufgelistet/dokumentiert? (@Froggerprogger?)

Verfasst: 04.02.2005 19:51
von freedimension
Diese Befehle haben ganz einfach einen optionalen Parameter. Bei der Erstellung von UserLibraries werden diese optionalen Parameter über eine zusätzliche Funktion mit einer angehängten 2 (oder 3 oder 4 usw. bei mehreren optionalen Parametern) erstellt - du hast diese Funktionalität also schon immer zur Verfügung gehabt ;)

Verfasst: 07.02.2005 11:21
von Lebostein
Ok. Könnt ihr das nicht kurz in einer Readme oder in der Hilfe erwähnen? Das wenn zum Beispiel mit einer Funktion wahlweise ein Long-Pointer oder ein String (z.B. Dateiname) an FMOD übergeben werden kann, man dann in PureBasic eine andere Funktion ("...2()") benutzen muss? Ich glaube das ist nicht jedem sofort klar, da nirgends was darüber steht und vielen die gebräuchlichen Programmier-Konventionen unbekannt sind...

Verfasst: 07.02.2005 12:30
von Froggerprogger
Hier sind das nicht Funktionen, die mehr, also optionale Parameter haben, sondern es sind 'überladene Parameter'.
Bei einigen Funktionen kann man einen String, oder einen Long übergeben, PB's Typcheck läßt jedoch nur eins von beidem zu (anders als in C)
Lösung 1 wäre: Strings per Pointer, also per @Stringvariable übergeben, oder Lösung 2 ist, zwei seperate Funktionen verwenden. Da letzteres beim VB-Port gemacht wird, habe ich das so übernommen.
Allerdings hätte ich - wäre das meine Designentscheidung gewesen - als erste Funktion dabei die Long-Interpretation, und als 2. den String genommen.

Dann könnte man alternativ nutzen:
Funktion(@string)
Funktion(pointer to data)
Funktion2(string)

was cooler wäre als (so wie es jetzt ist):
Funktion(string)
Funktion2(pointer to data)
Funktion2(@string)

Allerdings ist die Kompatibilität zu VB-Source wichtiger, als dieser feine Unterschied ?

Da werde ich mal was in die Readme zu schreiben.

Die einzigen beiden Funktionen mit der ...2 sind übrigens:
FSOUND_Sample_Load2
FSOUND_Stream_Open2

Allerdings ist fmod 4.0 sowieso bald (etwa im März) fertig, was eine komplette Überarbeitung der API mit sich bringt, und insbesondere nicht mehr abwärtskompatibel ist. Mal sehen, was sich da dann genau ändert, vielleicht gibt es ja gar keine Überladung mehr.

Verfasst: 07.02.2005 13:20
von nicolaus
Allerdings ist fmod 4.0 sowieso bald (etwa im März) fertig, was eine komplette Überarbeitung der API mit sich bringt, und insbesondere nicht mehr abwärtskompatibel ist. Mal sehen, was sich da dann genau ändert, vielleicht gibt es ja gar keine Überladung mehr.
das könnt ihr doch nich machen das es nich abwärtskompatibel is und wieder alles umgeschmissen wird Bild
wo ich jetzt so gut wie alles mal mit der 3.7.4 zum laufen bekommen habe.

Sind es wirklich so große änderungen?

Grüß Nico

Verfasst: 07.02.2005 14:16
von Lebostein
Froggerprogger hat geschrieben:Die einzigen beiden Funktionen mit der ...2 sind übrigens:
FSOUND_Sample_Load2
FSOUND_Stream_Open2
Mir sind folgende bekannt:

FMUSIC_LoadSongEx2
FSOUND_Sample_Load2
FSOUND_Sream_Open2

Verfasst: 07.02.2005 14:44
von Froggerprogger
@Lebostein
Uaargh. Sorry, hast recht. Habe jetzt gerade nochmal die zur Wrappererstellung notwendige .bas durchgesehen, und das sind nun wirklich alle. Diese 3 also.

@nicolaus
Ich kenne die neue API noch nicht, aber es sind einige grundlegende Änderungen angekündigt worden.
Trotzdem wird es einen Init-Befehl, einen Soundlade-Befehl, etc. geben, so dass viele Änderungen leicht sein werden.

An sich ist das Redesign aber auch etwas sehr Positives, da man sich so von Altlasten befreien und losgelöst davon den Kern völlig neu gestalten kann. Da die Leute von Firelight Technologies sehr fähig sind, wird das ein sehr konsequentes und stabiles Ergebnis liefern. Und natürlich kann man fmod 3.74 auch weiterhin nutzen, und lediglich in neuen Projekten auf fmod 4.0 umsteigen.

Verfasst: 07.02.2005 14:49
von ts-soft
Kann man das Problem nicht mit StructureUnion lösen ?
Nur so eine Idee von mir

Verfasst: 07.02.2005 15:13
von Froggerprogger
Erst eine Struktur zu füttern wäre doch noch kompliziter.

'optimal' (aber auch fehleranfällig) wäre ja, dass folgendes beides akzeptiert wird, was in PB nicht geht:
FSOUND_DoIt("datei.wav")
FSOUND_DoIt(*data.l)

aber es würde gehen:
FSOUND_DoIt(@"datei.wav")
FSOUND_DoIt(*data.l)

oder wie derzeit:
FSOUND_DoIt("datei.wav")
FSOUND_DoIt2(*data.l)