From a454afcd19568b251a3e320d32b39ce629a7bfea Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 11 Apr 2022 21:08:58 +0900 Subject: [PATCH 1/3] Fix possible instrument loading fix --- src/engine/instrument.cpp | 48 +++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 68896a45..ee2e08dd 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -698,18 +698,42 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) { for (int i=0; i<4; i++) { DivInstrumentSTD::OpMacro& op=std.opMacros[i]; - reader.read(op.amMacro.val,op.amMacro.len); - reader.read(op.arMacro.val,op.arMacro.len); - reader.read(op.drMacro.val,op.drMacro.len); - reader.read(op.multMacro.val,op.multMacro.len); - reader.read(op.rrMacro.val,op.rrMacro.len); - reader.read(op.slMacro.val,op.slMacro.len); - reader.read(op.tlMacro.val,op.tlMacro.len); - reader.read(op.dt2Macro.val,op.dt2Macro.len); - reader.read(op.rsMacro.val,op.rsMacro.len); - reader.read(op.dtMacro.val,op.dtMacro.len); - reader.read(op.d2rMacro.val,op.d2rMacro.len); - reader.read(op.ssgMacro.val,op.ssgMacro.len); + for (int j=0; j Date: Mon, 11 Apr 2022 21:15:52 +0900 Subject: [PATCH 2/3] Fix possibly breaks instrument loading --- src/engine/instrument.cpp | 134 ++++++++++++++++++++++++++++++++++---- 1 file changed, 122 insertions(+), 12 deletions(-) diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index ee2e08dd..3501b34a 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -233,43 +233,44 @@ void DivInstrument::putInsData(SafeWriter* w) { w->writeC(op.ssgMacro.open); } + // FM macro low 8 bits for (int i=0; i<4; i++) { DivInstrumentSTD::OpMacro& op=std.opMacros[i]; for (int j=0; jwriteC(op.amMacro.val[j]); + w->writeC(op.amMacro.val[j]&0xff); } for (int j=0; jwriteC(op.arMacro.val[j]); + w->writeC(op.arMacro.val[j]&0xff); } for (int j=0; jwriteC(op.drMacro.val[j]); + w->writeC(op.drMacro.val[j]&0xff); } for (int j=0; jwriteC(op.multMacro.val[j]); + w->writeC(op.multMacro.val[j]&0xff); } for (int j=0; jwriteC(op.rrMacro.val[j]); + w->writeC(op.rrMacro.val[j]&0xff); } for (int j=0; jwriteC(op.slMacro.val[j]); + w->writeC(op.slMacro.val[j]&0xff); } for (int j=0; jwriteC(op.tlMacro.val[j]); + w->writeC(op.tlMacro.val[j]&0xff); } for (int j=0; jwriteC(op.dt2Macro.val[j]); + w->writeC(op.dt2Macro.val[j]&0xff); } for (int j=0; jwriteC(op.rsMacro.val[j]); + w->writeC(op.rsMacro.val[j]&0xff); } for (int j=0; jwriteC(op.dtMacro.val[j]); + w->writeC(op.dtMacro.val[j]&0xff); } for (int j=0; jwriteC(op.d2rMacro.val[j]); + w->writeC(op.d2rMacro.val[j]&0xff); } for (int j=0; jwriteC(op.ssgMacro.val[j]); + w->writeC(op.ssgMacro.val[j]&0xff); } } @@ -480,6 +481,59 @@ void DivInstrument::putInsData(SafeWriter* w) { w->writeC(ws.param2); w->writeC(ws.param3); w->writeC(ws.param4); + + // FM macro high 24 bits + for (int i=0; i<4; i++) { + DivInstrumentSTD::OpMacro& op=std.opMacros[i]; + for (int j=0; jwriteC((op.amMacro.val[j]>>8)&0xff); + w->writeS((op.amMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.arMacro.val[j]>>8)&0xff); + w->writeS((op.arMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.drMacro.val[j]>>8)&0xff); + w->writeS((op.drMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.multMacro.val[j]>>8)&0xff); + w->writeS((op.multMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.rrMacro.val[j]>>8)&0xff); + w->writeS((op.rrMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.slMacro.val[j]>>8)&0xff); + w->writeS((op.slMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.tlMacro.val[j]>>8)&0xff); + w->writeS((op.tlMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.dt2Macro.val[j]>>8)&0xff); + w->writeS((op.dt2Macro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.rsMacro.val[j]>>8)&0xff); + w->writeS((op.rsMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.dtMacro.val[j]>>8)&0xff); + w->writeS((op.dtMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.d2rMacro.val[j]>>8)&0xff); + w->writeS((op.d2rMacro.val[j]>>16)&0xffff); + } + for (int j=0; jwriteC((op.ssgMacro.val[j]>>8)&0xff); + w->writeS((op.ssgMacro.val[j]>>16)&0xffff); + } + } } DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) { @@ -696,6 +750,7 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) { op.ssgMacro.open=reader.readC(); } + // FM macro low 8 bits for (int i=0; i<4; i++) { DivInstrumentSTD::OpMacro& op=std.opMacros[i]; for (int j=0; j=81) { + for (int i=0; i<4; i++) { + DivInstrumentSTD::OpMacro& op=std.opMacros[i]; + for (int j=0; j Date: Mon, 11 Apr 2022 22:37:34 -0500 Subject: [PATCH 3/3] don't store the upper 24 bits of FM macro values those are unnecessary (no FM parameter ever goes above 255) --- src/engine/instrument.cpp | 108 -------------------------------------- 1 file changed, 108 deletions(-) diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 3501b34a..7dbf5b3f 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -233,7 +233,6 @@ void DivInstrument::putInsData(SafeWriter* w) { w->writeC(op.ssgMacro.open); } - // FM macro low 8 bits for (int i=0; i<4; i++) { DivInstrumentSTD::OpMacro& op=std.opMacros[i]; for (int j=0; jwriteC(ws.param2); w->writeC(ws.param3); w->writeC(ws.param4); - - // FM macro high 24 bits - for (int i=0; i<4; i++) { - DivInstrumentSTD::OpMacro& op=std.opMacros[i]; - for (int j=0; jwriteC((op.amMacro.val[j]>>8)&0xff); - w->writeS((op.amMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.arMacro.val[j]>>8)&0xff); - w->writeS((op.arMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.drMacro.val[j]>>8)&0xff); - w->writeS((op.drMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.multMacro.val[j]>>8)&0xff); - w->writeS((op.multMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.rrMacro.val[j]>>8)&0xff); - w->writeS((op.rrMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.slMacro.val[j]>>8)&0xff); - w->writeS((op.slMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.tlMacro.val[j]>>8)&0xff); - w->writeS((op.tlMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.dt2Macro.val[j]>>8)&0xff); - w->writeS((op.dt2Macro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.rsMacro.val[j]>>8)&0xff); - w->writeS((op.rsMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.dtMacro.val[j]>>8)&0xff); - w->writeS((op.dtMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.d2rMacro.val[j]>>8)&0xff); - w->writeS((op.d2rMacro.val[j]>>16)&0xffff); - } - for (int j=0; jwriteC((op.ssgMacro.val[j]>>8)&0xff); - w->writeS((op.ssgMacro.val[j]>>16)&0xffff); - } - } } DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) { @@ -1001,60 +947,6 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) { ws.param4=reader.readC(); } - // FM macro high 24 bits - if (version>=81) { - for (int i=0; i<4; i++) { - DivInstrumentSTD::OpMacro& op=std.opMacros[i]; - for (int j=0; j