aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2017-11-18 02:34:12 +0300
committerWohlstand <admin@wohlnet.ru>2017-11-18 02:34:12 +0300
commitedb236778c2d424e8d66a86f4d3ab69917550044 (patch)
treedf9bb6751b7542f3c66325ce55ac1d2610dceb2a /src
parent2c9577708b748524349e4609c3bf958fe27ecff4 (diff)
downloadlibADLMIDI-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.cpp61
-rw-r--r--src/adlmidi_private.hpp4
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