Refactoring: Simplify music_cdrom.c

This commit is contained in:
kichikuou
2022-06-26 16:30:52 +09:00
parent 3f36eeee4c
commit 1cf0dbc7e2
6 changed files with 17 additions and 99 deletions
-1
View File
@@ -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);
}
+1 -6
View File
@@ -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() {
+2 -6
View File
@@ -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();
}
/*
+13 -68
View File
@@ -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;
}
-16
View File
@@ -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__ */
+1 -2
View File
@@ -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