aboutsummaryrefslogtreecommitdiff
path: root/sdl_audio.ha
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sdl_audio.ha40
1 files changed, 40 insertions, 0 deletions
diff --git a/sdl_audio.ha b/sdl_audio.ha
new file mode 100644
index 0000000..0a78e67
--- /dev/null
+++ b/sdl_audio.ha
@@ -0,0 +1,40 @@
+use sdl2;
+use types::c;
+
+type SDL_AudioFormat = u16;
+
+def AUDIO_S16LSB: SDL_AudioFormat = 0x8010;
+
+type SDL_AudioCallback = *fn(userdata: nullable *opaque, stream: *u8, len_: int) void;
+
+type SDL_AudioSpec = struct {
+ freq: int,
+ format: SDL_AudioFormat,
+ channels: u8,
+ silence: u8,
+ samples: u16,
+ padding: u16,
+ size_: u32,
+ callback: SDL_AudioCallback,
+ userdata: nullable *opaque
+};
+
+type SDL_AudioDeviceID = u32;
+
+@symbol("SDL_OpenAudioDevice") fn _SDL_OpenAudioDevice(device: nullable *c::char, iscapture: int, desired: const *SDL_AudioSpec, obtained: nullable *SDL_AudioSpec, allowed_changes: int) SDL_AudioDeviceID;
+
+@symbol("SDL_CloseAudioDevice") fn SDL_CloseAudioDevice(dev: SDL_AudioDeviceID) void;
+
+@symbol("SDL_PauseAudioDevice") fn SDL_PauseAudioDevice(dev: SDL_AudioDeviceID, pause_on: int) void;
+
+@symbol("SDL_GetError") fn SDL_GetError() const *c::char;
+
+fn SDL_OpenAudioDevice(device: nullable *c::char, iscapture: int, desired: const *SDL_AudioSpec, obtained: nullable *SDL_AudioSpec, allowed_changes: int) (SDL_AudioDeviceID | sdl2::error) = {
+ const ret = _SDL_OpenAudioDevice(device, iscapture, desired, obtained, allowed_changes);
+
+ if (ret == 0) {
+ return c::tostr(SDL_GetError()): sdl2::error;
+ };
+
+ return ret;
+};