diff options
author | Wohlstand <admin@wohlnet.ru> | 2017-11-19 21:15:25 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2017-11-19 21:15:25 +0300 |
commit | 7c9e90eb6b6e2b7459f056a9c76a1e3a12c27880 (patch) | |
tree | 2a4bcf00bd0c6741cb257033bab05b8d4f0bb13b | |
parent | 1ebfef778e67329d221d82eb11592a50b0b49b6a (diff) | |
download | libADLMIDI-7c9e90eb6b6e2b7459f056a9c76a1e3a12c27880.tar.gz libADLMIDI-7c9e90eb6b6e2b7459f056a9c76a1e3a12c27880.tar.bz2 libADLMIDI-7c9e90eb6b6e2b7459f056a9c76a1e3a12c27880.zip |
Upgrated support for WOPL bank format to v3
-rw-r--r-- | fm_banks/adldata-cache.dat | bin | 538864 -> 538864 bytes | |||
-rw-r--r-- | fm_banks/wopl_files/DMXOPL3-by-sneakernets.wopl | bin | 15959 -> 15959 bytes | |||
-rw-r--r-- | fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl | bin | 15959 -> 16983 bytes | |||
-rw-r--r-- | fm_banks/wopl_files/lostvik.wopl | bin | 31899 -> 33947 bytes | |||
-rw-r--r-- | src/adldata.cpp | 626 | ||||
-rw-r--r-- | src/adlmidi_load.cpp | 54 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_wopl.h | 21 | ||||
-rw-r--r-- | utils/gen_adldata/measurer.cpp | 4 |
8 files changed, 364 insertions, 341 deletions
diff --git a/fm_banks/adldata-cache.dat b/fm_banks/adldata-cache.dat Binary files differindex d59a91e..3a3e0ad 100644 --- a/fm_banks/adldata-cache.dat +++ b/fm_banks/adldata-cache.dat diff --git a/fm_banks/wopl_files/DMXOPL3-by-sneakernets.wopl b/fm_banks/wopl_files/DMXOPL3-by-sneakernets.wopl Binary files differindex a8d217f..1070f47 100644 --- a/fm_banks/wopl_files/DMXOPL3-by-sneakernets.wopl +++ b/fm_banks/wopl_files/DMXOPL3-by-sneakernets.wopl diff --git a/fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl b/fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl Binary files differindex 0b48cc5..b6bf991 100644 --- a/fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl +++ b/fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl diff --git a/fm_banks/wopl_files/lostvik.wopl b/fm_banks/wopl_files/lostvik.wopl Binary files differindex ce2c07e..6f10738 100644 --- a/fm_banks/wopl_files/lostvik.wopl +++ b/fm_banks/wopl_files/lostvik.wopl diff --git a/src/adldata.cpp b/src/adldata.cpp index 7bf37ed..955dd7e 100644 --- a/src/adldata.cpp +++ b/src/adldata.cpp @@ -4,7 +4,7 @@ * FROM A NUMBER OF SOURCES, MOSTLY PC GAMES. * PREPROCESSED, CONVERTED, AND POSTPROCESSED OFF-SCREEN. */ -const adldata adl[4386] = +const adldata adl[4384] = { // ,---------+-------- Wave select settings // | ,-------ч-+------ Sustain/release rates // | | ,-----ч-ч-+---- Attack/decay rates @@ -4045,11 +4045,27 @@ const adldata adl[4386] = { 0x0F1F10F,0x007840F, 0x00,0x08, 0xC, +12 }, { 0x6EF8800,0x608F502, 0x13,0x00, 0x0, +8 }, { 0x0F1D101,0x0078400, 0x00,0x00, 0xE, +1 }, - { 0x254F307,0x306F805, 0x04,0x0B, 0x6, -5 }, - { 0x254F307,0x206F805, 0x04,0x0B, 0x8, +0 }, + { 0x254F307,0x307F905, 0x04,0x0B, 0x6, -5 }, + { 0x254F307,0x207F905, 0x04,0x0B, 0x8, +0 }, { 0x25CD808,0x32B8A06, 0x04,0x08, 0xC, +0 }, { 0x2F2E327,0x3F5C525, 0x04,0x08, 0xA, -5 }, { 0x2F2F326,0x2F5C525, 0x04,0x08, 0x8, +0 }, + { 0x292F108,0x354F201, 0x00,0x08, 0x8, +12 }, + { 0x283E108,0x334D700, 0x00,0x08, 0x8, +12 }, + { 0x283E109,0x334D500, 0x00,0x08, 0x8, +11 }, + { 0x2E1F119,0x3F3F11B, 0x04,0x08, 0x8, +0 }, + { 0x251F206,0x263C504, 0x04,0x09, 0xA, +0 }, + { 0x241F287,0x353B502, 0x05,0x09, 0xA, +1 }, + { 0x292F108,0x354F201, 0x00,0x03, 0x8, +12 }, + { 0x456FB02,0x017F700, 0x81,0x00, 0x0, +12 }, + { 0x556FA01,0x117F701, 0x00,0x0D, 0x6, +10 }, + { 0x556FB02,0x117F701, 0x81,0x0D, 0x6, +10 }, + { 0x106F680,0x016F610, 0x00,0x00, 0xC, +0 }, + { 0x20F6F00,0x20F6F00, 0x00,0x00, 0x0, +0 }, + { 0x106F680,0x016F610, 0x00,0x00, 0x6, +0 }, + { 0x20F4F00,0x20F4F00, 0x00,0x00, 0x6, +0 }, + { 0x1DC5D01,0x06FF79F, 0x0B,0x00, 0xA, +12 }, + { 0x1C7C900,0x05FF49F, 0x07,0x00, 0xA, +12 }, { 0x3F0E00A,0x0F7F21F, 0x7C,0x40, 0x8, +0 }, { 0x3E0F50A,0x0FAF31F, 0x7C,0x40, 0x9, +0 }, { 0x1F5F213,0x0F5F111, 0xC6,0x0A, 0x0, +0 }, @@ -4190,8 +4206,8 @@ const adldata adl[4386] = { 0x5BAF900,0x0B4F211, 0x87,0x48, 0x6, +0 }, { 0x223F832,0x4055421, 0x99,0x8A, 0xC, +0 }, { 0x433CB32,0x5057561, 0x9B,0x8A, 0xA, +0 }, - { 0x1029023,0x4043561, 0x5B,0x85, 0x4, +0 }, - { 0x4109023,0x2043520, 0xA8,0x85, 0xA, +0 }, + { 0x1029033,0x4044561, 0x5B,0x85, 0x4, +0 }, + { 0x4109033,0x2044520, 0xA8,0x85, 0xA, +0 }, { 0x1254732,0x40256B1, 0xA4,0x0A, 0x8, +0 }, { 0x1054934,0x50256B2, 0xAA,0x0D, 0x8, -12 }, { 0x0031122,0x1046121, 0x58,0x84, 0x0, +0 }, @@ -4249,8 +4265,8 @@ const adldata adl[4386] = { 0x32B7320,0x12BF131, 0x40,0x00, 0x8, +0 }, { 0x5029072,0x0069061, 0x96,0x09, 0x8, +0 }, { 0x1019031,0x0069061, 0x1A,0x09, 0x6, +0 }, - { 0x195C120,0x1637030, 0x43,0x80, 0xA, +12 }, - { 0x1959120,0x1636131, 0x49,0x00, 0xA, +7 }, + { 0x245C224,0x2550133, 0x83,0x80, 0x9, -36 }, + { 0x2459224,0x2556133, 0x83,0x80, 0x9, -36 }, { 0x132ED10,0x3E7D010, 0x87,0x08, 0x6, +12 }, { 0x132ED30,0x3E7D010, 0x87,0x0D, 0x6, +12 }, { 0x2946374,0x005A0A1, 0xA5,0x05, 0x2, +0 }, @@ -4286,8 +4302,8 @@ const adldata adl[4386] = { 0x2045501,0x2445501, 0x15,0x0D, 0xA, +0 }, { 0x0B37121,0x5F48221, 0x16,0x08, 0x2, +0 }, { 0x2B37102,0x5F48221, 0x90,0x08, 0x6, +0 }, - { 0x1127533,0x4F4F211, 0x58,0x0A, 0x6, +0 }, - { 0x3F0F014,0x6F7F611, 0x40,0x4A, 0xA, +0 }, + { 0x1127533,0x4F4F211, 0x58,0x03, 0x6, +0 }, + { 0x3F0F014,0x6F7F611, 0x40,0x43, 0xA, +0 }, { 0x033F201,0x373F402, 0xD1,0x8A, 0x0, +0 }, { 0x6A7F907,0x229A904, 0x1A,0x00, 0xA, -12 }, { 0x332F320,0x6E49423, 0x0E,0x08, 0x8, +0 }, @@ -4321,29 +4337,20 @@ const adldata adl[4386] = { 0x6019460,0x1142120, 0x26,0x00, 0xC, -14 }, { 0x200832F,0x6044020, 0x80,0x00, 0xE, -36 }, { 0x200832F,0x6044020, 0x80,0x00, 0xE, -35 }, - { 0x230732F,0x6E6F400, 0x00,0x00, 0xE, +0 }, + { 0x2305431,0x6E7F600, 0x00,0x00, 0xE, +0 }, { 0x057FB00,0x046F800, 0x00,0x00, 0x0, +12 }, { 0x287F702,0x678F802, 0x80,0x88, 0xE, +12 }, { 0x2F7F602,0x0F8F802, 0x00,0x88, 0xE, +12 }, { 0x05476C1,0x30892C5, 0x80,0x08, 0x0, +0 }, { 0x05477C1,0x30892C5, 0x00,0x08, 0xA, -2 }, { 0x508F601,0x104F600, 0x08,0x00, 0x6, +0 }, - { 0x254F307,0x307F905, 0x04,0x0B, 0x6, -5 }, - { 0x254F307,0x207F905, 0x04,0x0B, 0x8, +0 }, { 0x254D307,0x3288905, 0x04,0x08, 0xA, -5 }, { 0x508F601,0x104F600, 0x0C,0x00, 0x8, +0 }, - { 0x292F108,0x354F201, 0x00,0x08, 0x8, +12 }, { 0x210F509,0x305FE03, 0x8A,0x88, 0xE, +12 }, { 0x200F508,0x305FE03, 0xC7,0x88, 0xC, +12 }, - { 0x283E108,0x334D700, 0x00,0x08, 0x8, +12 }, - { 0x283E109,0x334D500, 0x00,0x08, 0x8, +11 }, - { 0x2E1F119,0x3F3F11B, 0x04,0x08, 0x8, +0 }, { 0x2777603,0x3679601, 0x87,0x08, 0x6, +12 }, { 0x277C643,0x3679601, 0x87,0x08, 0xE, +12 }, - { 0x251F206,0x263C504, 0x04,0x09, 0xA, +0 }, - { 0x241F287,0x353B502, 0x05,0x09, 0xA, +1 }, { 0x366F905,0x099F701, 0x00,0x00, 0xC, +12 }, - { 0x292F108,0x354F201, 0x00,0x03, 0x8, +12 }, { 0x422F120,0x056B40E, 0x81,0x00, 0xA, +12 }, { 0x212FD04,0x305FD03, 0x01,0x00, 0x8, +12 }, { 0x2A8F9E3,0x0779643, 0x1E,0x08, 0x2, +6 }, @@ -4354,22 +4361,13 @@ const adldata adl[4386] = { 0x0A5F7E9,0x0D8994A, 0x29,0x08, 0xC, +10 }, { 0x2A8F9E2,0x0779642, 0x1E,0x00, 0xE, +8 }, { 0x0A5F7E9,0x5D8994A, 0x08,0x00, 0xC, +0 }, - { 0x456FB02,0x017F700, 0x81,0x00, 0x0, +12 }, - { 0x556FA01,0x117F701, 0x00,0x0D, 0x6, +10 }, - { 0x556FB02,0x117F701, 0x81,0x0D, 0x6, +10 }, { 0x367FD01,0x098F601, 0x00,0x08, 0x8, +12 }, { 0x367FD10,0x098F901, 0x00,0x0D, 0x8, +6 }, { 0x367FD10,0x098F901, 0x00,0x0D, 0x8, +11 }, { 0x098600F,0x3FC8590, 0x08,0xC0, 0xE, +12 }, { 0x009F020,0x37DA588, 0x07,0x00, 0xA, +12 }, { 0x00FC020,0x32DA5A8, 0x07,0x00, 0xA, +12 }, - { 0x106F680,0x016F610, 0x00,0x00, 0xC, +0 }, - { 0x20F6F00,0x20F6F00, 0x00,0x00, 0x0, +0 }, - { 0x106F680,0x016F610, 0x00,0x00, 0x6, +0 }, - { 0x20F4F00,0x20F4F00, 0x00,0x00, 0x6, +0 }, { 0x0D1F815,0x078F512, 0x44,0x00, 0x8, +12 }, - { 0x1DC5D01,0x06FF79F, 0x0B,0x00, 0xA, +12 }, - { 0x1C7C900,0x05FF49F, 0x07,0x00, 0xA, +12 }, { 0x160F2C6,0x07AF4D4, 0x4F,0x80, 0x8, +12 }, { 0x160F286,0x0B7F294, 0x4F,0x80, 0x8, +12 }, { 0x227A305,0x36A560A, 0x87,0x08, 0xE, +12 }, @@ -8624,12 +8622,23 @@ const struct adlinsdata adlins[4528] = {4024,4024, 35, 0, 40, 40,0.000000 }, {4025,4026, 38, 1, 93, 93,0.000000 }, {4027,4028, 38, 1, 120, 120,0.000000 }, - {4029,4030, 48, 1, 153, 153,-1.906250 }, + {4029,4030, 48, 1, 73, 73,-1.906250 }, {4031,4031, 51, 0, 26, 26,0.000000 }, {4032,4033, 48, 1, 293, 293,-1.906250 }, + {4034,4034, 61, 1, 1873, 1873,0.093750 }, {3369,1557, 70, 0, 906, 906,0.000000 }, + {4035,4036, 79, 1, 293, 293,0.078125 }, + {4037,4037, 62, 0, 1726, 1726,0.000000 }, + {4038,4039, 67, 1, 240, 240,0.078125 }, + {4040,4040, 62, 1, 2040, 2040,0.093750 }, + {4041,4042, 54, 1, 80, 80,0.000000 }, + {4041,4043, 48, 1, 80, 80,0.000000 }, { 389, 389, 42, 0, 180, 180,0.000000 }, - {4034,4035, 64, 0, 646, 646,0.000000 }, + {4044,4045, 48, 1, 80, 80,0.000000 }, + {4046,4047, 48, 1, 53, 53,0.000000 }, + {4048,4048, 16, 0, 20, 20,0.000000 }, + {4049,4049, 16, 0, 146, 146,0.000000 }, + {4050,4051, 64, 0, 646, 646,0.000000 }, { 844, 844,244, 0, 13, 13,0.000000 }, { 855, 855,244, 0, 246, 6,0.000000 }, { 880, 880,232, 0, 46, 46,0.000000 }, @@ -8661,278 +8670,267 @@ const struct adlinsdata adlins[4528] = { 902, 902, 35, 0, 1006, 1006,0.000000 }, { 903, 903, 35, 0, 40, 40,0.000000 }, {3500,3500, 35, 0, 5233, 6,0.000000 }, - {4036,4036, 0, 0, 1400, 1400,0.000000 }, - {4037,4037, 0, 0, 1206, 1206,0.000000 }, - {4038,4038, 0, 0, 40000, 46,0.000000 }, - {4039,4039, 0, 0, 40000, 26,0.000000 }, - {4040,4040, 0, 0, 3600, 3600,0.000000 }, - {4041,4041, 0, 0, 40000, 6,0.000000 }, - {4042,4042, 0, 0, 960, 960,0.000000 }, - {4043,4043, 0, 0, 80, 80,0.000000 }, - {4044,4044, 0, 0, 40000, 20,0.000000 }, - {4045,4045, 0, 0, 40000, 20,0.000000 }, - {4046,4046, 0, 0, 4473, 4473,0.000000 }, - {4047,4047, 0, 0, 380, 6,0.000000 }, - {4048,4048, 0, 0, 40000, 20,0.000000 }, - {4049,4049, 0, 0, 4593, 4593,0.000000 }, - {4050,4050, 0, 0, 40000, 20,0.000000 }, - {4051,4051, 0, 0, 40000, 0,0.000000 }, - {4052,4052, 0, 0, 40, 40,0.000000 }, - {4053,4053, 0, 0, 60, 60,0.000000 }, - {4054,4054, 0, 0, 100, 100,0.000000 }, - {4055,4055, 0, 0, 40000, 40,0.000000 }, - {4056,4056, 0, 0, 126, 126,0.000000 }, - {4057,4057, 0, 0, 40, 40,0.000000 }, - {4058,4058, 0, 0, 40000, 0,0.000000 }, - {4059,4059, 0, 0, 4193, 4193,0.000000 }, - {4060,4060, 0, 0, 806, 0,0.000000 }, - {4061,4061, 0, 0, 526, 526,0.000000 }, - {4062,4062, 0, 0, 40000, 73,0.000000 }, - {4063,4063, 0, 0, 40000, 6,0.000000 }, - {4064,4064, 0, 0, 40000, 153,0.000000 }, - {4065,4065, 0, 0, 40000, 0,0.000000 }, - {4066,4066, 0, 0, 40, 6,0.000000 }, - {4067,4067, 0, 0, 3400, 0,0.000000 }, - {4068,4068, 0, 0, 2280, 0,0.000000 }, - {4069,4069, 0, 0, 40000, 426,0.000000 }, - {4070,4070, 0, 0, 1206, 1206,0.000000 }, + {4052,4052, 0, 0, 1400, 1400,0.000000 }, + {4053,4053, 0, 0, 1206, 1206,0.000000 }, + {4054,4054, 0, 0, 40000, 46,0.000000 }, + {4055,4055, 0, 0, 40000, 26,0.000000 }, + {4056,4056, 0, 0, 3600, 3600,0.000000 }, + {4057,4057, 0, 0, 40000, 6,0.000000 }, + {4058,4058, 0, 0, 960, 960,0.000000 }, + {4059,4059, 0, 0, 80, 80,0.000000 }, + {4060,4060, 0, 0, 40000, 20,0.000000 }, + {4061,4061, 0, 0, 40000, 20,0.000000 }, + {4062,4062, 0, 0, 4473, 4473,0.000000 }, + {4063,4063, 0, 0, 380, 6,0.000000 }, + {4064,4064, 0, 0, 40000, 20,0.000000 }, + {4065,4065, 0, 0, 4593, 4593,0.000000 }, + {4066,4066, 0, 0, 40000, 20,0.000000 }, + {4067,4067, 0, 0, 40000, 0,0.000000 }, + {4068,4068, 0, 0, 40, 40,0.000000 }, + {4069,4069, 0, 0, 60, 60,0.000000 }, + {4070,4070, 0, 0, 100, 100,0.000000 }, + {4071,4071, 0, 0, 40000, 40,0.000000 }, + {4072,4072, 0, 0, 126, 126,0.000000 }, + {4073,4073, 0, 0, 40, 40,0.000000 }, + {4074,4074, 0, 0, 40000, 0,0.000000 }, + {4075,4075, 0, 0, 4193, 4193,0.000000 }, + {4076,4076, 0, 0, 806, 0,0.000000 }, + {4077,4077, 0, 0, 526, 526,0.000000 }, + {4078,4078, 0, 0, 40000, 73,0.000000 }, + {4079,4079, 0, 0, 40000, 6,0.000000 }, + {4080,4080, 0, 0, 40000, 153,0.000000 }, + {4081,4081, 0, 0, 40000, 0,0.000000 }, + {4082,4082, 0, 0, 40, 6,0.000000 }, + {4083,4083, 0, 0, 3400, 0,0.000000 }, + {4084,4084, 0, 0, 2280, 0,0.000000 }, + {4085,4085, 0, 0, 40000, 426,0.000000 }, + {4086,4086, 0, 0, 1206, 1206,0.000000 }, { 127, 127, 36, 0, 20, 20,0.000000 }, - {4071,4071, 36, 0, 6, 6,0.000000 }, + {4087,4087, 36, 0, 6, 6,0.000000 }, {2030,2030, 36, 0, 93, 93,0.000000 }, {3782,3782, 48, 0, 6, 6,0.000000 }, {3783,3783, 36, 0, 33, 33,0.000000 }, - {4072,4072, 48, 0, 246, 246,0.000000 }, + {4088,4088, 48, 0, 246, 246,0.000000 }, { 132, 132, 69, 0, 13, 13,0.000000 }, - {4072,4072, 52, 0, 360, 360,0.000000 }, + {4088,4088, 52, 0, 360, 360,0.000000 }, { 152, 152, 48, 0, 86, 86,0.000000 }, - {4072,4072, 55, 0, 493, 493,0.000000 }, + {4088,4088, 55, 0, 493, 493,0.000000 }, { 139, 139, 57, 0, 93, 93,0.000000 }, - {4072,4072, 58, 0, 560, 560,0.000000 }, - {4072,4072, 60, 0, 580, 580,0.000000 }, - {4073,4073, 62, 0, 840, 840,0.000000 }, - {4072,4072, 63, 0, 626, 626,0.000000 }, + {4088,4088, 58, 0, 560, 560,0.000000 }, + {4088,4088, 60, 0, 580, 580,0.000000 }, + {4089,4089, 62, 0, 840, 840,0.000000 }, + {4088,4088, 63, 0, 626, 626,0.000000 }, { 134, 134, 70, 0, 140, 140,0.000000 }, - {4074,4074, 70, 0, 286, 286,0.000000 }, - {4075,4075, 53, 0, 613, 613,0.000000 }, + {4090,4090, 70, 0, 286, 286,0.000000 }, + {4091,4091, 53, 0, 613, 613,0.000000 }, {3516,3516, 48, 0, 40, 40,0.000000 }, - {4076,4076, 84, 0, 420, 420,0.000000 }, - {4077,4077, 43, 0, 160, 160,0.000000 }, - {4078,4078, 56, 0, 326, 326,0.000000 }, + {4092,4092, 84, 0, 420, 420,0.000000 }, + {4093,4093, 43, 0, 160, 160,0.000000 }, + {4094,4094, 56, 0, 326, 326,0.000000 }, {3791,3791, 24, 0, 140, 140,0.000000 }, { 134, 134, 65, 0, 160, 160,0.000000 }, { 146, 146, 48, 0, 40, 40,0.000000 }, { 146, 146, 54, 0, 40, 40,0.000000 }, - {4079,4079, 42, 0, 46, 46,0.000000 }, - {4079,4079, 39, 0, 46, 46,0.000000 }, + {4095,4095, 42, 0, 46, 46,0.000000 }, + {4095,4095, 39, 0, 46, 46,0.000000 }, {3816,3816, 52, 0, 106, 106,0.000000 }, - {4080,4080, 52, 0, 200, 200,0.000000 }, + {4096,4096, 52, 0, 200, 200,0.000000 }, { 158, 158, 60, 0, 33, 33,0.000000 }, { 158, 158, 66, 0, 33, 33,0.000000 }, { 158, 158, 59, 0, 33, 33,0.000000 }, {3538,3538, 91, 0, 273, 273,0.000000 }, {3547,3547,109, 0, 1780, 1780,0.000000 }, - {4081,4081, 79, 0, 126, 126,0.000000 }, - {4082,4082, 0, 0, 3413, 3413,0.000000 }, - {4083,4084, 0, 1, 1773, 1773,0.031250 }, - {4085,4086, 0, 1, 1933, 1933,0.031250 }, - {4087,4088, 0, 1, 1580, 1580,0.031250 }, - {4089,4090, 0, 1, 1900, 1900,0.156250 }, - { 172,4091, 0, 1, 1740, 1740,0.046875 }, - {4092,4093, 0, 1, 1020, 1020,0.062500 }, - {4094,4095, 0, 1, 2126, 2126,0.000000 }, - {4096,4097, 0, 1, 1740, 1740,0.000000 }, - {4098,4099, 0, 1, 993, 993,0.000025 }, - {4100,4101, 0, 1, 886, 886,0.000000 }, - {4102,4103, 0, 1, 513, 513,0.062500 }, - {4104,4105, 0, 1, 1420, 1420,0.000000 }, - {4106,4107, 0, 1, 193, 193,0.000000 }, - {4108,4108, 0, 0, 1846, 1846,0.000000 }, - {4109,4110, 0, 1, 1400, 1400,0.031250 }, - {4111,4111, 0, 1, 980, 980,0.031250 }, - {4112,4113, 0, 1, 40000, 0,0.156250 }, - {4114,4115, 0, 1, 40, 13,0.000000 }, - {4116,4117, 0, 1, 7180, 7180,0.156250 }, - {4118,4119, 0, 1, 40000, 0,0.031250 }, - {4120,4121, 0, 1, 40000, 0,0.000000 }, - {4122,4123, 0, 1, 40000, 0,0.140625 }, - {4124,4125, 0, 1, 40000, 0,0.000000 }, - {4126,4127, 0, 1, 40000, 0,0.109375 }, - {4128,4129, 0, 1, 600, 600,0.000000 }, - {4130,4131, 0, 1, 653, 653,0.000025 }, - {4132,4133, 0, 1, 633, 633,0.000000 }, - {4134,4135, 0, 1, 893, 893,0.046875 }, - {4136,4137, 0, 1, 493, 493,0.000000 }, - {4138,4139, 0, 1, 40000, 0,-1.906250 }, - {4140,4141, 0, 1, 40000, 0,-1.906250 }, - {4142,4143, 0, 1, 2033, 2033,0.234375 }, - {4144,4145, 0, 1, 1600, 1600,0.031250 }, - {4146,4147, 0, 1, 1526, 1526,0.000000 }, - {4148,4149, 0, 1, 2133, 2133,0.000000 }, - {4150,4151, 0, 1, 1933, 1933,0.046875 }, - {4152,4153, 0, 1, 633, 633,0.000000 }, - {4154,4155, 0, 1, 486, 486,0.000000 }, - {4156,4156, 0, 0, 313, 313,0.000000 }, - {4157,4157, 0, 1, 40000, 33,0.156250 }, - {4158,4159, 0, 1, 2040, 13,0.000000 }, - {4160,4160, 0, 0, 40000, 66,0.000000 }, - {4161,4162, 0, 1, 40000, 0,0.000025 }, - {4163,4163, 0, 0, 40000, 133,0.000000 }, - {4164,4165, 0, 1, 40000, 0,0.078125 }, - {4166,4167, 0, 1, 320, 320,0.156250 }, - {4168,4169, 0, 1, 1813, 1813,0.031250 }, - {4170,4171, 0, 1, 1740, 1740,0.031250 }, - {4172,4173, 0, 1, 40000, 0,0.062500 }, - {4174,4175, 0, 1, 40000, 0,-0.062500 }, - {4176,4177, 0, 1, 40000, 1386,0.062500 }, - {4178,4179, 0, 1, 40000, 280,0.109375 }, - {4180,4181, 0, 1, 40000, 0,0.140625 }, - {4182,4183, 0, 1, 40000, 160,0.140625 }, - {4184,4185, 0, 1, 40000, 0,0.156250 }, - {4186,4187, 0, 1, 206, 206,0.125000 }, - {4188,4189, 0, 1, 40000, 26,0.000000 }, - {4190,4191, 0, 1, 40000, 0,0.031250 }, - {4192,4192, 0, 0, 40000, 6,0.000000 }, - {4193,4193, 0, 0, 40000, 20,0.000000 }, - {4194,4195, 0, 1, 40000, 0,0.031250 }, - {4196,4197, 0, 1, 40000, 146,0.062500 }, - {4198,4199, 0, 1, 2526, 2526,0.093750 }, - {4200,4200, 0, 1, 5153, 5153,0.125000 }, - {4201,4201, 0, 0, 40000, 66,0.000000 }, - {4202,4202, 0, 0, 40000, 40,0.000000 }, - {4203,4203, 0, 0, 40000, 0,0.000000 }, - {4204,4204, 0, 0, 40000, 0,0.000000 }, - {4205,4206, 0, 1, 40000, 0,0.000000 }, - {4207,4207, 0, 0, 40000, 33,0.000000 }, + {4097,4097, 79, 0, 126, 126,0.000000 }, + {4098,4098, 0, 0, 3413, 3413,0.000000 }, + {4099,4100, 0, 1, 1773, 1773,0.031250 }, + {4101,4102, 0, 1, 1933, 1933,0.031250 }, + {4103,4104, 0, 1, 1580, 1580,0.031250 }, + {4105,4106, 0, 1, 1900, 1900,0.156250 }, + { 172,4107, 0, 1, 1740, 1740,0.046875 }, + {4108,4109, 0, 1, 1020, 1020,0.062500 }, + {4110,4111, 0, 1, 2126, 2126,0.000000 }, + {4112,4113, 0, 1, 1740, 1740,0.000000 }, + {4114,4115, 0, 1, 993, 993,0.000025 }, + {4116,4117, 0, 1, 886, 886,0.000000 }, + {4118,4119, 0, 1, 513, 513,0.062500 }, + {4120,4121, 0, 1, 1420, 1420,0.000000 }, + {4122,4123, 0, 1, 193, 193,0.000000 }, + {4124,4124, 0, 0, 1846, 1846,0.000000 }, + {4125,4126, 0, 1, 1400, 1400,0.031250 }, + {4127,4127, 0, 1, 980, 980,0.031250 }, + {4128,4129, 0, 1, 40000, 0,0.156250 }, + {4130,4131, 0, 1, 40, 13,0.000000 }, + {4132,4133, 0, 1, 7180, 7180,0.156250 }, + {4134,4135, 0, 1, 40000, 0,0.031250 }, + {4136,4137, 0, 1, 40000, 0,0.000000 }, + {4138,4139, 0, 1, 40000, 0,0.140625 }, + {4140,4141, 0, 1, 40000, 0,0.000000 }, + {4142,4143, 0, 1, 40000, 0,0.109375 }, + {4144,4145, 0, 1, 600, 600,0.000000 }, + {4146,4147, 0, 1, 653, 653,0.000025 }, + {4148,4149, 0, 1, 633, 633,0.000000 }, + {4150,4151, 0, 1, 893, 893,0.046875 }, + {4152,4153, 0, 1, 493, 493,0.000000 }, + {4154,4155, 0, 1, 40000, 0,-1.906250 }, + {4156,4157, 0, 1, 40000, 0,-1.906250 }, + {4158,4159, 0, 1, 2033, 2033,0.234375 }, + {4160,4161, 0, 1, 1600, 1600,0.031250 }, + {4162,4163, 0, 1, 1526, 1526,0.000000 }, + {4164,4165, 0, 1, 2133, 2133,0.000000 }, + {4166,4167, 0, 1, 1933, 1933,0.046875 }, + {4168,4169, 0, 1, 633, 633,0.000000 }, + {4170,4171, 0, 1, 486, 486,0.000000 }, + {4172,4172, 0, 0, 313, 313,0.000000 }, + {4173,4173, 0, 1, 40000, 33,0.156250 }, + {4174,4175, 0, 1, 2040, 13,0.000000 }, + {4176,4176, 0, 0, 40000, 66,0.000000 }, + {4177,4178, 0, 1, 40000, 0,0.000025 }, + {4179,4179, 0, 0, 40000, 133,0.000000 }, + {4180,4181, 0, 1, 40000, 0,0.078125 }, + {4182,4183, 0, 1, 320, 320,0.156250 }, + {4184,4185, 0, 1, 1813, 1813,0.031250 }, + {4186,4187, 0, 1, 1740, 1740,0.031250 }, + {4188,4189, 0, 1, 40000, 0,0.062500 }, + {4190,4191, 0, 1, 40000, 0,-0.062500 }, + {4192,4193, 0, 1, 40000, 1386,0.062500 }, + {4194,4195, 0, 1, 40000, 280,0.109375 }, + {4196,4197, 0, 1, 40000, 0,0.140625 }, + {4198,4199, 0, 1, 40000, 160,0.140625 }, + {4200,4201, 0, 1, 40000, 0,0.156250 }, + {4202,4203, 0, 1, 206, 206,0.125000 }, + {4204,4205, 0, 1, 40000, 26,0.000000 }, + {4206,4207, 0, 1, 40000, 0,0.031250 }, {4208,4208, 0, 0, 40000, 6,0.000000 }, - {4209,4210, 0, 1, 40000, 40,0.000000 }, - {4211,4211, 0, 0, 40000, 0,0.000000 }, - {4212,4212, 0, 0, 40000, 0,0.000000 }, - {4213,4213, 0, 0, 40000, 33,0.000000 }, - {4214,4215, 0, 1, 40000, 33,0.031250 }, - {4216,4217, 0, 1, 40000, 20,0.046875 }, - {4218,4219, 0, 1, 420, 420,0.031250 }, - {4220,4220, 0, 0, 40000, 106,0.000000 }, - {4221,4221, 0, 0, 40000, 6,0.000000 }, - {4222,4223, 0, 1, 40000, 0,0.125000 }, - {4224,4225, 0, 1, 40000, 40,0.109375 }, - {4226,4227, 0, 1, 40000, 0,0.109375 }, - {4228,4229, 0, 1, 120, 0,-0.031250 }, - {4230,4230, 0, 0, 933, 933,0.000000 }, - {4231,4232, 0, 1, 40000, 0,0.156250 }, - {4233,4234, 0, 1, 1660, 80,-0.046875 }, - {4235,4236, 0, 1, 40000, 0,0.031250 }, - {4237,4238, 0, 1, 40000, 0,0.078125 }, - {4239,4240, 0, 1, 40000, 0,0.156250 }, - {4241,4242, 0, 1, 1293, 100,0.078125 }, - {4243,4244, 0, 1, 6773, 66,0.171875 }, - {4245,4246, 0, 1, 2040, 2040,0.109375 }, - {4247,4248, 0, 1, 1360, 1360,0.062500 }, - {4249,4250, 0, 1, 40000, 0,0.093750 }, - {4251,4252, 0, 1, 40000, 746,0.093750 }, - {4253,4254, 0, 1, 826, 826,0.093750 }, - {4255,4256, 0, 1, 40000, 0,0.062500 }, - {4257,4257, 0, 1, 886, 886,0.109375 }, - {4258,4259, 0, 1, 2186, 2186,-0.046875 }, - {4260,4261, 0, 1, 1486, 1486,0.125000 }, - {4262,4263, 0, 1, 40000, 0,-0.078125 }, - {4264,4265, 0, 1, 40000, 0,0.140625 }, - {4266,4267, 0, 1, 360, 360,0.078125 }, - {4268,4269, 0, 1, 1693, 1693,0.031250 }, - {4270,4271, 0, 1, 760, 760,0.000000 }, - {4272,4273, 0, 1, 126, 126,0.031250 }, - {4274,4274, 0, 0, 633, 633,0.000000 }, - {4275,4275, 0, 0, 246, 246,0.000000 }, - {4276,4277, 0, 1, 40000, 0,0.062500 }, - {4278,4278, 0, 0, 40000, 66,0.000000 }, - {4279,4279, 0, 0, 40000, 53,0.000000 }, - {4280,4280, 0, 0, 1940, 1940,0.000000 }, - {4281,4281, 0, 0, 86, 86,0.000000 }, - {4282,4283, 0, 1, 280, 280,0.031250 }, - {4284,4284, 0, 0, 40, 40,0.000000 }, - {4285,4286, 0, 1, 53, 53,0.000000 }, - {4287,4288, 0, 1, 140, 140,0.000000 }, - {4289,4290, 0, 1, 26, 26,0.000000 }, - {4291,4292, 0, 1, 2153, 2153,0.109375 }, - {4293,4293, 0, 0, 600, 600,0.000000 }, - {4294,4295, 0, 1, 993, 26,0.000000 }, - {4296,4297, 0, 1, 5613, 5613,0.000000 }, - {4298,4298, 0, 0, 220, 220,0.000000 }, - {4299,4300, 0, 1, 10306, 10306,0.000000 }, - {4301,4302, 0, 1, 1486, 13,0.000000 }, - {4303,4304, 0, 1, 40000, 0,0.000000 }, - {4305,4305, 0, 0, 566, 566,0.000000 }, - {4306,4306, 25, 0, 33, 33,0.000000 }, - {4307,4308, 61, 1, 40, 40,0.000000 }, - {4309,4310, 37, 1, 53, 53,0.000000 }, - {4311,4311, 32, 0, 60, 60,0.000000 }, - {4312,4313, 48, 1, 73, 73,-1.906250 }, - {4311,4311, 34, 0, 73, 73,0.000000 }, - {4314,4314, 48, 0, 53, 53,0.000000 }, - {4315,4315, 37, 0, 46, 46,0.000000 }, - {4315,4315, 40, 0, 40, 40,0.000000 }, - {4315,4315, 43, 0, 33, 33,0.000000 }, - {4316,4316, 61, 1, 1873, 1873,0.093750 }, - {4315,4315, 46, 0, 60, 60,0.000000 }, - {4317,4318, 60, 1, 286, 286,0.062500 }, - {4319,4320, 79, 1, 293, 293,0.078125 }, - {4321,4321, 62, 0, 1726, 1726,0.000000 }, - {4322,4323, 80, 1, 106, 106,0.125000 }, - {4324,4325, 67, 1, 240, 240,0.078125 }, - {4326,4326, 58, 0, 73, 73,0.000000 }, - {4327,4327, 62, 1, 2040, 2040,0.093750 }, - {4328,4328, 24, 0, 780, 780,0.000000 }, - {4329,4329, 61, 0, 206, 206,0.000000 }, - {4330,4331, 41, 1, 100, 100,0.000000 }, - {4332,4333, 35, 1, 160, 160,0.000000 }, - {4334,4335, 29, 1, 40, 40,0.000000 }, - {4336,4337, 41, 1, 166, 166,0.000000 }, - {4336,4337, 37, 1, 160, 160,0.000000 }, - {4338,4339, 54, 1, 80, 80,0.000000 }, - {4338,4340, 51, 1, 80, 80,0.000000 }, - {4341,4342, 78, 1, 126, 126,0.000000 }, - {4341,4343, 73, 1, 113, 113,0.000000 }, - {4344,4344, 40, 0, 140, 140,0.000000 }, - {4345,4345, 45, 0, 313, 313,0.000000 }, - {4346,4346, 42, 0, 40000, 0,0.000000 }, - {4347,4348, 48, 1, 80, 80,0.000000 }, - {4349,4350, 48, 1, 53, 53,0.000000 }, + {4209,4209, 0, 0, 40000, 20,0.000000 }, + {4210,4211, 0, 1, 40000, 0,0.031250 }, + {4212,4213, 0, 1, 40000, 146,0.062500 }, + {4214,4215, 0, 1, 2526, 2526,0.093750 }, + {4216,4216, 0, 1, 5153, 5153,0.125000 }, + {4217,4217, 0, 0, 40000, 66,0.000000 }, + {4218,4218, 0, 0, 40000, 40,0.000000 }, + {4219,4219, 0, 0, 40000, 0,0.000000 }, + {4220,4220, 0, 0, 40000, 0,0.000000 }, + {4221,4222, 0, 1, 40000, 0,0.000000 }, + {4223,4223, 0, 0, 40000, 33,0.000000 }, + {4224,4224, 0, 0, 40000, 6,0.000000 }, + {4225,4226, 0, 1, 40000, 40,0.000000 }, + {4227,4227, 0, 0, 40000, 0,0.000000 }, + {4228,4228, 0, 0, 40000, 0,0.000000 }, + {4229,4229, 0, 0, 40000, 33,0.000000 }, + {4230,4231, 0, 1, 40000, 33,0.031250 }, + {4232,4233, 0, 1, 40000, 20,0.046875 }, + {4234,4235, 0, 1, 420, 420,0.031250 }, + {4236,4236, 0, 0, 40000, 106,0.000000 }, + {4237,4237, 0, 0, 40000, 6,0.000000 }, + {4238,4239, 0, 1, 40000, 0,0.125000 }, + {4240,4241, 0, 1, 40000, 40,0.109375 }, + {4242,4243, 0, 1, 40000, 0,0.109375 }, + {4244,4245, 0, 1, 120, 0,-0.031250 }, + {4246,4246, 0, 0, 933, 933,0.000000 }, + {4247,4248, 0, 1, 40000, 0,0.156250 }, + {4249,4250, 0, 1, 3886, 3886,0.078125 }, + {4251,4252, 0, 1, 40000, 0,0.031250 }, + {4253,4254, 0, 1, 40000, 0,0.078125 }, + {4255,4256, 0, 1, 40000, 0,0.156250 }, + {4257,4258, 0, 1, 1293, 100,0.078125 }, + {4259,4260, 0, 1, 6773, 66,0.171875 }, + {4261,4262, 0, 1, 2040, 2040,0.109375 }, + {4263,4264, 0, 1, 1360, 1360,0.062500 }, + {4265,4266, 0, 1, 40000, 0,0.093750 }, + {4267,4268, 0, 1, 40000, 746,0.093750 }, + {4269,4270, 0, 1, 826, 826,0.093750 }, + {4271,4272, 0, 1, 40000, 0,0.062500 }, + {4273,4273, 0, 1, 886, 886,0.109375 }, + {4274,4275, 0, 1, 2186, 2186,-0.046875 }, + {4276,4277, 0, 1, 1486, 1486,0.125000 }, + {4278,4279, 0, 1, 40000, 0,-0.078125 }, + {4280,4281, 0, 1, 40000, 0,0.140625 }, + {4282,4283, 0, 1, 360, 360,0.078125 }, + {4284,4285, 0, 1, 1693, 1693,0.031250 }, + {4286,4287, 0, 1, 760, 760,0.000000 }, + {4288,4289, 0, 1, 126, 126,0.031250 }, + {4290,4290, 0, 0, 633, 633,0.000000 }, + {4291,4291, 0, 0, 246, 246,0.000000 }, + {4292,4293, 0, 1, 40000, 0,0.062500 }, + {4294,4294, 0, 0, 40000, 66,0.000000 }, + {4295,4295, 0, 0, 40000, 53,0.000000 }, + {4296,4296, 0, 0, 1940, 1940,0.000000 }, + {4297,4297, 0, 0, 86, 86,0.000000 }, + {4298,4299, 0, 1, 280, 280,0.031250 }, + {4300,4300, 0, 0, 40, 40,0.000000 }, + {4301,4302, 0, 1, 53, 53,0.000000 }, + {4303,4304, 0, 1, 140, 140,0.000000 }, + {4305,4306, 0, 1, 26, 26,0.000000 }, + {4307,4308, 0, 1, 2153, 2153,0.109375 }, + {4309,4309, 0, 0, 600, 600,0.000000 }, + {4310,4311, 0, 1, 993, 26,0.000000 }, + {4312,4313, 0, 1, 5613, 5613,0.000000 }, + {4314,4314, 0, 0, 220, 220,0.000000 }, + {4315,4316, 0, 1, 10306, 10306,0.000000 }, + {4317,4318, 0, 1, 1486, 13,0.000000 }, + {4319,4320, 0, 1, 40000, 0,0.000000 }, + {4321,4321, 0, 0, 120, 120,0.000000 }, + {4322,4322, 25, 0, 33, 33,0.000000 }, + {4323,4324, 61, 1, 40, 40,0.000000 }, + {4325,4326, 37, 1, 53, 53,0.000000 }, + {4327,4327, 32, 0, 60, 60,0.000000 }, + {4327,4327, 34, 0, 73, 73,0.000000 }, + {4328,4328, 48, 0, 53, 53,0.000000 }, + {4329,4329, 37, 0, 46, 46,0.000000 }, + {4329,4329, 40, 0, 40, 40,0.000000 }, + {4329,4329, 43, 0, 33, 33,0.000000 }, + {4329,4329, 46, 0, 60, 60,0.000000 }, + {4330,4331, 60, 1, 286, 286,0.062500 }, + {4332,4333, 80, 1, 106, 106,0.125000 }, + {4334,4334, 58, 0, 73, 73,0.000000 }, + {4335,4335, 24, 0, 780, 780,0.000000 }, + {4336,4336, 61, 0, 206, 206,0.000000 }, + {4337,4338, 41, 1, 100, 100,0.000000 }, + {4339,4340, 35, 1, 160, 160,0.000000 }, + {4341,4342, 29, 1, 40, 40,0.000000 }, + {4343,4344, 41, 1, 166, 166,0.000000 }, + {4343,4344, 37, 1, 160, 160,0.000000 }, + {4041,4043, 51, 1, 80, 80,0.000000 }, + {4345,4346, 78, 1, 126, 126,0.000000 }, + {4345,4347, 73, 1, 113, 113,0.000000 }, + {4348,4348, 40, 0, 140, 140,0.000000 }, + {4349,4349, 45, 0, 313, 313,0.000000 }, + {4350,4350, 42, 0, 40000, 0,0.000000 }, {4351,4351, 73, 0, 60, 60,0.000000 }, - {4352,4352, 16, 0, 20, 20,0.000000 }, - {4353,4353, 16, 0, 146, 146,0.000000 }, - {4354,4354, 90, 0, 80, 80,0.000000 }, - {4355,4355, 90, 0, 306, 306,0.000000 }, - {4356,4357, 64, 1, 233, 233,0.031250 }, - {4358,4359, 80, 1, 140, 140,0.031250 }, - {4360,4360, 0, 0, 40000, 20,0.000000 }, - {4361,4361, 0, 0, 40000, 0,0.000000 }, - {4362,4362, 0, 0, 360, 360,0.000000 }, - {4363,4363, 0, 0, 586, 586,0.000000 }, + {4352,4352, 90, 0, 80, 80,0.000000 }, + {4353,4353, 90, 0, 306, 306,0.000000 }, + {4354,4355, 64, 1, 233, 233,0.031250 }, + {4356,4357, 80, 1, 140, 140,0.031250 }, + {4358,4358, 0, 0, 40000, 20,0.000000 }, + {4359,4359, 0, 0, 40000, 0,0.000000 }, + {4360,4360, 0, 0, 360, 360,0.000000 }, + {4361,4361, 0, 0, 586, 586,0.000000 }, + {4362,4362, 0, 0, 40000, 0,0.000000 }, + {4363,4363, 0, 0, 40000, 0,0.000000 }, {4364,4364, 0, 0, 40000, 0,0.000000 }, - {4365,4365, 0, 0, 40000, 0,0.000000 }, + {4365,4365, 0, 0, 40000, 6,0.000000 }, {4366,4366, 0, 0, 40000, 0,0.000000 }, - {4367,4367, 0, 0, 40000, 6,0.000000 }, - {4368,4368, 0, 0, 40000, 0,0.000000 }, - {4369,4369, 0, 0, 146, 146,0.000000 }, - {4369,4369, 73, 0, 886, 886,0.000000 }, - {4370,4370, 0, 0, 40, 0,0.000000 }, - {4371,4371, 0, 0, 486, 0,0.000000 }, - {4372,4372, 0, 0, 1226, 1226,0.000000 }, - {4373,4373, 0, 0, 1480, 1480,0.000000 }, - {4374,4374, 0, 0, 46, 46,0.000000 }, - {4375,4375, 0, 0, 126, 126,0.000000 }, - {4375,4375, 12, 0, 106, 106,0.000000 }, - {4376,4376, 0, 0, 160, 160,0.000000 }, - {4376,4376, 1, 0, 153, 153,0.000000 }, - {4377,4377, 0, 0, 20, 20,0.000000 }, - {4377,4377, 23, 0, 26, 26,0.000000 }, - {4378,4378, 0, 0, 140, 140,0.000000 }, - {4379,4379, 0, 0, 486, 486,0.000000 }, - {4380,4380, 0, 0, 40000, 13,0.000000 }, - {4381,4381, 0, 0, 40000, 0,0.000000 }, - {4382,4382, 0, 0, 1226, 1226,0.000000 }, - {4383,4383, 0, 0, 766, 766,0.000000 }, - {4384,4384, 0, 0, 93, 93,0.000000 }, - {4385,4385, 0, 2, 40000, 0,0.000000 }, + {4367,4367, 0, 0, 146, 146,0.000000 }, + {4367,4367, 73, 0, 886, 886,0.000000 }, + {4368,4368, 0, 0, 40, 0,0.000000 }, + {4369,4369, 0, 0, 486, 0,0.000000 }, + {4370,4370, 0, 0, 1226, 1226,0.000000 }, + {4371,4371, 0, 0, 1480, 1480,0.000000 }, + {4372,4372, 0, 0, 46, 46,0.000000 }, + {4373,4373, 0, 0, 126, 126,0.000000 }, + {4373,4373, 12, 0, 106, 106,0.000000 }, + {4374,4374, 0, 0, 160, 160,0.000000 }, + {4374,4374, 1, 0, 153, 153,0.000000 }, + {4375,4375, 0, 0, 20, 20,0.000000 }, + {4375,4375, 23, 0, 26, 26,0.000000 }, + {4376,4376, 0, 0, 140, 140,0.000000 }, + {4377,4377, 0, 0, 486, 486,0.000000 }, + {4378,4378, 0, 0, 40000, 13,0.000000 }, + {4379,4379, 0, 0, 40000, 0,0.000000 }, + {4380,4380, 0, 0, 1226, 1226,0.000000 }, + {4381,4381, 0, 0, 766, 766,0.000000 }, + {4382,4382, 0, 0, 93, 93,0.000000 }, + {4383,4383, 0, 2, 40000, 0,0.000000 }, }; @@ -10257,9 +10255,9 @@ const unsigned short banks[74][256] = 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,4216,1470,1613,4217,1615,4218,1475,4219,1477,4220,1479,4221,1481, -1482,1625,1484,4222,1628,1629,1630,1631,2291,1633,1634,3514,1636,1637,1638,1639, -1640,1641,1642,1643,1644,1645,1646,4223, 342,1649,1650,1651,1652,1653,1654,1655, -1656,4224,1658,1659,1660,1661,1662,1663, 806, 806, 806, 806, 806, 806, 806, 806, +1482,4222,1484,4223,4224,4225,1630,4226,2291,4227,1634,3514,1636,1637,1638,1639, +1640,4228,4229,1643,1644,1645,1646,4230, 342,4231,4232,1651,1652,1653,4233,4234, +1656,4235,1658,1659,1660,1661,1662,1663, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, }, @@ -10269,33 +10267,33 @@ const unsigned short banks[74][256] = 876, 877, 878,2217, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894,2218, 896, 897, 898, 899, 900,2219,2220, 903,2221, 905,2222,2223, 2224, 909,2225, 911, 912,2226,2227, 915, 916,2228,2229, 919, 920, 921, 922, 923, -2230, 925, 926, 927, 928, 929,4225, 931, 932, 933, 934, 935,2232,2233, 938,2234, - 940,4226, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, - 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966,4227, 968,4228,3643,3643, -4229,4230,4231,4232,4233,4234,4235, 978,4236,4237,4238,4239,4240,4241,4242,4243, -4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254, 975, 971, 972, 973, 974, +2230, 925, 926, 927, 928, 929,4236, 931, 932, 933, 934, 935,2232,2233, 938,2234, + 940,4237, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, + 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966,4238, 968,4239,3643,3643, +4240,4241,4242,4243,4244,4245,4246, 978,4247,4248,4249,4250,4251,4252,4253,4254, +4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265, 975, 971, 972, 973, 974, 975, 310, 976, 977, 978, 974,2239, 980,2240, 982,2241, 984,2242, 985,2243, 987, 988,2244, 990, 325,2244, 325, 991,2244,2245,2246, 330, 993,2247,2248,2249, 997, 998,2250,2251,1001,1002,1003, 340,1004,1005,1006,1007,1008,1009, 310,1010,1011, -2252, 429,1003, 430,1013,1014, 974,1015,4255,4255,4255,4255,4255,4255,4255,4255, -4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255, -4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255,4255, +2252, 429,1003, 430,1013,1014, 974,1015,4266,4266,4266,4266,4266,4266,4266,4266, +4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266, +4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266, }, { -3287,4256,3196,3196,4257,3196,3196,3196,3196,3196,3196, 378,3196,3196,3694,3196, -3196,4258,3196,4259,4260,4261,3196,3196,3196, 370,3196,4262,4263,4264,4265,4266, -3196,4267,4268,4269,3310,3310,4270, 442,4271,3196,3196,4272,4273,4272, 676,4274, -4275,3196,3196,4276, 51,3196,3196,3196,4277,3324,4278,3196, 59,4279,4277, 62, -3196,4280,4280,4281, 67,3196, 664,4282,3196,2316,3196,4283, 70,3196,4284, 78, -4285,4286, 81,3196,3196,3196,3196,3196,3196,3196,3196, 90,3196,4287, 93,4288, -3196,3196,3196,3196,3196,3196,3196,4289,3196,3196,3196,3196,3196,3196,3196,3196, -3196,3196,3196,3196,3196,4101,3196,4290,3196,3196,3196,3196,3196,3196,3196,3196, +3287,4267,3196,3196,4268,3196,3196,3196,3196,3196,3196, 378,3196,3196,3694,3196, +3196,4269,3196,4270,4271,4272,3196,3196,3196, 370,3196,4273,4274,4275,4276,4277, +3196,4278,4279,4280,3310,3310,4281, 442,4282,3196,3196,4283,4284,4283, 676,4285, +4286,3196,3196,4287, 51,3196,3196,3196,4288,3324,4289,3196, 59,4290,4288, 62, +3196,4291,4291,4292, 67,3196, 664,4293,3196,2316,3196,4294, 70,3196,4295, 78, +4296,4297, 81,3196,3196,3196,3196,3196,3196,3196,3196, 90,3196,4298, 93,4299, +3196,3196,3196,3196,3196,3196,3196,4300,3196,3196,3196,3196,3196,3196,3196,3196, +3196,3196,3196,3196,3196,4101,3196,4301,3196,3196,3196,3196,3196,3196,3196,3196, 3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, 3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, -3196,3196,3196,4291,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302, -4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,3196,3196,4315, 154, -4316,4317,4318,3196,3196, 160,3196,3196,3196,4319,4320,4321,4322,4323,4324,3196, -3196,4325, 160,4326,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, +3196,3196,3196,4302,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313, +4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,3196,3196,4326, 154, +4327,4328,4329,3196,3196, 160,3196,3196,3196,4330,4331,4332,4333,4334,4335,3196, +3196,4336, 160,4337,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, 3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, 3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196, }, @@ -10307,7 +10305,7 @@ const unsigned short banks[74][256] = 3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877, 3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893, 3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909, -3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,4327,3921,3922,3923,3924,3925, +3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,4338,3921,3922,3923,3924,3925, 3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976, 3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3977,3977,3977,3977,3977, 3977,3977,3977,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939, @@ -10318,19 +10316,19 @@ const unsigned short banks[74][256] = 3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985, }, { -4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343, -4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359, -4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375, -4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391, -4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407, -4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423, -4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439, -4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455, +4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354, +4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370, +4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386, +4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402, +4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418, +4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434, +4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450, +4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, - 806, 806, 806,4456,1349,4457,4217,4458,4218,4459,4460,4461,4462,4463,4221,4464, -4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480, -4481,4482,4483,4484,4485, 320,4486,4487,4488,4489,4490,4491,1373,1374,4492,4493, + 806, 806, 806,4467,1349,4468,4217,4469,4218,4470,4219,4471,4472,4473,4221,4474, +4475,4222,4476,4477,4224,4225,4478,4226,4479,4227,4480,4481,4482,4483,4484,4485, +4486,4228,4487,4488,4489, 320,4490,4491,4492,4231,4232,4493,1373,1374,4233,4234, 4494,4495,4496,4497, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp index fefc80c..60c4151 100644 --- a/src/adlmidi_load.cpp +++ b/src/adlmidi_load.cpp @@ -88,7 +88,10 @@ static int16_t toSint16BE(const uint8_t *arr) } static const char *wopl3_magic = "WOPL3-BANK\0"; -static const uint16_t wopl_latest_version = 2; +static const uint16_t wopl_latest_version = 3; + +#define WOPL_INST_SIZE_V2 62 +#define WOPL_INST_SIZE_V3 66 enum WOPL_InstrumentFlags { @@ -103,13 +106,23 @@ struct WOPL_Inst char padding[7]; struct adlinsdata adlins; struct adldata op[2]; + uint16_t ms_sound_kon; + uint16_t ms_sound_koff; }; -static bool readInstrument(MIDIplay::fileReader &file, WOPL_Inst &ins, bool isPercussion = false) +static bool readInstrument(MIDIplay::fileReader &file, WOPL_Inst &ins, uint16_t &version, bool isPercussion = false) { - uint8_t idata[62]; - if(file.read(idata, 1, 62) != 62) - return false; + uint8_t idata[WOPL_INST_SIZE_V3]; + if(version >= 3) + { + if(file.read(idata, 1, WOPL_INST_SIZE_V3) != WOPL_INST_SIZE_V3) + return false; + } + else + { + if(file.read(idata, 1, WOPL_INST_SIZE_V2) != WOPL_INST_SIZE_V2) + return false; + } //strncpy(ins.name, char_p(idata), 32); ins.op[0].finetune = (int8_t)toSint16BE(idata + 32); @@ -130,12 +143,6 @@ static bool readInstrument(MIDIplay::fileReader &file, WOPL_Inst &ins, bool isPe ins.adlins.tone = isPercussion ? idata[38] : 0; - /* TODO: add those fields into next version of WOPL format - * and re-generate those values on file save! */ - ins.adlins.ms_sound_kon = 1000; - ins.adlins.ms_sound_koff = 500; - /* ----------------------------------------------------- */ - uint8_t flags = idata[39]; ins.adlins.flags = (flags & WOPL_Flag_Enable4OP) && (flags & WOPL_Flag_Pseudo4OP) ? adlinsdata::Flag_Pseudo4op : 0; ins.fourOps = (flags & WOPL_Flag_Enable4OP) || (flags & WOPL_Flag_Pseudo4OP); @@ -167,6 +174,18 @@ static bool readInstrument(MIDIplay::fileReader &file, WOPL_Inst &ins, bool isPe | ((static_cast<uint32_t>(idata[off + 0]) << 0) & 0x000000FF); //AVEKM ins.op[slt].modulator_40 = idata[off + 1];//KSLL } + + if(version >= 3) + { + ins.ms_sound_kon = toUint16BE(idata + 62); + ins.ms_sound_koff = toUint16BE(idata + 64); + } + else + { + ins.ms_sound_kon = 1000; + ins.ms_sound_koff = 500; + } + return true; } @@ -260,8 +279,6 @@ bool MIDIplay::LoadBank(MIDIplay::fileReader &fr) size_t offset = opl.dynamic_melodic_banks.size(); opl.dynamic_melodic_banks[bank] = offset; //strncpy(bankMeta.name, char_p(bank_meta), 32); - //bankMeta.lsb = bank_meta[32]; - //bankMeta.msb = bank_meta[33]; } for(uint16_t i = 0; i < count_percusive_banks; i++) @@ -276,8 +293,6 @@ bool MIDIplay::LoadBank(MIDIplay::fileReader &fr) size_t offset = opl.dynamic_percussion_banks.size(); opl.dynamic_percussion_banks[bank] = offset; //strncpy(bankMeta.name, char_p(bank_meta), 32); - //bankMeta.lsb = bank_meta[32]; - //bankMeta.msb = bank_meta[33]; } } @@ -289,17 +304,14 @@ tryAgain: { WOPL_Inst ins; std::memset(&ins, 0, sizeof(WOPL_Inst)); - if(!readInstrument(fr, ins, readPercussion)) + if(!readInstrument(fr, ins, version, readPercussion)) { opl.setEmbeddedBank(m_setup.AdlBank); errorStringOut = "Custom bank: Fail to read instrument!"; return false; } - - /* - * 0..127 - melodic, 128...255 - percussion. - * TODO: Make separated melodic and drum arrays and make MIDI bank ID support - */ + ins.adlins.ms_sound_kon = ins.ms_sound_kon; + ins.adlins.ms_sound_koff = ins.ms_sound_koff; ins.adlins.adlno1 = static_cast<uint16_t>(opl.dynamic_instruments.size() | opl.DynamicInstrumentTag); opl.dynamic_instruments.push_back(ins.op[0]); ins.adlins.adlno2 = ins.adlins.adlno1; diff --git a/utils/gen_adldata/file_formats/load_wopl.h b/utils/gen_adldata/file_formats/load_wopl.h index 311b742..d573283 100644 --- a/utils/gen_adldata/file_formats/load_wopl.h +++ b/utils/gen_adldata/file_formats/load_wopl.h @@ -5,7 +5,10 @@ #include "../midi_inst_list.h" #include "common.h" -static const uint8_t wopl_latest_version = 2; +static const uint8_t wopl_latest_version = 3; + +#define WOPL_INST_SIZE_V2 62 +#define WOPL_INST_SIZE_V3 66 enum class WOPL_Flags { @@ -82,6 +85,10 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) } } + size_t insSize = WOPL_INST_SIZE_V2; + if(version >= 3) + insSize = WOPL_INST_SIZE_V3; + uint32_t melodic_offset = 0; uint32_t percussion_offset = 0; if(version < 2) @@ -89,7 +96,7 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) else melodic_offset = 0x13 + 34 * mbanks_count + 34 * pbanks_count; - percussion_offset = melodic_offset + (62 * 128 * mbanks_count); + percussion_offset = melodic_offset + (insSize * 128 * mbanks_count); uint32_t root_offsets[2] = {melodic_offset, percussion_offset}; @@ -98,11 +105,11 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) bool is_percussion = (bset == 1); for(uint32_t bankno = 0; bankno < 1; bankno++) // only first melodic bank (Until multi-banks support will be implemented) { - uint32_t bank_offset = root_offsets[bset] + (bankno * 62 * 128); + uint32_t bank_offset = root_offsets[bset] + (bankno * insSize * 128); for(uint32_t i = 0; i < 128; i++) { - uint32_t offset = bank_offset + uint32_t(i * 62); + uint32_t offset = bank_offset + uint32_t(i * insSize); std::string name; insdata tmp[2]; @@ -147,6 +154,12 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) tmp[1].data[8] = data[offset + 52 + 6]; tmp[1].data[9] = data[offset + 52 + 1]; tmp[1].data[10] = data[offset + 41]; + /* + * We will don't read two millisecond delays on tail of instrument + * as there are will be re-calculated by measurer here. + * Those fields are made for hot-loading while runtime, but not + * for generation of embedded banks database. + */ tmp[0].finetune = int8_t(toSint16BE((const uint8_t *)data.data() + offset + 32)); tmp[1].finetune = int8_t(toSint16BE((const uint8_t *)data.data() + offset + 34)); diff --git a/utils/gen_adldata/measurer.cpp b/utils/gen_adldata/measurer.cpp index 4789b43..f7108f6 100644 --- a/utils/gen_adldata/measurer.cpp +++ b/utils/gen_adldata/measurer.cpp @@ -223,8 +223,8 @@ DurationInfo MeasureDurations(const ins &in) result.quarter_amplitude_time = (double)quarter_amplitude_time; result.keyoff_out_time = (double)keyoff_out_time; - result.ms_sound_kon = (long)(quarter_amplitude_time * 1000.0 / interval); - result.ms_sound_koff = (long)(keyoff_out_time * 1000.0 / interval); + result.ms_sound_kon = (int64_t)(quarter_amplitude_time * 1000.0 / interval); + result.ms_sound_koff = (int64_t)(keyoff_out_time * 1000.0 / interval); result.nosound = (peak_amplitude_value < 0.5); return result; } |