summaryrefslogtreecommitdiff
path: root/sdl2/mixer/samples.ha
diff options
context:
space:
mode:
authorLassi Pulkkinen <lassi@pulk.fi>2024-10-31 03:11:21 +0200
committerLassi Pulkkinen <lassi@pulk.fi>2024-10-31 03:51:35 +0200
commitae44478b30d890fe0fb04022f44d474dcdcc3f9d (patch)
tree5f462459ae4b47d22114eed717d1382d08cf4dfe /sdl2/mixer/samples.ha
Initial commit (import old repo)HEADmain
Diffstat (limited to 'sdl2/mixer/samples.ha')
-rw-r--r--sdl2/mixer/samples.ha38
1 files changed, 38 insertions, 0 deletions
diff --git a/sdl2/mixer/samples.ha b/sdl2/mixer/samples.ha
new file mode 100644
index 0000000..ad1ecc1
--- /dev/null
+++ b/sdl2/mixer/samples.ha
@@ -0,0 +1,38 @@
+use fs;
+use io;
+use os;
+use sdl2;
+
+// The internal format for an audio Mix_Chunk
+export type Mix_Chunk = struct {
+ allocated: int,
+ abuf: *u8,
+ alen: u32,
+ volume: u8,
+};
+
+@symbol("Mix_LoadWAV_RW") fn _Mix_LoadWAV_RW(src: *sdl2::SDL_RWops, freesrc: int) nullable *Mix_Chunk;
+
+// Loads a sample from an [[io::handle]].
+export fn Mix_LoadWAV_RW(src: io::handle) (*Mix_Chunk | sdl2::error) = {
+ const rw = sdl2::rw_from_handle(src);
+ return sdl2::wrapptr(_Mix_LoadWAV_RW(rw, 0))?: *Mix_Chunk;
+};
+
+// Loads a sample from a file path.
+export fn load_file(src: str) (*Mix_Chunk | fs::error | sdl2::error) = {
+ const file = os::open(src)?;
+ defer io::close(file)!;
+ return Mix_LoadWAV_RW(file);
+};
+
+// Free the memory used in Mix_Chunk, and free Mix_Chunk itself as well. Do not use
+// Mix_Chunk after this without loading a new sample to it. Note: It's a bad idea to
+// free a Mix_Chunk that is still being played...
+export @symbol("Mix_FreeChunk") fn Mix_FreeChunk(Mix_Chunk: *Mix_Chunk) void;
+
+// Maximum volume for a Mix_Chunk.
+export def MIX_MAX_VOLUME: int = 128; // XXX: SDL_mixer derives this from SDL_MIX_MAXVOLUME
+
+// Sets the Mix_Chunk volume as specified, returning the previous value.
+export @symbol("Mix_VolumeChunk") fn Mix_VolumeChunk(Mix_Chunk: *Mix_Chunk, volume: int) int;