X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fmusic.c;fp=src%2Fmusic.c;h=365ad01d1c26a6a42fc5dbc941f62398aff59e16;hb=a714b8c4811627d874934b0a0387b8cb27fc5921;hp=0000000000000000000000000000000000000000;hpb=cf94899f4f4d8535074db6421245b973d2fcde8c;p=dosdemo diff --git a/src/music.c b/src/music.c new file mode 100644 index 0000000..365ad01 --- /dev/null +++ b/src/music.c @@ -0,0 +1,62 @@ +#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); + } +} + +void music_play(void) +{ + Player_Start(mod); +} + +void music_stop(void) +{ + Player_Stop(); +} + +void music_update(void) +{ + if(Player_Active()) { + MikMod_Update(); + } +}