diff options
-rw-r--r-- | src/adlmidi.cpp | 8 | ||||
-rw-r--r-- | src/adlmidi_db.h | 3 | ||||
-rw-r--r-- | src/adlmidi_opl3.cpp | 5 |
3 files changed, 10 insertions, 6 deletions
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 5790637..43ef05a 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -411,10 +411,10 @@ ADLMIDI_EXPORT int adl_loadEmbeddedBank(struct ADL_MIDIPlayer *device, ADL_Bank for (unsigned i = 0; i < 128; ++i) { -// size_t insno = i + ((id & Synth::PercussionTag) ? 128 : 0); -// size_t adlmeta = ::banks[num][insno]; -// it->second.ins[i] = adlinsdata2::from_adldata(::adlins[adlmeta]); - BanksDump::InstrumentEntry instIn = g_embeddedBanksInstruments[bankData.insts[i]]; + midi_bank_idx_t instIdx = bankData.insts[i]; + if(instIdx < 0) + continue; + BanksDump::InstrumentEntry instIn = g_embeddedBanksInstruments[instIdx]; adlFromInstrument(instIn, it->second.ins[i]); } return 0; diff --git a/src/adlmidi_db.h b/src/adlmidi_db.h index a560e9c..1a55e4b 100644 --- a/src/adlmidi_db.h +++ b/src/adlmidi_db.h @@ -38,6 +38,7 @@ #endif typedef uint16_t bank_count_t; +typedef int16_t midi_bank_idx_t; #ifndef DISABLE_EMBEDDED_BANKS extern const size_t g_embeddedBanksCount; @@ -60,7 +61,7 @@ struct MidiBank { uint8_t msb; uint8_t lsb; - int16_t insts[128]; + midi_bank_idx_t insts[128]; } ATTRIB_PACKED; struct InstrumentEntry diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp index 3648956..27baa22 100644 --- a/src/adlmidi_opl3.cpp +++ b/src/adlmidi_opl3.cpp @@ -320,7 +320,10 @@ void OPL3::setEmbeddedBank(uint32_t bank) for(size_t instId = 0; instId < 128; instId++) { - BanksDump::InstrumentEntry instIn = g_embeddedBanksInstruments[bankData.insts[instId]]; + midi_bank_idx_t instIndex = bankData.insts[instId]; + if(instIndex < 0) + continue; + BanksDump::InstrumentEntry instIn = g_embeddedBanksInstruments[instIndex]; adlinsdata2 &instOut = bankTarget.ins[instId]; adlFromInstrument(instIn, instOut); |