FTC

Общие замечания

Это компилированные модули Fast Tracker, проект Сергея Матвеева (Orion), доработанный с версии 1.07 Александром Плужниковым (Sand).

В формат были заложены возможности, позволяющие при гипотетическом импорте проглотить практически без потерь модули таких различных семейств трекеров, как ASC–PSC и ST–PT3. Несмотря на это, удалось найти всего несколько десятков оригинальных модулей (т.е. не являющихся конверсиями с других форматов).

Поскольку идеи не оригинальны, формат какие-то моменты улучшил, какие-то ухудшил, а какие-то повторил без изменений (вплоть до того, что унаследовал и известные проблемы).

FTC не повторил ошибки PSC, и регулирует в сэмпле, как и положено, амплитуду, а не громкость канала.

Однако вариант портаменто реализован не такой, как в ASC (это идеал, который ни один трекер больше не повторил), а такой, как в PT3 (параметр команды не количество тиков, а шаг изменения тона). Правда сделано это уже без ошибок, допущенных в PT3.

А вот проблемные таблички тона и громкости просто скопированы из проекта PT 1.xx–3.xx без изменений, а это фальшивые ноты и нерациональный способ управления громкостью канала.

FTC (в отличие от ASC) не позволяет указать период огибающей без типа. Однако (в отличие от PT3), один и тот же тип огибающей не пишется в R13 (то есть переинициализировать огибающую не получится). То есть PT3 и FTC допустили почти (т.е. зеркально) одну и ту же ошибку.

FTC отказался от части не особо часто используемых возможностей и спец. команд как ASC, так и PT2 (не говоря уж о PT3), но он тем не менее остался наиболее навороченным из всех известных трекеров. Поэтому причину низкой популярности, возможно, нужно искать в чём-то другом.

Улучшения в версиях 1.07 и 1.08

Начиная с версии 1.07 проект избавился от неудачной таблички нот. Вместо неё у музыканта (как и в PT3) появился выбор из двух вариантов. Но в отличие от PT3, это выбор из двух корректных вариантов: оригинальная табличка из Sound Traker для частоты 1773400 Гц (фирменный ZX Spectrum) и собственная для 1750000 Гц (отечественные клоны).

А в версии 1.08 редактор был избавлен от ещё одного недостатка: отсутствие переинициализации огибающей одного типа. И не просто избавлен – появился выбор между прежним поведением и новым через совершенно новый эффект, ни в одном другом трекере не присутствующий. Запускается эффект спец. командой "Full env+tone retrig".

Задача, которую решает новый эффект при одновременном выводе тона и огибающих, – сделать так, чтобы период огибающей и период тона всегда начинались в одном и том же месте: почти одновременно (c фиксированной задержкой). У тона нет переинициализации, поэтому, когда в тоновые регистры пишется новое значение периода, сперва "дотикивает" предыдущий (сколько осталось до нового значения, случайное число), и только после этого начинает тикать с нуля новый. Но если записать 0 в тоновые регистры, "дотикивание" заканчивается уже на следующем такте AY. После этого можно писать нужное значение тона, отсчёт сразу пойдёт с нуля, то есть с начала.

То есть если записать тип огибающей в R13, потом 0 в тон, подождать хотя бы 1 такт AY, и записать уже нужный тон, то и получится ретриг. При ретриге тон+огибающая всегда будет звучать одинаково. А без ретрига (как в других редакторах) расставленная по разным строкам паттерна одна и та же нота с тем же периодом огибающей будет звучать то погромче, то потише, то вообще еле слышно.

Формат модуля

В формате много "лишних" данных с точки зрения плеера. Поскольку с других точек зрения я формат FTC не изучал, о части таких данных сделаны лишь предположения.

СмещениеРазмерОбозначениеОписание
+08PretitleСтрока "Module: ".
+842TitleНазвание песни.
+501ToneTableДля версий до 1.07 символ ";" (таблица ST от PT 1.xx–3.xx), иначе номер таблицы нот (1 – оригинальная ST для 1,7734 МГц; 2 – собственная FT для 1,75 МГц).
+5118VersionСтрока "Fast Tracker v1.00", версия может быть от 1.00 до 1.08.
+691DelayСкорость проигрывания.
+701LoopPosНомер позиции для зацикливания.
+714UnknownНеизвестно (в плеере не используется).
+752PatsPtrУказатель на паттерны.
+772SamTtlsPtrУказатель на названия сэмплов (в плеере не используется).
+792OrnTtlsPtrУказатель на названия орнаментов (в плеере не используется).
+811UnknownНеизвестно (в плеере не используется).
+8264SamPtrsУказатели на 32 сэмпла (описан ниже).
+14666OrnPtrsУказатели на 33 орнамента (описан ниже).
+212?PosListСписок позиций (описан ниже).
+SamTtlsPtr?SamTtlsСжатые имена сэмплов (в плеере не используются).
+OrnTtlsPtr?OrnTtlsСжатые имена орнаментов (в плеере не используются).
+PatsPtr?ChanPatPtrsНа каждый паттерн по три указателя на описатели каналов A, B, C; 0xFFFF – конец списка.
+ChanPatPtrs[]?ChanPatsОписатели каналов паттернов (описаны ниже).
+SamPtrs[]?SamplesСписок сэмплов (с разделительным байтом 0, который в плеере не используется).
+OrnPtrs[]?OrnamentsСписок орнаментов (с разделительным байтом 0 и некоторыми другими элементами, которые в плеере не используются).

Описатель канала паттерна

Как и в других трекерах, является последовательностью байтов с 0xFF на конце (который может и отсутствовать).

БайтыОписание
0x00..0x1FУстановить сэмпл (0..31).
0x20..0x2FУстановить громкость (0..15).
0x30Выключить звук. Выйти. Пропустить 0 строк.
0x31..0x3E, EnvPL, EnvPHВключить огибающие (тип 1..14). Установить период огибающих в EnvP. Плеер записывает указанный тип огибающей в R13 только в том случае, если он отличается от предыдущего значения.
0x3FОтключить огибающие.
0x40..0x5FВыйти. Пропустить 0..31 строк.
0x60..0xCBУстановить ноту (0..107, в реальности плеер обрезает верхнюю границу результата после всех добавок смещений до 95). Выйти. Пропустить 0 строк.
0xCC..0xECУстановить орнамент (0..32).
0xED, TSlStpL, TSlStpHЗапустить слайд с шагом TSlStp на прерывание (двухбайтовое число со знаком).
0xEE, TSlStpЗапустить портаменто от предыдущей ноты с шагом TSlStp (однобайтовое число без знака).
0xEF, ValДо версии 1.08 диапазон параметра Val – 0..255: установить период шума (биты 7–5 игнорируются). Начиная с версии 1.08, для Val=0..31: установить период шума; для Val=254 запустить эффект "Full env+tone retrig", остальные значения Val отсеиваются компилятором.
0xF0..0xFE, DelayУстановить скорость проигрывания.

Сэмпл

БайтыОписание
+0Номер тика для зацикливания.
+1Длина сэмпла в тиках, уменьшенная на 1.
+2Список тиков по 5 байт. Каждый тик:
+0 Бит 7: 1, если прибавка к периоду шума накапливается. Бит 6: маска шума. Биты 5–0 – прибавка к периоду шума.
+1 Младший байт прибавки к периоду тона.
+2 Бит 7: 1, если прибавка к периоду тона накапливается. Бит 6: маска тона. Биты 5–0 – старшие биты прибавки к периоду тона (тоновый регистр 12-битный, поэтому получается 12-битное число со знаком, остальные биты не важны).
+3 Бит 7: 1, если прибавка к периоду огибающих накапливается. Бит 6: 1, если огибающие разрешены. Бит 5: 1, если включено изменение амплитуды сэмпла на 1. Бит 4: 1, если это уменьшение амплитуды сэмпла, 0 – увеличение. Биты 3–0 – амплитуда.
+4 Прибавка к периоду огибающих (число со знаком).

Орнамент

БайтыОписание
+0Номер тика для зацикливания.
+1Длина орнамента в тиках, уменьшенная на 1.
+2Список тиков по 2 байта. Каждый тик:
+0 Бит 7: 1, если прибавка к периоду шума накапливается. Бит 6: 1, если прибавка к ноте накапливается. Биты 5–0 – прибавка к периоду шума.
+1 Прибавка к номеру ноты в полутонах.

Список позиций

По два байта на позицию: номер паттерна и транспозиция (число со знаком). Список позиций оканчивается на 0xFF.