aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_midiplay.cpp
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2017-11-08 23:11:01 +0300
committerWohlstand <admin@wohlnet.ru>2017-11-08 23:11:01 +0300
commit17b5e86f44f3d71e8fe43c40f57c12a9649c7ad5 (patch)
tree20b9fae8246c878feb2331e55fa8221c532804b2 /src/adlmidi_midiplay.cpp
parentf87e983001067c693fec5d0aaf7282c22dc6acb6 (diff)
downloadlibADLMIDI-17b5e86f44f3d71e8fe43c40f57c12a9649c7ad5.tar.gz
libADLMIDI-17b5e86f44f3d71e8fe43c40f57c12a9649c7ad5.tar.bz2
libADLMIDI-17b5e86f44f3d71e8fe43c40f57c12a9649c7ad5.zip
Fixed zero four-operators bug when using a bigger non-GM bank
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r--src/adlmidi_midiplay.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp
index 3d8f88c..220b18c 100644
--- a/src/adlmidi_midiplay.cpp
+++ b/src/adlmidi_midiplay.cpp
@@ -897,21 +897,34 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(isPercussion)
midiins = opl.dynamic_percussion_offset + note; // Percussion instrument
+ uint16_t bank = 0;
//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);
+ 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
+ {
+ if(hooks.onDebugMessage)
+ hooks.onDebugMessage(hooks.onDebugMessage_userData,
+ "[%i] Playing missing percussion bank %i (patch %i)", channel, bank, midiins);
+ }
}
else
{
OPL3::BankMap::iterator b = opl.dynamic_melodic_banks.find(bank);
if(b != opl.dynamic_melodic_banks.end())
midiins += b->second * 128;
+ else
+ {
+ if(hooks.onDebugMessage)
+ hooks.onDebugMessage(hooks.onDebugMessage_userData,
+ "[%i] Playing missing melodic bank %i (patch %i)", channel, bank, midiins);
+ }
}
}
@@ -1063,7 +1076,9 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(c < 0)
{
if(hooks.onDebugMessage)
- hooks.onDebugMessage(hooks.onDebugMessage_userData, "ignored unplaceable note");
+ hooks.onDebugMessage(hooks.onDebugMessage_userData,
+ "ignored unplaceable note [bank %i, inst %i, note %i, MIDI channel %i]",
+ bank, Ch[channel].patch, note, channel);
continue; // Could not play this note. Ignore it.
}