X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fmusic.c;h=f4327f56877e96542873bafcc2c87349f116d9bd;hp=365ad01d1c26a6a42fc5dbc941f62398aff59e16;hb=a5c65ceb155188c8acee31a475f8db9f5b58f4b6;hpb=a714b8c4811627d874934b0a0387b8cb27fc5921 diff --git a/src/music.c b/src/music.c index 365ad01..f4327f5 100644 --- a/src/music.c +++ b/src/music.c @@ -1,21 +1,54 @@ +#include #include "music.h" #include "mikmod.h" +#ifdef __WATCOMC__ +#define USE_OLDMIK +typedef UNIMOD MODULE; + +static void update_callback(void); +static void MikMod_RegisterAllDrivers(void); +static void MikMod_RegisterAllLoaders(void); +#else +#define USE_NEWMIK +#endif + static MODULE *mod; static int initialized; - static int init(void) { MikMod_RegisterAllDrivers(); MikMod_RegisterAllLoaders(); - md_mode |= DMODE_SOFT_MUSIC; +#ifdef USE_NEWMIK + md_mode |= DMODE_SOFT_MUSIC | DMODE_16BITS | DMODE_STEREO | DMODE_INTERP; if(MikMod_Init("") != 0) { fprintf(stderr, "mikmod init failed: %s\n", MikMod_strerror(MikMod_errno)); return -1; } + +#else + md_mixfreq = 44100; + md_dmabufsize = 20000; + md_mode = DMODE_STEREO | DMODE_16BITS | DMODE_INTERP; + md_device = 0; + + MD_RegisterPlayer(update_callback); + + if(!MD_Init()) { + fprintf(stderr, "mikmod init failed: %s\n", myerr); + return -1; + } + printf("using mikmod driver %s\n", md_driver->Name); + printf(" %d bits, %s, %s mixing at %d Hz\n", md_mode & DMODE_16BITS ? 16 : 8, + md_mode & DMODE_STEREO ? "stereo" : "mono", + md_mode & DMODE_INTERP ? "interpolated" : "normal", + md_mixfreq); + + atexit(MD_Exit); +#endif return 0; } @@ -28,35 +61,92 @@ int music_open(const char *fname) initialized = 1; } +#ifdef USE_NEWMIK if(!(mod = Player_Load(fname, 64, 0))) { fprintf(stderr, "failed to load music: %s: %s\n", fname, MikMod_strerror(MikMod_errno)); return -1; } +#else + if(!(mod = ML_LoadFN((char*)fname))) { + fprintf(stderr, "failed to load music: %s: %s\n", fname, myerr); + return -1; + } + + MP_Init(mod); + md_numchn = mod->numchn; + printf("opened module %s (%d channels)\n", fname, md_numchn); +#endif return 0; } void music_close(void) { if(mod) { + printf("shutting down music playback\n"); music_stop(); +#ifdef USE_NEWMIK Player_Free(mod); +#else + ML_Free(mod); +#endif + mod = 0; } } void music_play(void) { +#ifdef USE_NEWMIK Player_Start(mod); +#else + MD_PlayStart(); +#endif } void music_stop(void) { +#ifdef USE_NEWMIK Player_Stop(); +#else + MD_PlayStop(); +#endif } void music_update(void) { +#ifdef USE_NEWMIK if(Player_Active()) { MikMod_Update(); } +#else + MD_Update(); +#endif +} + +#ifdef USE_OLDMIK +static void update_callback(void) +{ + MP_HandleTick(); + MD_SetBPM(mp_bpm); +} + +static void MikMod_RegisterAllDrivers(void) +{ + MD_RegisterDriver(&drv_nos); + MD_RegisterDriver(&drv_ss); + MD_RegisterDriver(&drv_sb); + MD_RegisterDriver(&drv_gus); +} + +static void MikMod_RegisterAllLoaders(void) +{ + ML_RegisterLoader(&load_m15); + ML_RegisterLoader(&load_mod); + ML_RegisterLoader(&load_mtm); + ML_RegisterLoader(&load_s3m); + ML_RegisterLoader(&load_stm); + ML_RegisterLoader(&load_ult); + ML_RegisterLoader(&load_uni); + ML_RegisterLoader(&load_xm); } +#endif