diff options
author | Wohlstand <admin@wohlnet.ru> | 2020-08-19 02:11:01 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2020-08-19 02:11:01 +0300 |
commit | 2ba770631ff1dc978d16a874a4ab99930ce12d2d (patch) | |
tree | ecf1195966681e24892ecba6b77c067ce24e7dbd /src/adlmidi_private.cpp | |
parent | 6d4dc0b87bf3a27f0510b63279b17b457821c38c (diff) | |
download | libADLMIDI-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.cpp | 41 |
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 |