diff options
-rw-r--r-- | src/adlmidi_load.cpp | 27 | ||||
-rw-r--r-- | src/adlmidi_midiplay.cpp | 7 | ||||
-rw-r--r-- | src/adlmidi_private.cpp | 4 |
3 files changed, 12 insertions, 26 deletions
diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp index 1bb004f..4293202 100644 --- a/src/adlmidi_load.cpp +++ b/src/adlmidi_load.cpp @@ -58,8 +58,7 @@ static void cvt_generic_to_FMIns(adlinsdata2 &ins, const WOPLI &in) ins.flags|= (in.inst_flags & WOPL_Ins_4op) && ((in.inst_flags & WOPL_Ins_Pseudo4op) == 0) ? adlinsdata::Flag_Real4op : 0; ins.flags|= (in.inst_flags & WOPL_Ins_IsBlank) ? adlinsdata::Flag_NoSound : 0; - bool fourOps = (in.inst_flags & WOPL_Ins_4op) || (in.inst_flags & WOPL_Ins_Pseudo4op); - for(size_t op = 0, slt = 0; op < static_cast<size_t>(fourOps ? 4 : 2); op++, slt++) + for(size_t op = 0, slt = 0; op < 4; op++, slt++) { ins.adl[slt].carrier_E862 = ((static_cast<uint32_t>(in.operators[op].waveform_E0) << 24) & 0xFF000000) //WaveForm @@ -79,13 +78,8 @@ static void cvt_generic_to_FMIns(adlinsdata2 &ins, const WOPLI &in) ins.adl[0].finetune = static_cast<int8_t>(in.note_offset1); ins.adl[0].feedconn = in.fb_conn1_C0; - if(!fourOps) - ins.adl[1] = ins.adl[0]; - else - { - ins.adl[1].finetune = static_cast<int8_t>(in.note_offset2); - ins.adl[1].feedconn = in.fb_conn2_C0; - } + ins.adl[1].finetune = static_cast<int8_t>(in.note_offset2); + ins.adl[1].feedconn = in.fb_conn2_C0; ins.ms_sound_kon = in.delay_on_ms; ins.ms_sound_koff = in.delay_off_ms; @@ -112,8 +106,7 @@ static void cvt_FMIns_to_generic(WOPLI &ins, const adlinsdata2 &in) } ins.percussion_key_number = in.tone; - bool fourOps = (in.flags & adlinsdata::Flag_Pseudo4op) || in.adl[0] != in.adl[1]; - ins.inst_flags = fourOps ? WOPL_Ins_4op : 0; + ins.inst_flags = (in.flags & (adlinsdata::Flag_Pseudo4op|adlinsdata::Flag_Real4op)) ? WOPL_Ins_4op : 0; ins.inst_flags|= (in.flags & adlinsdata::Flag_Pseudo4op) ? WOPL_Ins_Pseudo4op : 0; ins.inst_flags|= (in.flags & adlinsdata::Flag_NoSound) ? WOPL_Ins_IsBlank : 0; @@ -132,16 +125,8 @@ static void cvt_FMIns_to_generic(WOPLI &ins, const adlinsdata2 &in) ins.note_offset1 = in.adl[0].finetune; ins.fb_conn1_C0 = in.adl[0].feedconn; - if(!fourOps) - { - ins.operators[2] = ins.operators[0]; - ins.operators[3] = ins.operators[1]; - } - else - { - ins.note_offset2 = in.adl[1].finetune; - ins.fb_conn2_C0 = in.adl[1].feedconn; - } + ins.note_offset2 = in.adl[1].finetune; + ins.fb_conn2_C0 = in.adl[1].feedconn; ins.delay_on_ms = in.ms_sound_kon; ins.delay_off_ms = in.ms_sound_koff; diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index b226ce1..191021e 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -395,6 +395,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) } //uint16_t i[2] = { ains->adlno1, ains->adlno2 }; + bool is_2op = !(ains->flags & (adlinsdata::Flag_Pseudo4op|adlinsdata::Flag_Real4op)); bool pseudo_4op = ains->flags & adlinsdata::Flag_Pseudo4op; #ifndef __WATCOMC__ MIDIchannel::NoteInfo::Phys voices[MIDIchannel::NoteInfo::MaxNumPhysChans] = @@ -457,7 +458,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) if(ccount == 1 && static_cast<int32_t>(a) == adlchannel[0]) continue; // ^ Don't use the same channel for primary&secondary - if(voices[0].ains == voices[1].ains || pseudo_4op/*i[0] == i[1] || pseudo_4op*/) + if(is_2op || pseudo_4op) { // Only use regular channels uint32_t expected_mode = 0; @@ -1878,7 +1879,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note) } double hertz = 172.00093 * std::exp(0.057762265 * (tone + 0.0)); int32_t adlchannel[2] = { 0, 3 }; - if(ains.adl[0] == ains.adl[1]) + if((ains.flags & (adlinsdata::Flag_Pseudo4op|adlinsdata::Flag_Real4op)) == 0) { adlchannel[1] = -1; adlchannel[0] = 6; // single-op @@ -1960,7 +1961,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::NextAdl(int offset) } std::printf("%s%s%s%u\t", ToneIndication, - ains.adl[0] != ains.adl[1] ? "[2]" : " ", + (ains.flags & (adlinsdata::Flag_Pseudo4op|adlinsdata::Flag_Real4op)) ? "[2]" : " ", (P->ins_idx == a) ? "->" : "\t", i ); diff --git a/src/adlmidi_private.cpp b/src/adlmidi_private.cpp index ecedd9e..dd43725 100644 --- a/src/adlmidi_private.cpp +++ b/src/adlmidi_private.cpp @@ -56,7 +56,7 @@ int adlRefreshNumCards(ADL_MIDIPlayer *device) adlinsdata2 &ins = it->second.ins[i]; if(ins.flags & adlinsdata::Flag_NoSound) continue; - if((ins.adl[0] != ins.adl[1]) && ((ins.flags & adlinsdata::Flag_Pseudo4op) == 0)) + if((ins.flags & adlinsdata::Flag_Real4op) != 0) ++n_fourop[div]; ++n_total[div]; } @@ -73,7 +73,7 @@ int adlRefreshNumCards(ADL_MIDIPlayer *device) continue; ++n_total[a / 128]; adlinsdata2 ins(adlins[insno]); - if(ins.flags & adlinsdata::Flag_Real4op) + if((ins.flags & adlinsdata::Flag_Real4op) != 0) ++n_fourop[a / 128]; } } |