diff options
author | JP Cimalando <jpcima@users.noreply.github.com> | 2018-07-18 13:19:51 +0200 |
---|---|---|
committer | JP Cimalando <jpcima@users.noreply.github.com> | 2018-07-18 13:19:51 +0200 |
commit | 3ce752cc07315be5933f5e02a259fcf4b509aae3 (patch) | |
tree | 319265b9e92dc3f384cdc7f8c6287de0a8577b87 /src/adlmidi_load.cpp | |
parent | a184c33a75b9b29a7277dcd01f00a744e2fe8306 (diff) | |
download | libADLMIDI-3ce752cc07315be5933f5e02a259fcf4b509aae3.tar.gz libADLMIDI-3ce752cc07315be5933f5e02a259fcf4b509aae3.tar.bz2 libADLMIDI-3ce752cc07315be5933f5e02a259fcf4b509aae3.zip |
fix the conversion of FMIns->ADLI operators
Diffstat (limited to 'src/adlmidi_load.cpp')
-rw-r--r-- | src/adlmidi_load.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp index fcabd2b..1bb004f 100644 --- a/src/adlmidi_load.cpp +++ b/src/adlmidi_load.cpp @@ -117,20 +117,17 @@ static void cvt_FMIns_to_generic(WOPLI &ins, const adlinsdata2 &in) ins.inst_flags|= (in.flags & adlinsdata::Flag_Pseudo4op) ? WOPL_Ins_Pseudo4op : 0; ins.inst_flags|= (in.flags & adlinsdata::Flag_NoSound) ? WOPL_Ins_IsBlank : 0; - for(size_t op = 0, slt = 0; op < static_cast<size_t>(fourOps ? 4 : 2); op++, slt++) + for(size_t op = 0; op < 4; op++) { - ins.operators[op].waveform_E0 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 24); - ins.operators[op].susrel_80 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 16); - ins.operators[op].atdec_60 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 8); - ins.operators[op].avekf_20 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 0); - ins.operators[op].ksl_l_40 = in.adl[slt].carrier_40; - - op++; - ins.operators[op].waveform_E0 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 24); - ins.operators[op].susrel_80 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 16); - ins.operators[op].atdec_60 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 8); - ins.operators[op].avekf_20 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 0); - ins.operators[op].ksl_l_40 = in.adl[slt].carrier_40; + const adldata &in2op = in.adl[(op < 2) ? 0 : 1]; + uint32_t regE862 = ((op & 1) == 0) ? in2op.carrier_E862 : in2op.modulator_E862; + uint8_t reg40 = ((op & 1) == 0) ? in2op.carrier_40 : in2op.modulator_40; + + ins.operators[op].waveform_E0 = static_cast<uint8_t>(regE862 >> 24); + ins.operators[op].susrel_80 = static_cast<uint8_t>(regE862 >> 16); + ins.operators[op].atdec_60 = static_cast<uint8_t>(regE862 >> 8); + ins.operators[op].avekf_20 = static_cast<uint8_t>(regE862 >> 0); + ins.operators[op].ksl_l_40 = reg40; } ins.note_offset1 = in.adl[0].finetune; |