pt3 module format (updated)

9 weergaven
Naar het eerste ongelezen bericht

Dima Bystrov

ongelezen,
10 nov. 2002 14:01:4310-11-2002
aan
Hello All!

Формат модуля Pro Tracker v3.x

Указаны смещения до областей в модуле и их длина в байтах
(десятичные числа).

+0 (13) "ProTracker 3." - идентификационная строка.
+13 (17) "5" (или "4", или даже "3" ) - номер подверсии.
Следует заметить, что для модулей PTv3.4x и ниже используется
другая, "несимметричная" таблица громкости, а в модулях PTv3.3x
используется альтернативная частотная таблица "Pro Tracker", не
совпадающая с одноименной современной!
+14 (16) " compilation of "
+30 (32) название модуля (ASCII, lat, неиспользованные символы
забиты пробелами).
+62 (4) " by "
+66 (32) имя автора (ASCII, lat, неиспользованные символы забиты
пробелами).
+98 (1) один пробел.
(то есть первые 99 байт модуля образуют соответствующую строку)

+99 (1) номер частотной таблицы: 0=Pro Tracker, 1=Sound Tracker,
2=ASM or PSC, 3=RealSound. Табличка занимает 192 байта и содер-
жит значения периодов для 96 нот,начиная с C-1 (ДО первой окта-
вы). Период - значение, обратное частоте ноты, помещаемое в со-
ответствующие регистры AY. Младшие байты (здесь и ниже,за одним
исключением,которое будет указано) хранятся первыми. Компилятор
PT сохраняет таблицу, соответствующую модулю, в тело плейера по
относительному адресу 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 паттернов.
+Psa_chn (?*6) указатель паттернов. Содержит для каждого из име-
ющихся паттернов смещения:
++0 (2) до блока данных канала (трека) A
++2 (2) до блока данных канала (трека) B
++4 (2) до блока данных канала (трека) C.
Данные по смещению шума (отдельная колонка в редакторе) компи-
лируются в канал B.
+? (?*?) блоки данных каналов, то есть треки.

Трек содержит следующие данные:
================================================================
#00 - конец трека.
#01, delay, Lsl, Hsl - эффект Gliss(Slide) вверх или вниз. Delay
- время в пятидесятых долях секунды, по истечении которого к
периоду ноты будет прибавлена величина Lsl+256*Hsl. Смещение
накапливается плейером в соответствующей переменной и прибавля-
ется после формирования частоты ноты, т.е.сначала обрабатывает-
ся строчка орнамента, а уже потом...
#02, delay, Lmax, Hmax, Lsl, Hsl - эффект Tone Portamento вверх
или вниз.Delay - время в пятидесятых долях секунды,по истечении
которого к периоду ноты будет прибавлена величина Lsl+256*Hsl.
Lmax+256*Hmax - максимальное смещение (беззнаковое), после на-
копления которого следует прекратить Portamento.
#03, offset - sample offset. Сэмпл начинает играть не сначала.
#04, offset - ornament offset. Орнамент начинает играть не сна-
чала.
#05, YEStime, NOtime - vibrate. нота то звучит, то не звучит.
#08, delay, Lsl, Hsl - эффект slide envelope. К значению периода
огибающей время от времени прибавляется Lsl+256*Hsl.
#09, tempo - указание темпа (в прерываниях на строку). Стандарт-
ный плейер меньше tempo=3 не играет.
#1x, Henv, Lenv, smp*2 - изменить номер сэмпла и включить огиба-
ющую типа x-1 с периодом Lenv+256*Henv. При включении огибающей
она инициализируется, т.е. начинается новый период!
#20-#3f - указать смещение шума (бывает только в канале B)
#4x - указать орнамент номер x.
#50-#Af - указать высоту ноты и ЗАКОЧИТЬ анализ текущей строки
канала.
#B0 - выключить Envelope.
#B1, lines - не анализировать канал в течение lines строк.
(lines=1 соответствует одной строке)
#Bx, Henv, Lenv - то же, что #1x, но без сэмпла. То есть просто
включить огибающую типа x-1 с указанным периодом.
#Cv - указать громкость.(v=0 - пауза и ЗАКОЧИТЬ анализ строки.)
#D0 - ЗАКОЧИТЬ анализ строки.
#D1-#Ef - указать номер сэмпла.
#Fx, smp*2 - указать номер орнамента (x) и номер сэмпла.
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=нет смещения, поло-
жительное смещение - вверх, отрицательное - вниз).

жду дополнений!

Дополнения от 10.xi.02:
1. (Sergey Bulba): Таблица ASM or PSC не имеет отношения к соот-
ветствующим редакторам. Модули из этих редакторов следует импо-
ртировать с таблицей Sound Tracker. Таблица ASM or PSC рассчита-
на так,чтобы при тактовой частоте AY 1.7744 MHz ноты в редакторе
совпадали с одноименными нотами фортепиано. (Таблица Real Sound
- аналогично, но для 1.75 MHz.)
2. В модуле может использоваться и 0-й сэмпл, если в треке он
хранится вместе с орнаментом (можно нулевым). Итого 32 сэмпла.
3. Проверена информация по поводу Portamento, Loop и #B1.
4. Исправлена информация по поводу сэмплов.

P.S. 2SB: назовём-ка мы 0-й сэмпл буквой "W" :)

- Alone Coder [ZX-Guide] [ACEdit] [PT] [Chip] [STS] [AlCoNews] [ANSI] [8col]

Sergey Bulba

ongelezen,
11 nov. 2002 21:23:1211-11-2002
aan
Hello, Dima!
You wrote to All on Sun, 10 Nov 2002 22:01:43 +0300:

DB> +0 (13) "ProTracker 3." - идентификационная строка.
DB> +13 (17) "5" (или "4", или даже "3" ) - номер подверсии.
DB> Следует заметить, что для модулей PTv3.4x и ниже используется
DB> другая, "несимметричная" таблица громкости, а в модулях PTv3.3x
DB> используется альтернативная частотная таблица "Pro Tracker", не
DB> совпадающая с одноименной современной!

А также старая и новая табличка #2 отличаются _очень_ сильно, и, к
сожалению, заголовок тут мало помогает в выборе между старой и новой
таблицами, потому что часть ПроТрекеров 3.4x используют старую, а часть
3.4x - новую. Разница между этими таблицами особенно ощутима на SQT-файлах -
если на старой огибающие+тон звучат более менее приемлимо, то на новой -
какая-то какафония.

DB> +99 (1) номер частотной таблицы: 0=Pro Tracker, 1=Sound Tracker,
DB> 2=ASM or PSC, 3=RealSound.

ASM or PSC - довольно странная табличка, мало похожая на ASM (я особо
таблицы не сравнивал), но спервого взгляда - это не ASM. Himik в своем
конвертере использует эту таблицу начиная с третьей ноты - звучит похоже. Я
предпочитаю для модулей ASM и PSC использовать табличку Sound Tracker с
первого элемента.

Сейчас ещё раз внимательно посмотрел на настоящую табличку ASM и вроде все
понял - табличка 2 в ПроТрекере - эта табличка ASM, но с отрезанными первыми
двумя элементами и добитая с конца до 96 нот. Старая табличка 2 - точная
копия ASM, а новая табличка 2 - какая-то пародия. Возможно в разных версиях
ASM использовались разные таблички? Кто знает? Хотелось бы услышать
аргументы того, кто заменил вторую таблицу в последних версиях PT3.

Да, первые 100 байт PT3 не влияют на звучание, в некоторых демках они забиты
всякой ерундой, поэтому совет тем, кто пишет риперы музыки - поиск по этим
100 байтам ведите в последнюю очередь, определяйте PT3 по структуре модуля,
а не по заголовку (так поступает рипер в Ay_Emul).

DB> Данные по смещению шума (отдельная колонка в редакторе) компи-
DB> лируются в канал B.

Я поначалу сохранял шум в канал A (Ay_Emul такие модули, кстати, играет
правильно) :)

DB> #02, delay, Lmax, Hmax, Lsl, Hsl - эффект Tone Portamento вверх
DB> или вниз.Delay - время в пятидесятых долях секунды,по истечении
DB> которого к периоду ноты будет прибавлена величина Lsl+256*Hsl.
DB> Lmax+256*Hmax - максимальное смещение (беззнаковое), после на-
DB> копления которого следует прекратить Portamento.

Это самое слабое место формата, даже не формата, а скорее плеера
компилированных музонов PT3. max правильнее было бы вычеслять прямо в плеере
(как это делает ASM), поскольку при компиляции его одназначно нельзя
вычислить при Portamento из одного паттерна в другой (конечно, если
используется более одной комбинации таких паттернов). Ещё одно слабое звено
PT3 - он не пытается выправить текущую частоту до необходимой, а просто тупо
делает переход от предыдущей ноты к устанавливаемой, а это совсем не
правильно, посмотри на тот же ASM - он постепенно выправляет текущее
отклонение, из-за чего бы оно не возникло, к базовому, а это значит что
команду Portamento можно поставить не только рядом с нотой, но и в любом
месте, что бы плавно прекратить скольжение, запущенное ранее. В PT3 это к
сожалению не так. Когда-нибудь в VortexTracker II я все-таки сделаю
обработку этой команды также, как в ASM (придется так же фиксить плеер), но
это уже будет не PT3 :)

DB> #03, offset - sample offset. Сэмпл начинает играть не сначала.
DB> #04, offset - ornament offset. Орнамент начинает играть не сна-
DB> чала.

Здесь тоже забавные казусы бывают, не знаю как в редакторе PT3, а в плеере
при офсете за пределы орнамента или сэмпла перед переходом на цикл
отыгрывается один левый кварк. В Ay_Emul вообще тупо было - отыгрывалась
куча левых кварков вплоть до позиции 255, и только потом сэмпл или орнамент
начинал играться с начала. В одном из последних фиксов это исправлено. Тот
модуль от Nik-O, который мне прислал Himik, содержал такую ошибку, связана
она была с тем, что в окне редактора сэмплов и орнаментов смещения указаны в
Dec, а в команде offset нужно указывать в Hex, переводить в уме, тем более
музыкантам, а не программистам, достаточно сложно. Поэтому в очередной
версии Pro Tracker я бы тебе посоветовал сделать нумерацию кварков в Hex.

DB> #05, YEStime, NOtime - vibrate. нота то звучит, то не звучит.

Если NOtime = 0, то звук просто отключится через YEStime прерываний.
А если YEStime = 0, то или ничего не изменится, или просто Gliss отключится
(если был). Насколькоя я зная, последние PT3 при сохранении выкидывает
команды с YEStime = 0, что не совсем правильно (информация от Shiru Otaku).

DB> #08, delay, Lsl, Hsl - эффект slide envelope. К значению периода
DB> огибающей время от времени прибавляется Lsl+256*Hsl.

Точнее - через каждые delay прерываний :)

DB> #09, tempo - указание темпа (в прерываниях на строку). Стандарт-
DB> ный плейер меньше tempo=3 не играет.

В ПроТрекер есть ещё один глючок - если в паттерне есть несколько команд
установки темпа, то при сохранении он удаляет "лишнюю" :)

Например,
канал A канал B
C-1 1F1F + SetTempo 3 --- ....
--- .... --- .... + SetTempo 4
--- .... + SetTempo 3 --- ....

При сохранении второй SetTempo 3 исчезает, и скорость вместо 3 становится 4
:((((

DB> ющую типа x-1 с периодом Lenv+256*Henv. При включении огибающей
DB> она инициализируется, т.е. начинается новый период!

Ещё один недостаток PT3, в плеере можно ещё что-то придумать, а вот в
редакторе приходится писать тип огибающей постоянно, когда меняешь частоту
огибающих. Короче, ASM Сендецкого по прежнему - best (с точки зрения
музыканта, конечно). Напоминаю, что каждый новый период огибающей (запись в
R13) - это резкий переход амплитуды от того, что было, к максимуму или
минимуму, если разница между тем, что было, и тем, что стало, большая, то
слышен щелчок.

DB> #20-#3f - указать смещение шума (бывает только в канале B)

Переполнение при сложении со смещением шума в PT3 не отслеживается, то есть
#20 превращается в 0 и т.д. по модулю #1f.

DB> #Cv - указать громкость.(v=0 - пауза и ЗАКОЧИТЬ анализ строки.)

Правильно написать:
#Cv - отключить звук или указать громкость.(v=0 - пауза и ЗАКОЧИТЬ анализ
строки, иначе громкость)

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


DB> NB: параменты эффектов (#0x) лежат не сразу после кода номера
DB> эффекта, а ПОСЛЕ КОЦА СТРОКИ!!! Если используется несколько эф-
DB> фектов на одну ноту (на самом деле так не бывает),то сначала ле-
DB> жат параменты последнего эффекта, потом предпоследнего и так да-
DB> лее...

Да, в анализаторе паттернов специальные команды обрабатываются с помощью
стека, поэтому теоретически на одну строку канала может быть несколько
спецкоманд. Ещё одна фича формата, позволяющая расширить возможности PT3 при
полной совместимости с плеером :) В плеере Ay_Emul такая возможность тоже
предусмотрена, правда если будут две одинаковые - будет сбой.

DB> V2 V1 V0 sv=1 - признак съезжания громкости, +- =1 соответствует её
DB> уве-
DB> личению;

ASM эти два бита использует более экономно, одна из комбинаций также
отвечает отвечает за разрешение Envelope в данном кварке :)

DB> N4-0 - частота шума ИЛИ смещение огибающей (зависит от наличия маски
DB> шума): смещение огибающей 0-15 - вниз, 16-31 - вверх (N4
DB> интерпретируется как знак);

Ещё одна ошибка PT3 - если шум запрещен, смещение расценивается как
отклонение огибающих, даже если в текущем канале огибающие не играются.
Таким образом, сэмпл с отключенным шумом и не нулевыми смещениями огибающей
влияет на частоту огибающей в соседних канале независимо от маски огибающих.
Такой ошибки нет ни в одном трекере, в котором используются огибающие в
сэмпле. Правится просто, но я у себя в VT и AY_Emul для совместимости
оставил эту ошибку.

DB> Дополнения от 10.xi.02:
DB> 1. (Sergey Bulba): Таблица ASM or PSC не имеет отношения к соот-
DB> ветствующим редакторам. Модули из этих редакторов следует импо-
DB> ртировать с таблицей Sound Tracker.

См. замечание выше.

DB> Таблица ASM or PSC рассчита- на так,чтобы при тактовой частоте AY
DB> 1.7744 MHz ноты в редакторе совпадали с одноименными нотами
фортепиано.

Я смотрел по частоте 1.7734.

DB> (Таблица Real Sound - аналогично, но для 1.75 MHz.)

А этого я не говорил, наоборот, я сказал, что в протрекере нет таблиц,
расчитанных под частоту 1.75. Возможно, там есть таблицы, подобранные на
слух под 1.75, но расичтанных нет.

Конечно, возможно я и ошибаюсь, поскольку для анализа я взял только по одной
ноте из каждой таблицы (C-1) и сравнивал с графиком, проходящей через точку
55 Гц (A-0), значения частот нот вычислял по формуле

идеальная_частота_ноты = 55*[(2^(1/12))^(номер_PT3_ноты + 3)].

Надо у Ивана Рощина спросить, так ли вычесляется темперированый нотный ряд
:)

DB> 2. В модуле может использоваться и 0-й сэмпл, если в треке он
DB> хранится вместе с орнаментом (можно нулевым). Итого 32 сэмпла.

Забавное свойство формата, я не обратил внимание ;) А казалось, что про PT3
мне известно всё :)

DB> P.S. 2SB: назовём-ка мы 0-й сэмпл буквой "W" :)

Хорошо, в одной из следующих версий VT сделаю :) Забавно, PT3 с 32 сэмплами,
полностью совместимый со старыми плеерами :)
Вот только в существующих редакторах этот сэмпл пропадет при загрузке. Надо
при сохранении пытаться перенумеровывать сэмпл W в любой свободной, по
возможности. Или не надо?

With best regards, Sergey Bulba. E-mail: vor...@mail.khstu.ru
... Ay_Emul: Silent now...


Allen beantwoorden
Auteur beantwoorden
Doorsturen
0 nieuwe berichten