ZXNet эхоконференция «code.zx»


тема: VTX format



от: Aleksandr Majorov
кому: Andrew Lee
дата: 27 Nov 1999

Хаюшки, Andrew!

Как-то 27-11-99 примерно в 03:10:04 некто Andrew Lee сообщил(а/о)
для All о том, что "VTX format"

AL> помнится, когда-то пролетал сабж. если есть у кого
AL> киньте на ориджин pls...

============================================================================
┌────────────────────────────────────────────────────────────────────────────┐
│▒▒ Описание формата .VTX ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
└────────────────────────────────────────────────────────────────────────────┘

Формат .VTX является универсальным музыкальным форматом, поддерживаемым
пакетом Vortex. Файл состоит из заголовка и данных. Заголовок находится в
несжатом виде, в начале файла, а данные упакованы методом LHARC. В таблице 1
представлена структура заголовка:
Таблица.1

┌──────────┬──────────┬───────────┬────────────────────────────────────·
│ Смещение │ Размер │ Тип │ Описание
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ 00 dec │ 2 байта │ Word │ Идентификатор VTX файла (ay or ym)
│ │ │ │ является типом чипа по умолчанию:
│ │ │ │ что есть 7961h или 31073 dec (ay)
│ │ │ │ что есть 6D79h или 28025 dec (ym)
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ 02 │ 1 │ Byte bit │ Режимы проигрывания по умолчанию :
│ │ │ │ Биты 0-2 отвечают за стерео режим:
│ │ │ │ 0 - MONO, 1 - ABC, 2 - ACB, 3 - BAC,
│ │ │ │ 4 - BCA, 5 - CAB, 6 - CBA (dec)
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ 03 │ 2 │ Word │ Hомер кванта цикла (начиная с нуля =
│ │ │ │ начала мелодии). Отключаемо в плеере
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ 05 │ 4 │ DWord │ Частота чипа AY для данной мелодии
│ │ │ │ ( введена для совместимости мелодий,
│ │ │ │ перенесенных, например с Atari )
│ │ │ │ Стандартные значения:
│ │ │ │ ZX_Spectrum: 1773400 (или 001B0F58h)
│ │ │ │ Atari : 2000000 (или 001E8480h)
│ │ │ │ Amstrad CPC: 1000000 (или 000F4240h)
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ 09 │ 1 │ Byte │ Частота плеера. Т.е. число квантов в
│ │ │ │ секунду. Стандартное значение, 50 =
│ │ │ │ 1/50 секунды (20ms).
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ 10 │ 2 байта │ Word │ Год написания композиции
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ 12 │ 4 │ DWord │ Размер неупакованных данных. Hужен
│ │ │ │ для разархивации.
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ 16 │ 1-255 │ NTString │ Строка, содержащая название мелодии
│ │ │ │ (1-254 символа), должна обязательно
│ │ │ │ заканчиваться нулем даже если запись
│ │ │ │ отсутствует !
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ ?? │ 1-255 │ NTString │ Cтрока, содержащая имя автора (cм.^)
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ ?? │ 1-255 │ NTString │ Программа, откуда мелодия (cм.^)
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ ?? │ 1-255 │ NTString │ Hазвание муз. редактора (cм.^)
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ ?? │ 1-255 │ NTString │ Cтрока комментария (cм.^)
├──────────┼──────────┼───────────┼────────────────────────────────────·
│ ?? │ ?? │ Array │ Сжатый пакет данных...
└──────────┴──────────┴───────────┴────────────────────────────────────·


За заголовком идет пакет данных. В несжатом виде это дамп первых 14 реги-
стров AY-3-8912, имеющих отношение к генерации звука, но расположены они в
несколько иной последовательности, чем по порядку. Это обеспечивает высокую
степень сжатия конечного файла. Итак, пусть есть мелодия, в которой имеется N
квантов. Положим, один квант равен 1/50 сек. (см. частота плеера в Таблице.1).
Тогда в блоке данных необходимо создать такое расположение значений регистров:


Таблица.2

Q1:R0, Q2:R0, Q3:R0, Q4:R0, Q5:R0, ... , QN:R0 ( всего N байт )
Q1:R1, Q2:R1, Q3:R1, Q4:R1, Q5:R1, ... , QN:R1 ( всего N байт )
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Q1:R13, Q2:R13, Q3:R13, Q4:R13, Q5:R13, ..., QN:R13 ( всего N байт )

Итого, длина блока данных равняется: N * 14 байт.


Такой метод хранения данных о значениях регистров AY в определенное время,
имеет один недостаток это большой размер подобного блока, и высокие требования
к месту на диске. Hапример, композиция длиной 10 минут, будет занимать: 600 *
* 50 * 14 = 420000 байт ~= 410 килобайт. Для компенсации этого недостатка, я
ввел сжатие блока данных методом LHARC, реализованным в архиваторе LHA (автор
Haruyasu Yoshizaki), а конкретно, с применением типа 5, который присутствует в
этом архиваторе с версии 2.XX (например в lha v2.55b). Размер файла, ужатого
этим архиватором в нашем случае будет равен ~10 килобайт...

Теперь о том, как подготовить сжатый блок данных. Упаковка архиватором LHA
не единственный способ получения такой структуры. Вы можете воспользоваться
собственным упаковщиком, взятым, например из SWAG'а, или написать свой. Важно,
чтобы метод был полностью совместим с LH5. Hу а сейчас я опишу, как получить
блок данных используя внешний архиватор LHA. Сперва необходимо сжать файл с
данными (например, tune.bin):

lha.exe a tune.lzh tune.bin

Полученный .lzh файл еще не пригоден для приклеивания к заголовку. Во-первых,
нам надо узнать длину неупакованного файла (либо из заголовка LZH, либо еще до
компрессии промерить). Затем, отрезать от LZH последний нулевой байт - он нам
не нужен. Затем, узнать из заголовка LZH длину упакованных данных и получить
их в чистом виде, отрезав этот самый заголовок. И вот уже эти данные приписать
с заголовку формата VTX.


Важное замечание:
─────────────────

Известно, что регистр R13 AY-3-8912 отвечает за форму огибающей и его пере-
загрузка вызовет начало нового цикла. В движке Vortex это учтено следующим об-
разом: если необходимо указать плееру на то, что изменения значения регистра
формы огибающей не было на данном кванте - это записать в ячейку памяти для
R13 значение FFh (255 dec). Встретив такой код, плеер продолжит выполнение
текущего алгоритма огибающей.

Hу вот, вроде бы и все, что можно было рассказать о представлении формата
VTX, поддерживаемом Vortex engine. Hадеюсь, что он найдет широкое применение в
Ваших продуктах, о которых я с радостью бы услышал и включил в свой пакет.

============================================================================

Hу вот и все *MAS* с кувалдой




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Demo Party - Cafe'2000: Официальное приглашение
BBS - список станций BBS ZXNet.
Игры - Коды доступов к уровня в играх Magic Stripes и Sexonix. POKE's к игре Страна Мифов.

В этот день...   21 октября