From 261881e57cbfd3596f54075016de19b81aae0f31 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Thu, 19 Mar 2026 19:44:34 +0100 Subject: [PATCH] vendor/stb/vorbis: support WASM --- vendor/stb/lib/stb_vorbis_wasm.o | Bin 0 -> 50828 bytes vendor/stb/src/Makefile | 3 +- vendor/stb/vorbis/stb_vorbis.odin | 61 +++++++++++++++---------- vendor/stb/vorbis/stb_vorbis_wasm.odin | 4 ++ 4 files changed, 42 insertions(+), 26 deletions(-) create mode 100644 vendor/stb/lib/stb_vorbis_wasm.o create mode 100644 vendor/stb/vorbis/stb_vorbis_wasm.odin diff --git a/vendor/stb/lib/stb_vorbis_wasm.o b/vendor/stb/lib/stb_vorbis_wasm.o new file mode 100644 index 0000000000000000000000000000000000000000..156696d78c5b743614b974c203d603b11b825996 GIT binary patch literal 50828 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 c.int --- + when !NO_STDIO { + // decode an entire file and output the data interleaved into a malloc()ed + // buffer stored in *output. The return value is the number of samples + // decoded, or -1 if the file could not be opened or was not an ogg vorbis file. + // When you're done with it, just free() the pointer returned in *output. + decode_filename :: proc(filename: cstring, channels, sample_rate: ^c.int, output: ^[^]c.short) -> c.int --- + } decode_memory :: proc(mem: [^]byte, len: c.int, channels, sample_rate: ^c.int, output: ^[^]c.short) -> c.int --- @@ -204,28 +213,30 @@ foreign lib { open_memory :: proc(data: [^]byte, len: c.int, error: ^Error, alloc_buffer: ^vorbis_alloc) -> ^vorbis --- - // create an ogg vorbis decoder from a filename via fopen(). on failure, - // returns NULL and sets *error (possibly to VORBIS_file_open_failure). - open_filename :: proc(filename: cstring, - error: ^Error, alloc_buffer: ^vorbis_alloc) -> ^vorbis --- + when !NO_STDIO { + // create an ogg vorbis decoder from a filename via fopen(). on failure, + // returns NULL and sets *error (possibly to VORBIS_file_open_failure). + open_filename :: proc(filename: cstring, + error: ^Error, alloc_buffer: ^vorbis_alloc) -> ^vorbis --- - // create an ogg vorbis decoder from an open FILE *, looking for a stream at - // the _current_ seek point (ftell). on failure, returns NULL and sets *error. - // note that stb_vorbis must "own" this stream; if you seek it in between - // calls to stb_vorbis, it will become confused. Moreover, if you attempt to - // perform stb_vorbis_seek_*() operations on this file, it will assume it - // owns the _entire_ rest of the file after the start point. Use the next - // function, stb_vorbis_open_file_section(), to limit it. - open_file :: proc(f: ^c.FILE, close_handle_on_close: b32, - error: ^Error, alloc_buffer: ^vorbis_alloc) -> ^vorbis --- + // create an ogg vorbis decoder from an open FILE *, looking for a stream at + // the _current_ seek point (ftell). on failure, returns NULL and sets *error. + // note that stb_vorbis must "own" this stream; if you seek it in between + // calls to stb_vorbis, it will become confused. Moreover, if you attempt to + // perform stb_vorbis_seek_*() operations on this file, it will assume it + // owns the _entire_ rest of the file after the start point. Use the next + // function, stb_vorbis_open_file_section(), to limit it. + open_file :: proc(f: ^c.FILE, close_handle_on_close: b32, + error: ^Error, alloc_buffer: ^vorbis_alloc) -> ^vorbis --- - // create an ogg vorbis decoder from an open FILE *, looking for a stream at - // the _current_ seek point (ftell); the stream will be of length 'len' bytes. - // on failure, returns NULL and sets *error. note that stb_vorbis must "own" - // this stream; if you seek it in between calls to stb_vorbis, it will become - // confused. - open_file_section :: proc(f: ^c.FILE, close_handle_on_close: b32, - error: ^Error, alloc_buffer: ^vorbis_alloc, len: c.uint) -> ^vorbis --- + // create an ogg vorbis decoder from an open FILE *, looking for a stream at + // the _current_ seek point (ftell); the stream will be of length 'len' bytes. + // on failure, returns NULL and sets *error. note that stb_vorbis must "own" + // this stream; if you seek it in between calls to stb_vorbis, it will become + // confused. + open_file_section :: proc(f: ^c.FILE, close_handle_on_close: b32, + error: ^Error, alloc_buffer: ^vorbis_alloc, len: c.uint) -> ^vorbis --- + } // these functions seek in the Vorbis file to (approximately) 'sample_number'. // after calling seek_frame(), the next call to get_frame_*() will include diff --git a/vendor/stb/vorbis/stb_vorbis_wasm.odin b/vendor/stb/vorbis/stb_vorbis_wasm.odin new file mode 100644 index 000000000..324b7e025 --- /dev/null +++ b/vendor/stb/vorbis/stb_vorbis_wasm.odin @@ -0,0 +1,4 @@ +#+build wasm32, wasm64p32 +package stb_vorbis + +@(require) import _ "vendor:libc-shim"