fix .dmf saving
This commit is contained in:
parent
9d36cf5ff0
commit
7cf853797a
|
@ -308,19 +308,19 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
|||
logI("reading instruments (%d)...",ds.insLen);
|
||||
for (int i=0; i<ds.insLen; i++) {
|
||||
DivInstrument* ins=new DivInstrument;
|
||||
unsigned char mode=0;
|
||||
if (ds.version>0x05) {
|
||||
ins->name=reader.readString((unsigned char)reader.readC());
|
||||
}
|
||||
logD("%d name: %s",i,ins->name.c_str());
|
||||
if (ds.version<0x0b) {
|
||||
// instruments in ancient versions were all FM or STD.
|
||||
ins->mode=1;
|
||||
mode=1;
|
||||
} else {
|
||||
unsigned char mode=reader.readC();
|
||||
mode=reader.readC();
|
||||
if (mode>1) logW("%d: invalid instrument mode %d!",i,mode);
|
||||
ins->mode=mode;
|
||||
}
|
||||
ins->type=ins->mode?DIV_INS_FM:DIV_INS_STD;
|
||||
ins->type=mode?DIV_INS_FM:DIV_INS_STD;
|
||||
if (ds.system[0]==DIV_SYSTEM_GB) {
|
||||
ins->type=DIV_INS_GB;
|
||||
}
|
||||
|
@ -330,7 +330,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
|||
if (ds.system[0]==DIV_SYSTEM_YM2610 || ds.system[0]==DIV_SYSTEM_YM2610_EXT
|
||||
|| ds.system[0]==DIV_SYSTEM_YM2610_FULL || ds.system[0]==DIV_SYSTEM_YM2610_FULL_EXT
|
||||
|| ds.system[0]==DIV_SYSTEM_YM2610B || ds.system[0]==DIV_SYSTEM_YM2610B_EXT) {
|
||||
if (!ins->mode) {
|
||||
if (!mode) {
|
||||
ins->type=DIV_INS_AY;
|
||||
}
|
||||
}
|
||||
|
@ -344,7 +344,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
|||
ins->type=DIV_INS_OPL;
|
||||
}
|
||||
|
||||
if (ins->mode) { // FM
|
||||
if (mode) { // FM
|
||||
if (ds.version>0x05) {
|
||||
ins->fm.alg=reader.readC();
|
||||
if (ds.version<0x13) {
|
||||
|
@ -3231,15 +3231,15 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
|
|||
w->writeString(i->name,true);
|
||||
|
||||
// safety check
|
||||
if (!isFMSystem(sys) && i->mode) {
|
||||
i->mode=0;
|
||||
if (!isFMSystem(sys) && i->type!=DIV_INS_STD && i->type!=DIV_INS_FDS) {
|
||||
i->type=DIV_INS_STD;
|
||||
}
|
||||
if (!isSTDSystem(sys) && i->mode==0) {
|
||||
i->mode=1;
|
||||
if (!isSTDSystem(sys) && i->type!=DIV_INS_FM) {
|
||||
i->type=DIV_INS_FM;
|
||||
}
|
||||
|
||||
w->writeC(i->mode);
|
||||
if (i->mode) { // FM
|
||||
w->writeC((i->type==DIV_INS_FM || i->type==DIV_INS_OPLL)?1:0);
|
||||
if (i->type==DIV_INS_FM || i->type==DIV_INS_OPLL) { // FM
|
||||
w->writeC(i->fm.alg);
|
||||
w->writeC(i->fm.fb);
|
||||
w->writeC(i->fm.fms);
|
||||
|
|
|
@ -465,7 +465,6 @@ struct DivInstrument {
|
|||
bool save(const char* path);
|
||||
DivInstrument():
|
||||
name(""),
|
||||
mode(false),
|
||||
type(DIV_INS_FM) {
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue