Формат 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
_