X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fsdl%2Fmusic.c;fp=src%2Fsdl%2Fmusic.c;h=e194764b2d321e4b7cd04a6103f35aca861db1fc;hp=0000000000000000000000000000000000000000;hb=77db1ca18d5446dcda9e524261399b63c2cd1813;hpb=a714b8c4811627d874934b0a0387b8cb27fc5921 diff --git a/src/sdl/music.c b/src/sdl/music.c new file mode 100644 index 0000000..e194764 --- /dev/null +++ b/src/sdl/music.c @@ -0,0 +1,63 @@ +#include "music.h" +#include "mikmod.h" + +static MODULE *mod; +static int initialized; + + +static int init(void) +{ + MikMod_RegisterAllDrivers(); + MikMod_RegisterAllLoaders(); + + md_mode |= DMODE_SOFT_MUSIC; + if(MikMod_Init("") != 0) { + fprintf(stderr, "mikmod init failed: %s\n", + MikMod_strerror(MikMod_errno)); + return -1; + } + return 0; +} + +int music_open(const char *fname) +{ + if(!initialized) { + if(init() == -1) { + return -1; + } + initialized = 1; + } + + if(!(mod = Player_Load(fname, 64, 0))) { + fprintf(stderr, "failed to load music: %s: %s\n", fname, + MikMod_strerror(MikMod_errno)); + return -1; + } + return 0; +} + +void music_close(void) +{ + if(mod) { + music_stop(); + Player_Free(mod); + mod = 0; + } +} + +void music_play(void) +{ + Player_Start(mod); +} + +void music_stop(void) +{ + Player_Stop(); +} + +void music_update(void) +{ + if(Player_Active()) { + MikMod_Update(); + } +}