aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/adlmidi_load.cpp27
-rw-r--r--src/adlmidi_midiplay.cpp7
-rw-r--r--src/adlmidi_private.cpp4
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];
}
}