ZX Format #07
05 декабря 1997

Программистам - Формат Mod файлов. Описания формата стандартных MOD файлов, используемых в General Sound.

<b>Программистам</b> - Формат Mod файлов. Описания формата стандартных MOD файлов,
используемых в General Sound.
 Формат Mod-файла

music by MIDISOFT
(C) Stinger '& TP 1997
_

  1. Название_композиции 
  2. Заголовки_инструментов
  3. Таблица_позиций_и_информация_о_мо-
   дуле 
  4. Паттерны 
  5. Сэмплы 

   1. Название композиции

 Смещение   Длина

   +0 20
 Название композиции,  максимальная длина
20 символов. Если название состоит меньше
чем  из  20 символов, то оставшаяся часть
данного  поля  будет  заполнена двоичными
нулями.  Смещение  отсчитывается  относи-
тельно начала файла.

   2. Заголовки инструментов

 Здесь расположены последовательно 31 за-
головок, длина каждого заголовка 30 (#1E)
байт,т.е.  относительно начала файла сме-
щения заголовков будут
   следующими:
   Заголовок 1 - смещение +20 (#14)
   Заголовок 2 - смещение +50 (#32)
   . 
   Заголовок 31 - смещение +920 (#398)

 Приведенные  ниже смещения являются сме-
щениями относительно начала заголовка

 Смещение   Длина

   +0  22
 Название инструмента, максимальная длина
22  символа. Если название состоит меньше
чем  из  22 символов, то оставшаяся часть
данного  поля  будет  заполнена двоичными
нулями.
  +22 2
 Sample length-длина сэмпла (*). Значение
данного  поля  0  или  1  означает пустой
сэмпл  (т.е если  длина  сэмпла  в байтах
меньше или  равна  2,  то  сэмпл пустой).
Большее  значение  означает  реально при-
сутствующий сэмпл.
  +24 1
 Нижние  4 бита представляют собой значе-
ние настройки тона (Finetune) для сэмпла.
Значeние  лежит  в  пределах от -8 до +7.
Старшие  4 бита должны при чтении игнори-
роваться,  а при записи устанавливаться в
ноль.
 Байт: Значения настройки тона:

   x0  0
   x1 +1
   x2 +2
   x3 +3
   x4 +4
   x5 +5
   x6 +6
   x7 +7
   x8 -8
   x9 -7
   xA -6
   xB -5
   xC -4
   xD -3
   xE -2
   xF -1

 Одна  единица  настройки  тона равна 1/8
полутона,  т.е. с помощью этого параметра
можно опустить частоту звучания сэмпла на
полутон вниз или на 7/8 полутона вверх.
  +25 1
 Громкость инструмента по умолчанию. Зна-
чение   лежит  в  пределах  от  0  до  64
(#00..#40),  где  64  максимальная  гром-
кость,а 0 - минимальная.
  +26 2
 Repeat offset - начало точки  повтора  в
инструменте (*). Это смещение относитель-
но  начала  сэмпла. Данная величина имеет
смысл   если  длина  повторяющейся  части
(cмещение +28) больше нуля.
  +28 2
 Repeat length - длина повторяющейся час-
ти (*). Сэмпл является зацикленным в том,
и только том случае, если рассматриваемая
величина больше нуля. (*) Данные величины
измеряются  в  словах  и хранятся в стан-
дартном  для  Амиги  High-Endian формате,
поэтому для адекватной интерпретации дан-
ных  величин требуется произвести следую-
щие действия:

 а) переставить  старшую и младшую поло-
винки слова;
   б) умножить слово на два

   LD HL,(32768+20+22) ;Длина первого сэмпла в Амижных словах
   LD A,H ; (если модуль загружен по адресу 32768)
   LD H,L 
   LD L,A 
   ADD  HL,HL  ;  Теперь  получили  длину сэмпла в байтах

Сэмпл проигрывается следующим образом:
 1) если длина сэмпла меньше двух, то ни-
чего не проигрывается;
 2)  далее  анализируется длина повторяю-
щейся  части:  если  она  больше нуля, то
сэмпл  является зацикленным, а если равна
нулю,то незацикленным.
 3)   незацикленный  сэмпл  проигрывается
просто  от начала до конца, т.е. от Samp-
le_start_adress    до    Sample_start_ad-
ress+Sample_Length  (Sample_start_adress-
адрес начала сэмпла).
 4)  зацикленный  же  сэмпл проигрывается
более сложно:
в  начале играется от Sample_start_adress
до   Sample_start_adress   +  Repeat_off-
set+Repeat_Length,  а  затем до бесконеч-
ности  от Sample_start_adress+Repeat_off-
set  до Sample_start_adress + Repeat_off-
set+Repeat_Length. 

  3. Таблица позиций и инфор-
 мация о модуле

 Смещение   Длина

 +950(#3B6)   1
 Длина  композиции в позициях (Song Posi-
tions)  Значение лежит в пределах от 1 до
128
 +951(#3B7)   1
 Позиция, на которую плейер должен перей-
ти  по  окончании  проигрывания модуля. С
помощью этого можно зациклить модуль. Ес-
ли  это  значение  больше, чем количество
позиций, то плейер должен остановиться по
окончании  прoигрывания  модуля. Если мо-
дуль  зацикливать  не требуется, то реко-
мендуется записывать в данное поле значе-
ние 127.
 +952(#3B8) 128
 Таблица  позиций.  Длина таблицы от 1 до
128  (определяется  значением по смещению
+950)  Номер  позиции  являтся индексом в
таблице,  а  значение  в таблице по этому
индексу будет номером паттерна. С помощью
данной таблицы можно определить количест-
во паттернов в модуле. Для этого требует-
ся  найти в таблице максимальное значение
и добавить к нему единицу - это будет ко-
личеством паттернов.

Пример:
  (+950)= 6 длина композиции - 6 позиции.
  (+952)= 2,2,1,0,3,2,6,7 
   Позиция 1 - паттерн 3
   Позиция 2 - паттерн 3
   Позиция 3 - паттерн 2
   Позиция 4 - паттерн 1
   Позиция 5 - паттерн 4 << максимум
   Позиция 6 - паттерн 3
   В модуле четыре паттерна.

+1080(#438)   4
 Идентификатор  модуля, с помощью данного
поля  можно определить количество каналов
в  модуле. В случая отсутствия по данному
смещению   одного   из  нижеперечисленных
идентификаторов модуль скорее всего имеет
старый  тип и в нем 15 инструментов. (См.
"Формат  модуля  старого  типа")
   M.K. - 4 канала, наиболее  распростра-
 ненный идентификатор
-   M!K! - 4 канала, вероятно что в модуле
  будет более чем 64 паттерна.
   FLT4 - 4 канала
   FLT8 - 8 каналов
   OCTA - 8 каналов
-   xCHN - x каналов (x=4,6,8 ASCII code)
   xxCH - xx каналов (xx - ASCII codes)

Пример:
   4D 2E 4B 2E ("M.K.") - 4 канала
   31 32 43 48 ("12CH") - 12 каналов
   36 43 48 4E ("6CHN") - 6 каналов

 4. Паттерны.

 По  смещению  +1084  (#43C)  расположены
паттерны, в которых хранится нотный текст
произведения.  Количество паттернов опре-
деляется  следующим образом: просматрива-
ется вся таблица позиций ( смещение +952)
и  находится  наибольшее  значение в этой
таблице. Для того, чтобы найти количест-
во паттернов, к этому найденному значению
требуется прибавить единицу. Длина каждо-
го паттерна равна 256*Количество каналов,
т.е.  1K для 4 каналов, 2 Килобайта для 8
каналов  и т.д. (Количество каналов опре-
деляется  идентификатором модуля, смеще-
ние +1080) Hоты (нотные записи) в паттер-
не расположены следующим образом:
 Первая  нота  первого канала,первая нота
второго канала,.,первая нота последнего
канала,вторая  нота первого канала,вторая
нота второго канала, .,вторая нота пос-
леднего  канала  и т.д. до последней ноты
последнего канала.

 Формат нотной записи

 Каждая  нотная  запись  имеет  длину 4
байта, и состоит из следующих полей:

байт 1   байт 2   байт 3   байт 4

xSP P SE F 

S - номер инструмента
   P - период инструмента
   Е - номер эффекта
   F - параметр для эффекта
   x  -  неиспользуемые биты,при чтении
должны  игнорироваться,  при записи уста-
навливаться в ноль.
 Если  значение в поле S больше нуля,
то  в  канале  инициируется  проигрывание
инструмента  с  этим  номером.  Если этот
инструмент  является  пустым, то в канале
просто  ничего  не играется. (Пустой инс-
трумент  -  инструмент  с  нулевой длиной
сэмпла)
 Если  значение  поля P больше
нуля, то это означает, что сэмпл требует-
 ся проигрывать с частотой
8363*428/P, т.е.  столько байт
сэмпла в секунду будет выброшено в ЦАП.
 Для  того,чтобы  период  преобразовать в
ноту   и  обратно,используется  следующая
таблица:

╔═╤2═╗
 Нота      Значение   периода  для соответствующей ноты ╠═╪2═╣
║ │  C   C#  D   D#  E   F   F#  G   G#  A   A#  B  C1 - B1 856,808,762,720,678,640,604,570,538,508,480,453 C2 - B2 428,404,381,360,339,320,302,285,269,254,240,226 C3 - B3 214,202,190,180,170,160,151,143,135,127,120,113 ╚═╧2═╝



 5. Сэмплы.

 Hепосредственно за паттернами расположе-
ны  последовательно  сэмплы.  Если  длина
сэмпла  в байтах больше 2, то сэмпл физи-
чески присутствует в данной области. Если
же  сэмпл является пустым (байтовая длина
<=2),  то никакие данные в данную область
не записываются. Сэмплы записаны в знако-
вом  виде,т.е.  нулевой  уровень  сигнала
обозначается  как  +0 (#00), максимальный
положительный  уровень +127 (#7F), макси-
мальный  по  модулю отрицательный уровень
-128 (#80).
 Для  перевода  сэмпла  в беззнаковый вид
(пригодный  для непосредственной выдачи в
ЦАП)  требуется прибавить к каждому байту
сэмпла  128 (#80). В беззнаковом виде ну-
левой  уровень  сигнала  обозначается как
#80, максимальный положительный уровень
как #FF, а максимальный по модулю отрица-
тельный уровень как #00.
 В  некоторых  проигрывателях  первые два
байта сэмпла не проигрываются и использу-
ются  в служебных целях, поэтому рекомен-
дуется,  чтобы  первые два байта в сэмпле
  были #00 #00 (знаковый вид).
 _

 Формат Mod-файла старого типа

 Это изначальный формат Mod'ов,появивший-
ся  в 1988 году. Отличительные особеннос-
ти:  15  инструментов,  только  4 канала,
слабо распространен.

 Смещение   Длина

   +0 20
 Название  композиции, максимальная длина
20 символов.
   +20 30 Заголовок 1.
  +50 30 Заголовок 2.
   .
 +440 30 Заголовок 15.
 +470 1
 Длина композиции в позициях.
 +471 1
 Позиция, на которую плейер должен перей-
ти по окончании проигрывания модуля.
 +472 128 Таблица позиций.
 +6001024*n Паттерны, n штук.
 +x x
 Сэмплы.  (Смещение  +600+1024*Количество
паттернов)
(  The  original  Amiga SoundTracker song
format from 1988 by Karsten Obars
 _

  Kраткое описание эффектов

  0 - None/Arpeggio  8 - * NOT USED *
1  1 - Portamento Up  9 - SampleOffset
0  2 - Portamento Down    A - VolumeSlide
0  3 - TonePortamento B - PositionJump
  4 - Vibrato  C - Set Volume
2  5 - ToneP + VolSlide   D - PatternBreak
/  6 - Vibra + VolSlide   E - Misc. Cmds
  7 - Tremolo  F - Set Speed

Команды с кодом Е:

 E0 - Filter On/Off Е8 - * NOT USED *
/ E1 - Fineslide Up Е9 - Retrig Note
. E2 - Fineslide DownЕA - FineVol Up
3 E3 - Glissando Control ЕB - FineVol Down
, E4 - Vibrato Control   ЕC - NoteCut
- E5 - Set Finetune ЕD - NoteDelay
/ E6 - Patternloop ЕE - PatternDelay
0 E7 - Tremolo Control   ЕF - Invert Loop

_



Другие статьи номера:

От авторов - несколько слов о следующем номере.

Аторы журнала - ZX-Format No.7

Содержание номера - краткое содержание журнала ZX-Format No.7

Игрушки - обзор новинок: Los Angeles Drugs Bust, Jungle Warfare, Dragonia, 3D Starfighter, Rock star ate my hamster, Star Cobtrol, Malstese joe's pool challenge, Dynamite dux, Blood Brodthers, Galactic Games, Motor Masscre, International Kickboxing.

Игрушки - Tai-Pan: классический шедевр ZX Spectrum. Игра, совмещающая в себе quest и менеджер. Интересная новелла и достаточно подробное описание.

Игрушки - Operation R.R. Вступительная новелла к новому графическому quest'у от GALAXY.

Игрушки - Адвентюры: описание игры-пародии "Bored of the ring" - "Тошнит от колец" Можно пользоваться как описанием, а можно просто читать как пародию на Р.Р.Толкиена.

Игрушки - 3D construction kit: подробное описание редактора 3D игр типа Castle Master. В статье приведено описание внутреннего языка системмы, который, собственно, и превращает набор локаций и обьектов в полноценную игру.

Программистам - Basic - 7: Окончание описания Beta-Basic.

Программистам - библиотечка математических процедур. Цикл статей для желающих научиться программировать на ассемблере.

Программистам - Алгоритмы работы и примеры процедур для быстрых вычислений на асемблере: Умножение и деление 3-х байтовых чисел,

Программистам - Формат Mod файлов. Описания формата стандартных MOD файлов, используемых в General Sound.

Программистам - BMC 2. Eще несколько слов о конвертации PC-шных картинок в 3-color.

Обзор - Общий обзор прохождения очередной Demo-party ENLiGHT 1997 с фотографиями некоторых гостей.

Обзор - Несколько моментов с выставки видео и аудиотехники Video FAIR, проходившей осенью в С-Пб.

Железо - Капитан Nemo предлагает поделиться технологией KAY со всеми желающими заняться производством.

Железо - Информация о новом проекте фирмы Scorpion - плате расширения графики и памяти GMX.

Железо - Статья об аудиоусилителях и прайс-лист (для желающих купить готовый усилитель или набор для сборки).

Примьера - Описание нового турбо-ассемблера STORM от X-Trade.

Примьера - Riff Tracker новый Музыкальный редактор для General sound.

Примьера - Описание текстовго редактора ZX-Winword, позволяющий делать графические вставки в текст, и его утилита Sprite Cutter - для нарезки этих вставок.

Примьера - Head Ball - Головобол: Описание новой игры.

Интервью - интервью с участниками ENLiGHT'97: Digital Reality.

Интервью - интервью с участниками ENLiGHT'97: Extreme.

Интервью - интервью с участниками ENLiGHT'97: MMA, ALK.

Интервью - интервью с участниками ENLiGHT'97: Flash inc.

Интервью - интервью с участниками ENLiGHT'97: Progress.

Интервью - интервью с участниками ENLiGHT'97: Felix/Softland.

Интервью - интервью с участниками ENLiGHT'97: Slash.

Интервью - интервью с участниками ENLiGHT'97: Вячеслав Медноногов.

Здесь был ты - Повелитель зубов - 2. Продолжение похождений компании бравых хоббитов.

Здесь был ты - Выключатель - Небольшая философская притча.

Почта - Шедевр. Еще одно любопытное письмо - "большая часть прикладных и системных программ - полная чушь и лабуда!"

Почта - письма читателей: Николай Сергеев, Jobman, Николай Парфёнов, Дмитрий Залисский.

Почта - бесплатная реклама и обьявления.

Разное - перспективы ПО. Новая RPG игра от Одесской группы "Оберон" - НЕИЗВЕСТНЫЙ МИР.

Разное - перспективы ПО. STATE OF THE ART: новый графический редактор для спектрума.

Разное - Электронный самиздат: Несколько слов о новом виде софта - электронных книгах.

Amiga Club - Новая статья бывшего Спектрумиста Макса Петрова об Amiga.


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

Похожие статьи:
Обсуждения - ZX Spectrum (детство). Мемуара с kuban.ru.
ENLIGHT RULEZ?! - ENLIGHT 1997 - к чему он прирулит? (день шестой).
Читатель-читателю - Эффективная работа с дисководом .
Программы, которые мы выбираем - Возможные последствия использования недокументированных команд.
Реклама - реклама и объявления.

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