fix .dmf saving

This commit is contained in:
tildearrow 2022-05-26 17:42:30 -05:00
parent 9d36cf5ff0
commit 7cf853797a
2 changed files with 12 additions and 13 deletions

View file

@ -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);

View file

@ -465,7 +465,6 @@ struct DivInstrument {
bool save(const char* path);
DivInstrument():
name(""),
mode(false),
type(DIV_INS_FM) {
}
};