aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/adlmidi.cpp')
-rw-r--r--src/adlmidi.cpp29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp
index 48c4366..5790637 100644
--- a/src/adlmidi.cpp
+++ b/src/adlmidi.cpp
@@ -194,7 +194,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
"adl_openBankData() functions instead of adl_setBank().");
return -1;
#else
- const uint32_t NumBanks = static_cast<uint32_t>(maxAdlBanks());
+ const uint32_t NumBanks = static_cast<uint32_t>(g_embeddedBanksCount);
int32_t bankno = bank;
if(bankno < 0)
@@ -222,7 +222,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
ADLMIDI_EXPORT int adl_getBanksCount()
{
#ifndef DISABLE_EMBEDDED_BANKS
- return maxAdlBanks();
+ return static_cast<int>(g_embeddedBanksCount);
#else
return 0;
#endif
@@ -231,7 +231,7 @@ ADLMIDI_EXPORT int adl_getBanksCount()
ADLMIDI_EXPORT const char *const *adl_getBankNames()
{
#ifndef DISABLE_EMBEDDED_BANKS
- return banknames;
+ return g_embeddedBankNames;
#else
return NULL;
#endif
@@ -393,16 +393,29 @@ ADLMIDI_EXPORT int adl_loadEmbeddedBank(struct ADL_MIDIPlayer *device, ADL_Bank
"adl_openBankData() functions instead of adl_loadEmbeddedBank().");
return -1;
#else
- if(num < 0 || num >= maxAdlBanks())
+ if(num < 0 || num >= static_cast<int>(g_embeddedBanksCount))
return -1;
Synth::BankMap::iterator it = Synth::BankMap::iterator::from_ptrs(bank->pointer);
size_t id = it->first;
- 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]);
+ const BanksDump::BankEntry &bankEntry = g_embeddedBanks[num];
+
+ bool ss = (id & Synth::PercussionTag);
+ const size_t bankID = 0;
+
+// bank_count_t maxBanks = ss ? bankEntry.banksPercussionCount : bankEntry.banksMelodicCount;
+ bank_count_t banksOffset = ss ? bankEntry.banksOffsetPercussive : bankEntry.banksOffsetMelodic;
+ size_t bankIndex = g_embeddedBanksMidiIndex[banksOffset + bankID];
+ const BanksDump::MidiBank &bankData = g_embeddedBanksMidi[bankIndex];
+
+ 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]];
+ adlFromInstrument(instIn, it->second.ins[i]);
}
return 0;
#endif