Wie Struktur aus C-Lib in PB importieren
Wie Struktur aus C-Lib in PB importieren
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?
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
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
Muss man das echt von Hand machen?
Das war mein Versuch:
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.
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
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.
Re: Wie Struktur aus C-Lib in PB importieren
Wäre jetzt interessant ob man mit C nachschauen kann wie groß die Struktur ist.
Re: Wie Struktur aus C-Lib in PB importieren
Du meinst sizeof(SDL_AudioSpec)?
32 Bytes
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....
32 Bytes
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....
Re: Wie Struktur aus C-Lib in PB importieren
Danke fürs nachsehen
Nochmal 2 Möglichkeiten mit 32 Bytes falls es Jemand testen will...
Kann es unter Windows leider nicht testen
Nochmal 2 Möglichkeiten mit 32 Bytes falls es Jemand testen will...
Kann es unter Windows leider nicht testen
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
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.
Dann kannst du für Audio-Format auch ein .w verwenden.
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- 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
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
@Mijikai: Nüscht.... Beim zweiten hast du den letzten Zeiger unterschlagen.
@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.
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... Ich denke mal, #PB_Structure_AlignC muss hier verwendet werden. Ich weiß leider nicht, wie, da meine Hilfe kaputt ist.
@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.
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... 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.
Re: Wie Struktur aus C-Lib in PB importieren
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 ?
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
no Keyboard, press any key
no mouse, you need a cat