aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_private.cpp
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2020-08-19 02:11:01 +0300
committerWohlstand <admin@wohlnet.ru>2020-08-19 02:11:01 +0300
commit2ba770631ff1dc978d16a874a4ab99930ce12d2d (patch)
treeecf1195966681e24892ecba6b77c067ce24e7dbd /src/adlmidi_private.cpp
parent6d4dc0b87bf3a27f0510b63279b17b457821c38c (diff)
downloadlibADLMIDI-2ba770631ff1dc978d16a874a4ab99930ce12d2d.tar.gz
libADLMIDI-2ba770631ff1dc978d16a874a4ab99930ce12d2d.tar.bz2
libADLMIDI-2ba770631ff1dc978d16a874a4ab99930ce12d2d.zip
Use new banks database format
However, it's stil need to clean-up and fix gen_adldata for a correct work!
Diffstat (limited to 'src/adlmidi_private.cpp')
-rw-r--r--src/adlmidi_private.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/adlmidi_private.cpp b/src/adlmidi_private.cpp
index b2b5bdd..ac2b496 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;
@@ -118,3 +120,42 @@ 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)
+ {
+ if(instIn.secondVoiceDetune == 1)
+ instOut.voice2_fine_tune = 0.000025;
+ else if(instIn.secondVoiceDetune == -1)
+ instOut.voice2_fine_tune = -0.000025;
+ else
+ instOut.voice2_fine_tune = instIn.secondVoiceDetune * (15.625 / 1000.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