mixLoadWavIo function
Load a supported audio format into a chunk.
SDL_mixer has two separate data structures for audio data. One it calls a "chunk," which is meant to be a file completely decoded into memory up front, and the other it calls "music" which is a file intended to be decoded on demand. Originally, simple formats like uncompressed WAV files were meant to be chunks and compressed things, like MP3s, were meant to be music, and you would stream one thing for a game's music and make repeating sound effects with the chunks.
In modern times, this isn't split by format anymore, and most are interchangeable, so the question is what the app thinks is worth predecoding or not. Chunks might take more memory, but once they are loaded won't need to decode again, whereas music always needs to be decoded on the fly. Also, crucially, there are as many channels for chunks as the app can allocate, but SDL_mixer only offers a single "music" channel.
If closeio
is true, the IOStream will be closed before returning, whether
this function succeeds or not. SDL_mixer reads everything it needs from the
IOStream during this call in any case.
There is a separate function (a macro, before SDL_mixer 3.0.0) to read
files from disk without having to deal with SDL_IOStream:
Mix_LoadWAV("filename.wav")
will call this function and manage those
details for you.
When done with a chunk, the app should dispose of it with a call to Mix_FreeChunk().
\param src an SDL_IOStream that data will be read from. \param closeio true to close the SDL_IOStream before returning, false to leave it open. \returns a new chunk, or NULL on error.
\since This function is available since SDL_mixer 3.0.0
\sa Mix_LoadWAV \sa Mix_FreeChunk
extern SDL_DECLSPEC Mix_Chunk * SDLCALL Mix_LoadWAV_IO(SDL_IOStream *src, bool closeio)
Implementation
Pointer<MixChunk> mixLoadWavIo(Pointer<SdlIoStream> src, bool closeio) {
final mixLoadWavIoLookupFunction = libSdl3Mixer.lookupFunction<
Pointer<MixChunk> Function(Pointer<SdlIoStream> src, Uint8 closeio),
Pointer<MixChunk> Function(
Pointer<SdlIoStream> src, int closeio)>('Mix_LoadWAV_IO');
return mixLoadWavIoLookupFunction(src, closeio ? 1 : 0);
}