From 0fd2a97e6f169468b3a48f996ba35cd70210baa0 Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Wed, 16 Jan 2019 17:22:42 -0500 Subject: add src/sdl/sounds.[hc], assets/wavs, and set default sounds --- src/sdl/sounds.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/sdl/sounds.c (limited to 'src/sdl/sounds.c') diff --git a/src/sdl/sounds.c b/src/sdl/sounds.c new file mode 100644 index 0000000..956229c --- /dev/null +++ b/src/sdl/sounds.c @@ -0,0 +1,47 @@ +#include +#include "util.h" +#include "assets.h" +#include "sounds.h" + +#define SOUND_OFS(asset_id) ((asset_id) - ASSET_SOUND_FIRST - 1) + +void +sounds_init( + Mix_Chunk ** const sounds +) { + for (asset_id_t id = ASSET_SOUND_FIRST + 1; id < ASSET_SOUND_LAST; id++) { + // get asset + const asset_t * const asset = asset_get(id); + + // create rwops + SDL_RWops *rw = SDL_RWFromConstMem(asset->buf, asset->len); + if (!rw) { + die("SDL_RWFromConstMem(): %s", SDL_GetError()); + } + + // load chunk + Mix_Chunk *chunk = Mix_LoadWAV_RW(rw, 1); + if (!chunk) { + die("Mix_LoadWAV_RW(): %s", Mix_GetError()); + } + + // add to list of sounds + sounds[SOUND_OFS(id)] = chunk; + } +} + +void +sound_play( + Mix_Chunk ** const sounds, + const asset_id_t id +) { + // check ID + if (id <= ASSET_SOUND_FIRST || id >= ASSET_SOUND_LAST) { + die("invalid sound asset id: %u", id); + } + + // play sound + if (Mix_PlayChannel(-1, sounds[SOUND_OFS(id)], 0)) { + die("Mix_PlayChannel(): %s", Mix_GetError()); + } +} -- cgit v1.2.3