Wie Struktur aus C-Lib in PB importieren

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Wie Struktur aus C-Lib in PB importieren

Beitrag 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?
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Wie Struktur aus C-Lib in PB importieren

Beitrag 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
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Wie Struktur aus C-Lib in PB importieren

Beitrag 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:
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Wie Struktur aus C-Lib in PB importieren

Beitrag von Mijikai »

Wäre jetzt interessant ob man mit C nachschauen kann wie groß die Struktur ist.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Wie Struktur aus C-Lib in PB importieren

Beitrag 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:
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Wie Struktur aus C-Lib in PB importieren

Beitrag 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
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Wie Struktur aus C-Lib in PB importieren

Beitrag 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.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Wie Struktur aus C-Lib in PB importieren

Beitrag 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.
Bild
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Wie Struktur aus C-Lib in PB importieren

Beitrag 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.
Zuletzt geändert von DarkSoul am 12.02.2018 01:28, insgesamt 1-mal geändert.
Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Wie Struktur aus C-Lib in PB importieren

Beitrag 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 ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten