diff options
author | Vitaly Novichkov <admin@wohlnet.ru> | 2019-06-01 02:43:59 +0300 |
---|---|---|
committer | Vitaly Novichkov <admin@wohlnet.ru> | 2019-06-01 02:43:59 +0300 |
commit | 99cc4bfafcce3390bdd5d78ef8e55222d6507877 (patch) | |
tree | 089240fb40ee7a5e9dfbd9f2185287d2ae527978 /utils/gen_adldata | |
parent | fc9829095afcace792f072ecb094c268039b14e7 (diff) | |
download | libADLMIDI-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.h | 30 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_op2.h | 27 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_tmb.h | 24 | ||||
-rw-r--r-- | utils/gen_adldata/gen_adldata.cc | 6 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.h | 6 |
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); } |