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
FMOD - Die "...2()"-Befehle in PB
FMOD - Die "...2()"-Befehle in PB
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?)
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
- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
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 
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...
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
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.
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
das könnt ihr doch nich machen das es nich abwärtskompatibel is und wieder alles umgeschmissen wirdAllerdings 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.
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
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
@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.
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
- 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
Kann man das Problem nicht mit StructureUnion lösen ?
Nur so eine Idee von mir
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

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