aboutsummaryrefslogtreecommitdiff
path: root/utils/gen_adldata/file_formats/load_bnk.h
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 /utils/gen_adldata/file_formats/load_bnk.h
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 'utils/gen_adldata/file_formats/load_bnk.h')
-rw-r--r--utils/gen_adldata/file_formats/load_bnk.h49
1 files changed, 20 insertions, 29 deletions
diff --git a/utils/gen_adldata/file_formats/load_bnk.h b/utils/gen_adldata/file_formats/load_bnk.h
index f1412ba..29f5494 100644
--- a/utils/gen_adldata/file_formats/load_bnk.h
+++ b/utils/gen_adldata/file_formats/load_bnk.h
@@ -7,11 +7,13 @@
#include <cstdint>
#include <string>
-static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_fat, bool percussive)
+bool BankFormats::LoadBNK(BanksDump &db, const char *fn, unsigned bank,
+ const std::string &bankTitle, const char *prefix,
+ bool is_fat, bool percussive)
{
- #ifdef HARD_BANKS
+#ifdef HARD_BANKS
writeIni("HMI", fn, prefix, bank, percussive ? INI_Drums : INI_Melodic);
- #endif
+#endif
FILE *fp = std::fopen(fn, "rb");
if(!fp)
return false;
@@ -25,6 +27,9 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f
}
std::fclose(fp);
+ size_t bankDb = db.initBank(bank, bankTitle, BanksDump::BankEntry::SETUP_Generic);
+ BanksDump::MidiBank bnk;
+
/*printf("%s:\n", fn);*/
//unsigned short version = *(short*)&data[0]; // major,minor (2 bytes)
// "ADLIB-" (6 bytes)
@@ -80,7 +85,10 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f
else
sprintf(name2, "%s%u", prefix, n);
- insdata tmp;
+ BanksDump::InstrumentEntry inst;
+ BanksDump::Operator ops[5];
+
+ InstBuffer tmp;
tmp.data[0] = uint8_t(
(op1[ 9] << 7) // TREMOLO FLAG
+ (op1[10] << 6) // VIBRATO FLAG
@@ -102,30 +110,18 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f
tmp.data[8] = op1[0] * 0x40 + op1[8]; // KSL , LEVEL
tmp.data[9] = op2[0] * 0x40 + op2[8]; // KSL , LEVEL
tmp.data[10] = op1[2] * 2 + op1[12]; // FEEDBACK, ADDITIVEFLAG
- tmp.finetune = 0;
- tmp.diff = false;
+
// Note: op2[2] and op2[12] are unused and contain garbage.
- ins tmp2;
- tmp2.notenum = is_fat ? voice_num : (percussive ? usage_flag : 0);
- tmp2.pseudo4op = false;
- tmp2.real4op = false;
- tmp2.voice2_fine_tune = 0.0;
- tmp2.midi_velocity_offset = 0;
- tmp2.rhythmModeDrum = 0;
- if(is_fat) tmp.data[10] ^= 1;
+ if(is_fat)
+ tmp.data[10] ^= 1;
- size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2);
+ db.toOps(tmp.d, ops, 0);
+ inst.percussionKeyNumber = is_fat ? voice_num : (percussive ? usage_flag : 0);
+ inst.setFbConn(op1[2] * 2 + op1[12]);
if(!is_fat)
- {
- SetBank(bank, (unsigned int)gmno, resno);
- }
- else
- {
- if(name[2] == 'O' || name[1] == 'M') SetBank(bank + 0, (unsigned int)gmno, resno);
- if(name[2] == 'S' || name[1] == 'M') SetBank(bank + 1, (unsigned int)gmno, resno);
- }
+ db.addInstrument(bnk, n & 127, inst, ops, fn);
/*
for(unsigned p=0; p<30; ++p)
@@ -151,12 +147,7 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f
*/
}
- AdlBankSetup setup;
- setup.volumeModel = VOLUME_Generic;
- setup.deepTremolo = false;
- setup.deepVibrato = false;
- setup.scaleModulators = false;
- SetBankSetup(bank, setup);
+ db.addMidiBank(bankDb, percussive, bnk);
return true;
}