aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi.cpp
diff options
context:
space:
mode:
authorVitaly Novichkov <Wohlstand@users.noreply.github.com>2020-08-30 14:00:15 +0200
committerGitHub <noreply@github.com>2020-08-30 14:00:15 +0200
commit82fa5cb3e0859942fc6b353a3138aae8c10520a3 (patch)
tree28e99c08b430742c719f6b9bda236d29b650ffd8 /src/adlmidi.cpp
parent678be9ff7eb835087a426684a24f0e0172c9178d (diff)
parent6223286c01b83748f5c92cd21612e9eecc3d7525 (diff)
downloadlibADLMIDI-82fa5cb3e0859942fc6b353a3138aae8c10520a3.tar.gz
libADLMIDI-82fa5cb3e0859942fc6b353a3138aae8c10520a3.tar.bz2
libADLMIDI-82fa5cb3e0859942fc6b353a3138aae8c10520a3.zip
Merge pull request #232 from Wohlstand/wip-new-embedded-banks
Brand new embedded banks database format
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..43ef05a 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)
+ {
+ 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;
#endif