diff --git a/modules/NIGHTDLL/nt_sound.c b/modules/NIGHTDLL/nt_sound.c index cca4817..c444977 100644 --- a/modules/NIGHTDLL/nt_sound.c +++ b/modules/NIGHTDLL/nt_sound.c @@ -23,7 +23,6 @@ void nt_voice_set(int no) { } void nt_cd_play(int no) { - mus_cdrom_stop(); mus_cdrom_start(no +1, 0); } diff --git a/src/cmds.c b/src/cmds.c index ac4637b..ae31f7d 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -37,21 +37,16 @@ static int next_cdrom_loopcnt = 0; void commandSS() { /* 音楽演奏を開始する(CDのみ)*/ int num = getCaliValue(); - static int pre = 0; DEBUG_COMMAND("SS %d:\n",num); if (num == 0) { mus_cdrom_stop(); } else { - if (pre != num) { - mus_cdrom_stop(); - mus_cdrom_start(num + 1, next_cdrom_loopcnt); - } + mus_cdrom_start(num + 1, next_cdrom_loopcnt); } next_cdrom_loopcnt = 0; - pre = num; } void commandSC() { diff --git a/src/music.c b/src/music.c index 21a5a96..061f3f3 100644 --- a/src/music.c +++ b/src/music.c @@ -57,9 +57,7 @@ void mus_reset(void) { */ int mus_cdrom_start(int track, int loop) { if (!prv.cd_valid) return NG; - muscd_start(track, loop); - muscd_cb(); - return OK; + return muscd_start(track, loop); } /* @@ -67,9 +65,7 @@ int mus_cdrom_start(int track, int loop) { */ int mus_cdrom_stop() { if (!prv.cd_valid) return NG; - muscd_stop(); - muscd_cb(); - return OK; + return muscd_stop(); } /* diff --git a/src/music_cdrom.c b/src/music_cdrom.c index ce3d068..5fc4ff9 100644 --- a/src/music_cdrom.c +++ b/src/music_cdrom.c @@ -29,30 +29,15 @@ #include "music_cdrom.h" #include "cdrom.h" -enum { - CDROM_START, - CDROM_STOPCHECK, - CDROM_LOOPCHECK, - CDROM_STOP, - CDROM_NOP -}; - int muscd_init(void) { int st = cd_init(&prv.cddev); - int ret; - if (st == -1) { prv.cd_valid = FALSE; - ret = NG; - } else { - prv.cd_valid = TRUE; - prv.cdrom.dev = &prv.cddev; - prv.cdrom.st = CDROM_NOP; - prv.cdrom.in_play = FALSE; - ret = OK; + return NG; } - - return ret; + prv.cd_valid = TRUE; + prv.cd_current_track = 0; + return OK; } int muscd_exit(void) { @@ -65,67 +50,27 @@ int muscd_exit(void) { int muscd_reset(void) { if (prv.cd_valid) { prv.cddev.reset(); + prv.cd_current_track = 0; } return OK; } int muscd_start(int trk, int loop) { - prv.cdrom.track = trk; - prv.cdrom.loop = loop; - prv.cdrom.cnt = 0; - - prv.cdrom.st = CDROM_START; - prv.cdrom.in_play = FALSE; - - memset(&prv.cdrom.time, 0, sizeof(cd_time)); - + if (trk == prv.cd_current_track) + return OK; + prv.cddev.stop(); + + prv.cddev.start(trk, loop); + prv.cd_current_track = trk; return OK; } int muscd_stop(void) { - prv.cdrom.st = CDROM_STOP; + prv.cddev.stop(); + prv.cd_current_track = 0; return OK; } int muscd_getpos(cd_time *tm) { return prv.cddev.getpos(tm); } - -int muscd_cb(void) { - cdobj_t *obj = &prv.cdrom; - - switch(obj->st) { - case CDROM_START: - obj->in_play = TRUE; - obj->dev->start(obj->track, obj->loop); - obj->st = CDROM_STOPCHECK; - break; - case CDROM_STOPCHECK: - if (NG == obj->dev->getpos(&(obj->time))) { - obj->st = CDROM_LOOPCHECK; - } - break; - case CDROM_LOOPCHECK: - obj->cnt++; - if (obj->loop == 0) { - obj->st = CDROM_START; - break; - } - if (--obj->loop == 0) { - obj->st = CDROM_STOP; - } else { - obj->st = CDROM_START; - } - break; - case CDROM_STOP: - obj->dev->stop(); - - obj->in_play = FALSE; - obj->st = CDROM_NOP; - break; - case CDROM_NOP: - break; - } - - return OK; -} diff --git a/src/music_cdrom.h b/src/music_cdrom.h index a541ea5..36b5bda 100644 --- a/src/music_cdrom.h +++ b/src/music_cdrom.h @@ -27,27 +27,11 @@ #include "portab.h" #include "cdrom.h" -struct _cdobj { - int st; // オブジェクトの遷移状態 - - int track; // 演奏トラック - int loop; // くりかえし数 (0の場合は無限) - int cnt; // 実際に繰り返した数 - - boolean in_play; // 演奏中? - - cd_time time; // 演奏位置 - - cdromdevice_t *dev; -}; -typedef struct _cdobj cdobj_t; - int muscd_init(void); int muscd_exit(void); int muscd_reset(void); int muscd_start(int trk, int loop); int muscd_stop(void); int muscd_getpos(cd_time *tm); -int muscd_cb(void); #endif /* __MUSIC_CDROM_H__ */ diff --git a/src/music_private.h b/src/music_private.h index d5f5e7c..6083d2b 100644 --- a/src/music_private.h +++ b/src/music_private.h @@ -38,7 +38,6 @@ struct _musprvdat { cdromdevice_t cddev; mididevice_t mididev; - cdobj_t cdrom; // cdrom object midiobj_t midi; // midi object // ゲーム内での volume 設定 (%値) @@ -49,8 +48,8 @@ struct _musprvdat { int vol_pcm_sub[128 + 1 + 2]; // volval の channel int volval[16]; // 各channel 毎の volume valance - // 最大トラック数 int cd_maxtrk; + int cd_current_track; }; #define prv musprv