diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/adlmidi-2/midiplay.cc | 4 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ail.h | 2 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bisqwit.h | 2 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bnk.h | 2 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bnk2.h | 2 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ea.h | 2 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ibk.h | 38 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_jv.h | 2 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_op2.h | 3 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_tmb.h | 4 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_wopl.h | 3 | ||||
-rw-r--r-- | utils/gen_adldata/gen_adldata.cc | 9 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.cpp | 2 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.h | 8 | ||||
-rw-r--r-- | utils/midiplay/adlmidiplay.cpp | 4 |
15 files changed, 62 insertions, 25 deletions
diff --git a/utils/adlmidi-2/midiplay.cc b/utils/adlmidi-2/midiplay.cc index f511e0a..f51c20d 100644 --- a/utils/adlmidi-2/midiplay.cc +++ b/utils/adlmidi-2/midiplay.cc @@ -1600,7 +1600,7 @@ int main(int argc, char **argv) "\n\n" "Usage: adlmidi <midifilename> [ <options> ] [ <banknumber> [ <numcards> [ <numfourops>] ] ]\n" " adlmidi <midifilename> -1 To enter instrument tester\n" - " -p Enables adlib percussion instrument mode (use with CMF files)\n" + // " -p Enables adlib percussion instrument mode (use with CMF files)\n" " -t Enables tremolo amplification mode\n" " -v Enables vibrato amplification mode\n" " -s Enables scaling of modulator volumes\n" @@ -1669,7 +1669,7 @@ int main(int argc, char **argv) bool had_option = false; if(!std::strcmp("-p", argv[2])) - adl_setPercMode(myDevice, 1); + fprintf(stderr, "Warning: -p argument is deprecated and useless!\n"); //adl_setPercMode(myDevice, 1); else if(!std::strcmp("-v", argv[2])) adl_setHVibrato(myDevice, 1); else if(!std::strcmp("-t", argv[2])) diff --git a/utils/gen_adldata/file_formats/load_ail.h b/utils/gen_adldata/file_formats/load_ail.h index 7f4d7ea..80ca8ad 100644 --- a/utils/gen_adldata/file_formats/load_ail.h +++ b/utils/gen_adldata/file_formats/load_ail.h @@ -92,6 +92,7 @@ static bool LoadMiles(const char *fn, unsigned bank, const char *prefix) tmp2.real4op = (inscount > 1); tmp2.voice2_fine_tune = 0.0; tmp2.midi_velocity_offset = 0; + tmp2.rhythmModeDrum = 0; std::string name; if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index]; size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2, twoOp); @@ -103,7 +104,6 @@ static bool LoadMiles(const char *fn, unsigned bank, const char *prefix) setup.volumeModel = VOLUME_Generic; setup.deepTremolo = true; setup.deepVibrato = true; - setup.adLibPercussions = false; setup.scaleModulators = false; SetBankSetup(bank, setup); diff --git a/utils/gen_adldata/file_formats/load_bisqwit.h b/utils/gen_adldata/file_formats/load_bisqwit.h index 3283aa9..9749a76 100644 --- a/utils/gen_adldata/file_formats/load_bisqwit.h +++ b/utils/gen_adldata/file_formats/load_bisqwit.h @@ -27,6 +27,7 @@ static bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix) tmp2.pseudo4op = false; tmp2.voice2_fine_tune = 0.0; tmp2.midi_velocity_offset = 0; + tmp2.rhythmModeDrum = 0; insdata tmp[2]; for(int side = 0; side < 2; ++side) @@ -55,7 +56,6 @@ static bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix) setup.volumeModel = VOLUME_Generic; setup.deepTremolo = true; setup.deepVibrato = true; - setup.adLibPercussions = false; setup.scaleModulators = false; SetBankSetup(bank, setup); diff --git a/utils/gen_adldata/file_formats/load_bnk.h b/utils/gen_adldata/file_formats/load_bnk.h index dfa066e..f1412ba 100644 --- a/utils/gen_adldata/file_formats/load_bnk.h +++ b/utils/gen_adldata/file_formats/load_bnk.h @@ -111,6 +111,7 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; tmp2.midi_velocity_offset = 0; + tmp2.rhythmModeDrum = 0; if(is_fat) tmp.data[10] ^= 1; @@ -154,7 +155,6 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f setup.volumeModel = VOLUME_Generic; setup.deepTremolo = false; setup.deepVibrato = false; - setup.adLibPercussions = false; setup.scaleModulators = false; SetBankSetup(bank, setup); diff --git a/utils/gen_adldata/file_formats/load_bnk2.h b/utils/gen_adldata/file_formats/load_bnk2.h index b4f8da9..072712c 100644 --- a/utils/gen_adldata/file_formats/load_bnk2.h +++ b/utils/gen_adldata/file_formats/load_bnk2.h @@ -89,6 +89,7 @@ static bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; tmp2.midi_velocity_offset = 0; + tmp2.rhythmModeDrum = 0; if(xxP24NNN & 8) { @@ -110,7 +111,6 @@ static bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, setup.volumeModel = VOLUME_Generic; setup.deepTremolo = false; setup.deepVibrato = false; - setup.adLibPercussions = false; setup.scaleModulators = false; SetBankSetup(bank, setup); diff --git a/utils/gen_adldata/file_formats/load_ea.h b/utils/gen_adldata/file_formats/load_ea.h index 79367d9..c217c09 100644 --- a/utils/gen_adldata/file_formats/load_ea.h +++ b/utils/gen_adldata/file_formats/load_ea.h @@ -86,6 +86,7 @@ static bool LoadEA(const char *fn, unsigned bank, const char *prefix) tmp2.notenum = 0; tmp2.pseudo4op = false; tmp2.real4op = false; + tmp2.rhythmModeDrum = 0; std::string name; char name2[512]; @@ -131,7 +132,6 @@ static bool LoadEA(const char *fn, unsigned bank, const char *prefix) setup.volumeModel = VOLUME_CMF; setup.deepTremolo = false; setup.deepVibrato = false; - setup.adLibPercussions = false; setup.scaleModulators = false; SetBankSetup(bank, setup); diff --git a/utils/gen_adldata/file_formats/load_ibk.h b/utils/gen_adldata/file_formats/load_ibk.h index 934fb67..28177c7 100644 --- a/utils/gen_adldata/file_formats/load_ibk.h +++ b/utils/gen_adldata/file_formats/load_ibk.h @@ -3,7 +3,7 @@ #include "../progs_cache.h" -static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool percussive) +static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool percussive, bool noRhythmMode = false) { #ifdef HARD_BANKS writeIni("IBK", fn, prefix, bank, percussive ? INI_Drums : INI_Melodic); @@ -55,16 +55,45 @@ static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool perc tmp.data[6] = data[offset2 + 8]; tmp.data[7] = data[offset2 + 9]; tmp.data[10] = data[offset2 + 10]; - // [+11] seems to be used also, what is it for? - tmp.finetune = 0; + // bisqwit: [+11] seems to be used also, what is it for? + // Wohlstand: You wanna know? It's the rhythm-mode drum number! If 0 - melodic, >0 - rhythm-mode drum + tmp.finetune = percussive ? 0 : data[offset2 + 12]; tmp.diff = false; struct ins tmp2; - tmp2.notenum = gmno < 128 ? 0 : 35; + tmp2.notenum = percussive ? data[offset2 + 13] : 0; tmp2.pseudo4op = false; tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; tmp2.midi_velocity_offset = 0; + tmp2.rhythmModeDrum = 0; + if(percussive && !noRhythmMode) + { + int rm = data[offset2 + 11]; + switch(rm) + { + case 6: + tmp2.rhythmModeDrum = ins::Flag_RM_BassDrum; + break; + case 7: + tmp2.rhythmModeDrum = ins::Flag_RM_Snare; + break; + case 8: + tmp2.rhythmModeDrum = ins::Flag_RM_TomTom; + break; + case 9: + tmp2.rhythmModeDrum = ins::Flag_RM_Cymbal; + break; + case 10: + tmp2.rhythmModeDrum = ins::Flag_RM_HiHat; + break; + default: + // IBK logic: make non-percussion instrument be silent + tmp = MakeNoSoundIns(); + break; + } + } + size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2); SetBank(bank, (unsigned int)gmno, resno); } @@ -73,7 +102,6 @@ static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool perc setup.volumeModel = VOLUME_Generic; setup.deepTremolo = false; setup.deepVibrato = false; - setup.adLibPercussions = false; setup.scaleModulators = false; SetBankSetup(bank, setup); diff --git a/utils/gen_adldata/file_formats/load_jv.h b/utils/gen_adldata/file_formats/load_jv.h index ad840d8..a498bb6 100644 --- a/utils/gen_adldata/file_formats/load_jv.h +++ b/utils/gen_adldata/file_formats/load_jv.h @@ -74,6 +74,7 @@ static bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix) tmp2.real4op = (data[offset] != 0); tmp2.voice2_fine_tune = 0.0; tmp2.midi_velocity_offset = 0; + tmp2.rhythmModeDrum = 0; while(tmp2.notenum && tmp2.notenum < 20) { @@ -105,7 +106,6 @@ static bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix) setup.volumeModel = VOLUME_9X; setup.deepTremolo = true; setup.deepVibrato = true; - setup.adLibPercussions = false; setup.scaleModulators = false; SetBankSetup(bank, setup); diff --git a/utils/gen_adldata/file_formats/load_op2.h b/utils/gen_adldata/file_formats/load_op2.h index 7c68dd8..feb85ed 100644 --- a/utils/gen_adldata/file_formats/load_op2.h +++ b/utils/gen_adldata/file_formats/load_op2.h @@ -111,6 +111,8 @@ static bool LoadDoom(const char *fn, unsigned bank, const char *prefix) tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; tmp2.midi_velocity_offset = 0; + tmp2.rhythmModeDrum = 0; + while(tmp2.notenum && tmp2.notenum < 20) { tmp2.notenum += 12; @@ -161,7 +163,6 @@ static bool LoadDoom(const char *fn, unsigned bank, const char *prefix) setup.volumeModel = VOLUME_DMX; setup.deepTremolo = false; setup.deepVibrato = false; - setup.adLibPercussions = false; setup.scaleModulators = false; SetBankSetup(bank, setup); diff --git a/utils/gen_adldata/file_formats/load_tmb.h b/utils/gen_adldata/file_formats/load_tmb.h index 1d999d1..4417b02 100644 --- a/utils/gen_adldata/file_formats/load_tmb.h +++ b/utils/gen_adldata/file_formats/load_tmb.h @@ -44,7 +44,7 @@ static bool LoadTMB(const char *fn, unsigned bank, const char *prefix) tmp.data[8] = data[offset + 2]; tmp.data[9] = data[offset + 3]; tmp.data[10] = data[offset + 10]; - tmp.finetune = 0; //data[offset + 12]; + tmp.finetune = 0; tmp.diff = false; struct ins tmp2; @@ -53,6 +53,7 @@ static bool LoadTMB(const char *fn, unsigned bank, const char *prefix) tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; tmp2.midi_velocity_offset = (int8_t)data[offset + 12]; + tmp2.rhythmModeDrum = 0; std::string name; if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index]; @@ -69,7 +70,6 @@ static bool LoadTMB(const char *fn, unsigned bank, const char *prefix) setup.volumeModel = VOLUME_APOGEE; setup.deepTremolo = false; setup.deepVibrato = false; - setup.adLibPercussions = false; setup.scaleModulators = false; SetBankSetup(bank, setup); diff --git a/utils/gen_adldata/file_formats/load_wopl.h b/utils/gen_adldata/file_formats/load_wopl.h index 24b303e..cd8765e 100644 --- a/utils/gen_adldata/file_formats/load_wopl.h +++ b/utils/gen_adldata/file_formats/load_wopl.h @@ -15,6 +15,7 @@ enum class WOPL_Flags Mode_2op = 0x00, Mode_4op = 0x01, Mode_DoubleVoice = 0x02, + WOPL_RhythmModeMask = 0x38, }; static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) @@ -60,7 +61,6 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) setup.deepTremolo = (data[0x11] & 0x01) != 0; setup.deepVibrato = (data[0x11] & 0x02) != 0; setup.volumeModel = (int)data[0x12]; - setup.adLibPercussions = false; setup.scaleModulators = false; // Validate file format by size calculation @@ -172,6 +172,7 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) tmp2.real4op = real4op && !tmp2.pseudo4op; tmp2.voice2_fine_tune = 0; tmp2.midi_velocity_offset = (int8_t)data[offset + 36]; + tmp2.rhythmModeDrum = (flags & (uint8_t)WOPL_Flags::WOPL_RhythmModeMask); tmp[0].diff = false; tmp[1].diff = real4op && !tmp2.pseudo4op; diff --git a/utils/gen_adldata/gen_adldata.cc b/utils/gen_adldata/gen_adldata.cc index 28c6efd..7cb4528 100644 --- a/utils/gen_adldata/gen_adldata.cc +++ b/utils/gen_adldata/gen_adldata.cc @@ -88,6 +88,7 @@ int main(int argc, char**argv) std::string filter_m; std::string filter_p; std::string format; + bool noRhythmMode = false; ini.read("name", bank_name, "Untitled"); ini.read("format", format, "Unknown"); @@ -97,6 +98,7 @@ int main(int argc, char**argv) ini.read("prefix-p", prefix_d, ""); ini.read("filter-m", filter_m, ""); ini.read("filter-p", filter_p, ""); + ini.read("no-rhythm-mode", noRhythmMode, false); if(filepath.empty()) { @@ -207,7 +209,7 @@ int main(int argc, char**argv) if(!filepath_d.empty()) { //printf("Loading %s... \n", filepath_d.c_str()); - if(!LoadIBK(filepath_d.c_str(),bank, prefix_d.c_str(), true)) + if(!LoadIBK(filepath_d.c_str(),bank, prefix_d.c_str(), true, noRhythmMode)) { std::fprintf(stderr, "Failed to load bank %u, file %s!\n", bank, filepath.c_str()); return 1; @@ -409,7 +411,7 @@ int main(int argc, char**argv) unsigned flags = (i->first.pseudo4op ? ins::Flag_Pseudo4op : 0)| (i->first.real4op ? ins::Flag_Real4op : 0) | - (info.nosound ? ins::Flag_NoSound : 0); + (info.nosound ? ins::Flag_NoSound : 0) | i->first.rhythmModeDrum; std::fprintf(outFile, " {"); std::fprintf(outFile, "%4d,%4d,%3d, %d, %6" PRId64 ",%6" PRId64 ", %6d, %g", @@ -547,11 +549,10 @@ int main(int argc, char**argv) for(BankSetupData::iterator it = banksetup.begin(); it != banksetup.end(); it++) { AdlBankSetup &setup = it->second; - std::fprintf(outFile, " {%d, %d, %d, %d, %d}", + std::fprintf(outFile, " {%d, %d, %d, %d}", setup.volumeModel, setup.deepTremolo, setup.deepVibrato, - setup.adLibPercussions, setup.scaleModulators); if(it != last) std::fprintf(outFile, ", //Bank %u, %s\n", (unsigned)it->first, banknames[it->first].c_str()); diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 12c2de1..10124a8 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -112,7 +112,7 @@ size_t InsertNoSoundIns() { // { 0x0F70700,0x0F70710, 0xFF,0xFF, 0x0,+0 }, insdata tmp1 = MakeNoSoundIns(); - struct ins tmp2 = { 0, 0, 0, false, false, 0.0, 0 }; + struct ins tmp2 = { 0, 0, 0, false, false, 0u, 0.0, 0}; return InsertIns(tmp1, tmp1, tmp2, "nosound", ""); } diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 1212097..28aaa19 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -50,10 +50,15 @@ inline bool equal_approx(double const a, double const b) struct ins { enum { Flag_Pseudo4op = 0x01, Flag_NoSound = 0x02, Flag_Real4op = 0x04 }; + + enum { Flag_RM_BassDrum = 0x08, Flag_RM_Snare = 0x10, Flag_RM_TomTom = 0x18, + Flag_RM_Cymbal = 0x20, Flag_RM_HiHat = 0x28, Mask_RhythmMode = 0x38 }; + size_t insno1, insno2; unsigned char notenum; bool pseudo4op; bool real4op; + uint32_t rhythmModeDrum; double voice2_fine_tune; int8_t midi_velocity_offset; @@ -64,6 +69,7 @@ struct ins && insno2 == b.insno2 && pseudo4op == b.pseudo4op && real4op == b.real4op + && rhythmModeDrum == b.rhythmModeDrum && equal_approx(voice2_fine_tune, b.voice2_fine_tune) && midi_velocity_offset == b.midi_velocity_offset; } @@ -74,6 +80,7 @@ struct ins if(notenum != b.notenum) return notenum < b.notenum; if(pseudo4op != b.pseudo4op) return pseudo4op < b.pseudo4op; if(real4op != b.real4op) return real4op < b.real4op; + if(rhythmModeDrum != b.rhythmModeDrum) return rhythmModeDrum < b.rhythmModeDrum; if(!equal_approx(voice2_fine_tune, b.voice2_fine_tune)) return voice2_fine_tune < b.voice2_fine_tune; if(midi_velocity_offset != b.midi_velocity_offset) return midi_velocity_offset < b.midi_velocity_offset; return 0; @@ -98,7 +105,6 @@ struct AdlBankSetup int volumeModel; bool deepTremolo; bool deepVibrato; - bool adLibPercussions; bool scaleModulators; }; diff --git a/utils/midiplay/adlmidiplay.cpp b/utils/midiplay/adlmidiplay.cpp index 74289a0..8550de9 100644 --- a/utils/midiplay/adlmidiplay.cpp +++ b/utils/midiplay/adlmidiplay.cpp @@ -236,7 +236,7 @@ int main(int argc, char **argv) { std::printf( "Usage: adlmidi <midifilename> [ <options> ] [ <bank> [ <numchips> [ <numfourops>] ] ]\n" - " -p Enables adlib percussion instrument mode\n" + // " -p Enables adlib percussion instrument mode\n" " -t Enables tremolo amplification mode\n" " -v Enables vibrato amplification mode\n" " -s Enables scaling of modulator volumes\n" @@ -360,7 +360,7 @@ int main(int argc, char **argv) bool had_option = false; if(!std::strcmp("-p", argv[2])) - adl_setPercMode(myDevice, 1);//Turn on AdLib percussion mode + fprintf(stderr, "Warning: -p argument is deprecated and useless!\n"); //adl_setPercMode(myDevice, 1);//Turn on AdLib percussion mode else if(!std::strcmp("-v", argv[2])) adl_setHVibrato(myDevice, 1);//Force turn on deep vibrato |