TakeTracker introduced the “10CH” to “16CH” format, Fast Tracker 2 increased this to “32CH”, for less than 10 channels the “2CHN” to “9CHN” magic bytes/id is used.
These trackers use the Protracker format and Effect Commands however they are NOT 100% compatible as they do not implement any of the widely used quirks (so music like 4-Mat's chip tunes wont work) and the sample loop modes are not present and no DMA Wait behaviour.
This in effect renders them Protracker incompatible and these trackers should not be used to write a Protracker module and vice-versa.
TakeTracker introduces 2 more octaves, one above and one below that defined in Ultimate Soundtracker, however the lowest octave is all but worthless being less that 4Khz in sampling rate.
I have extracted all the valid notes and their note periods from TakeTracker (by creating a .mod with all notes and extracting them from a hex editor):
Note | Hex Period | Decimal Period |
---|---|---|
C-0 | 0x6B0 | 1712 |
C#0 | 0x650 | 1616 |
D-0 | 0x5f4 | 1524 |
D#0 | 0x5a0 | 1440 |
E-0 | 0x54c | 1356 |
F-0 | 0x500 | 1280 |
F#0 | 0x4b8 | 1208 |
G-0 | 0x474 | 1140 |
G#0 | 0x434 | 1076 |
A-0 | 0x3f8 | 1016 |
A#0 | 0x3c0 | 960 |
B-0 | 0x38a | 906 |
C-1 | 0x358 | 856 |
C#1 | 0x328 | 808 |
D-1 | 0x2fa | 762 |
D#1 | 0x2d0 | 720 |
E-1 | 0x2a6 | 678 |
F-1 | 0x280 | 640 |
F#1 | 0x25c | 604 |
G-1 | 0x23a | 570 |
G#1 | 0x21a | 538 |
A-1 | 0x1fc | 508 |
A#1 | 0x1e0 | 480 |
B-1 | 0x1c5 | 453 |
C-2 | 0x1ac | 428 |
C#2 | 0x194 | 404 |
D-2 | 0x17d | 381 |
D#2 | 0x168 | 360 |
E-2 | 0x153 | 339 |
F-2 | 0x140 | 320 |
F#2 | 0x12e | 302 |
G-2 | 0x11d | 285 |
G#2 | 0x10d | 269 |
A-2 | 0xfe | 254 |
A#2 | 0xf0 | 240 |
B-2 | 0xe2 | 226 |
C-3 | 0xd6 | 214 |
C#3 | 0xca | 202 |
D-3 | 0xbe | 190 |
D#3 | 0xb4 | 180 |
E-3 | 0xaa | 170 |
F-3 | 0xa0 | 160 |
F#3 | 0x97 | 151 |
G-3 | 0x8f | 143 |
G#3 | 0x87 | 135 |
A-3 | 0x7f | 127 |
A#3 | 0x78 | 120 |
B-3 | 0x71 | 113 |
C-4 | 0x6b | 107 |
C#4 | 0x65 | 101 |
D-4 | 0x5f | 95 |
D#4 | 0x5a | 90 |
E-4 | 0x55 | 85 |
F-4 | 0x50 | 80 |
F#4 | 0x4c | 76 |
G-4 | 0x48 | 72 |
G#4 | 0x44 | 68 |
A-4 | 0x40 | 64 |
A#4 | 0x3c | 60 |
B-4 | 0x38 | 56 |
Notice that the display names and period values line up with Ultimate Soundtracker/Protracker series but not FastTracker 2.
I extracted and converted the TakeTracker finetune note period table (from the .exe) into a format similar to Protracker.
// Fine tuning 0, normal. 1712, 1616, 1524, 1440, 1356, 1280, 1208, 1140, 1076, 1016, 960, 906, 856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453, 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226, 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113, 107, 101, 95, 90, 85, 80, 76, 72, 68, 64, 60, 56, 0 // Fine tuning 1 , 1700, 1604, 1514, 1430, 1348, 1274, 1202, 1134, 1070, 1010, 954, 900, 850, 802, 757, 715, 674, 637, 601, 567, 535, 505, 477, 450, 425, 401, 379, 357, 337, 318, 300, 284, 268, 253, 239, 225, 213, 201, 189, 179, 169, 159, 150, 142, 134, 126, 119, 113, 106, 100, 94, 89, 84, 79, 75, 71, 67, 63, 59, 56, 0 // Fine tuning 2 , 1688, 1592, 1504, 1418, 1340, 1264, 1194, 1126, 1064, 1004, 948, 894, 844, 796, 752, 709, 670, 632, 597, 563, 532, 502, 474, 447, 422, 398, 376, 355, 335, 316, 298, 282, 266, 251, 237, 224, 211, 199, 188, 177, 167, 158, 149, 141, 133, 125, 118, 112, 105, 99, 93, 88, 83, 78, 74, 70, 66, 62, 59, 56, 0 // Fine tuning 3 , 1676span>, 1582, 1492, 1408, 1330, 1256, 1184, 1118, 1056, 996, 940, 888, 838, 791, 746, 704, 665, 628, 592, 559, 528, 498, 470, 444, 419, 395, 373, 352, 332, 314, 296, 280, 264, 249, 235, 222, 209, 198, 187, 176, 166, 157, 148, 140, 132, 125, 118, 111, 104, 99, 93, 88, 83, 78, 74, 70, 66, 62, 59, 56, 0 // Fine tuning 4 , 1664, 1570, 1482, 1398, 1320, 1246, 1176, 1110, 1048, 990, 934, 882, 832, 785, 741, 699, 660, 623, 588, 555, 524, 495, 467, 441, 416, 392, 370, 350, 330, 312, 294, 278, 262, 247, 233, 220, 208, 196, 185, 175, 165, 156, 147, 139, 131, 124, 117, 110, 104, 98, 92, 87, 82, 77, 73, 69, 65, 62, 58, 56, 0 // Fine tuning 5 , 1652, 1558, 1472, 1388, 1310, 1238, 1168, 1102, 1040, 982, 926, 874, 826, 779, 736, 694, 655, 619, 584, 551, 520, 491, 463, 437, 413, 390, 368, 347, 328, 309, 292, 276, 260, 245, 232, 219, 206, 195, 184, 174, 164, 155, 146, 138, 130, 123, 116, 109, 103, 97, 92, 87, 82, 77, 73, 69, 65, 61, 58, 56, 0 // Fine tuning 6 , 1640, 1548, 1460, 1378, 1302, 1228, 1160, 1094, 1032, 974, 920, 868, 820, 774, 730, 689, 651, 614, 580, 547, 516, 487, 460, 434, 410, 387, 365, 345, 325, 307, 290, 274, 258, 244, 230, 217, 205, 193, 183, 172, 163, 154, 145, 137, 129, 122, 115, 109, 102, 96, 91, 86, 81, 77, 72, 68, 64, 61, 57, 56, 0 // Fine tuning 7 , 1628, 1536, 1450, 1368, 1292, 1220, 1150, 1086, 1026, 968, 914, 862, 814, 768, 725, 684, 646, 610, 575, 543, 513, 484, 457, 431, 407, 384, 363, 342, 323, 305, 288, 272, 256, 242, 228, 216, 204, 192, 181, 171, 161, 152, 144, 136, 128, 121, 114, 108, 102, 96, 90, 85, 80, 76, 72, 68, 64, 60, 57, 56, 0 // Fine tuning -8 , 1814, 1712, span style="color: #CC0000;">1616, 1524, 1440, 1356, 1280, 1208, 1140, 1076, 1016, 960, 907, 856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453, 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226, 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113, 107, 101, 95, 90, 85, 80, 75, 71, 67, 63, 60, 0 // Fine tuning -7 , 1800, 1700, 1604, 1514, 1430, 1350, 1272, 1202, 1134, 1070, 1010, 954, 900, 850, 802, 757, 715, 675, 636, 601, 567, 535, 505, 477, 450, 425, 401, 379, 357, 337, 318, 300, 284, 268, 253, 238, 225, 212, 200, 189, 179, 169, 159, 150, 142, 134, 126, 119, 112, 106, 100, 94, 89, 84, 79, 75, 71, 67, 63, 59, 0 // Fine tuning -6 , 1788, 1688, 1592, 1504, 1418, 1340, 1264, 1194, 1126, 1064, 1004, 948, 894, 844, 796, 752, 709, 670, 632, 597, 563, 532, 502, 474, 447, 422, 398, 376, 355, 335, 316, 298, 282, 266, 251, 237, 223, 211, 199, 188, 177, 167, 158, 149, 141, 133, 125, 118, 111, 105, 99, 94, 88, 83, 79, 74, 70, 66, 62, 59, 0 // Fine tuning -5 , 1774, 1676, 1582, 1492, 1408, 1330, 1256, 1184, 1118, 1056, 996, 940, 887, 838, 791, 746, 704, 665, 628, 592, 559, 528, 498, 470/span>, 444, 419, 395, 373, 352, 332, 314, 296, 280, 264, 249, 235, 222, 209, 198, 187, 176, 166, 157, 148, 140, 132, 125, 118, 111, 104, 99, 93, 88, 83, 78, 74, 70, 66, 62, 59, 0 // Fine tuning -4 , 1762, 1664, 1570, 1482, 1398, 1320, 1246, 1176, 1110, 1048, 988, 934, 881, 832, 785, 741, 699, 660, 623, 588, 555, 524, 494, 467, 441, 416, 392, 370, 350, 330, 312, 294, 278, 262, 247, 233, 220, 208, 196, 185, 175, 165, 156, 147, 139, 131, 123, 117, 110, 104, 98, 92, 87, 82, 78, 73, 69, 65, 61, 58, 0 // Fine tuning -3 , 1750, 1652, 1558, 1472, 1388, 1310, 1238, 1168, 1102, 1040, 982, 926, 875, 826, 779, 736, 694, 655, 619, 584, 551, 520, 491, 463, 437, 413, 390, 368, 347, 328, 309, 292, 276, 260, 245, 232, 219, 206, 195, 184, 174, 164, 155, 146, 138, 130, 123, 116, 109, 103, 97, 92, 86, 82, 77, 73, 69, 65, 61, 58, 0 // Fine tuning -2 // B-4 = 57? seems a bit odd, values for fine tune -3 & -1 are both 58. , 1736, 1640, 1548, 1460, 1378, 1302, 1228, 1160, 1094, 1032, 974, 920, 868, 820, 774, 730, 689, 651, 614, 580, 547, 516, 487, 460, 434, 410, 387, 365, 345, 325, 307, 290, 274, 258, 244, 230, 217, 205, 193, 183, 172, 163, 154, 145, 137, 129, 122, 115, 108, 102, 96, 91, 86, 81, 77, 72, 68, 64, 61, 57, 0 // Fine tuning -1 , 1724, 1628, 1536, 1450, 1368, 1292, 1220, 1150, 1086, 1026, 968, 914, 862, 814, 768, 725, 684, 646, 610, 575, 543, 513, 484, 457, 431, 407, 384, 363, 342, 323, 305, 288, 272, 256, 242, 228, 216, 203, 192, 181, 171, 161, 152, 144, 136, 128, 121, 114, 108, 101, 96, 90, 85, 80, 76, 72, 68, 64, 60, 58 // Random data after finetune table (for Finetune -1 on sample + B-4 + Arpeggio). // But currently don't think this is a bug that needs emulating (TakeTracker's code may handle this correctly, difficult to tell in Dosbox with SB at 21Khz). , 0x220, 0xb, 0x1, 0xac44, 0xa0c8, 0x96bb, 0x8ddd, 0x85fc, 0x7eee, 0x7896, 0x72d8, 0x6d9f, 0x68db, 0x647d, 0x6078, 0x5cc2
As the Fine Tune Table is rather large and does not include those Period Values for FT2 “CHxx” modules it is better to use a formular to calculate the period values.
There can be slight differences between a (very) few values, but I don't think they are of consequence.
Fine Tune allows you to tune a sample 1/8 of a semi-tone (a note) * FineTuneValue up or down. So its 0-7/8ths up and 1-8/8ths down (-8/8ths is an entire semi tone down - a note).
Lars Hamre defines this as:
Note Period * ( 2^( -FineTune / 12 / 8 ) )
Where 12 notes per octave, 8 semi-tones.
The values should be rounded to integer values (Amiga only takes integer period values).
Some examples: Protracker C-1 is 856 note period, fine tune -8 should drop it to 907 the note below.
856 * ( 2^( - -8 / 12 / 8 ) ) = 856 * 1.059463094 = 906.900408464 = 907 rounded.
Protracker C-1 is 856 note period, fine tune 7 should take it to 814.
856 * ( 2^( - 7 / 12 / 8 ) ) = 856 * 0.950714015 = 813.81119684 = 814 rounded.
Where it doesn't match the Protracker fine tune table is for B-3, 113 note period, fine tune 7 should be 108.
113 * ( 2^( - 7 / 12 / 8 ) ) = 113 * 0.950714015 = 107.430683695 = 107 rounded, out by one.
When applied to the TakeTracker range A#4 is 60 note period (B-4, 56 note period for positive fine tune values does not change, always 56), fine tune 7 should be 57.
60 * ( 2^( - 7 / 12 / 8 ) ) = 60 * 0.950714015 = 57.0428409 = 57 rounded.
So the formula appears good for TakeTracker's FineTune table too.
Fasttracker 2 introduces 3 more octaves for 8 octaves in total, two above and one below that defined in TakeTracker. Also the Middle C is now in the correct position.
I have extracted all the valid notes and their note periods from Fasttracker (by creating a .mod with all notes and extracting them from a hex editor):
Notice: That notes C-0 to G#0 inclusive are unusable in a .mod format because the values are outside the 12bit range allowed to store the note period. They are 13bit values where the upper bit corrupts the instrument number (so instrument 0x1 becomes instrument 0x11 in the pattern). HOWEVER Fasttracker 2 will allow you to use these notes and then save a (potentially) corrupt modules, unless those notes are used with a instrument numbers 16 to 31.
Notice 2: That TakeTracker uses some slightly different Period Values (F#6 to A-6). Which could be used to identify the origins of the module (although what happens if you load and then save from FT2?).
Note | Hex Period | Decimal Period | (TT values) |
---|---|---|---|
C-0 | 0x1ac0 | 6848 | - |
C#0 | 0x1940 | 6464 | - |
D-0 | 0x17d0 | 6096 | - |
D#0 | 0x1680 | 5760 | - |
E-0 | 0x1530 | 5424 | - |
F-0 | 0x1400 | 5120 | - |
F#0 | 0x12e0 | 4832 | - |
G-0 | 0x11d0 | 4560 | - |
G#0 | 0x10d0 | 4304 | - |
A-0 | 0xfe0 | 4064 | - |
A#0 | 0xf00 | 3840 | - |
B-0 | 0xe28 | 3624 | - |
C-1 | 0xd60 | 3424 | - |
C#1 | 0xca0 | 3232 | - |
D-1 | 0xbe8 | 3048 | - |
D#1 | 0xb40 | 2880 | - |
E-1 | 0xa98 | 2712 | - |
F-1 | 0xa00 | 2560 | - |
F#1 | 0x970 | 2416 | - |
G-1 | 0x8e8 | 2280 | - |
G#1 | 0x868 | 2152 | - |
A-1 | 0x7f0 | 2032 | - |
A#1 | 0x780 | 1920 | - |
B-1 | 0x714 | 1812 | - |
C-2 | 0x6b0 | 1712 | 1712 |
C#2 | 0x650 | 1616 | 1616 |
D-2 | 0x5f4 | 1524 | 1524 |
D#2 | 0x5a0 | 1440 | 1440 |
E-2 | 0x54c | 1356 | 1356 |
F-2 | 0x500 | 1280 | 1280 |
F#2 | 0x4b8 | 1208 | 1208 |
G-2 | 0x474 | 1140 | 1140 |
G#2 | 0x434 | 1076 | 1076 |
A-2 | 0x3f8 | 1016 | 1016 |
A#2 | 0x3c0 | 960 | 960 |
B-2 | 0x38a | 906 | 906 |
C-3 | 0x358 | 856 | 856 |
C#3 | 0x328 | 808 | 808 |
D-3 | 0x2fa | 762 | 762 |
D#3 | 0x2d0 | 720 | 720 |
E-3 | 0x2a6 | 678 | 678 |
F-3 | 0x280 | 640 | 640 |
F#3 | 0x25c | 604 | 604 |
G-3 | 0x23a | 570 | 570 |
G#3 | 0x21a | 538 | 538 |
A-3 | 0x1fc | 508 | 508 |
A#3 | 0x1e0 | 480 | 480 |
B-3 | 0x1c5 | 453 | 453 |
C-4 | 0x1ac | 428 | 428 |
C#4 | 0x194 | 404 | 404 |
D-4 | 0x17d | 381 | 381 |
D#4 | 0x168 | 360 | 360 |
E-4 | 0x153 | 339 | 339 |
F-4 | 0x140 | 320 | 320 |
F#4 | 0x12e | 302 | 302 |
G-4 | 0x11d | 285 | 285 |
G#4 | 0x10d | 269 | 269 |
A-4 | 0xfe | 254 | 254 |
A#4 | 0xf0 | 240 | 240 |
B-4 | 0xe2 | 226 | 226 |
C-5 | 0xd6 | 214 | 214 |
C#5 | 0xca | 202 | 202 |
D-5 | 0xbe | 190 | 190 |
D#5 | 0xb4 | 180 | 180 |
E-5 | 0xaa | 170 | 170 |
F-5 | 0xa0 | 160 | 160 |
F#5 | 0x97 | 151 | 151 |
G-5 | 0x8f | 143 | 143 |
G#5 | 0x87 | 135 | 135 |
A-5 | 0x7f | 127 | 127 |
A#5 | 0x78 | 120 | 120 |
B-5 | 0x71 | 113 | 113 |
C-6 | 0x6b | 107 | 107 |
C#6 | 0x65 | 101 | 101 |
D-6 | 0x5f | 95 | 95 |
D#6 | 0x5a | 90 | 90 |
E-6 | 0x55 | 85 | 85 |
F-6 | 0x50 | 80 | 80 |
F#6 | 0x4b | 75 | 76* |
G-6 | 0x47 | 71 | 72* |
G#6 | 0x43 | 67 | 68* |
A-6 | 0x3f | 63 | 64* |
A#6 | 0x3c | 60 | 60 |
B-6 | 0x38 | 56 | 56 |
C-7 | 0x35 | 53 | - |
C#7 | 0x32 | 50 | - |
D-7 | 0x2f | 47 | - |
D#7 | 0x2d | 45 | - |
E-7 | 0x2a | 42 | - |
F-7 | 0x28 | 40 | - |
F#7 | 0x25 | 37 | - |
G-7 | 0x23 | 35 | - |
G#7 | 0x21 | 33 | - |
A-7 | 0x1f | 31 | - |
A#7 | 0x1e | 30 | - |
B-7 | 0x1c | 28 | - |
Fasttracker2 does not support the much needed quirks that appear in Protracker 2. Hence it cannot be called Protracker compatible even though it uses the same effect commands. There are just far too many modules that use these quirks and wont play correctly in Fasttracker 2.
Effect 9xx Set Sample Offset behaves quite different from Protracker 2.
Row | Note | Sample # | Effect # | Effect Data | Offsets used in PT 1 & 2 | Protracker 3 | Ft2 |
---|---|---|---|---|---|---|---|
01 | A-2 | 1 | 9 | 0f | 0f00 | 0f00 | 0f00 |
02 | B-2 | - | - | -- | 1e00 | 0f00 | 0 |
03 | C-2 | - td> | - | -- | 1e00 | 0f00 | 0 |
04 | D-2 | - | 9 | 00 | 2d00 | 0f00 | 0f00 |
05 | E-2 | - | - | -- | 3c00 | 0f00 | 0 |
06 | F-2 | - | E | D3 | 3c00 | 0f00 | 0 |
07 | --- | - | E | 93 | 3c00 | 0f00 | 0 |
Sample Offset / 256 | Actual sample offsets |
It will not remember the Set Sample Offset, or add the value again after the sample has started playing. It will reuse the set value if the command 900 is encountered. Note Delay (EDx) is not affect and neither is Retrigger Note (E9x).
FT2 limits the arpeggio range to the maximum note B-7 + one (what appears to be) note. This can be double checked by playing the maximum note when the fine tune is set to +127 and any arpeggio value. The tone of the note does not change.
Although the Protracker M.K. module is limited to 64 patterns the file format actually supports 256 different patterns (although rather pointless as the song sequence only has 128 slots), the limit is imposed by the Protracker Editor, not the replay routine.
The Protracker also has the “M!K!” format, which is identical to the M.K. format expect for having up to 100 patterns (the file finger print is also changed to “M!K!”).
Fasttracker 2 will allow you to save up to 256 patterns and only issue a warning when trying to save a module with more than 100 patterns. The warning does not stop the module from being saved and FT2 will happily save all 256 patterns correctly.
When saving a 4 channel modules in FT2 it will ALWAYS place the “M.K.” finger print within the module, no matter the number of patterns (at no point does it use “M!K!”).
Fasttracker introduces the Panning Command (8xx and E8x). There are 256 panning position, 0 = maximum left, 255 = maximum right and 128 = middle.
Some modules, use a 7 bit panning, 800 = left, 840 = middle & 880 = right.
There are two commands for setting the channel position:
Sets the panning position to the provided value.
Row | Note | Sample # | Effect # | Effect Data | Note |
---|---|---|---|---|---|
01 | A-2 | 1 | 8 | 00 | Panning set to full left |
02 | --- | - | 0 | 00 | |
03 | B-2 | - | 0 | 00 | Panning not reset, still full left |
Once set the channel maintains that position until the next command (it is not reset upon a new note).
Unusually for a extended command this does not “fine set” the panning position, it is a coarse setting (this command also certainly exists due to the Gravis Ultrasound only having 16 panning positions per channel). Sets the panning position to the provided value * 16.
Row | Note | Sample # | Effect # | Effect Data | Note |
---|---|---|---|---|---|
01 | A-2 | 1 | E | 8F | Set Panning full right |
02 | --- | - | 0 | 00 |
Once set the channel maintains that position until the next command (it is not reset upon a new note).
There is an issue with this command due to the lower nibble being missing, E80 is full left, E88 is middle but E8F is NOT full right. Due to 0xF * 16 = 0xF0, which is not 0xFF which is full right.
On the Gravis Ultrasound, it only has 4-bit panning position PER channel, setting the channel to 0xf makes makes it FULL right (although there is nothing stopping you using two channels playing the same sample one full left the other full right and THEN adjusting the volume levels giving you 10 bit panning position [volume command is 6-bit + 4-bit panning position]).
Here is a list of created test modules for Black Box Testing against TakeTracker and FastTracker 2. They are based upon a set created and (sadly) thrown away/unmaintained to confirm the behaviour of the Protracker series on the Amiga. I have enhanced/recreated them with non-commercial samples (previously, stupidly, I grabbed what ever sample was at hand and so could not release them). The speech samples are created with the open source “espeak” library.
These notes are rather difficult to follow without the modules and the modules really need this notes to explain what is going on (due to the limited amount of space for text in a module). So you need both!
There is behaviour associated with the Arpeggio command.
1) That Tick Speed 1 will ignore the Arpeggio Command entirely (or more precisely there are no other ticks to use the arpeggio on, as the implementation is solely dependant upon Tick Speeds) and only the base note (from the note column) is played.
2) That Tick Speed 2 will only play the base note (from the note column) and the first Arpeggio value (highest nibble) of the Effect Data, the second Arpeggio value is ignored (the lower nibble) of the the Effect Data.
3) That a wrap round of the note occurs if a combination of a high note and arpeggio combine to take the note past the maximum playable note in Protracker (B-3). If a wrap round occurs the note will be played with a fine tune +1 onto the existing fine tune (with the exception of fine tune 7 which changes to fine tune -8). This occurs due to the fine tune tables being adjacent in memory so when the arpeggio command reaches past the maximum note of one fine tune table it reaches the lowest notes of the next fine tune table.
4) In the Protracker Editor (not the stand alone replay routine) the note period table contains a note period of zero in between each fine tuning table. This allows you to actually stop the sample for an entire tick and then start it again (so on a tick speed of 2 it will stop and start the sample). This can be used to play a sample more slowly (a crude time stretching). For example using B-3 with a arpeggio of 1 causes the note period to be zero for a single tick, you can use any note where the resulting arpeggio lands on the same note (where C-4 would be). So C-3 + 12 arpeggio results in a note period of zero.
When the module is played in Protracker 2.x series you will hear in Pattern 0:
Row | Note |
---|---|
02-20 | A pure tone as Tick Speed 1 is used (even though there is arpeggio data present) |
22-36 | A pure tone even with Tick Speed 2, as the first arpeggio column is 0 and not used (the 2nd arpeggio column has data but gets ignored due to tick speed 2) |
38-52 | Arpeggio heard (a upwards note scale) as Tick Speed 3 is used and so will play the 2nd arpeggio column. |
In Pattern 1 and 2 the note wrap round is checked (pattern 1):
Row | Note |
---|---|
01-04 | A pure tone is played a maximum note B-3. |
05-09 | Arpeggio of 1 is used but due to a zero note period being present between fine tune tables (where C-4 would be if it existed) the channel is effectively stopped on every odd tick and restarted (playing B-3) on even ticks. |
05-09 | Arpeggio of 2 is used but due to note wrap round it does not play the next highest note (C-4) it plays the lowest C-1 with a fine tune of +1. |
10-14 | Arpeggio of 3 is used but due to note wrap round it does not play the next octave (C#4) it plays the lowest octave C#1 with a fine tune of +1. |
15-19 | Arpeggio of 4 is used but due to note wrap round it does not play the next octave (D-4) it plays the lowest octave D-1 with a fine tune of +1. |
19-63 | This carries on for the rest of the pattern, playing the next arpeggio note every 4 rows and each time the note is playing in the lowest octave. |
Pattern 2 continues playing the arpeggio scale:
Row | Note |
---|---|
00-17 | Arpeggio scale continues up to C-2 with a fine tune of +1. |
18-30 | Arpeggio scale is quickly played back down to C-1 with a fine tune of +1. |
31 | Arpeggio of 1 is used to cause the sample to stop and start. |
32-63 | Pure tone B-3 is played. |
Pattern 3 Checks that the zero note period is present by “time stretching” the sample:
Row | Note |
---|---|
00 | Tick speed set to 2. |
01-31 | A speech sample saying “Delay” is played extra slow, by stopping and starting the channel with the arpeggio command that tries to play note C-4, which does not exist but in the fine tune table its zero and so stops the channel. |
32-63 | A speech sample saying “Delay” is played extra slow. |
Results:
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
02-20 | Pure tone | Pure tone | Pure tone | Pure tone |
22-36 | Pure tone, no arpeggio | Pure tone, no arpeggio | Pure tone, no arpeggio | Pure tone, no arpeggio |
38-52 | Arpeggio scale upwards | Arpeggio scale upwards | Arpeggio scale upwards | Arpeggio scale upwards |
Pattern 1 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
---|---|---|---|---|
01-04 | Pure tone | Pure tone | Pure tone | Pure tone |
05-09 | Sample stopped and started | Sample stopped and started | Arpeggio to C-4 | Pure tone |
05-09 | Wrap round occurs C-1 played with fine tune +1 | Wrap round occurs C-1 played with fine tune +1 | No wrap round, Arpeggio to C#4 | Pure tone |
10-14 | Wrap round occurs C#1 played with fine tune +1 | Wrap round occurs C-1 played with fine tune +1 | No wrap round, Arpeggio to D-4 | Pure tone |
15-63 | Note wrap round occurs | Note wrap round occurs | Arpeggio to octave above | Pure tone |
Pattern 2 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
---|---|---|---|---|
00-17 | Note wrap round occurs | Note wrap round occurs | Arpeggio to octave above | Pure tone |
18-30 | Arpeggio scales back to C-1 | Arpeggio scales back to C-1 | Arpeggio scales back to B-3 | Pure tone |
31 | Sample stops and starts | Sample stops and starts | Arpeggio C-4 | Pure tone |
32-63 | Pure tone B-3 is played | Pure tone B-3 is played | Pure tone B-3 is played | Pure tone |
Pattern 3 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
---|---|---|---|---|
01-31 | “Delay” is heard extra slow | “Delay” is heard extra slow | “Delay” is heard with arpeggio to C-4 | “Delay” is heard extra slow |
32-63 | “Delay” is heard extra slow | “Delay” is heard extra slow | “Delay” is heard with arpeggio to C-4 | “Delay” is heard extra slow |
Taketracker only seems to see column 2 of the arpeggio command, it is ignoring column 1 at tick speed 2.
Protracker inherits note suppression from Ultimate Soundtracker as it still uses a software loop to wait for samples to end. This is the DMA Wait value which defaults to 300 in Protracker 2.x. It should be noted that Protracker 3.x uses a completely different (and better) system for wait for samples to end and so behaves differently.
Cycle exact emulation is required to capture this bug perfectly as its dependant of where the CPU cycle execution is in relation to the scan-line, because the DMA Audio is fetched from memory at the beginning of each scan-line. And according to the Amiga Hardware Reference Manual page 141, section ”Stopping the Audio DMA” it says ”If the DMA channel is disabled for a very short time (less that two sampling periods) it may stay on and thus continue from where it it left off.”.
Without cycle exact emulation it is still possible to calculate when this is going to occur, when twice the note period is greater than the DMA Wait value in time. Under normal circumstances its not even an issue, as the lowest note, note C-1 has a period of 856. A DMA Wait of 300 requires 3000 CPU Clock Cycles (300 * “dbra D0,mt_WaitDMA” instructions where “dbra” takes 10 clock cycles each). Because 856 * 2 is still less than 3000 it should not be a problem right? Wrong.
(As a side note this is why you need to increase the DMA Wait value in Protracker 2.x for faster Amigas, as the default 300 waits might be executed in only 500 equivalent clock cycles causing Note Suppression to occur. Its also why it was improved and eliminated in the Protracker 3.x series.)
The problem rears its ugly head when the Arpeggio command is used, in Ultimate Soundtracker it allows you to “reach” pseudo random data past the end of the note table, e.g. the maximum note B-3 plus 15 notes of Arpeggio.. In protracker this can only occur when using a Fine Tune of -1, as this is the last note table in memory. These out of bound areas are different for the stand alone replay routine and the Protracker Editor. Luckily the Protracker Editor is static data so is easy to replicate, the stand alone replay routine uses this area of memory to store Channel 0's variables.
So although its really unlikely it is still possible to create a Note Suppression in PT2.x.
When the module is played in Protracker 2.x series you will hear in Pattern 0:
Row | Note |
---|---|
00 | Suppressed |
01 | This sample “DMA Wait Bug” is not heard, it has been suppressed. |
24 | Suppressed |
25 | This sample “Five” (which is looped) is not started straight away, it is now chained onto the end of “Suppressed”. Notice that “One” is not played, only the looped part “Five”. |
Due to Taketracker and Fasttracker 2 adding an extra octave above the highest octave Protracker 2.x has Arpeggio is not going to cause a note suppression. It is possible (albeit unreliable) to create a note suppression using the the 1xx Note Portamento command. As it is possible to subtract a large enough value to cause the Note Period value to wrap around to the lowest note. The note period is stored as a 12 bit number, the highest note at -1 fine tune is 114, so a (114 - 115) & 0xfff = 4095 which is a very low note.
In Pattern 1:
Row | Note |
---|---|
00 | Suppressed (but played at such a low frequency you can't hear it) |
01 | “DMA Wait Bug” is not heard but the “Suppressed” sample from row 00 takes it note period and can be heard “Suppressed” |
You may need to lower the DMA Wait value in Protracker 2.x to hear this method consistently depending on setup (yes I know that cheating!), at the time of writing WinUAE emulates DMA Wait Bug correctly (and has done for quite some time) if Cycle Exact mode is enabled.
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
00 | Suppressed | Ss+ | Su++ | Su++ |
01 | – | DMA Wait Bug | DMA Wait Bug | DMA Wait Bug |
24 | Suppressed | Ss+ | Su++ | Su++ |
25 | (Five*) | One (Five*) | One (Five*) | One (Five*) |
Pattern 1 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
00 | Suppressed | Ss+ | – | – |
01 | – | DMA Wait Bug | DMA Wait Bug | DMA Wait Bug |
+Where “Ss” is the “Suppressed” sample starting but not getting past the first letter S (kinda sounds like a high hat).
++Where “Su” is the “Suppressed” sample with Arpeggio for the next octave up.
Exposes the Set Sample Offset Quirks in Protracker 2.x. Notice that this command behaves differently in ALL major versions of Protracker (1.x, 2.x, 3.x). I have not spent enough time with Protracker 1.x to solidly confirm its behaviour.
This module exposes that Protracker 2.x adds the Sample Offset in the 9xx command BEFORE and AFTER use.
Using a single sample contains the words “Five four three two one” you should hear the following in Protracker 2.x in Pattern 0 which just tests the Sample Offset Command 9xx:
Row | Note |
---|---|
00 | Four three two one |
10 | three two one |
20 | three two one |
30 | two one |
40 | one |
In Protracker 2.x the 9xx command sets the sample offset for the current sample, so as long as you don't change the instrument number (is NOT present) THE SAMPLE WILL PLAY FROM THE SET ADDRESS!
Pattern 1 tests that the Set Sample Offset Command also affect the Note Delay (EDx) and Retrigger Note (E9x) commands. Again as long as the instrument number is not changed (or present):
Row | Note |
---|---|
00 | Four three two one |
10 | three two one |
20 | three-three two one |
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
00 | Four three two one | Four three two one | Four three two one | Four three two one |
10 | three two one | Four three two one | Five Four three two one | Five Four three two one |
20 | three two one | Four three two one | Five Four three two one | Five Four three two one |
30 | two one | Four three two one | Four three two one | Five Four three two one |
40 | one | Four three two one | Five Four three two one | Five Four three two one |
Pattern 1 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
00 | Four three two one | Four three two one | Four three two one | Four three two one |
10 | three two one | Four three two one | Five Four three two one | – |
20 | three-three two one | Four-Four three two one+ | Five Four three two one | – |
+You probably wont hear the E93 sample retrigger for “Four-Four three two one” as it occurs in on a silent part of the sample.
Check that the Vibrato waveforms of Protracker 2.x are supported and move in the right direction.
Protracker 2.x lists 4 different waveform types, however only 3 were ever implemented - but the documentation did not change.
Row | Note |
---|---|
3 | Sinewave Vibrato |
5 | Sinewave gets retriggered |
9 | Sawtooth vibrato |
11 | Sawtooth gets retriggger |
15 | Square Vibrato |
17 | Square gets retriggered |
21 | Square Vibrato (as no random waveform) |
23 | Square gets Retriggered |
27 | Sinewave Vibrato |
29 | Sinewave continues (does not stop) |
33 | Sawtooth Vibrato |
35 | Sawtooth continues (does not stop) |
39 | Square Vibrato |
41 | Square continues |
45 | Square Vibrato (as no random waveform) |
47 | Square continues (does not stop) |
Pay attention to the direction of the pitch change when the note starts, not all soundtrackers vibrate in the same direction (looking at you OpenMPT 1.22.2!).
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT* |
3 | Sinewave Vibrato ↓↑ | Sinewave Vibrato ↓↑ | Sinewave Vibrato ↓↑ | Bug |
5 | Sinewave gets retriggered | Sinewave gets retriggered | Sinewave gets retriggered | Bug |
9 | Sawtooth vibrato ↓ | Sawtooth vibrato ↓ | Sawtooth vibrato ↓ | Bug |
11 | Sawtooth gets retriggger | Sawtooth gets retriggger | Sawtooth gets retriggger | Bug |
15 | Square Vibrato ↓ | Square Vibrato ↓ | Square Vibrato ↓ | Bug |
17 | Square gets retriggered | Square gets retriggered | Square gets retriggered | Bug |
21 | Square Vibrato ↓ (as no random waveform) | Square Vibrato ↓ (as no random waveform) | Square Vibrato ↓ (as no random waveform) | Bug |
23 | Square gets Retriggered | Square gets Retriggered | Square gets Retriggered | Bug |
27 | Sinewave Vibrato | Sinewave Vibrato | Sinewave Vibrato | Bug |
29 | Sinewave continues (does not stop) | Sinewave continues (does not stop) | Sinewave continues (does not stop) | Bug |
33 | Sawtooth Vibrato | Sawtooth Vibrato | Sawtooth Vibrato | Bug |
35 | Sawtooth continues (does not stop) | Sawtooth continues (does not stop) | Sawtooth continues (does not stop) | Bug |
39 | Square Vibrato | Square Vibrato | Square Vibrato | Bug |
41 | Square continues | Square continues | Square continues | Bug |
45 | Square Vibrato (as no random waveform) | Square Vibrato (as no random waveform) | Square Vibrato (as no random waveform) | Bug |
47 | Square continues (does not stop) | Square continues (does not stop) | Square continues (does not stop) | Bug |
*Taketracker does not support the command Vibrato Waveform Control (E4x) and so can only play the default sinewave which is always retriggered on every row which contains a Vibrato command (4xx). Thus sounds completely bugged.
In Protracker there is a typo in the Tremolo code, where a minor variable is mistakenly pointing at a Vibrato variable. So under certain (admittedly rather rare) conditions it is possible to make the Tremolo Sawtooth waveform go up instead of down (its only meant to go down, that is fade out).
This test creates the conditions for making the Sawtooth waveform fade in. Which is a
Row | Note | Sample # | Effect # | Effect Data | Notes |
---|---|---|---|---|---|
00 | C-4 | 1 | E | 40 | Turn off continuous vibrato |
01 | C-4 | 1 | - | -- | Reset vibrato table position |
02 | --- | - | E | 44 | Turn on continuous vibrato |
03 | C-4 | 1 | 4 | 71 | Vib. to create negative table position |
04 | --- | - | E | 71 | Select Tremolo Sawtooth waveform |
05 | C-4 | 1 | 7 | 1F | Tremolo |
06 | --- | - | 7 | 00 | Notice volume ramps ups |
07 | --- | . | 7 | 00 | Not down. |
08 | --- | - | 7 | 00 | |
09 | --- | - | 7 | 00 | |
10 | --- | - | 7 | 00 |
Repeat test but without continuous Vibrato (Row 13 is the only difference)
Row | Note | Sample # | Effect # | Effect Data | Notes |
---|---|---|---|---|---|
11 | C-4 | 1 | E | 40 | |
12 | C-4 | 1 | - | -- | |
13 | --- | - | E | 40 | Turn off continuous vibrato |
14 | C-4 | 1 | 4 | 71 | |
15 | --- | - | E | 71 | |
16 | C-4 | 1 | 7 | 1F | Tremolo |
17 | --- | - | 7 | 00 | Notice volume ramps down |
18 | --- | . | 7 | 00 | as expected. |
19 | --- | - | 7 | 00 | |
20 | --- | - | 7 | 00 | |
21 | --- | - | 7 | 00 |
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT* |
05 to 10 | Tremolo fades in | Tremolo fades in | Tremolo fades in | stutter-stutter++ |
16 to 20 | Tremolo fades out+ | Tremolo fades out+ | Tremolo fades out | stutter-stutter++ |
+There is an additional bug in the Protracker Editor which causes the volume level to be reset on tick 0 when the Tremolo command is used (causing a sort of click per row). This bug is not present in the stand alone replay code.
++Taketracker does not support the Vibrato Waveform Control command (E4x) or Tremolo Waveform Control command (E7x). Also the Tremolo command (7xx) seems quite wrong.
In Protracker 2.x series executing a Pitch Bend command (1xx or 2xx) in the same row as a Row Delay command (EEx) is completed smoothly, as if additional rows had been inserted containing the Pitch Bend command.
Pattern 0 tests that a row skip occurs when combining Row Delay with Pattern Break commands.
Row | Note |
---|---|
00 | Pitch bend ↑ starts, there is also a Row Delay Command but should not affect Pitch Bend. |
01-05 | Pitch bend ↑ continues as normal (as if Row Delay Command did not exist). |
06 | Pitch bend ↑ continues as normal even with another Row Delay Command. |
07-09 | Pitch bend ↑ continues as normal (as if Row Delay Command did not exist). |
10 | |
12 | Pitch bend ↓ starts, but there is also a Row Delay Command. |
13-18 | Pitch bend ↓ continues as normal (as if Row Delay Command did not exist). |
19 | Pitch bend ↓ continues as normal even with another Row Delay Command. |
20-21 | Pitch bend ↓ continues as normal (as if Row Delay Command did not exist). |
The Pitch Bend Up from Rows 00 to 09 should be continuous and a smooth transition, same for the Pitch Bend Down on Rows 12 to 21. The Row Delay should not interfere with the Pitch Bend.
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT* |
00 | ↑ | ↑ | ↑ | ↑ |
1-5 | ↑ | ↑ | ↑ | ↑ |
6 | ↑ | ↑ | ↑ | ↑ |
7-9 | ↑ | ↑ | ↑ | ↑ |
12 | ↓ | ↓ | ↓ | ↓ |
13-18 | ↓ | ↓ | ↓ | ↓ |
19 | ↓ | ↓ | ↓ | ↓ |
20-21 | ↓ | ↓ | ↓ | ↓ |
NOTE: Taketracker 0.9e's documentation does not list the Row Delay command (EEx) as supported, however this test passed correctly Row Delay worked correctly.
In Protracker 2.x series executing a Volume Slide command (Axx) in the same row as a Row Delay command (EEx) is completed smoothly, as if additional rows had been inserted containing the Volume Slide command.
Pattern 0 tests that a row skip occurs when combining Row Delay with Pattern Break commands.
Row | Note |
---|---|
00 | Volume Slide ↓ starts, there is also a Row Delay Command but should not affect Volume Slide. |
01-05 | Volume Slide ↓ continues as normal (as if Row Delay Command did not exist). |
06 | Volume Slide ↓ continues as normal even with another Row Delay Command. |
07-09 | Volume Slide ↓ continues as normal (as if Row Delay Command did not exist). |
10 | |
12 | Volume Slide ↑ starts, but there is also a Row Delay Command. |
13-18 | Volume Slide ↑ continues as normal (as if Row Delay Command did not exist). |
19 | Volume Slide ↑ continues as normal even with another Row Delay Command. |
20-21 | Volume Slide ↑ continues as normal (as if Row Delay Command did not exist). |
The Volume Slide Down from Rows 00 to 09 should be continuous and a smooth transition, same for the Volume Slide Up on Rows 12 to 21. The Row Delay should not interfere with the Volume Slide.
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT* |
00 | ↓ | ↓ | ↓ | ↓ |
1-5 | ↓ | ↓ | ↓ | ↓ |
6 | ↓ | ↓ | ↓ | ↓ |
7-9 | ↓ | ↓ | ↓ | ↓ |
12 | ↑ | ↑ | ↑ | ↑ |
13-18 | ↑ | ↑ | ↑ | ↑ |
19 | ↑ | ↑ | ↑ | ↑ |
20-21 | ↑ | ↑ | ↑ | ↑ |
NOTE: Taketracker 0.9e's documentation does not list the Row Delay command (EEx) as supported, however this test passed correctly Row Delay worked correctly.
In Protracker 2.x series executing a Fine Pitch Bend command (E1x or E2x) in the same row as a Row Delay command (EEx) will occur multiple times - once for each Row to Delay, as if additional rows had been inserted containing the Fine Pitch Bend command.
Pattern 0 tests that a row skip occurs when combining Row Delay with Pattern Break commands.
Row | Note |
---|---|
00 | Pitch bend ↑ starts, there is also a Row Delay Command but should not affect Pitch Bend. |
01-05 | Pitch bend ↑ continues as normal (as if Row Delay Command did not exist). |
06 | Pitch bend ↑ continues as normal even with another Row Delay Command. |
07-09 | Pitch bend ↑ continues as normal (as if Row Delay Command did not exist). |
10 | |
12 | Pitch bend ↓ starts, but there is also a Row Delay Command. |
13-18 | Pitch bend ↓ continues as normal (as if Row Delay Command did not exist). |
19 | Pitch bend ↓ continues as normal even with another Row Delay Command. |
20-21 | Pitch bend ↓ continues as normal (as if Row Delay Command did not exist). |
The Pitch Bend Up from Rows 00 to 09 should be continuous and a smoothish transition, albeit stepped as the Pitch Bend only occurs on Tick 0, same for the Pitch Bend Down on Rows 12 to 21. The Row Delay should not interfere with the Pitch Bend.
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT* |
00 | ↑ | ↑ | ↑- | * |
1-5 | ↑ | ↑ | ↑ | * |
6 | ↑ | ↑ | ↑- | * |
7-9 | ↑ | ↑ | ↑ | * |
12 | ↓ | ↓ | ↓- | * |
13-18 | ↓ | ↓ | ↓ | * |
19 | ↓ | ↓ | ↓- | * |
20-21 | ↓ | ↓ | ↓ | * |
-Fasttracker 2 only applied the Fine Pitch Bend once on the first Row with the Row Delay Command (EEx), so if EE6 is used 5 Fine Pitch Bend commands are effectively ignored when compared to Protracker 2.3a.
NOTE: Taketracker 0.9e's documentation says it supports Fine Pitch Bend (E1x is listed twice, so assume its a typo for E2x) but does not say it supports the Row Delay command (EEx). However it appears that Taketracker does support the Row Delay command (EEx) but NOT Fine Pitch Bend (E1x or E2x). So the test fails.
In Protracker 2.x series executing a Fine Volume Slide command (EAx or EBx) in the same row as a Row Delay command (EEx) will occur multiple times - once for each Row to Delay, as if additional rows had been inserted containing the Fine Volume Slide command.
Pattern 0 tests that a row skip occurs when combining Row Delay with Pattern Break commands.
Row | Note |
---|---|
00 | Volume Slide ↑ starts, there is also a Row Delay Command but should not affect Volume Slide. |
01-05 | Volume Slide ↑ continues as normal (as if Row Delay Command did not exist). |
06 | Volume Slide ↑ continues as normal even with another Row Delay Command. |
07-09 | Volume Slide ↑ continues as normal (as if Row Delay Command did not exist). |
10 | |
12 | Volume Slide ↓ starts, but there is also a Row Delay Command. |
13-18 | Volume Slide ↓ continues as normal (as if Row Delay Command did not exist). |
19 | Volume Slide ↓ continues as normal even with another Row Delay Command. |
20-21 | Volume Slide ↓ continues as normal (as if Row Delay Command did not exist). |
The Fine Volume Slide down from Rows 00 to 09 should be continuous and a smoothish transition, albeit stepped as the Fine Volume Slide only occurs on Tick 0, same for the Fine Volume Slide up on Rows 12 to 21. The Row Delay should not interfere with the Volume Slide.
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
00 | ↓ | ↓ | ↓- | ↓- |
1-5 | ↓ | ↓ | ↓ | ↓ |
6 | ↓ | ↓ | ↓- | ↓- |
7-9 | ↓ | ↓ | ↓ | ↓ |
12 | ↑ | ↑ | ↑- | ↑- |
13-18 | ↑ | ↑ | ↑ | ↑ |
19 | ↑ | ↑ | ↑- | ↑- |
20-21 | ↑ | ↑ | ↑ | ↑ |
-Fasttracker 2 only applied the Fine Volume Slide once on the first Row with the Row Delay Command (EEx), so if EE6 is used 5 Fine Volume Slide commands are effectively ignored when compared to Protracker 2.3a.
In Protracker 2.x series executing a Pattern Break command (Dxx) in the same row as a Row Delay command (EEx) causes the Pattern Break to add one row on (Dxx +1). This can even cause an entire pattern to be skipped.
Pattern 0 tests that a row skip occurs when combining Row Delay with Pattern Break commands.
Row | Note |
---|---|
00 | One |
01 | Row delay then pattern break |
Pattern 1 tests that a pattern skip occurs when combining Row Delay with Pattern Break to the last row of a pattern.
Row | Note |
---|---|
10 | BUG (but is never heard) |
11 | Row skipped |
13 | Row delay then pattern break |
Pattern 2 is skipped entirely because of Pattern 1 Row 13 commands.
Row | Note |
---|---|
ALL | BUG (but is never heard) |
Pattern 3
Row | Note |
---|---|
00 | Pattern skipped |
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT* |
00 | One | One | One | One |
01 | Row delay then pattern break | Row delay then pattern break | Row delay then pattern break | Row delay then pattern break |
Pattern 1 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT* |
10 | N/A | N/A | N/A | BUG |
11 | Row skipped | Row skipped | Row skipped | Row skipped |
13 | Row delay then pattern break | Row delay then pattern break | Row delay then pattern break | Row delay then pattern break |
Pattern 3 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT* |
00 | Pattern skipped | Pattern skipped | Pattern skipped |
NOTE: Taketracker 0.9e's documentation does not say it supports the Row Delay command (EEx) but it does. Its Pattern Break command (Dxx) does no jump to the desired row, it behaves as originally defined in DOC Soundtracker 2.2 which is to go to row 0 of next pattern, no row skip occurs.
Mahony and Kaktus changed the way samples in Soundtracker are looped when they created Noisetracker. Protracker inherits their sample looping behaviour.
In Protracker 2.x for Pattern 0 you will hear, where * means this part of the sample is looped “One (Five*)” means the word “One” is heard followed by “Five” which is repeated endlessly:
Row | Note | Reason |
---|---|---|
00 | Loop Quirk (Loop*) | Sample loop start is zero, sample quirk |
32 | (Loop*) | Sample loops start is not zero, play as expected. |
48 | (Four*) | Switch to sample Four at end of current sample loop. |
52 | (Five*) | Switch to sample Five at end of current sample loop, notice beginning of sample is ignored (The “One” is not heard). |
56 | Silence | Switched to non-looped sample, so silence. |
60 | (Four*) | Switch to sample Four. |
Pattern 1:
Row | Note | Reason |
---|---|---|
00 | Loop Quirk | Sample Quirk heard, but sample not looped due to next row |
01 | (Four*) | switch to sample Four |
24 | Loop Quirk | Sample Quirk heard, but sample not looped due to next row |
25 | Silence | switch to non-looped sample, so silence |
40 | Three | Play a non-looped sample without instrument number (6 has already been set) |
52 | (Loop*) | Switch to looped sample, Quirk does not play due to only playing the looped part. |
Pattern 2:
Row | Note | Reason |
---|---|---|
00 | One (Five*) | Expected sample behaviour. |
10 | Silence | Switched to non-looped sample so silence is heard. |
20 | (Five*) | Switch back to looped sample, playing from loop points. |
30 | One (Five*) | Playing note without instrument number, expected behaviour. |
Results | ||||
---|---|---|---|---|
Pattern 0 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
00 | Loop Quirk (Loop*) | Loop Quirk (Loop*) | (Loop*) | (Loop*) |
32 | (Loop*) | (Loop*) | (Loop*) | (Loop*) |
48 | (Four*) | – | – | – |
52 | (Five*) | – | – | – |
56 | silence | – | – | – |
60 | (Four*) | – | – | – |
Pattern 1 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
00 | Loop Quirk | Loop Quirk (Loop*) | (Loop*) | (Loop*) |
01 | (Four*) | – | – | – |
24 | Loop Quirk | Loop Quirk (Loop*) | (Loop*) | (Loop*) |
25 | silence | – | – | – |
40 | Three | Three | Three | (Loop*) |
52 | (Loop*) | – | – | – |
Pattern 2 | ||||
Row | Protracker 2.3a | Protracker 3.15 | FT2 | TT |
00 | One (Five*) | One (Five*) | One (Five*) | One (Five*) |
10 | silence | – | – | – |
20 | (Five*) | – | – | – |
30 | One (Five*) | One (Five*) | One (Five*) | One (Five*) |