From a454afcd19568b251a3e320d32b39ce629a7bfea Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 11 Apr 2022 21:08:58 +0900 Subject: [PATCH 1/2] 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/2] 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