Это оригинальный модуль Pro Tracker v1.1 – музыкальный AY редактор для ZX Spectrum, автор Николай Худенцов (Nick).
Согласно авторской документации, позиционируется как преемник знаменитого Sound Tracker. Возможно, в 1995 этого звучало слишком самонадеянно, но последующие версии Pro Tracker 2 и 3 всё-таки сумели затмить музыкальные редакторы конкурентов: дорогу осилит идущий.
К возможностям Sound Tracker были добавлены команды изменения громкости и скорости проигрывания, позиция для зацикливания, настраиваемый размер каждого паттерна. Появилась авторская строка, которая впервые сохранялась в теле модуля (а не в плеере), что особенно ценно для правильного распространения музыки, ведь до этого по рукам ходило большое количество модулей Sound Tracker, о которой многие в credits писали "спасибо неизвестному автору".
Но по-настоящему революционным оказался подход к сохранению модулей. Если Sound Tracker Pro убирал из сохраняемого дампа памяти редактора неиспользуемые паттерны и применял компрессию (что давало компактный результат, но приводило к потери случайно исключённых из списка проигрывания паттернов), то версии Pro Tracker 1–3 перед сохранением выполняют компиляцию, которая сама по себе работает не хуже компрессора. Именно поэтому в коллекциях дисков и музыки можно часто встретить по два варианта одного и того же модуля Pro Tracker (любая версия), которые отличаются только размером файла: вариант с большим размером записан на диск из меню сохранения модуля (сохраняется даже то, что не используется, а значит не влияет на звучание), а с меньшим размером – модуль, сохранённый с плеером или без из меню компиляции (в этом случае внутри нет ничего лишнего).
Структуру модуля можно назвать традиционной, поэтому если с пониманием того, что описано далее, возникнут вопросы, можно обратиться к описанию форматов предшественников.
Смещение | Размер | Обозначение | Описание |
---|---|---|---|
+0 | 1 | tempo | Скорость проигрывания. |
+1 | 1 | numpos | Количество позиций |
+2 | 1 | lppos | Позиция для зацикливания |
+3 | 32 | samptrs | Указатели на сэмплы (16 штук, если сэмпла с таким номером нет – 0x0000, 0-й сэмпл всегда 0x0000). |
+35 | 32 | ornptrs | Указатели на орнаменты (16 штук, если орнамента с таким номером нет – 0x0000). |
+67 | 2 | patsptr | Указатель на patptrs. |
+69 | 30 | title | Авторская строка. |
+99 | numpos+1 | poslist | Список позиций – номеров паттернов в порядке проигрывания (один байт на позицию) с 0xFF на конце. |
+patsptr | patptrs | Список указателей паттернов (по три указателя на каждый канал паттерна) с 0x0000 на конце, maxpat – максимальный номера паттерна в списке позиций. | |
? | patsdata | Данные паттернов (описаны ниже). | |
? | samsdata | Данные сэмплов (описаны ниже). | |
? | ornsdata | Данные орнаментов (описаны ниже). |
Паттерн хранится в виде трёх указателей на данные каналов паттерна – последовательности байт с 0xFF на конце.
Байт канала | Описание |
---|---|
0x00..0x5F | Нота от C-1 до B-8. Выход. |
0x60..0x6F | Сэмпл от 0 до 15. |
0x70..0x7F | Орнамент от 0 до 15. |
0x80 | R--. Выход. |
0x81 | Отключение огибающих. |
0x82..0x8F | Включение огибающих типа от 1 до 14. Следующие 2 байта – период огибающих. |
0x90 | Выход. |
0x91..0xA0 | Скорость от 0 до 15. |
0xA1..0xB0 | Громкость от 0 до 15. |
0xB1..0xF0 | Количество строк от 0 до 63 для пропуска с этого момента (первоначально 0). |
0xF1..0xFE | Игнорируются. |
0xFF | Конец данных паттерна. |
Сэмплы могут быть длиной до 64 тиков, на один тик – 3 байта.
Смещение | Описание |
---|---|
+0 | Длина от 1 до 64. |
+1 | Цикл от 0 до Длина-1. |
+2 | 3 байта тика: +0 Биты 0-3 – амплитуда, Биты 4-7 – старший байт отклонения тона; +1 Биты 0-4 – период шума (если включён маской), Бит 5 – знак отклонения тона (1 – минус), Бит 6 – маска тона, Бит 7 – маска шума; +2 младший байт отклонения. |
+5 | Следующие тики по 3 байта. |
Орнаменты могут быть длиной до 64 тиков, на один тик – 1 байт (отклонение в полутонах от -63 до +63), но не имеют собственного тела цикла (зацикливаются синхронно с сэмплом). Редактор не сохраняет в модуль все 64 тика, а только ту часть, которая понадобится для проигрывания.