aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_midiplay.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r--src/adlmidi_midiplay.cpp45
1 files changed, 32 insertions, 13 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp
index 65e7af5..a89b1cd 100644
--- a/src/adlmidi_midiplay.cpp
+++ b/src/adlmidi_midiplay.cpp
@@ -1031,7 +1031,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
{
if(!caugh_missing_banks_melodic.count(bank))
{
- hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion bank %i (patch %i)", channel, bank, midiins);
+ hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion MIDI bank %i (patch %i)", channel, bank, midiins);
caugh_missing_banks_melodic.insert(bank);
}
}
@@ -1046,7 +1046,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
{
if(!caugh_missing_banks_percussion.count(bank))
{
- hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic bank %i (patch %i)", channel, bank, midiins);
+ hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic MIDI bank %i (patch %i)", channel, bank, midiins);
caugh_missing_banks_percussion.insert(bank);
}
}
@@ -1060,29 +1060,48 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(midiins == 48 || midiins == 50) vol /= 4; // HACK
*/
//if(midiins == 56) vol = vol*6/10; // HACK
-
//int meta = banks[opl.AdlBank][midiins];
- const size_t meta = opl.GetAdlMetaNumber(midiins);
- const adlinsdata &ains = opl.GetAdlMetaIns(meta);
+
+ size_t meta = opl.GetAdlMetaNumber(midiins);
+ const adlinsdata *ains = &opl.GetAdlMetaIns(meta);
int16_t tone = note;
- if(ains.tone)
+ if(!isPercussion && !isXgPercussion && (bank > 0)) // For non-zero banks
+ {
+ if(ains->flags & adlinsdata::Flag_NoSound)
+ {
+ if(hooks.onDebugMessage)
+ {
+ if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)))
+ {
+ hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Caugh a blank instrument %i (offset %i) in the MIDI bank %u", channel, Ch[channel].patch, midiins, bank);
+ caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
+ }
+ }
+ bank = 0;
+ midiins = Ch[channel].patch;
+ meta = opl.GetAdlMetaNumber(midiins);
+ ains = &opl.GetAdlMetaIns(meta);
+ }
+ }
+
+ if(ains->tone)
{
/*if(ains.tone < 20)
tone += ains.tone;
else*/
- if(ains.tone < 128)
- tone = ains.tone;
+ if(ains->tone < 128)
+ tone = ains->tone;
else
- tone -= ains.tone - 128;
+ tone -= ains->tone - 128;
}
//uint16_t i[2] = { ains.adlno1, ains.adlno2 };
- bool pseudo_4op = ains.flags & adlinsdata::Flag_Pseudo4op;
+ bool pseudo_4op = ains->flags & adlinsdata::Flag_Pseudo4op;
MIDIchannel::NoteInfo::Phys voices[2] =
{
- {ains.adlno1, false},
- {ains.adlno2, pseudo_4op}
+ {ains->adlno1, false},
+ {ains->adlno2, pseudo_4op}
};
if((opl.AdlPercussionMode == 1) && PercussionMap[midiins & 0xFF])
@@ -1090,7 +1109,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(hooks.onDebugMessage)
{
- if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains.flags & adlinsdata::Flag_NoSound))
+ if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains->flags & adlinsdata::Flag_NoSound))
{
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing instrument %i", channel, midiins);
caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));