From 62b0deefc3e4b3dd714581aac354712b986d30fc Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Thu, 26 Jan 2017 01:51:06 +0300 Subject: Created a "Theme Park" bank with the fixed drums Using BNKs directly results a wrong pitch for the drums and set is incompatible with General Midi, so, some drums has been swapped and copy-pasted --- src/gen_adldata/gen_adldata.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src/gen_adldata') diff --git a/src/gen_adldata/gen_adldata.cc b/src/gen_adldata/gen_adldata.cc index c5e966f..b32a267 100644 --- a/src/gen_adldata/gen_adldata.cc +++ b/src/gen_adldata/gen_adldata.cc @@ -233,7 +233,7 @@ static void LoadBNK(const char* fn, unsigned bank, const char* prefix, bool is_f + (op1[ 5] << 5) // SUSTAIN FLAG + (op1[11] << 4) // SCALING FLAG + op1[ 1]; // FREQMUL - + tmp.data[1] = (op2[ 9] << 7) + (op2[10] << 6) + (op2[ 5] << 5) @@ -1057,8 +1057,9 @@ int main() LoadBNK("fm_banks/bnk_files/ssmelo.bnk", 8, "b8M", false, false); LoadBNK("fm_banks/bnk_files/ssdrum.bnk", 8, "b8P", false, true); - LoadBNK("fm_banks/bnk_files/file131.bnk", 9, "b9M", false, false); - LoadBNK("fm_banks/bnk_files/file132.bnk", 9, "b9P", false, true); + LoadTMB("fm_banks/bnk_files/themepark.tmb", 9, "b9MP"); + //LoadBNK("fm_banks/bnk_files/file131.bnk", 9, "b9M", false, false); + //LoadBNK("fm_banks/bnk_files/file132.bnk", 9, "b9P", false, true); LoadBNK("fm_banks/bnk_files/file133.bnk", 10,"b10P", false, true); LoadBNK("fm_banks/bnk_files/file134.bnk", 10,"b10M", false, false); LoadBNK("fm_banks/bnk_files/file142.bnk", 11, "b11P", false, true); @@ -1125,7 +1126,7 @@ int main() LoadTMB("fm_banks/tmb_files/d3dtimbr.tmb", 62, "duke"); LoadTMB("fm_banks/tmb_files/swtimbr.tmb", 63, "sw"); - + LoadDoom("fm_banks/raptor/genmidi.op2", 64, "rapt"); //LoadJunglevision("fm_banks/op3_files/fat2_modded.op3", 65, "b65M"); @@ -1137,7 +1138,7 @@ int main() LoadTMB("fm_banks/tmb_files/default.tmb", 67, "3drm67"); //LoadDoom("fm_banks/doom2/wolfinstein.op2", 67, "wolf"); //Small experiment! - + LoadJunglevision("fm_banks/op3_files/2x2.op3", 68, "2x2byJAN"); LoadTMB("fm_banks/tmb_files/bloodtmb.tmb", 69, "apgblood"); @@ -1390,7 +1391,7 @@ int main() } std::set listed; - printf( + printf( "\n\n//Returns total number of generated banks\n" "int maxAdlBanks()\n" "{" -- cgit v1.2.3 From 33f0e8bf38f15e295ccaaea2884f7e8baebf4cff Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Tue, 7 Feb 2017 16:02:25 +0300 Subject: Fixed swapped melodic and drums mistake of the 12'th bank "Earthsiege" Now this bank is finally works fine! --- src/gen_adldata/gen_adldata.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/gen_adldata') diff --git a/src/gen_adldata/gen_adldata.cc b/src/gen_adldata/gen_adldata.cc index b32a267..655b837 100644 --- a/src/gen_adldata/gen_adldata.cc +++ b/src/gen_adldata/gen_adldata.cc @@ -1064,8 +1064,8 @@ int main() LoadBNK("fm_banks/bnk_files/file134.bnk", 10,"b10M", false, false); LoadBNK("fm_banks/bnk_files/file142.bnk", 11, "b11P", false, true); LoadBNK("fm_banks/bnk_files/file143.bnk", 11, "b11M", false, false); - LoadBNK("fm_banks/bnk_files/file144.bnk", 12, "b12M", false, false); - LoadBNK("fm_banks/bnk_files/file145.bnk", 12, "b12P", false, true); + LoadBNK("fm_banks/bnk_files/file145.bnk", 12, "b12M", false, false);//file145 is MELODIC + LoadBNK("fm_banks/bnk_files/file144.bnk", 12, "b12P", false, true);//file144 is DRUMS LoadBNK("fm_banks/bnk_files/file167.bnk", 13, "b13P", false, true); LoadBNK("fm_banks/bnk_files/file168.bnk", 13, "b13M", false, false); -- cgit v1.2.3 From ba0b0c4d5c1e8c8926c6838dddb0f6abdbccd9f2 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Tue, 7 Feb 2017 16:43:10 +0300 Subject: Fill drum-less 47'th bank with drums set from the other bank --- src/gen_adldata/gen_adldata.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'src/gen_adldata') diff --git a/src/gen_adldata/gen_adldata.cc b/src/gen_adldata/gen_adldata.cc index 655b837..187d079 100644 --- a/src/gen_adldata/gen_adldata.cc +++ b/src/gen_adldata/gen_adldata.cc @@ -1104,6 +1104,7 @@ int main() LoadMiles("fm_banks/opl_files/file49.opl", 45, "f49G"); LoadMiles("fm_banks/opl_files/file50.opl", 46, "f50G"); LoadMiles("fm_banks/opl_files/file53.opl", 47, "f53G"); + LoadBNK("fm_banks/bnk_files/file144.bnk", 47, "f53GD", false, true);//Attempt to append missing drums LoadMiles("fm_banks/opl_files/file54.opl", 48, "f54G"); LoadMiles("fm_banks/opl_files/sample.ad", 49, "MG"); // same as file51.opl -- cgit v1.2.3 From 4091cf15cd5273f1381f1ed6d3e836774f9ac0e8 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Thu, 16 Feb 2017 15:56:22 +0300 Subject: Fix processing of the drums of AIL banks! The field B_transpose on drums means note number, and is no need extra calculations Here is a right specification for AIL's bank format, gotten from AIL 2 sources which are been published by Miles ``` //GTL - "Global Timbre Bank" struct GTL Head // GTL file header entry structure { uint8_t patch; uint8_t bank; uint32_t offset; } //- Length is 6 bytes //Look for timbre until .patch will equal to 0xFF, then look for each instrument Note: DW - Define Word - uint16_t DB - Define Byte - uint8_t BNK STRUC ;.BNK-style timbre definition B_length dw ? ; lenght of timbre entry B_transpose db ? B_mod_AVEKM db ? ;op_0 = FM modulator B_mod_KSLTL db ? B_mod_AD db ? B_mod_SR db ? B_mod_WS db ? B_fb_c db ? B_car_AVEKM db ? ;op_1 = FM carrier B_car_KSLTL db ? B_car_AD db ? B_car_SR db ? B_car_WS db ? ENDS OPL3BNK STRUC ;.BNK-style OPL3 timbre definition BNK <> O_mod_AVEKM db ? ;op_2 O_mod_KSLTL db ? O_mod_AD db ? O_mod_SR db ? O_mod_WS db ? O_fb_c db ? O_car_AVEKM db ? ;op_3 O_car_KSLTL db ? O_car_AD db ? O_car_SR db ? O_car_WS db ? ENDS ``` --- src/gen_adldata/gen_adldata.cc | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'src/gen_adldata') diff --git a/src/gen_adldata/gen_adldata.cc b/src/gen_adldata/gen_adldata.cc index 187d079..78dfbbc 100644 --- a/src/gen_adldata/gen_adldata.cc +++ b/src/gen_adldata/gen_adldata.cc @@ -517,18 +517,20 @@ static void LoadMiles(const char* fn, unsigned bank, const char* prefix) for(unsigned a=0; a<2000; ++a) { - unsigned gmnumber = data[a*6+0]; - unsigned gmnumber2 = data[a*6+1]; + unsigned gm_patch = data[a*6+0]; + unsigned gm_bank = data[a*6+1]; unsigned offset = *(unsigned*)&data[a*6+2]; - if(gmnumber == 0xFF) break; - int gmno = gmnumber2==0x7F ? gmnumber+0x80 : gmnumber; + if(gm_patch == 0xFF) + break; + + int gmno = gm_bank==0x7F ? gm_patch + 0x80 : gm_patch; int midi_index = gmno < 128 ? gmno : gmno < 128+35 ? -1 : gmno < 128+88 ? gmno-35 : -1; unsigned length = data[offset] + data[offset+1]*256; - signed char notenum = data[offset+2]; + signed char notenum = ((signed char)data[offset+2]); /*printf("%02X %02X %08X ", gmnumber,gmnumber2, offset); for(unsigned b=0; b> 7); } } - if(inscount == 1) tmp[1] = tmp[0]; + if(inscount == 1) + tmp[1] = tmp[0]; + if(inscount <= 2) { struct ins tmp2; - tmp2.notenum = gmno < 128 ? 0 : data[offset+3]; + tmp2.notenum = gmno < 128 ? 0 : notenum; tmp2.pseudo4op = false; tmp2.fine_tune = 0.0; std::string name; -- cgit v1.2.3