aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_private.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/adlmidi_private.cpp')
-rw-r--r--src/adlmidi_private.cpp79
1 files changed, 57 insertions, 22 deletions
diff --git a/src/adlmidi_private.cpp b/src/adlmidi_private.cpp
index 1cd57aa..9478236 100644
--- a/src/adlmidi_private.cpp
+++ b/src/adlmidi_private.cpp
@@ -24,6 +24,8 @@
#include "adlmidi_midiplay.hpp"
#include "adlmidi_opl3.hpp"
#include "adlmidi_private.hpp"
+#include "wopl/wopl_file.h"
+
std::string ADLMIDI_ErrorString;
@@ -43,9 +45,9 @@ int adlCalculateFourOpChannels(MIDIplay *play, bool silent)
bool rhythmModeNeeded = false;
//Automatically calculate how much 4-operator channels is necessary
-#ifndef DISABLE_EMBEDDED_BANKS
- if(synth.m_embeddedBank == Synth::CustomBankTag)
-#endif
+//#ifndef DISABLE_EMBEDDED_BANKS
+// if(synth.m_embeddedBank == Synth::CustomBankTag)
+//#endif
{
//For custom bank
Synth::BankMap::iterator it = synth.m_insBanks.begin();
@@ -67,25 +69,25 @@ int adlCalculateFourOpChannels(MIDIplay *play, bool silent)
}
}
}
-#ifndef DISABLE_EMBEDDED_BANKS
- else
- {
- //For embedded bank
- for(size_t a = 0; a < 256; ++a)
- {
- size_t insno = banks[play->m_setup.bankId][a];
- size_t div = a / 128;
- if(insno == 198)
- continue;
- ++n_total[div];
- adlinsdata2 ins = adlinsdata2::from_adldata(::adlins[insno]);
- if((ins.flags & adlinsdata::Flag_Real4op) != 0)
- ++n_fourop[div];
- if(div && ((ins.flags & adlinsdata::Mask_RhythmMode) != 0))
- rhythmModeNeeded = true;
- }
- }
-#endif
+//#ifndef DISABLE_EMBEDDED_BANKS
+// else
+// {
+// //For embedded bank
+// for(size_t a = 0; a < 256; ++a)
+// {
+// size_t insno = banks[play->m_setup.bankId][a];
+// size_t div = a / 128;
+// if(insno == 198)
+// continue;
+// ++n_total[div];
+// adlinsdata2 ins = adlinsdata2::from_adldata(::adlins[insno]);
+// if((ins.flags & adlinsdata::Flag_Real4op) != 0)
+// ++n_fourop[div];
+// if(div && ((ins.flags & adlinsdata::Mask_RhythmMode) != 0))
+// rhythmModeNeeded = true;
+// }
+// }
+//#endif
size_t numFourOps = 0;
@@ -118,3 +120,36 @@ int adlCalculateFourOpChannels(MIDIplay *play, bool silent)
return 0;
}
+
+#ifndef DISABLE_EMBEDDED_BANKS
+void adlFromInstrument(const BanksDump::InstrumentEntry &instIn, adlinsdata2 &instOut)
+{
+ instOut.voice2_fine_tune = 0.0;
+ if(instIn.secondVoiceDetune != 0)
+ instOut.voice2_fine_tune = (double)((((int)instIn.secondVoiceDetune + 128) >> 1) - 64) / 32.0;
+
+ instOut.midi_velocity_offset = instIn.midiVelocityOffset;
+ instOut.tone = instIn.percussionKeyNumber;
+ instOut.flags = (instIn.instFlags & WOPL_Ins_4op) && (instIn.instFlags & WOPL_Ins_Pseudo4op) ? adlinsdata::Flag_Pseudo4op : 0;
+ instOut.flags|= (instIn.instFlags & WOPL_Ins_4op) && ((instIn.instFlags & WOPL_Ins_Pseudo4op) == 0) ? adlinsdata::Flag_Real4op : 0;
+ instOut.flags|= (instIn.instFlags & WOPL_Ins_IsBlank) ? adlinsdata::Flag_NoSound : 0;
+ instOut.flags|= instIn.instFlags & WOPL_RhythmModeMask;
+
+ for(size_t op = 0; op < 2; op++)
+ {
+ if((instIn.ops[(op * 2) + 0] < 0) || (instIn.ops[(op * 2) + 1] < 0))
+ break;
+ const BanksDump::Operator &op1 = g_embeddedBanksOperators[instIn.ops[(op * 2) + 0]];
+ const BanksDump::Operator &op2 = g_embeddedBanksOperators[instIn.ops[(op * 2) + 1]];
+ instOut.adl[op].modulator_E862 = op1.d_E862;
+ instOut.adl[op].modulator_40 = op1.d_40;
+ instOut.adl[op].carrier_E862 = op2.d_E862;
+ instOut.adl[op].carrier_40 = op2.d_40;
+ instOut.adl[op].feedconn = (instIn.fbConn >> (op * 8)) & 0xFF;
+ instOut.adl[op].finetune = static_cast<int8_t>(op == 0 ? instIn.noteOffset1 : instIn.noteOffset2);
+ }
+
+ instOut.ms_sound_kon = instIn.delay_on_ms;
+ instOut.ms_sound_koff = instIn.delay_off_ms;
+}
+#endif