Это оригинальный модуль Pro Tracker v3.x – музыкальный AY редактор для ZX Spectrum. Проект, начатый Николаем Худенцовым (Nick), и в последствии дорабатываемый в течение многих лет энтузиастами.
История началась с Pro Tracker 1.1 (см. описание форматов PT1 и PT2).
Ключевые изменения произошли в сэмпле: для огибающих добавлены маски и смещения частоты; для тона, шума и амплитуды реализованы накопления. Также в формат добавлена информация о версии, номере таблицы нот, авторская строка разделена на две части: название и автор. Для версии PT 3.7 и далее Дмитрий Быстров (Alone Coder) добавил в формат поддержку Turbo Sound (TS): половина паттернов играется через первый чип, вторая половина – через второй.
В Pro Tracker с первых версий таблицы нот и громкостей вшиты в родные плееры, а не рассчитываются по формуле или алгоритмически. Это расточительно и не универсально, так как один и тот же плеер нельзя использовать с разными модулями без подмены табличек. Этот недостаток устранён в плеерах для ZX Spectrum из Vortex Tracker II, в которых по версии модуля вычисляются все таблички, и при этом плееры ещё и компактнее оригинальных.
Одно из слабых мест нового формата – это нотные таблицы. В соответствующем поле хранится номер таблицы для данного модуля: число от 0 до 3. Безупречных таблиц в ранних версиях Pro Tracker нет.
Табличка 1 (внутреннее имя "SoundTracker") существует без изменений с первых версий PT 1.xx. Она переделана из таблички Sound Tracker. Но даже в ней допущена ошибка. По сравнению с идеальной шкалой для частоты музыкального сопроцессора 1773400 Гц (фирменный ZX Spectrum) сдвинута почти ровно на один тон вниз. Кроме того, 24-я нота фальшивит (в редакторе обозначена как B-2, из-за сдвига в один тон должна звучать как A-2).
Остальные таблички менялись или появлялись по мере развития проекта. Даже несмотря на то, что в формате предусмотрен номер версии редактора, в котором создан модуль, для табличек 0, 2 и 3 возникает некоторая неопределённость.
Переломным моментом стало появления Pro Tracker 3.4r. В нём появились две новые таблички – 2 и 3. Эта же версия редактора и определила традицию с названиями табличек.
Табличка 0 с названием "ProTracker" не подходит ни под одну стандартную частоту. Однозначно определяется не для всех версий, указанных в модуле. Например, если в модуле версия 3.3 или ниже, используется старый вариант таблички; а 3.5 и выше – модифицированный. Но с версией 3.4 возникает коллизия: если модуль написан в версии 3.4r, нужно использовать старый вариант, если во всех остальных версиях 3.4 – модифицированный. Мне непонятно, по какой причине после столь серьёзных изменений номер подверсии PT 3.4 не был изменён на 3.5. Но очевидно, что это создало в итоге серьёзную проблему. Если удалось определить, что модуль написан в версии 3.4r, я бы рекомендовал поменять номер версии в заголовке с 3.4 на 3.3, чтобы хотя бы для этого конкретного модуля эту коллизию разрешить.
Табличка 2 появилась в PT 3.4r под названием "ASMorPSC". Является модификацией таблички ASM (PSC) без первых двух нот и в точности совпадает с рядом для частоты 1773400 Гц. К сожалению, такая полезная табличка в других версиях 3.4 была заменена на табличку для частоты 1750000 Гц (и также идеально рассчитанную). Тем самым была порождена коллизия, аналогичная описанной выше, метод её разрешения для конкретного модуля можно порекомендовать такой же.
Табличка 3 также появилась в PT 3.4r под названием "RealSound". Табличка является модификацией таблички 0 и смещена относительно неё на полтона вниз. Соответственно, также не подходит ни под одну стандартную частоту AY. В других версиях 3.4 эта табличка изменилась, то есть возникла такая же коллизия версий, как и с табличками 0 и 2.
Таким образом, в современных PT3-редакторах интерес представляют только две таблички – 1 (для частоты 1,7734 МГц со сдвижкой на 1 тон) и 2 (для частоты 1,75 МГц).
Коллизию между версиями Pro Tracker 3.4r и остальными Pro Tracker 3.4x программно разрешить невозможно. Поэтому такие плееры, как Ay_Emul и используемые при экспорте из Vortex Tracker II, для модулей версий 3.4 и далее используют новые нотные таблички, а для модулей до версии 3.4 – старые. Поэтому если вас на руках есть модули, использующие таблички 0, 2 или 3, и о которых точно известно, что они написаны в версии 3.4r, то наиболее верные пути – либо исправить в заголовке версию 3.4 на 3.3, либо играть их родным плеером Pro Tracker 3.4r.
В PT3 применён не очень рациональный способ регулирования громкости: с помощью большой таблички экспериментальных (или вычисленных по формуле) значений 16-ти громкостей каждой из 16-ти амплитуд, несмотря на то что в PT3 не предусмотрено возможности установки громкости 0.
Табличка занимает 256 байт и при этом не даёт никаких преимуществ, т.к. фиксирована, т.е. не учитывает то, что музыкальные сопроцессоры на разных компьютерах подключены по-разному, что AY-3-8910/12 и YM2149F отличаются в том числе и в аналоговой части (а в ней могут быть отличия даже у одинаковых по маркировке чипов).
Кроме того, эти отличия даже нет особого смысла учитывать: их много, а уровней в регистрах амплитуды всего 16. Верный подход в таких ограниченных условиях реализован в редакторах PSM, STP, SQT и GTR, в которых, исходя из того, что выходная характеристика близка к логарифмической, просто вычитают из амплитуды сэмпла величину (15-громкость).
В Pro Tracker начиная с 1.xx используется так называемая симметричная табличка громкости, которую можно рассчитать по формуле Amp(i,j)=(i*j+7) div 15.
В версии 3.1x-3.4x используется немного другая табличка, начиная с версии 3.5 вернулась прежняя. Благодаря этому, по версии модуля можно однозначно определить, какую из двух табличек громкости использовать.
В формат заложены возможности, которые не поддержаны в силу разных причин в родном редакторе на ZX Spectrum, но при этом поддержаны в его же плеере. Конечно, по мере развития проекта, часть этих возможностей периодически задействуется. Но в этом смысле дальше всего продвинулся Vortex Tracker II, так как он является кроссплатформенным, поэтому его не стесняют некоторые ограничения родной для PT3 платформы ZX Spectrum.
Vortex Tracker II в рамках возможностей формата PT3 и его родных плееров раздвигает ограничения, заложенные в редакторах на ZX Spectrum. В Vortex Tracker II разрешается:
Поэтому перед тем, как пытаться загружать модуль Vortex Tracker II в редактор на ZX Spectrum, убедитесь, что он вписывается в его ограничения (которые иногда меняются от версии к версии).
Структура модуля хорошо описана в файле ptdoc.p из комплекта Pro Tracker 3.72 от Дмитрия Быстрова. Предлагаю ознакомиться со слегка отредактированными выдержками из этого документа.
---------------------------cut here-------------------
Расширение .m или .pt3.
Указаны смещения до областей в модуле и их длина в байтах (десятичные числа).
+0 (13) | "ProTracker 3." – идентификационная строка. В модулях от Vortex Tracker отсутствует! | ||
+13 (17) | "7" (или "6","5","4", или даже "3" ) – номер подверсии. Следует заметить, что для модулей PTv3.4x и ниже используется другая, "несимметричная" таблица громкости, а в модулях PTv3.3x используется альтернативная частотная таблица "Pro Tracker", не совпадающая с одноимённой современной! | ||
+14 (16) | " compilation of " (необязательное – любой текст этой длины). | ||
+30 (32) | название модуля (ASCII, lat, неиспользованные символы забиты пробелами). | ||
+62 (4) | " by " (необязательное – любые 4 символа) | ||
+66 (32) | имя автора (ASCII, lat, неиспользованные символы забиты пробелами). | ||
(то есть первые 98 байт модуля образуют соответствующую строку) | |||
+98 (1) | Для обычных AY музонов: код #20. Если используется TS: число паттернов N (в текущей версии должно быть #30). Паттерны первого AY нумеруются N-1,N-2,... Паттерны второго AY нумеруются 0,1,2,... В списке позиций стоят паттерны N-1,N-2,... | ||
+99 (1) | номер частотной таблицы: 0=Pro Tracker (она же 1625000), 1=Sound Tracker, 2=1750000 (другое название, не соответствующее содержанию – ASM or PSC), 3=RealSound (она же 1625000+, плохая попытка передвинуть табл. 0 под 1.75MHz). Табличка занимает 192 байта и содержит значения делителей частоты для 96 нот, начиная с C-1 (ДО первой октавы). Делитель частоты – значение, помещаемое в соответствующие регистры AY. Младшие байты (здесь и ниже, за одним исключением, которое будет указано) хранятся первыми. Компилятор PT3 (текущие версии PT3 собираются без компилятора) сохраняет таблицу, соответствующую модулю, в тело плейера по относительному адресу 512. Таблицу громкости он сохраняет в том же теле плейера по относительному адресу 256. | ||
+100 (1) | значение темпа. | ||
+101 (1) | song end (1=в модуле всего одна позиция) – в плейере не используется. | ||
+102 (1) | song loop (0=зацикливание на начало). | ||
+103 (2) | Psa_chn=смещение от начала модуля до таблицы паттернов. | ||
+105 (32*2) | смещения от начала модуля до сэмплов, начиная с нулевого сэмпла. По два байта на сэмпл. Нулевой сэмпл в текущих версиях редактора не используется. Для всех неиспользованных сэмплов смещение равно нулю. | ||
+169 (16*2) | смещения от начала модуля до орнаментов, начиная с нулевого. По два байта на орнамент. Нулевой орнамент – это отсутствие орнамента, поэтому данные этого орнамента (см. ниже) содержат 0,1,0 (можно использовать этот орнамент по своему усмотрению, НО тогда в сонге нельзя будет использовать сэмплы без орнаментов). Для всех неиспользованных орнаментов смещение равно нулю. | ||
+201 (?) | список позиций (ордер). Содержит номера паттернов (0...84), умноженные на 3. Таблица завершается кодом #ff. Pro Tracker v3.3x-v3.5x не поддерживает больше 42 паттернов. Pro Tracker v3.6x не поддерживает больше 46 паттернов. Pro Tracker v3.69x, v3.7x не поддерживает больше 48 паттернов. | ||
+Psa_chn (?*6) | указатель паттернов. Содержит для каждого из имеющихся паттернов смещения: ++0 (2) до блока данных канала (трека) A ++2 (2) до блока данных канала (трека) B ++4 (2) до блока данных канала (трека) C. Данные по смещению шума (отдельная колонка в редакторе) компилируются в канал B. | ||
+? (?*?) | блоки данных каналов, то есть треки. |
Трек содержит следующие данные:
================================================================
NB: параметры эффектов (#0x) лежат не сразу после кода номера эффекта, а ПОСЛЕ КОНЦА СТРОКИ!!! Если используется несколько эффектов на одну ноту (на самом деле так не бывает), то сначала лежат параметры последнего эффекта, потом предпоследнего и так далее...
================================================================
+? (?*(?*4+2)) | – сэмплы. ++0 (1) – loop ++1 (1) – end (1=сэмпл из одной строчки) ++2 (?*4) – данные: +++0 (1) sv +- N4 N3 N2 N1 N0 Em +++1 (1) Nm ts ns Tm V3 V2 V1 V0 sv=1 – признак съезжания громкости, +- =1 соответствует её увеличению; N4–0 – частота шума ИЛИ смещение огибающей (зависит от наличия маски шума): смещение огибающей 0–15 – вниз, 16–31 – вверх (N4 интерпретируется как знак); V3–0 – громкость; Tn, Nm, Em - маски тона, шума и огибающей соотв., причём если маска равна единице, то соответствующий элемент звука выключен; ts, ns=1 – признаки того, что текущее смещение тона или шума/огибающей будет запомнено. +++2 (2) смещение периода тона (положительное – вверх, отрицательное – вниз). |
+? (?*(?+2)) | – орнаменты. ++0 (1) – loop ++1 (1) – end (1=орнамент из одной строчки) ++2 (?) – данные: смещения в полутонах (0=нет смещения, положительное смещение – вверх, отрицательное – вниз). |
---------------------------cut here-------------------