diff options
author | Vitaly Novichkov <Wohlstand@users.noreply.github.com> | 2020-08-30 14:00:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-30 14:00:15 +0200 |
commit | 82fa5cb3e0859942fc6b353a3138aae8c10520a3 (patch) | |
tree | 28e99c08b430742c719f6b9bda236d29b650ffd8 /src/adlmidi.cpp | |
parent | 678be9ff7eb835087a426684a24f0e0172c9178d (diff) | |
parent | 6223286c01b83748f5c92cd21612e9eecc3d7525 (diff) | |
download | libADLMIDI-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.cpp | 29 |
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 |