diff options
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | banks.ini | 16 | ||||
-rw-r--r-- | src/adlmidi_load.cpp | 1 | ||||
-rw-r--r-- | src/adlmidi_midiplay.cpp | 9 | ||||
-rw-r--r-- | src/adlmidi_opl3.cpp | 2 | ||||
-rw-r--r-- | src/inst_db.cpp | 2 | ||||
-rw-r--r-- | src/oplinst.h | 1 | ||||
-rw-r--r-- | src/wopl/wopl_file.h | 4 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ail.h | 7 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ibk.h | 7 | ||||
-rw-r--r-- | utils/gen_adldata/gen_adldata.cc | 8 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.h | 12 |
12 files changed, 52 insertions, 18 deletions
@@ -183,6 +183,7 @@ To build that example you will need to have installed SDL2 library. * Added an ability to set the count of loops (how many times to play the song) * Added an ability to disable/enable playing of selected MIDI channels * Fixed memory damages and crashes while playing XMI files + * Added bank-specific MT32 defaults (to don't confuse XMI playback between different games, works for AIL and IBK only, and for WOPL if set at the header) ## 1.5.0.1 2020-10-11 * Fixed an incorrect timer processing when using a real-time interface @@ -166,6 +166,7 @@ name = "AIL (Syndicate)" format = AIL file = "fm_banks/ail/Syndicate.opl" prefix = "f19G" +mt32-defaults = true [bank-20] ;Guilty, Orion Conspiracy, Terra Nova Strike Force Centauri @@ -179,6 +180,7 @@ name = "AIL (Magic Carpet 2) :NON-GM:" format = AIL file = "fm_banks/ail/non-gm/MagicCarpet2.opl" prefix = "f21G" +mt32-defaults = true [bank-22] name = "AIL (Nemesis)" @@ -191,6 +193,7 @@ name = "AIL (Jagged Alliance) :NON-GM:" format = AIL file = "fm_banks/ail/non-gm/JaggedAlliance.opl" prefix = "f23G" +mt32-defaults = true [bank-24] ; :: 4op, MISSING INSTRUMENTS @@ -198,6 +201,7 @@ name = "AIL (When Two Worlds War) :MISS-INS:" format = AIL file = "fm_banks/ail/miss-inst/WhenTwoWorldsWar.opl" prefix = "f24G" +mt32-defaults = true [bank-25] ; :: MISSING INSTRUMENTS @@ -205,12 +209,14 @@ name = "AIL (Bards Tale Construction) :MISS-INS:" format = AIL file = "fm_banks/ail/miss-inst/BardsTaleConstruction.opl" prefix = "f25G" +mt32-defaults = true [bank-26] name = "AIL (Return to Zork) :NON-GM:" format = AIL file = "fm_banks/ail/non-gm/ReturnToZork.opl" prefix = "f26G" +mt32-defaults = true [bank-27] name = "AIL (Theme Hospital)" @@ -229,12 +235,14 @@ name = "AIL (Inherit The Earth) :NON-GM:" format = AIL file = "fm_banks/ail/non-gm/InteritTheEarth.opl" prefix = "f29G" +mt32-defaults = true [bank-30] name = "AIL (Inherit The Earth, file two) :NON-GM:" format = AIL file = "fm_banks/ail/non-gm/InteritTheEarth2.opl" prefix = "f30G" +mt32-defaults = true [bank-31] name = "AIL (Little Big Adventure) :4op:" @@ -247,6 +255,7 @@ name = "AIL (Wreckin Crew) :NON-GM:" format = AIL file = "fm_banks/ail/non-gm/WreckinCrew.opl" prefix = "f32G" +mt32-defaults = true [bank-33] name = "AIL (Death Gate)" @@ -297,10 +306,11 @@ file = "fm_banks/ail/miss-inst/Caesar2.opl" prefix = "f12G" [bank-41] -name = "AIL (Syndicate Wars)" +name = "AIL (Syndicate Wars) :NON-GM:" format = AIL file = "fm_banks/ail/SyndicateWars.opl" prefix = "f41G" +mt32-defaults = true [bank-42] name = "AIL (Bubble Bobble Feat. Rainbow Islands, Z)" @@ -340,6 +350,7 @@ format = AIL file = "fm_banks/ail/non-gm/BattleChess4000-2.opl" ;file = "fm_banks/ail/non-gm/BattleChess4000.opl" prefix = "f53G" +mt32-defaults = true [bank-48] name = "AIL (Ultimate Soccer Manager :p4op:)" @@ -359,12 +370,14 @@ name = "AIL (Ultima Underworld 2) :NON-GM:" format = AIL file = "fm_banks/ail/non-gm/UltimaUnderworld2.opl" prefix = "oG" +mt32-defaults = true [bank-51] name = "AIL (Kasparov's Gambit) :NON-GM:" format = AIL file = "fm_banks/ail/non-gm/KasparovGambit.opl" prefix = "f15G" +mt32-defaults = true [bank-52] name = "AIL (High Seas Trader) :MISS-INS:" @@ -412,6 +425,7 @@ file = "fm_banks/ibk_files/mt_fm.ibk" ;file-p = "fm_banks/ibk_files/soccer-percs.ibk" prefix = "b57M" prefix-p = "b57P" +mt32-defaults = true ; FatMan bank we are know by Windows 9x drivers ; bank made by FatMan company and used in JungleVision Sound Drive audio library diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp index b2e53cb..f44d90f 100644 --- a/src/adlmidi_load.cpp +++ b/src/adlmidi_load.cpp @@ -117,6 +117,7 @@ bool MIDIplay::LoadBank(FileAndMemReader &fr) synth.m_insBankSetup.scaleModulators = false; synth.m_insBankSetup.deepTremolo = (wopl->opl_flags & WOPL_FLAG_DEEP_TREMOLO) != 0; synth.m_insBankSetup.deepVibrato = (wopl->opl_flags & WOPL_FLAG_DEEP_VIBRATO) != 0; + synth.m_insBankSetup.mt32defaults = (wopl->opl_flags & WOPL_FLAG_MT32) != 0; synth.m_insBankSetup.volumeModel = wopl->volume_model; m_setup.deepTremoloMode = -1; m_setup.deepVibratoMode = -1; diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index 9e2e437..0f81f9d 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -128,6 +128,7 @@ void MIDIplay::applySetup() synth.m_insBankSetup.volumeModel = (b.bankSetup & 0x00FF); synth.m_insBankSetup.deepTremolo = (b.bankSetup >> 8 & 0x0001) != 0; synth.m_insBankSetup.deepVibrato = (b.bankSetup >> 8 & 0x0002) != 0; + synth.m_insBankSetup.mt32defaults = (b.bankSetup >> 8 & 0x0004) != 0; } #endif @@ -202,15 +203,15 @@ void MIDIplay::resetMIDIDefaults(int offset) for(size_t c = offset, n = m_midiChannels.size(); c < n; ++c) { MIDIchannel &ch = m_midiChannels[c]; - if(synth.m_musicMode == Synth::MODE_XMIDI) + + if(synth.m_musicMode == Synth::MODE_RSXX) + ch.def_volume = 127; + else if(synth.m_insBankSetup.mt32defaults) { ch.def_volume = 127; ch.def_bendsense_lsb = 0; ch.def_bendsense_msb = 12; } - else - if(synth.m_musicMode == Synth::MODE_RSXX) - ch.def_volume = 127; } } diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp index 9d7fa92..f9b891d 100644 --- a/src/adlmidi_opl3.cpp +++ b/src/adlmidi_opl3.cpp @@ -874,6 +874,7 @@ OPL3::OPL3() : m_insBankSetup.deepTremolo = false; m_insBankSetup.deepVibrato = false; m_insBankSetup.scaleModulators = false; + m_insBankSetup.mt32defaults = false; #ifdef DISABLE_EMBEDDED_BANKS m_embeddedBank = CustomBankTag; @@ -913,6 +914,7 @@ void OPL3::setEmbeddedBank(uint32_t bank) const BanksDump::BankEntry &bankEntry = g_embeddedBanks[m_embeddedBank]; m_insBankSetup.deepTremolo = ((bankEntry.bankSetup >> 8) & 0x01) != 0; m_insBankSetup.deepVibrato = ((bankEntry.bankSetup >> 8) & 0x02) != 0; + m_insBankSetup.mt32defaults = ((bankEntry.bankSetup >> 8) & 0x04) != 0; m_insBankSetup.volumeModel = (bankEntry.bankSetup & 0xFF); m_insBankSetup.scaleModulators = false; diff --git a/src/inst_db.cpp b/src/inst_db.cpp index 7e02502..cf5e30b 100644 --- a/src/inst_db.cpp +++ b/src/inst_db.cpp @@ -12,7 +12,7 @@ const size_t g_embeddedBanksCount = 78; const BanksDump::BankEntry g_embeddedBanks[] = { -{0x0307,1,1,"AIL (Star Control 3, Albion, Empire 2, etc.)",0,1},{0x0300,1,1,"Bisqwit (selection of 4op and 2op)",2,3},{0x0309,1,1,"HMI (Descent, Asterix)",4,5},{0x0309,1,1,"HMI (Descent:: Int)",6,7},{0x0309,1,1,"HMI (Descent:: Ham)",8,9},{0x0309,1,1,"HMI (Descent:: Rick)",10,11},{0x0309,1,1,"HMI (Descent 2)",12,13},{0x0309,1,1,"HMI (Normality)",14,15},{0x0309,1,1,"HMI (Shattered Steel)",16,17},{0x0309,1,1,"HMI (Theme Park)",18,19},{0x0309,1,1,"HMI (3d Table Sports, Battle Arena Toshinden)",20,21},{0x0309,1,1,"HMI (Aces of the Deep)",22,23},{0x0309,1,1,"HMI (Earthsiege)",24,25},{0x0309,1,1,"HMI (Anvil of Dawn)",26,27},{0x0002,1,1,"DMX (Doom 2)",28,29},{0x0002,1,1,"DMX (Hexen, Heretic)",30,31},{0x0002,1,1,"DMX (DOOM, MUS Play)",32,33},{0x0307,1,1,"AIL (Discworld, Grandest Fleet, etc.)",34,35},{0x0307,1,1,"AIL (Warcraft 2)",36,37},{0x0307,1,1,"AIL (Syndicate)",38,39},{0x0307,1,1,"AIL (Guilty, Orion Conspiracy, TNSFC ::4op)",40,41},{0x0307,1,1,"AIL (Magic Carpet 2) :NON-GM:",42,43},{0x0307,1,1,"AIL (Nemesis)",44,45},{0x0307,3,1,"AIL (Jagged Alliance) :NON-GM:",46,49},{0x0307,1,1,"AIL (When Two Worlds War) :MISS-INS:",50,51},{0x0307,1,1,"AIL (Bards Tale Construction) :MISS-INS:",52,53},{0x0307,1,1,"AIL (Return to Zork) :NON-GM:",54,55},{0x0307,1,1,"AIL (Theme Hospital)",56,57},{0x0307,1,1,"AIL (National Hockey League PA)",58,59},{0x0307,1,1,"AIL (Inherit The Earth) :NON-GM:",60,61},{0x0307,1,1,"AIL (Inherit The Earth, file two) :NON-GM:",62,63},{0x0307,1,1,"AIL (Little Big Adventure) :4op:",64,65},{0x0307,1,1,"AIL (Wreckin Crew) :NON-GM:",66,67},{0x0307,1,1,"AIL (Death Gate)",68,69},{0x0307,1,1,"AIL (FIFA International Soccer)",70,71},{0x0307,2,1,"AIL (Starship Invasion)",72,74},{0x0307,1,1,"AIL (Super Street Fighter 2 :4op:)",75,76},{0x0307,1,1,"AIL (Lords of the Realm) :MISS-INS:",77,78},{0x0307,1,1,"AIL (SimFarm, SimHealth) :4op:",79,80},{0x0307,1,1,"AIL (SimFarm, Settlers, Serf City)",81,82},{0x0307,1,1,"AIL (Caesar 2) :p4op: :MISS-INS:",83,84},{0x0307,1,1,"AIL (Syndicate Wars)",85,86},{0x0307,1,1,"AIL (Bubble Bobble Feat. Rainbow Islands, Z)",87,88},{0x0307,1,1,"AIL (Warcraft) :NON-GM:",89,90},{0x0307,1,1,"AIL (Terra Nova Strike Force Centuri) :p4op:",91,92},{0x0307,1,1,"AIL (System Shock) :p4op:",93,94},{0x0307,1,1,"AIL (Advanced Civilization)",95,96},{0x0307,1,1,"AIL (Battle Chess 4000) :p4op: :NON-GM:",97,98},{0x0307,1,1,"AIL (Ultimate Soccer Manager :p4op:)",99,100},{0x0307,1,1,"AIL (Air Bucks, Blue And The Gray, etc) :NON-GM:",101,102},{0x0307,2,1,"AIL (Ultima Underworld 2) :NON-GM:",103,105},{0x0307,1,1,"AIL (Kasparov's Gambit) :NON-GM:",106,107},{0x0307,1,1,"AIL (High Seas Trader) :MISS-INS:",108,109},{0x0007,1,2,"AIL (Master of Magic) :4op:",110,111},{0x0307,1,1,"AIL (Master of Magic) :4op: orchestral drums",113,114},{0x0300,1,1,"SB (Action Soccer)",115,116},{0x0300,1,1,"SB (3d Cyberpuck :: melodic only)",117,118},{0x0300,1,0,"SB (Simon the Sorcerer :: melodic only)",119,120},{0x0304,1,1,"OP3 (The Fat Man 2op set; Win9x)",120,121},{0x0304,1,1,"OP3 (The Fat Man 4op set)",122,123},{0x0304,1,1,"OP3 (JungleVision 2op set :: melodic only)",124,125},{0x0304,1,1,"OP3 (Wallace 2op set, Nitemare 3D :: melodic only)",126,127},{0x0003,1,1,"TMB (Duke Nukem 3D)",128,129},{0x0003,1,1,"TMB (Shadow Warrior)",130,131},{0x0002,1,1,"DMX (Raptor)",132,133},{0x0300,1,1,"SB (Modded GMOPL by Wohlstand)",134,135},{0x0300,1,1,"SB (Jamie O'Connell's bank)",136,137},{0x0003,1,1,"TMB (Apogee Sound System Default bank) :broken drums:",138,139},{0x0300,1,1,"WOPL (4op bank by James Alan Nguyen and Wohlstand)",140,141},{0x0003,1,1,"TMB (Blood)",142,143},{0x0003,1,1,"TMB (Rise of the Triad)",144,145},{0x0003,1,1,"TMB (Nam)",146,147},{0x0000,11,3,"WOPL (DMXOPL3 bank by Sneakernets)",148,159},{0x0201,1,1,"EA (Cartooners)",162,163},{0x0209,1,1,"WOPL (Apogee IMF 90-ish)",164,165},{0x0307,3,1,"The Lost Vikings",166,169},{0x0002,1,1,"DMX (Strife)",170,171},{0x0009,1,1,"WOPL (MS-AdLib, Windows 3.x)",172,173},}; +{0x0307,1,1,"AIL (Star Control 3, Albion, Empire 2, etc.)",0,1},{0x0300,1,1,"Bisqwit (selection of 4op and 2op)",2,3},{0x0309,1,1,"HMI (Descent, Asterix)",4,5},{0x0309,1,1,"HMI (Descent:: Int)",6,7},{0x0309,1,1,"HMI (Descent:: Ham)",8,9},{0x0309,1,1,"HMI (Descent:: Rick)",10,11},{0x0309,1,1,"HMI (Descent 2)",12,13},{0x0309,1,1,"HMI (Normality)",14,15},{0x0309,1,1,"HMI (Shattered Steel)",16,17},{0x0309,1,1,"HMI (Theme Park)",18,19},{0x0309,1,1,"HMI (3d Table Sports, Battle Arena Toshinden)",20,21},{0x0309,1,1,"HMI (Aces of the Deep)",22,23},{0x0309,1,1,"HMI (Earthsiege)",24,25},{0x0309,1,1,"HMI (Anvil of Dawn)",26,27},{0x0002,1,1,"DMX (Doom 2)",28,29},{0x0002,1,1,"DMX (Hexen, Heretic)",30,31},{0x0002,1,1,"DMX (DOOM, MUS Play)",32,33},{0x0307,1,1,"AIL (Discworld, Grandest Fleet, etc.)",34,35},{0x0307,1,1,"AIL (Warcraft 2)",36,37},{0x0707,1,1,"AIL (Syndicate)",38,39},{0x0307,1,1,"AIL (Guilty, Orion Conspiracy, TNSFC ::4op)",40,41},{0x0707,1,1,"AIL (Magic Carpet 2) :NON-GM:",42,43},{0x0307,1,1,"AIL (Nemesis)",44,45},{0x0707,3,1,"AIL (Jagged Alliance) :NON-GM:",46,49},{0x0707,1,1,"AIL (When Two Worlds War) :MISS-INS:",50,51},{0x0707,1,1,"AIL (Bards Tale Construction) :MISS-INS:",52,53},{0x0707,1,1,"AIL (Return to Zork) :NON-GM:",54,55},{0x0307,1,1,"AIL (Theme Hospital)",56,57},{0x0307,1,1,"AIL (National Hockey League PA)",58,59},{0x0707,1,1,"AIL (Inherit The Earth) :NON-GM:",60,61},{0x0707,1,1,"AIL (Inherit The Earth, file two) :NON-GM:",62,63},{0x0307,1,1,"AIL (Little Big Adventure) :4op:",64,65},{0x0707,1,1,"AIL (Wreckin Crew) :NON-GM:",66,67},{0x0307,1,1,"AIL (Death Gate)",68,69},{0x0307,1,1,"AIL (FIFA International Soccer)",70,71},{0x0307,2,1,"AIL (Starship Invasion)",72,74},{0x0307,1,1,"AIL (Super Street Fighter 2 :4op:)",75,76},{0x0307,1,1,"AIL (Lords of the Realm) :MISS-INS:",77,78},{0x0307,1,1,"AIL (SimFarm, SimHealth) :4op:",79,80},{0x0307,1,1,"AIL (SimFarm, Settlers, Serf City)",81,82},{0x0307,1,1,"AIL (Caesar 2) :p4op: :MISS-INS:",83,84},{0x0707,1,1,"AIL (Syndicate Wars) :NON-GM:",85,86},{0x0307,1,1,"AIL (Bubble Bobble Feat. Rainbow Islands, Z)",87,88},{0x0307,1,1,"AIL (Warcraft) :NON-GM:",89,90},{0x0307,1,1,"AIL (Terra Nova Strike Force Centuri) :p4op:",91,92},{0x0307,1,1,"AIL (System Shock) :p4op:",93,94},{0x0307,1,1,"AIL (Advanced Civilization)",95,96},{0x0707,1,1,"AIL (Battle Chess 4000) :p4op: :NON-GM:",97,98},{0x0307,1,1,"AIL (Ultimate Soccer Manager :p4op:)",99,100},{0x0307,1,1,"AIL (Air Bucks, Blue And The Gray, etc) :NON-GM:",101,102},{0x0707,2,1,"AIL (Ultima Underworld 2) :NON-GM:",103,105},{0x0707,1,1,"AIL (Kasparov's Gambit) :NON-GM:",106,107},{0x0307,1,1,"AIL (High Seas Trader) :MISS-INS:",108,109},{0x0007,1,2,"AIL (Master of Magic) :4op:",110,111},{0x0307,1,1,"AIL (Master of Magic) :4op: orchestral drums",113,114},{0x0300,1,1,"SB (Action Soccer)",115,116},{0x0300,1,1,"SB (3d Cyberpuck :: melodic only)",117,118},{0x0700,1,0,"SB (Simon the Sorcerer :: melodic only)",119,120},{0x0304,1,1,"OP3 (The Fat Man 2op set; Win9x)",120,121},{0x0304,1,1,"OP3 (The Fat Man 4op set)",122,123},{0x0304,1,1,"OP3 (JungleVision 2op set :: melodic only)",124,125},{0x0304,1,1,"OP3 (Wallace 2op set, Nitemare 3D :: melodic only)",126,127},{0x0003,1,1,"TMB (Duke Nukem 3D)",128,129},{0x0003,1,1,"TMB (Shadow Warrior)",130,131},{0x0002,1,1,"DMX (Raptor)",132,133},{0x0300,1,1,"SB (Modded GMOPL by Wohlstand)",134,135},{0x0300,1,1,"SB (Jamie O'Connell's bank)",136,137},{0x0003,1,1,"TMB (Apogee Sound System Default bank) :broken drums:",138,139},{0x0300,1,1,"WOPL (4op bank by James Alan Nguyen and Wohlstand)",140,141},{0x0003,1,1,"TMB (Blood)",142,143},{0x0003,1,1,"TMB (Rise of the Triad)",144,145},{0x0003,1,1,"TMB (Nam)",146,147},{0x0000,11,3,"WOPL (DMXOPL3 bank by Sneakernets)",148,159},{0x0201,1,1,"EA (Cartooners)",162,163},{0x0209,1,1,"WOPL (Apogee IMF 90-ish)",164,165},{0x0307,3,1,"The Lost Vikings",166,169},{0x0002,1,1,"DMX (Strife)",170,171},{0x0009,1,1,"WOPL (MS-AdLib, Windows 3.x)",172,173},}; #define q(x) g_embeddedBanks[x].title const char* const g_embeddedBankNames[] = diff --git a/src/oplinst.h b/src/oplinst.h index 2238662..622d4b2 100644 --- a/src/oplinst.h +++ b/src/oplinst.h @@ -106,6 +106,7 @@ struct OplBankSetup bool deepTremolo; bool deepVibrato; bool scaleModulators; + bool mt32defaults; }; /** diff --git a/src/wopl/wopl_file.h b/src/wopl/wopl_file.h index 5666ce7..b7d0122 100644 --- a/src/wopl/wopl_file.h +++ b/src/wopl/wopl_file.h @@ -60,7 +60,9 @@ typedef enum WOPLFileFlags /* Enable Deep-Tremolo flag */ WOPL_FLAG_DEEP_TREMOLO = 0x01, /* Enable Deep-Vibrato flag */ - WOPL_FLAG_DEEP_VIBRATO = 0x02 + WOPL_FLAG_DEEP_VIBRATO = 0x02, + /* Enable MT32 defaults (127 initials and octave-wide pitch bend by default, etc.) */ + WOPL_FLAG_MT32 = 0x04 } WOPLFileFlags; /* Volume scaling model implemented in the libADLMIDI */ diff --git a/utils/gen_adldata/file_formats/load_ail.h b/utils/gen_adldata/file_formats/load_ail.h index d6fa014..ad536bc 100644 --- a/utils/gen_adldata/file_formats/load_ail.h +++ b/utils/gen_adldata/file_formats/load_ail.h @@ -13,7 +13,7 @@ struct GTL_Head // GTL file header entry structure }; bool BankFormats::LoadMiles(BanksDump &db, const char *fn, unsigned bank, - const std::string &bankTitle, const char *prefix) + const std::string &bankTitle, const char *prefix, bool mt32) { #ifdef HARD_BANKS writeIni("AIL", fn, prefix, bank, INI_Both); @@ -60,7 +60,10 @@ bool BankFormats::LoadMiles(BanksDump &db, const char *fn, unsigned bank, } while(data_pos < data_end); - size_t bankDb = db.initBank(bank, bankTitle, BanksDump::BankEntry::SETUP_AIL); + uint_fast16_t bankSetup = mt32 ? + BanksDump::BankEntry::SETUP_AIL_MT32 : + BanksDump::BankEntry::SETUP_AIL; + size_t bankDb = db.initBank(bank, bankTitle, bankSetup); std::vector<BanksDump::MidiBank> bnkMelodic; bnkMelodic.resize(max_bank_number + 1, BanksDump::MidiBank()); diff --git a/utils/gen_adldata/file_formats/load_ibk.h b/utils/gen_adldata/file_formats/load_ibk.h index 9d9df20..d9780fe 100644 --- a/utils/gen_adldata/file_formats/load_ibk.h +++ b/utils/gen_adldata/file_formats/load_ibk.h @@ -5,7 +5,7 @@ bool BankFormats::LoadIBK(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, - bool percussive, bool noRhythmMode) + bool percussive, bool noRhythmMode, bool mt32) { #ifdef HARD_BANKS writeIni("IBK", fn, prefix, bank, percussive ? INI_Drums : INI_Melodic); @@ -23,7 +23,10 @@ bool BankFormats::LoadIBK(BanksDump &db, const char *fn, unsigned bank, } std::fclose(fp); - size_t bankDb = db.initBank(bank, bankTitle, BanksDump::BankEntry::SETUP_Generic); + uint_fast16_t bankSetup = mt32 ? + BanksDump::BankEntry::SETUP_IBK_MT32 : + BanksDump::BankEntry::SETUP_Generic; + size_t bankDb = db.initBank(bank, bankTitle, bankSetup); BanksDump::MidiBank bnk; unsigned offs1_base = 0x804, offs1_len = 9; diff --git a/utils/gen_adldata/gen_adldata.cc b/utils/gen_adldata/gen_adldata.cc index 375ea79..2dabd66 100644 --- a/utils/gen_adldata/gen_adldata.cc +++ b/utils/gen_adldata/gen_adldata.cc @@ -65,6 +65,7 @@ int main(int argc, char**argv) std::string filter_p; std::string format; bool noRhythmMode = false; + bool mt32defaults = false; ini.read("name", bank_name, "Untitled"); ini.read("format", format, "Unknown"); @@ -75,6 +76,7 @@ int main(int argc, char**argv) ini.read("filter-m", filter_m, ""); ini.read("filter-p", filter_p, ""); ini.read("no-rhythm-mode", noRhythmMode, false); + ini.read("mt32-defaults", mt32defaults, false); if(filepath.empty()) { @@ -88,7 +90,7 @@ int main(int argc, char**argv) if(format == "AIL") { - if(!BankFormats::LoadMiles(db, filepath.c_str(), bank, bank_name, prefix.c_str())) + if(!BankFormats::LoadMiles(db, filepath.c_str(), bank, bank_name, prefix.c_str(), mt32defaults)) { std::fprintf(stderr, "Failed to load bank %u, file %s!\n", bank, filepath.c_str()); return 1; @@ -177,7 +179,7 @@ int main(int argc, char**argv) else if(format == "IBK") { - if(!BankFormats::LoadIBK(db, filepath.c_str(), bank, bank_name, prefix.c_str(), false)) + if(!BankFormats::LoadIBK(db, filepath.c_str(), bank, bank_name, prefix.c_str(), false, false, mt32defaults)) { std::fprintf(stderr, "Failed to load bank %u, file %s!\n", bank, filepath.c_str()); return 1; @@ -185,7 +187,7 @@ int main(int argc, char**argv) if(!filepath_d.empty()) { //printf("Loading %s... \n", filepath_d.c_str()); - if(!BankFormats::LoadIBK(db, filepath_d.c_str(),bank, bank_name, prefix_d.c_str(), true, noRhythmMode)) + if(!BankFormats::LoadIBK(db, filepath_d.c_str(),bank, bank_name, prefix_d.c_str(), true, noRhythmMode, mt32defaults)) { 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 6089d89..f942330 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -100,7 +100,9 @@ struct BanksDump /* Enable Deep-Tremolo flag */ WOPL_FLAG_DEEP_TREMOLO = 0x01, /* Enable Deep-Vibrato flag */ - WOPL_FLAG_DEEP_VIBRATO = 0x02 + WOPL_FLAG_DEEP_VIBRATO = 0x02, + /* Enable MT32 defaults (127 initials and octave-wide pitch bend by default, etc.) */ + WOPL_FLAG_MT32 = 0x04 } WOPLFileFlags; /* Volume scaling model implemented in the libADLMIDI */ @@ -119,7 +121,7 @@ struct BanksDump } WOPL_VolumeModel; /** - * @brief Suggested bank setup in dependence from a driver that does use of this + * @brief Suggested bank setup depending from a driver that does use of this */ enum BankSetup { @@ -129,7 +131,9 @@ struct BanksDump SETUP_DMX = 0x0002, SETUP_Apogee = 0x0003, SETUP_AIL = 0x0307, + SETUP_AIL_MT32= 0x0707, SETUP_IBK = 0x0301, + SETUP_IBK_MT32= 0x0700, SETUP_IMF = 0x0200, SETUP_CMF = 0x0201, SETUP_HMI = 0x0309 @@ -333,14 +337,14 @@ struct BanksDump namespace BankFormats { -bool LoadMiles(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); +bool LoadMiles(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, bool mt32); bool LoadBisqwit(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); bool LoadBNK(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, bool is_fat, bool percussive); bool LoadBNK2(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, const std::string &melo_filter, const std::string &perc_filter); bool LoadEA(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix); -bool LoadIBK(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, bool percussive, bool noRhythmMode = false); +bool LoadIBK(BanksDump &db, const char *fn, unsigned bank, const std::string &bankTitle, const char *prefix, bool percussive, bool noRhythmMode, bool mt32); 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); |