diff options
author | Wohlstand <admin@wohlnet.ru> | 2017-11-07 02:40:13 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2017-11-07 02:40:13 +0300 |
commit | 5ebf40cd10d59c5e11ea744cc7b6075ee4c1bc90 (patch) | |
tree | 3a6dfc768c44046afd28f2133a6e964dfad656db /src/adlmidi_midiplay.cpp | |
parent | 22350acc1f699f70cbdac6b5facadd0d6ccc8a7f (diff) | |
download | libADLMIDI-5ebf40cd10d59c5e11ea744cc7b6075ee4c1bc90.tar.gz libADLMIDI-5ebf40cd10d59c5e11ea744cc7b6075ee4c1bc90.tar.bz2 libADLMIDI-5ebf40cd10d59c5e11ea744cc7b6075ee4c1bc90.zip |
Custom WOPL now supports multiple banks
Feel free to create something like GS or XG bank :wink:
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r-- | src/adlmidi_midiplay.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index 7d1ba75..8794d9f 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -866,10 +866,29 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) if(velocity == 0) return false; - uint8_t midiins = Ch[channel].patch; + size_t midiins = Ch[channel].patch; + bool isPercussion = (channel % 16 == 9); - if(channel % 16 == 9) - midiins = 128 + note; // Percussion instrument + if(isPercussion) + midiins = opl.dynamic_percussion_offset + note; // Percussion instrument + + //Set bank bank + if(Ch[channel].bank_msb || Ch[channel].bank_lsb) + { + uint16_t bank = (uint16_t(Ch[channel].bank_msb) * 256) + uint16_t(Ch[channel].bank_lsb); + if(isPercussion) + { + OPL3::BankMap::iterator b = opl.dynamic_percussion_banks.find(bank); + if(b != opl.dynamic_percussion_banks.end()) + midiins += b->second * 128; + } + else + { + OPL3::BankMap::iterator b = opl.dynamic_melodic_banks.find(bank); + if(b != opl.dynamic_melodic_banks.end()) + midiins += b->second * 128; + } + } /* if(MidCh%16 == 9 || (midiins != 32 && midiins != 46 && midiins != 48 && midiins != 50)) @@ -921,7 +940,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) */ //int meta = banks[opl.AdlBank][midiins]; - const uint32_t meta = opl.GetAdlMetaNumber(midiins); + const size_t meta = opl.GetAdlMetaNumber(midiins); const adlinsdata &ains = opl.GetAdlMetaIns(meta); int16_t tone = note; |