aboutsummaryrefslogtreecommitdiff
path: root/utils/gen_adldata
diff options
context:
space:
mode:
authorVitaly Novichkov <admin@wohlnet.ru>2019-06-01 02:43:59 +0300
committerVitaly Novichkov <admin@wohlnet.ru>2019-06-01 02:43:59 +0300
commit99cc4bfafcce3390bdd5d78ef8e55222d6507877 (patch)
tree089240fb40ee7a5e9dfbd9f2185287d2ae527978 /utils/gen_adldata
parentfc9829095afcace792f072ecb094c268039b14e7 (diff)
downloadlibADLMIDI-99cc4bfafcce3390bdd5d78ef8e55222d6507877.tar.gz
libADLMIDI-99cc4bfafcce3390bdd5d78ef8e55222d6507877.tar.bz2
libADLMIDI-99cc4bfafcce3390bdd5d78ef8e55222d6507877.zip
Add Bisqwit, OP2 and TMB
Diffstat (limited to 'utils/gen_adldata')
-rw-r--r--utils/gen_adldata/file_formats/load_bisqwit.h30
-rw-r--r--utils/gen_adldata/file_formats/load_op2.h27
-rw-r--r--utils/gen_adldata/file_formats/load_tmb.h24
-rw-r--r--utils/gen_adldata/gen_adldata.cc6
-rw-r--r--utils/gen_adldata/progs_cache.h6
5 files changed, 81 insertions, 12 deletions
diff --git a/utils/gen_adldata/file_formats/load_bisqwit.h b/utils/gen_adldata/file_formats/load_bisqwit.h
index 8686e90..cf3a6a1 100644
--- a/utils/gen_adldata/file_formats/load_bisqwit.h
+++ b/utils/gen_adldata/file_formats/load_bisqwit.h
@@ -4,7 +4,7 @@
#include "../progs_cache.h"
#include "../midi_inst_list.h"
-bool BankFormats::LoadBisqwit(const char *fn, unsigned bank, const char *prefix)
+bool BankFormats::LoadBisqwit(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix)
{
#ifdef HARD_BANKS
writeIni("Bisqwit", fn, prefix, bank, INI_Both);
@@ -13,14 +13,25 @@ bool BankFormats::LoadBisqwit(const char *fn, unsigned bank, const char *prefix)
if(!fp)
return false;
- for(uint32_t a = 0; a < 256; ++a)
+ size_t bankDb = db.initBank(bank, bankTitle, BanksDump::BankEntry::SETUP_Generic);
+ BanksDump::MidiBank bnkMelodique;
+ BanksDump::MidiBank bnkPercussion;
+
+ for(uint32_t a = 0, patchId = 0; a < 256; ++a, patchId++)
{
//unsigned offset = a * 25;
uint32_t gmno = a;
+ bool isPercussion = gmno >= 128;
int32_t midi_index = gmno < 128 ? int32_t(gmno)
: gmno < 128 + 35 ? -1
: gmno < 128 + 88 ? int32_t(gmno - 35)
: -1;
+ if(patchId == 128)
+ patchId = 0;
+
+ BanksDump::MidiBank &bnk = isPercussion ? bnkPercussion : bnkMelodique;
+ BanksDump::InstrumentEntry inst;
+ BanksDump::Operator ops[5];
struct ins tmp2;
tmp2.notenum = (uint8_t)std::fgetc(fp);
@@ -49,9 +60,24 @@ bool BankFormats::LoadBisqwit(const char *fn, unsigned bank, const char *prefix)
tmp2.real4op = tmp[1].diff;
size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2, (tmp[0] == tmp[1]));
SetBank(bank, gmno, resno);
+
+ db.toOps(tmp[0], ops, 0);
+ if(tmp[0] != tmp[1])
+ {
+ inst.instFlags |= BanksDump::InstrumentEntry::WOPL_Ins_4op;
+ db.toOps(tmp[1], ops, 2);
+ }
+
+ inst.fbConn = uint_fast16_t(tmp[0].data[10]) | (uint_fast16_t(tmp[1].data[10]) << 8);
+ inst.percussionKeyNumber = tmp2.notenum;
+ inst.noteOffset1 = tmp2.notenum;
+ db.addInstrument(bnk, patchId, inst, ops);
}
std::fclose(fp);
+ db.addMidiBank(bankDb, false, bnkMelodique);
+ db.addMidiBank(bankDb, true, bnkPercussion);
+
AdlBankSetup setup;
setup.volumeModel = VOLUME_Generic;
setup.deepTremolo = true;
diff --git a/utils/gen_adldata/file_formats/load_op2.h b/utils/gen_adldata/file_formats/load_op2.h
index cac6bc9..0c67323 100644
--- a/utils/gen_adldata/file_formats/load_op2.h
+++ b/utils/gen_adldata/file_formats/load_op2.h
@@ -49,7 +49,7 @@ struct Doom_opl_instr
#endif
-bool BankFormats::LoadDoom(const char *fn, unsigned bank, const char *prefix)
+bool BankFormats::LoadDoom(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix)
{
#ifdef HARD_BANKS
writeIni("OP2", fn, prefix, bank, INI_Both);
@@ -68,11 +68,17 @@ bool BankFormats::LoadDoom(const char *fn, unsigned bank, const char *prefix)
}
std::fclose(fp);
+ size_t bankDb = db.initBank(bank, bankTitle, BanksDump::BankEntry::SETUP_DMX);
+ BanksDump::MidiBank bnkMelodique;
+ BanksDump::MidiBank bnkPercussion;
+
for(unsigned a = 0; a < 175; ++a)
{
const size_t offset1 = 0x18A4 + a * 32;
const size_t offset2 = 8 + a * 36;
-
+ BanksDump::MidiBank &bnk = a < 128 ? bnkMelodique : bnkPercussion;
+ BanksDump::InstrumentEntry inst;
+ BanksDump::Operator ops[5];
std::string name;
for(unsigned p = 0; p < 32; ++p)
if(data[offset1] != '\0')
@@ -80,6 +86,7 @@ bool BankFormats::LoadDoom(const char *fn, unsigned bank, const char *prefix)
//printf("%3d %3d %3d %8s: ", a,b,c, name.c_str());
int gmno = int(a < 128 ? a : ((a | 128) + 35));
+ size_t patchId = a < 128 ? a : ((a - 128) + 35);
char name2[512];
snprintf(name2, 512, "%s%c%u", prefix, (gmno < 128 ? 'M' : 'P'), gmno & 127);
@@ -104,6 +111,12 @@ bool BankFormats::LoadDoom(const char *fn, unsigned bank, const char *prefix)
tmp[index].data[9] = src.scale_2 | src.level_2;
tmp[index].data[10] = src.feedback;
tmp[index].finetune = int8_t(src.basenote + 12);
+ inst.fbConn |= (uint_fast16_t(src.feedback) << (a == 1 ? 8 : 0));
+ if(a == 0)
+ inst.noteOffset1 = int8_t(src.basenote + 12);
+ else
+ inst.noteOffset2 = int8_t(src.basenote + 12);
+ db.toOps(tmp[index], ops, index * 2);
}
struct ins tmp2;
tmp2.notenum = ins.note;
@@ -120,6 +133,11 @@ bool BankFormats::LoadDoom(const char *fn, unsigned bank, const char *prefix)
tmp[1].finetune -= 12;
}
+ if((ins.flags & FL_DOUBLE_VOICE) != 0)
+ inst.instFlags |= BanksDump::InstrumentEntry::WOPL_Ins_Pseudo4op;
+ inst.percussionKeyNumber = tmp2.notenum;
+ inst.secondVoiceDetune = ins.finetune;
+
if(!(ins.flags & FL_DOUBLE_VOICE))
{
size_t resno = InsertIns(tmp[0], tmp2, std::string(1, '\377') + name, name2);
@@ -138,6 +156,8 @@ bool BankFormats::LoadDoom(const char *fn, unsigned bank, const char *prefix)
SetBank(bank, (unsigned int)gmno, resno);
}
+ db.addInstrument(bnk, patchId, inst, ops);
+
/*const Doom_OPL2instrument& A = ins.patchdata[0];
const Doom_OPL2instrument& B = ins.patchdata[1];
printf(
@@ -159,6 +179,9 @@ bool BankFormats::LoadDoom(const char *fn, unsigned bank, const char *prefix)
printf("------------------------------------------------------------\n");*/
}
+ db.addMidiBank(bankDb, false, bnkMelodique);
+ db.addMidiBank(bankDb, true, bnkPercussion);
+
AdlBankSetup setup;
setup.volumeModel = VOLUME_DMX;
setup.deepTremolo = false;
diff --git a/utils/gen_adldata/file_formats/load_tmb.h b/utils/gen_adldata/file_formats/load_tmb.h
index e7537af..66ced30 100644
--- a/utils/gen_adldata/file_formats/load_tmb.h
+++ b/utils/gen_adldata/file_formats/load_tmb.h
@@ -4,7 +4,7 @@
#include "../progs_cache.h"
#include "../midi_inst_list.h"
-bool BankFormats::LoadTMB(const char *fn, unsigned bank, const char *prefix)
+bool BankFormats::LoadTMB(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix)
{
#ifdef HARD_BANKS
writeIni("TMB", fn, prefix, bank, INI_Both);
@@ -22,7 +22,11 @@ bool BankFormats::LoadTMB(const char *fn, unsigned bank, const char *prefix)
}
std::fclose(fp);
- for(unsigned a = 0; a < 256; ++a)
+ size_t bankDb = db.initBank(bank, bankTitle, BanksDump::BankEntry::SETUP_Apogee);
+ BanksDump::MidiBank bnkMelodique;
+ BanksDump::MidiBank bnkPercussion;
+
+ for(unsigned a = 0, patchId = 0; a < 256; ++a, patchId++)
{
unsigned offset = a * 0x0D;
unsigned gmno = a;
@@ -30,6 +34,12 @@ bool BankFormats::LoadTMB(const char *fn, unsigned bank, const char *prefix)
: gmno < 128 + 35 ? -1
: gmno < 128 + 88 ? int(gmno - 35)
: -1;
+ if(patchId == 128)
+ patchId = 0;
+ bool isPercussion = a >= 128;
+ BanksDump::MidiBank &bnk = isPercussion ? bnkPercussion : bnkMelodique;
+ BanksDump::InstrumentEntry inst;
+ BanksDump::Operator ops[5];
insdata tmp;
@@ -55,6 +65,11 @@ bool BankFormats::LoadTMB(const char *fn, unsigned bank, const char *prefix)
tmp2.midi_velocity_offset = (int8_t)data[offset + 12];
tmp2.rhythmModeDrum = 0;
+ inst.percussionKeyNumber = data[offset + 11];
+ inst.midiVelocityOffset = (int8_t)data[offset + 12];
+ inst.fbConn = data[offset + 10];
+ db.toOps(tmp, ops, 0);
+
std::string name;
if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index];
@@ -64,8 +79,13 @@ bool BankFormats::LoadTMB(const char *fn, unsigned bank, const char *prefix)
size_t resno = InsertIns(tmp, 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_APOGEE;
setup.deepTremolo = false;
diff --git a/utils/gen_adldata/gen_adldata.cc b/utils/gen_adldata/gen_adldata.cc
index 5c99147..14e68ea 100644
--- a/utils/gen_adldata/gen_adldata.cc
+++ b/utils/gen_adldata/gen_adldata.cc
@@ -112,7 +112,7 @@ int main(int argc, char**argv)
else
if(format == "Bisqwit")
{
- if(!BankFormats::LoadBisqwit(filepath.c_str(), bank, prefix.c_str()))
+ if(!BankFormats::LoadBisqwit(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;
@@ -130,7 +130,7 @@ int main(int argc, char**argv)
else
if(format == "OP2")
{
- if(!BankFormats::LoadDoom(filepath.c_str(), bank, prefix.c_str()))
+ if(!BankFormats::LoadDoom(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;
@@ -148,7 +148,7 @@ int main(int argc, char**argv)
else
if(format == "TMB")
{
- if(!BankFormats::LoadTMB(filepath.c_str(), bank, prefix.c_str()))
+ if(!BankFormats::LoadTMB(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.h b/utils/gen_adldata/progs_cache.h
index 8f32568..bb7e105 100644
--- a/utils/gen_adldata/progs_cache.h
+++ b/utils/gen_adldata/progs_cache.h
@@ -361,7 +361,7 @@ namespace BankFormats
{
bool LoadMiles(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix);
-bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix);
+bool LoadBisqwit(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix);
bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_fat, bool percussive);
bool LoadBNK2(const char *fn, unsigned bank, const char *prefix,
const std::string &melo_filter,
@@ -369,8 +369,8 @@ bool LoadBNK2(const char *fn, unsigned bank, const char *prefix,
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 LoadDoom(const char *fn, unsigned bank, const char *prefix);
-bool LoadTMB(const char *fn, unsigned bank, 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);
}