diff options
author | Wohlstand <admin@wohlnet.ru> | 2017-11-18 02:34:12 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2017-11-18 02:34:12 +0300 |
commit | edb236778c2d424e8d66a86f4d3ab69917550044 (patch) | |
tree | df9bb6751b7542f3c66325ce55ac1d2610dceb2a /src | |
parent | 2c9577708b748524349e4609c3bf958fe27ecff4 (diff) | |
download | libADLMIDI-edb236778c2d424e8d66a86f4d3ab69917550044.tar.gz libADLMIDI-edb236778c2d424e8d66a86f4d3ab69917550044.tar.bz2 libADLMIDI-edb236778c2d424e8d66a86f4d3ab69917550044.zip |
Avoid a flood of missing bank debug messages, show every message once
Diffstat (limited to 'src')
-rw-r--r-- | src/adlmidi_midiplay.cpp | 61 | ||||
-rw-r--r-- | src/adlmidi_private.hpp | 4 |
2 files changed, 18 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); diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp index 083bfb9..8605077 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -743,6 +743,10 @@ private: //! Missing instruments catches std::set<uint8_t> caugh_missing_instruments; + //! Missing melodic banks catches + std::set<uint16_t> caugh_missing_banks_melodic; + //! Missing percussion banks catches + std::set<uint16_t> caugh_missing_banks_percussion; /** * @brief Build MIDI track data from the raw track data storage |