aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorVitaly Novichkov <admin@wohlnet.ru>2019-06-02 02:54:00 +0300
committerVitaly Novichkov <admin@wohlnet.ru>2019-06-02 02:54:00 +0300
commit14303359fde2d8cf76a129296cf1f30fdcb57520 (patch)
tree549ace36cde2f58df0291c3e3a0956db3c507b82 /utils
parent99cc4bfafcce3390bdd5d78ef8e55222d6507877 (diff)
downloadlibADLMIDI-14303359fde2d8cf76a129296cf1f30fdcb57520.tar.gz
libADLMIDI-14303359fde2d8cf76a129296cf1f30fdcb57520.tar.bz2
libADLMIDI-14303359fde2d8cf76a129296cf1f30fdcb57520.zip
Junglevision format is also supported by new DB
Diffstat (limited to 'utils')
-rw-r--r--utils/gen_adldata/file_formats/load_jv.h24
-rw-r--r--utils/gen_adldata/gen_adldata.cc2
-rw-r--r--utils/gen_adldata/progs_cache.cpp23
-rw-r--r--utils/gen_adldata/progs_cache.h2
4 files changed, 39 insertions, 12 deletions
diff --git a/utils/gen_adldata/file_formats/load_jv.h b/utils/gen_adldata/file_formats/load_jv.h
index bcdf855..d2fe06b 100644
--- a/utils/gen_adldata/file_formats/load_jv.h
+++ b/utils/gen_adldata/file_formats/load_jv.h
@@ -4,7 +4,7 @@
#include "../progs_cache.h"
#include "../midi_inst_list.h"
-bool BankFormats::LoadJunglevision(const char *fn, unsigned bank, const char *prefix)
+bool BankFormats::LoadJunglevision(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix)
{
#ifdef HARD_BANKS
writeIni("Junglevision", fn, prefix, bank, INI_Both);
@@ -22,6 +22,10 @@ bool BankFormats::LoadJunglevision(const char *fn, unsigned bank, const char *pr
}
std::fclose(fp);
+ size_t bankDb = db.initBank(bank, bankTitle, BanksDump::BankEntry::SETUP_Win9X);
+ BanksDump::MidiBank bnkMelodique;
+ BanksDump::MidiBank bnkPercussion;
+
uint16_t ins_count = uint16_t(data[0x20] + (data[0x21] << 8));
uint16_t drum_count = uint16_t(data[0x22] + (data[0x23] << 8));
uint16_t first_ins = uint16_t(data[0x24] + (data[0x25] << 8));
@@ -38,6 +42,12 @@ bool BankFormats::LoadJunglevision(const char *fn, unsigned bank, const char *pr
: gmno < 128 + 88 ? int(gmno - 35)
: -1;
+ bool isPercussion = ins_count >= 128;
+ size_t patchId = (a < ins_count) ? (a + first_ins) : ((a - ins_count) + first_drum);
+ BanksDump::MidiBank &bnk = isPercussion ? bnkPercussion : bnkMelodique;
+ BanksDump::InstrumentEntry inst;
+ BanksDump::Operator ops[5];
+
insdata tmp[2];
tmp[0].data[0] = data[offset + 2];
@@ -83,6 +93,14 @@ bool BankFormats::LoadJunglevision(const char *fn, unsigned bank, const char *pr
tmp[1].finetune -= 12;
}
+ if(data[offset] != 0)
+ inst.instFlags |= BanksDump::InstrumentEntry::WOPL_Ins_4op;
+ inst.percussionKeyNumber = data[offset + 1];
+ inst.fbConn = (static_cast<uint_fast16_t>(data[offset + 7] & 0x0F)) |
+ (static_cast<uint_fast16_t>(data[offset + 7 + 11] & 0x0F) << 8);
+ db.toOps(tmp[0], ops, 0);
+ db.toOps(tmp[1], ops, 2);
+
std::string name;
if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index];
@@ -100,8 +118,12 @@ bool BankFormats::LoadJunglevision(const char *fn, unsigned bank, const char *pr
size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2);
SetBank(bank, gmno, resno);
}
+ db.addInstrument(bnk, patchId, inst, ops);
}
+ db.addMidiBank(bankDb, false, bnkMelodique);
+ db.addMidiBank(bankDb, true, bnkPercussion);
+
AdlBankSetup setup;
setup.volumeModel = VOLUME_9X;
setup.deepTremolo = true;
diff --git a/utils/gen_adldata/gen_adldata.cc b/utils/gen_adldata/gen_adldata.cc
index 14e68ea..4b59439 100644
--- a/utils/gen_adldata/gen_adldata.cc
+++ b/utils/gen_adldata/gen_adldata.cc
@@ -157,7 +157,7 @@ int main(int argc, char**argv)
else
if(format == "Junglevision")
{
- if(!BankFormats::LoadJunglevision(filepath.c_str(), bank, prefix.c_str()))
+ if(!BankFormats::LoadJunglevision(db, filepath.c_str(), bank, bank_name, prefix.c_str()))
{
std::fprintf(stderr, "Failed to load bank %u, file %s!\n", bank, filepath.c_str());
return 1;
diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp
index e720384..9200f0f 100644
--- a/utils/gen_adldata/progs_cache.cpp
+++ b/utils/gen_adldata/progs_cache.cpp
@@ -151,20 +151,25 @@ void BanksDump::toOps(const insdata &inData, BanksDump::Operator *outData, size_
size_t BanksDump::initBank(size_t bankId, const std::string &title, uint_fast16_t bankSetup)
{
-#if 0
- assert(bankId <= banks.size());
- if(bankId >= banks.size())
- banks.emplace_back();
- BankEntry &b = banks[bankId];
-#else
- bankId = banks.size();
+ for(size_t bID = 0; bID < banks.size(); bID++)
+ {
+ BankEntry &be = banks[bID];
+ if(bankId == be.bankId)
+ {
+ be.bankTitle = title;
+ be.bankSetup = bankSetup;
+ return bID;
+ }
+ }
+
+ size_t bankIndex = banks.size();
banks.emplace_back();
BankEntry &b = banks.back();
-#endif
+
b.bankId = bankId;
b.bankTitle = title;
b.bankSetup = bankSetup;
- return b.bankId;
+ return bankIndex;
}
void BanksDump::addMidiBank(size_t bankId, bool percussion, BanksDump::MidiBank b)
diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h
index bb7e105..6c47581 100644
--- a/utils/gen_adldata/progs_cache.h
+++ b/utils/gen_adldata/progs_cache.h
@@ -368,7 +368,7 @@ bool LoadBNK2(const char *fn, unsigned bank, const char *prefix,
const std::string &perc_filter);
bool LoadEA(const char *fn, unsigned bank, const char *prefix);
bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool percussive, bool noRhythmMode = false);
-bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix);
+bool LoadJunglevision(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix);
bool LoadDoom(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix);
bool LoadTMB(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix);
bool LoadWopl(BanksDump &db, const char *fn, unsigned bank, const std::string bankTitle, const char *prefix);