mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-22 22:48:08 +03:00
Refactoring: Simplify music_cdrom.c
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user