Формат файла STC (Sound Tracker)

Полное описание формата компилированного модуля программы Sound Tracker ZX-Spectrum

Обновлено 07.12.2015

Формат файла STC программы Sound Tracker для ZX-Spectrum достаточно простой, по сравнению с другими трекерными форматами.


Структура STC файла:


Offset Size  Name               Description
+0     1     Delay              Глобальное число прерываний между нотами
+1     2     Positions Pointer  Указатель на таблицу Positions
+3     2     Ornaments Pointer  Указатель на таблицу Ornaments
+5     2     Patterns Pointer   Указатель на таблицу Patterns (длина всех паттернов одинаковая!)
+7     18    Identifier         Строка 'SONG BY ST COMPILE' либо другая информация
+25    2     Size               Длина всего блока в байтах (может быть некорректной)
+27    99*X  Samples Pointer    Таблица Samples (Инструменты) по 99 байт на инструмент
                                первый байт номер инструмента
                                инструменты могут идти не по порядку,
                                поэтому проверяем номер в первом байте сэмплов
                                X=1-16
+27+99*X     Data               Остальные данные


 Формат сэмпла (инструмента) «Таблица Samples»

Полная длина сэмпла = 99 байт (32 позиции * 3 + 1)

 Off Size Name          Description
 +0  1    Sample Number номер сэмпла
 +1  32*3 Data          данные сэмпла (по 3 байта на позицию)
         - байт 0 - биты 0-3 громкость,
                    биты 7-4 четыре младших бита старшего байта смещения тона
         - байт 1 - 
                  - бит 7 маска шума (0 - включен, 1 - выключен)
                  - бит 6 маска тона (0 - включен, 1 - выключен)
                  - бит 5 +- определяет направление сдвига тона
                         (1 - плюс к частоте, 0 - минус к частоте)
                  - биты 0-4 значение шума
         - байт 2 - смещение тона (младший байт)
 +97 1    Repeat Position - с какой позиции начинать повтор сэмпла и орнамента
                     (если равно нулю, канал отключается по завершении сэмпла)
 +98 1    Repeat Length - количество позиций в повторе

PS: если Repeat Length больше чем оставшихся позиций, то после 32-ой позиция переходит на первую


Формат орнамента «Таблица Ornaments»

Полная длина орнамента = 33 байта (32 позиции в орнаменте меняются синхронно сэмплу)

 Off  Size   Name            Description
 +0   1      Ornament Number номер орнамента
 +1   32byte Data            данные орнамента (каждое значение равно
                             12 полутонам т.е. октаве, величина со знаком)


Формат паттерна

Значения внутри паттерна
 0x00-0x5f - номер ноты (позиция завершается)
 0x60-0x6f - номер инструмента (в таблице Samples) -0x60
             нулевого инструмента нет, но можно на всякий случай заблокировать канал
 0x70-0x7f - номер орнамента (в таблице Ornaments) -0x70
             огибающая отключается
             при нулевом значении орнаменты отключаются
 0x80      - команда R (пауза) (отключить канал, завершить позицию)
 0x81      - пустая нота (позиция завершается)
 0x82      - отключение огибающей и орнамента
 0x83-0x8e - номер огибающей -0x80 (т.е. огибающие могут иметь номера 3 - 14)
             (следующий байт значение периода огибающей младший байт)
             орнаменты отключаются
 0x8f-0xa0 - такие значение не должны присутствовать в паттерне
             (запас на возможные будущие версии)
 0xa1-0xfe - значение задержки между нотами в канале (в прерываниях) -0xA1
 0xff      - конец паттерна

Формат блока паттернов «Таблица Patterns»

 Каждая позиция занимает 7 байт
 Off Size Name         Description
 +0  1    Number       Порядковый номер паттерна
 +1  2    Address Ch A Смещение для данных паттерна канала A
 +3  2    Address Ch B Смещение для данных паттерна канала B
 +5  2    Address Ch C Смещение для данных паттерна канала C

Формат блока позиций «Таблица Positions»

Указывают номера (последовательность) паттернов при проигрывании

 Off  Size     Name        Description
 +0   1        Count       Общее число позиций в таблице
 +1   Count*2              Данные позиций по 2 байта, см. ниже
 Каждая позиция занимает 2 байта
 Off  Size     Name            Description
 +0   1        Transposition   Глобальное смещение тона для паттерна
 +1   1        PNum            Номер паттерна для данной позиции

Частотная таблица для нот

 static ushort[] ST_Table = { 
    0xef8, 0xe10, 0xd60, 0xc80, 0xbd8, 0xb28, 0xa88, 0x9f0, 0x960, 0x8e0,
    0x858, 0x7e0, 0x77c, 0x708, 0x6b0, 0x640, 0x5ec, 0x594, 0x544, 0x4f8,
    0x4b0, 0x470, 0x42c, 0x3f0, 0x3be, 0x384, 0x358, 0x320, 0x2f6, 0x2ca,
    0x2a2, 0x27c, 0x258, 0x238, 0x216, 0x1f8, 0x1df, 0x1c2, 0x1ac, 0x190,
    0x17b, 0x165, 0x151, 0x13e, 0x12c, 0x11c, 0x10b, 0x0fc, 0x0ef, 0x0e1,
    0x0d6, 0x0c8, 0x0bd, 0x0b2, 0x0a8, 0x09f, 0x096, 0x08e, 0x085, 0x07e,
    0x077, 0x070, 0x06b, 0x064, 0x05e, 0x059, 0x054, 0x04f, 0x04b, 0x047,
    0x042, 0x03f, 0x03b, 0x038, 0x035, 0x032, 0x02f, 0x02c, 0x02a, 0x027,
    0x025, 0x023, 0x021, 0x01f, 0x01d, 0x01c, 0x01a, 0x019, 0x017, 0x016,
    0x015, 0x013, 0x012, 0x011, 0x010, 0x00f
 };


Особенности формата

Количество октав: 8
Количество позиций: 1-256
Количество паттернов: 1-32
Количество нот в паттерне: 1-64
Число инструментов (сэмплов): 16
Число орнаментов: 16

Возможность изменения громкости каждой ноты — нет
Возможность изменения длины каждого паттерна — нет
Возможность изменения скорости композиции при проигрывании — нет

Любое музыкальное произведение, написанное в «SOUND TRACKER», состоит из n-го количества отрезков (паттернов/PATTERN),
где n — величина, принимающая значения от 1 до 32. То есть в композиции не может быть больше 32 паттернов. Длина музыкального
произведения может быть от 1 до 256 позиций. Можно условиться, что позиция — это некая ячейка, в которую вставляется один из паттернов.
Вы можете, скажем, написать всего один паттерн и прокрутить его во всех возможных 256 позициях, т.е. 256 раз.

Каждый паттерн, в свою очередь, может содержать в себе от 1 до 64 нот. Длина паттерна задается для каждой композиции
один раз и одинакова для всех паттернов, составляющих эту композицию. Это, кстати, является одним из главных недостатков
«SOUND TRACKERа».
Еще два термина, используемые музыкантами, работающими в этом редакторе — SAMPLE (Сэмпл) и ORNAMENT (Орнамент).

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

Орнамент — это дополнительный частотный эффект, который изменяет звучание сэмпла, например, понижает или повышает высоту тона и т.д.

Сегмент — единичная составляющая каждого звука в редакторе.
Звук может состоять из n-ного количества сегментов, где n принимает значения от 1 до 32.

Добавить комментарий

Ваш адрес email не будет опубликован.