Seite 1 von 4

Wie Struktur aus C-Lib in PB importieren

Verfasst: 11.02.2018 19:31
von DarkSoul
Hallo,

hier ist eine C-Struktur:

https://wiki.libsdl.org/SDL_AudioSpec

Wie importiere ich sie in PB, so dass ich die SDL-Api vrewenden kann?

Re: Wie Struktur aus C-Lib in PB importieren

Verfasst: 11.02.2018 20:52
von Mijikai
Bin mir nicht ganz sicher...

Code: Alles auswählen

Structure SDL_AudioSpec
  freq.i
  format.i;SDL_AudioFormat !?
  channels.a
  silence.a
  samples.u
  size.l
  *callback
  *userdata
EndStructure

Re: Wie Struktur aus C-Lib in PB importieren

Verfasst: 11.02.2018 21:39
von DarkSoul
Muss man das echt von Hand machen? :shock:

Das war mein Versuch:

Code: Alles auswählen

Structure SDL_AudioSpec
  freq.l  ;habe hier auch i und u probiert.
  format.u
  channels.a
  silence.a
  samples.u
  size.l
  *callback
  *userdata
EndStructure
Funktioniert hat es natürlich nicht.

Wollte einen 1:1-Ersatz für die unter Linux fehlerhaft laufende Sound-Bibliothek bauen, der SDL nutzt.

Habe dafür jetzt C statt PB genommen und es läuft vom Sound her alles, wie es soll. :)

Trotzdem vielen Dank für deine Mühe. :allright:

Re: Wie Struktur aus C-Lib in PB importieren

Verfasst: 11.02.2018 22:21
von Mijikai
Wäre jetzt interessant ob man mit C nachschauen kann wie groß die Struktur ist.

Re: Wie Struktur aus C-Lib in PB importieren

Verfasst: 11.02.2018 22:45
von DarkSoul
Du meinst sizeof(SDL_AudioSpec)?

32 Bytes :mrgreen:

Inzwischen habe ich herausgefunden, dass die Struktur in PB bereits deklariert ist. Jedoch hat diese laut SizeOf() eine leicht andere Größe (ich glaube, das waren 36 oder so).

Dadurch schlägt der Aufruf von SDL_OpenAudioDevice() fehl, während es unter C mit genau denselben Bedingungen funktioniert. Ich vermute mal sehr stark, dass eine leicht abweichende Struktur daran schuld ist. Ich weiß allerdings nicht, ob PB's sizeof anders funktioniert als das von C.

Ist zwar doof mit dem angestückelten C, aber was solls...

Aber den völlig übersteuerten Krach, den mir die Purebasic-Soundlib um die Ohren haut, wenn ich damit eine Mono-Wavdatei abspiele, den möchte ich nicht nochmal mit Kopfhörern erleben.... :evil:

Re: Wie Struktur aus C-Lib in PB importieren

Verfasst: 11.02.2018 23:10
von Mijikai
Danke fürs nachsehen :)

Nochmal 2 Möglichkeiten mit 32 Bytes falls es Jemand testen will...
Kann es unter Windows leider nicht testen :cry:

Code: Alles auswählen

Structure SDL_AudioSpec
  freq.l
  format.l
  channels.a
  silence.a
  samples.u
  size.l
  *callback
  *userdata
EndStructure

Structure SDL_AudioSpec
  freq.i
  format.i
  channels.a
  silence.a
  samples.u
  size.l
  *callback
EndStructure

Re: Wie Struktur aus C-Lib in PB importieren

Verfasst: 11.02.2018 23:45
von Josh
Auch wenn es in diesem Fall keinen Unterschied macht, weil .a + .a + .u die gleiche Länge wie ein .l ergeben und 4x .l sich immer mit einigen .i ausgeht, würde ich für C-Strukturen immer mit 'Align #PB_Structure_AlignC' arbeiten.

Dann kannst du für Audio-Format auch ein .w verwenden.

Re: Wie Struktur aus C-Lib in PB importieren

Verfasst: 12.02.2018 00:56
von NicTheQuick
Es gibt für Strukturen auch das Schlüsselwort AlignC, wenn ich das auswendig noch richtig im Kopf habe. Das aligned die Strukturfelder in C-Manier.

Re: Wie Struktur aus C-Lib in PB importieren

Verfasst: 12.02.2018 01:14
von DarkSoul
@Mijikai: Nüscht.... Beim zweiten hast du den letzten Zeiger unterschlagen. :wink:

@Josh: Und wie nutze ich diese Konstante? In der PB-Hilfe geht die Suchfunktion nämlich ebenso wenig und ich habe sie nicht wirklich gefunden. :mrgreen:

PS: Dieses SDL_AudioFormat ist übrigens hier dokumentiert: https://wiki.libsdl.org/SDL_AudioFormat (Sie ist tatsächlich 16-bit groß, das habe ich vorsichtshalber gerade mit C überprüft). Nur stimmt dann die Größe wieder nicht... :freak: Ich denke mal, #PB_Structure_AlignC muss hier verwendet werden. Ich weiß leider nicht, wie, da meine Hilfe kaputt ist.

Re: Wie Struktur aus C-Lib in PB importieren

Verfasst: 12.02.2018 01:27
von ccode_new
Hallo Leute,

es wäre toll wenn hier jemand die Audio-Ausgabe über SDL zum laufen bringt.

Hier ist der SDL-Sound-Test:

PureSDLTest.zip

Es wird ein 64bit Linux benötigt, oder man benutzt eine andere SDL_Lib.
Bei Anpassung der "sdl.pbi" kann man es auch unter Windows über die SDL.dll nutzen.

Nur wie bekomme ich mein Beispiel zum laufen ?