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

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

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

Beitrag 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?)
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag 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 ;)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag 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...
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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.
!UD2
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag 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
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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.
!UD2
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Kann man das Problem nicht mit StructureUnion lösen ?
Nur so eine Idee von mir
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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)
!UD2
Antworten