aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/adlmidi.cpp8
-rw-r--r--src/adlmidi_db.h3
-rw-r--r--src/adlmidi_opl3.cpp5
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);