aboutsummaryrefslogtreecommitdiff
path: root/sdl2/mixer
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2021-12-12 12:40:47 +0100
committerDrew DeVault <sir@cmpwn.com>2021-12-12 13:04:42 +0100
commite5ad22498ca893e96557486a808213b05601e25f (patch)
tree8929b40773af11371cb961379daa8cb3be22b8b2 /sdl2/mixer
parentAdd blend modes (diff)
downloadhare-chip8-e5ad22498ca893e96557486a808213b05601e25f.tar.gz
sdl2::mixer: initial commit
Diffstat (limited to 'sdl2/mixer')
-rw-r--r--sdl2/mixer/general.ha52
1 files changed, 52 insertions, 0 deletions
diff --git a/sdl2/mixer/general.ha b/sdl2/mixer/general.ha
new file mode 100644
index 0000000..b87ac4e
--- /dev/null
+++ b/sdl2/mixer/general.ha
@@ -0,0 +1,52 @@
+use sdl2;
+
+// Flags for [[init]].
+export type init_flags = enum {
+ FLAC = 0x00000001,
+ MOD = 0x00000002,
+ MP3 = 0x00000008,
+ OGG = 0x00000010,
+ MID = 0x00000020,
+ OPUS = 0x00000040
+};
+
+// The default mixer has 8 simultaneous mixing channels
+export def CHANNELS: int = 8;
+
+// Good default frequency for a PC soundcard
+export def DEFAULT_FREQUENCY: int = 22050;
+
+// Good default channels for a PC soundcard
+export def DEFAULT_CHANNELS: int = 2;
+
+// XXX: This should choose MSB on a big-endian system:
+
+// Good default format for a PC soundcard
+export def DEFAULT_FORMAT: sdl2::audio_format = sdl2::AUDIO_S16LSB;
+
+@symbol("Mix_Init") fn _init(flags: int) int;
+
+// Loads dynamic libraries and prepares them for use. Flags should be
+// one or more flags from [[init_flags]] OR'd together.
+export fn init(flags: init_flags) (void | sdl2::error) = {
+ return sdl2::wrapvoid(_init(flags));
+};
+
+// Unloads libraries loaded with [[init]].
+export @symbol("Mix_Quit") fn quit() void;
+
+@symbol("Mix_OpenAudio") fn _openaudio(frequency: int,
+ format: u16, channels: int, chunksize: int) int;
+
+// Open the mixer with a certain audio format
+export fn open_audio(
+ frequency: int,
+ format: sdl2::audio_format,
+ channels: int,
+ chunksize: int,
+) (void | sdl2::error) = {
+ return sdl2::wrapvoid(_openaudio(frequency, format, channels, chunksize));
+};
+
+// Close the mixer, halting all playing audio
+export @symbol("Mix_CloseAudio") fn close_audio() void;