PT1

Введение

Это оригинальный модуль 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 (любая версия), которые отличаются только размером файла: вариант с большим размером записан на диск из меню сохранения модуля (сохраняется даже то, что не используется, а значит не влияет на звучание), а с меньшим размером – модуль, сохранённый с плеером или без из меню компиляции (в этом случае внутри нет ничего лишнего).

Структура модуля

Структуру модуля можно назвать традиционной, поэтому если с пониманием того, что описано далее, возникнут вопросы, можно обратиться к описанию форматов предшественников.

СмещениеРазмерОбозначениеОписание
+01tempoСкорость проигрывания.
+11numposКоличество позиций
+21lpposПозиция для зацикливания
+332samptrsУказатели на сэмплы (16 штук, если сэмпла с таким номером нет – 0x0000, 0-й сэмпл всегда 0x0000).
+3532ornptrsУказатели на орнаменты (16 штук, если орнамента с таким номером нет – 0x0000).
+672patsptrУказатель на patptrs.
+6930titleАвторская строка.
+99numpos+1poslistСписок позиций – номеров паттернов в порядке проигрывания (один байт на позицию) с 0xFF на конце.
+patsptr(maxpat+1)*6+2patptrsСписок указателей паттернов (по три указателя на каждый канал паттерна) с 0x0000 на конце, maxpat – максимальный номера паттерна в списке позиций.
+patptrs[]?patsdataДанные паттернов (описаны ниже).
+samptrs[]?samsdataДанные сэмплов (описаны ниже).
+orntrs[]?ornsdataДанные орнаментов (описаны ниже).

Данные паттернов

Паттерн хранится в виде трёх указателей на данные каналов паттерна – последовательности байт с 0xFF на конце.

Байт каналаОписание
0x00..0x5FНота от C-1 до B-8. Выход.
0x60..0x6FСэмпл от 0 до 15.
0x70..0x7FОрнамент от 0 до 15.
0x80R--. Выход.
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.
+23 байта тика:
+0 Биты 0-3 – амплитуда, Биты 4-7 – старший байт отклонения тона;
+1 Биты 0-4 – период шума (если включён маской), Бит 5 – знак отклонения тона (1 – минус), Бит 6 – маска тона, Бит 7 – маска шума;
+2 младший байт отклонения.
+5Следующие тики по 3 байта.

Данные орнаментов

Орнаменты могут быть длиной до 64 тиков, на один тик – 1 байт (отклонение в полутонах от -63 до +63), но не имеют собственного тела цикла (зацикливаются синхронно с сэмплом). Редактор не сохраняет в модуль все 64 тика, а только ту часть, которая понадобится для проигрывания.