aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--banks.ini16
-rw-r--r--src/adlmidi_load.cpp1
-rw-r--r--src/adlmidi_midiplay.cpp9
-rw-r--r--src/adlmidi_opl3.cpp2
-rw-r--r--src/inst_db.cpp2
-rw-r--r--src/oplinst.h1
-rw-r--r--src/wopl/wopl_file.h4
-rw-r--r--utils/gen_adldata/file_formats/load_ail.h7
-rw-r--r--utils/gen_adldata/file_formats/load_ibk.h7
-rw-r--r--utils/gen_adldata/gen_adldata.cc8
-rw-r--r--utils/gen_adldata/progs_cache.h12
12 files changed, 52 insertions, 18 deletions
diff --git a/README.md b/README.md
index e5c4aa6..abca87b 100644
--- a/README.md
+++ b/README.md
@@ -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
diff --git a/banks.ini b/banks.ini
index 2f1be5f..d6e56d1 100644
--- a/banks.ini
+++ b/banks.ini
@@ -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);