diff options
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r-- | src/adlmidi_midiplay.cpp | 61 |
1 files changed, 14 insertions, 47 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index e4efafa..0348b31 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -271,6 +271,8 @@ bool MIDIplay::buildTrackData() musTrackTitles.clear(); musMarkers.clear(); caugh_missing_instruments.clear(); + caugh_missing_banks_melodic.clear(); + caugh_missing_banks_percussion.clear(); trackDataNew.clear(); const size_t trackCount = TrackData.size(); trackDataNew.resize(trackCount, MidiTrackQueue()); @@ -974,10 +976,13 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) if(b != opl.dynamic_percussion_banks.end()) midiins += b->second * 128; else + if(hooks.onDebugMessage) { - if(hooks.onDebugMessage) - hooks.onDebugMessage(hooks.onDebugMessage_userData, - "[%i] Playing missing percussion bank %i (patch %i)", channel, bank, midiins); + if(!caugh_missing_banks_melodic.count(bank)) + { + hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion bank %i (patch %i)", channel, bank, midiins); + caugh_missing_banks_melodic.insert(bank); + } } } else @@ -986,10 +991,13 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) if(b != opl.dynamic_melodic_banks.end()) midiins += b->second * 128; else + if(hooks.onDebugMessage) { - if(hooks.onDebugMessage) - hooks.onDebugMessage(hooks.onDebugMessage_userData, - "[%i] Playing missing melodic bank %i (patch %i)", channel, bank, midiins); + if(!caugh_missing_banks_percussion.count(bank)) + { + hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic bank %i (patch %i)", channel, bank, midiins); + caugh_missing_banks_percussion.insert(bank); + } } } } @@ -1002,47 +1010,6 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) */ //if(midiins == 56) vol = vol*6/10; // HACK - /* ==================================================================================== - * TODO: Instead of this shit implement support of multiple banks by using WOPL format - * (which will allow to implement GS or XG compatible banks!) - * ==================================================================================== - - static std::set<uint32_t> bank_warnings; - - if(Ch[channel].bank_msb) - { - uint32_t bankid = midiins + 256 * Ch[channel].bank_msb; - std::set<uint32_t>::iterator - i = bank_warnings.lower_bound(bankid); - - if(i == bank_warnings.end() || *i != bankid) - { - ADLMIDI_ErrorString.clear(); - std::stringstream s; - s << "[" << channel << "]Bank " << Ch[channel].bank_msb << - " undefined, patch=" << ((midiins & 128) ? 'P' : 'M') << (midiins & 127); - ADLMIDI_ErrorString = s.str(); - bank_warnings.insert(i, bankid); - } - } - - if(Ch[channel].bank_lsb) - { - unsigned bankid = Ch[channel].bank_lsb * 65536; - std::set<unsigned>::iterator - i = bank_warnings.lower_bound(bankid); - - if(i == bank_warnings.end() || *i != bankid) - { - ADLMIDI_ErrorString.clear(); - std::stringstream s; - s << "[" << channel << "]Bank lsb " << Ch[channel].bank_lsb << " undefined"; - ADLMIDI_ErrorString = s.str(); - bank_warnings.insert(i, bankid); - } - } - */ - //int meta = banks[opl.AdlBank][midiins]; const size_t meta = opl.GetAdlMetaNumber(midiins); const adlinsdata &ains = opl.GetAdlMetaIns(meta); |