Формат MOD-файлов и технология их воспроизведения
Copyright (c) 1998 Anodyne
1.ОБЩИЕ ПОНЯТИЯ О MOD-ФОРМАТЕ
MOD-файл - файл, содержащий музыкальную композицию. В MOD-файле хранятся партитура музыкального произведения и инструменты, которыми оно играется.
2.СТРУКТУРА MOD-ФАЙЛА
Имена файлов музыкальных модулей имеют стандартные расширения. Для MOD-формата ими являются MOD, NST и M15. Расширение может стоять либо в конце имени файла, либо в начале, но может и вовсе отсутствовать.
MOD-файл состоит из трех частей: заголовка, паттернов и сэмплов. Существует также понятие песня (song) - это модуль без сэмплов.
В паттернах находится партитура музыкального произведения. Каждый сэмпл представляет собой инструмент.
Музыкальная композиция разбивается на части, каждая часть - это паттерн. Паттерн - это матрица, в которой 64 строки и N столбцов, где N - число каналов в модуле. Строки еще называют квантами, каналы - треками. В каждом элементе матрицы может находится нота, номер сэмпла и эффект.
При проигрывании композиции проходятся все строки в каждом паттерне по порядку. Ноты, находящиеся на одной строке, начинают звучать одновременно; через некоторое время, зависящее от темпа, происходит переход к следующей строке, и процесс повторяется.
Каждая строка дополнительно разбивается на кадры (frames), еще называемые тиками (ticks) или кварками (quarks). Число кадров в строке называется скоростью (speed). Продолжительности кадров в одной строке равны и зависят от текущего темпа. Нота, если она указана, начинает звучать в начале кадра 0. В промежутках между началами кадров звучание не меняется, но оно может менятся в начале любого кадра под действием эффектов.
Элементы в паттерне хранятся последовательно: сначала все элементы первой строки, расположенные по порядку каналов, затем все элементы второй строки и т.д. Размер элемента паттерна равен четырем байтам, а размер самого паттерна зависит от числа каналов. В каждом конкретном модуле все паттерны имеют одинаковый размер, так как число каналов в модуле - константа.
Формат элемента паттерна имеет следующий вид:
байт 1 байт 2 байт 3 байт 4
76543210 76543210 76543210 76543210 - номера битов
ssssffff ffffffff aaaaeeee pppppppp
ffff ffffffff - период, определяющий высоту ноты.
ssss aaaa - номер сэмпла.
eeee - эффект.
pppppppp - параметр эффекта.
В байте 1 находится старшая часть периода, в байте 2 - младшая. Эффект и параметр принято обозначать шестнадцатеричными цифрами. Если период равен 0, то нота отсутствует; аналогично, если номер сэмпла равен 0, то сэмпл не указан. Нумерация сэмплов начинается с 1. Эффект не может отсутствовать, так как все значения номера эффекта от 0 до F обозначают какой-либо эффект. Но эффект 0 с параметром 00 ни на что не влияет, поэтому это значение можно рассматривать как отсутствие эффекта.
Ноты в MOD-формате хранятся как периоды. Период определяет частоту выборки для сэмпла. Частота F выборки в Герцах вычисляется по формуле F=A/(период*2), где A - либо 7093789.2, либо 7159090.5. Последнее значение используется наиболее часто, хотя принципиально большой разницы между этими значениями нет. Историческая справка. Период в MOD-формате представляет собой значение, привязанное к архитектуре компьютера Amiga, на котором появились первые трекеры, а с ними и MOD-формат. Неоднозначность в значении A объясняется существованием двух модификаций Amiga, в которых различалась частота синхросигналов. Все числа в MOD-файле хранятся в "тупоконечном" (big-endian) формате - старший байт идет первым, так как это родной формат процессора Motorola 680x0, установленного в Amiga.
Периоды одной и той же ноты в MOD-файлах, созданных на разных трекерах, могут различаться. Это различие небольшое и объясняется либо математическими ошибками создателей трекеров, либо их отходом от равнотемперированной гаммы.
Стандартно, MOD-формат предусматривает три октавы, имеющих номера 1, 2 и 3. Октаве 2 соответствует средняя октава. Но кроме стандартных могут быть нестандартные октавы с номерами 0 и 4. Нота C средней октавы имеет период 428, ей соответствует частота выборки приблизительно 8363 Гц.
В музыкальных модулях есть понятие тонкий тон (finetune). В MOD-формате - это восьмая часть полутона, т.е. полутон разбивается на 8 частей по логарифмической шкале, каждый тонкий тон больше предыдущего в FT раз, где FT - корень степени 96 из 2 ( 96 = 12 * 8 ).
Сэмплы часто называют инструментами - для MOD-формата это одно и то же, но в форматах других модулей эти понятия различаются. Для получения звуков разной частоты из одного сэмпла используется метод частотного сдвига (frequency shifting) - каждой ноте соответствует своя частота выборки сэмпла. Использование другого метода может сильно исказить оригинальное звучание.
Общая структура MOD-файла выглядит следующим образом:
- заголовок, его длина может быть либо 600, либо 1084 байта, в зависимости от количества сэмплов (см.ниже);
- паттерны, хранятся по порядку номеров сразу после заголовка, начиная с паттерна 0; так как размер паттерна для конкретного модуля - константа, то зная номер паттерна легко рассчитать его смещение в файле;
- сэмплы, идут по порядку номеров сразу за последним паттерном, каждый сэмпл представляет собой сырую волновую форму из знаковых 8-битовых выборок; первые два байта в каждом сэмпле зарезервированы и не предназначены для хранения выборок, но, на практике, они там всегда есть.
Количество сэмплов в MOD-файле может быть либо 15, либо 31. По этому критерию все MOD-файлы делятся на два типа. В модулях с 15 сэмплами заголовок имеет длину 600 байтов, в модулях с 31 сэмплом - 1084 байта.
В общем виде заголовок имеет следующий формат:
- имя песни (song name);
- дескрипторы сэмплов;
- длина песни в позициях;
- позиция зацикливания песни;
- таблица паттернов;
- сигнатура модуля.
Рассмотрим эти поля более подробно.
- Имя песни. Хранится в файле по смещению 0 и имеет длину 20 байтов. Явля-
ется строкой, заканчивающейся нулевым байтом, но может занимать все 20
байтов.
- Дескрипторы сэмплов. Их количество может быть либо 15, либо 31, в зави-
симости от того, сколько сэмплов в модуле. Дескрипторы хранятся по по-
рядку номеров сразу за именем песни, длина каждого дескриптора - 30 бай-
тов. Таким образом, дескриптор первого сэмпла находится по смещению 20,
дескриптор второго - по смещению 50 и т.д. Формат дескриптора (смещения
даны относительно начала дескриптора):
- Имя сэмпла. Смещение - 0, длина - 22 байта. Это строка с нулевым бай-
том в конце, но может занимать все 22 байта.
- Длина сэмпла. Смещение - 22, длина - 2 байта. Длина сэмпла - это сло-
во в "тупоконечном" формате. Задает количество слов в сэмпле, т.е.
если умножить это значение на 2, то получится длина сэмпла в байтах.
В это число входят и зарезервированные 2 байта в начале сэмпла. Но
если длина сэмпла - 1 слово, то это означает полное отсутствие сэм-
пла, в области сэмплов в этом случае 2 байта не хранятся.
- Значение тонкого тона. Смещение - 24, длина - 1 байт. Старший нибл
всегда равен 0, в младшем хранится знаковое число от -8 до 7. Каждой
ноте соответствует своя частота выборки сэмпла. Но для каждого кон-
кретного сэмпла эта частота повышается либо понижается на заданное
число тонких тонов. Например, если значение тонкого тона равно 2, то
частота повышается на 2 тонких тона; если значение равно -8, то нота
играется на полутон ниже. Необходимость тонких тонов связана с тем,
что звук может быть оцифрован на частоте, не совпадающей ни с одной
из нотных частот. С помощью тонких тонов это можно скорректировать,
например, средний A имеет частоту выборки 14093 Гц, а звук этой же
высоты оцифрован на частоте 14195 Гц; тогда понижаем ее на один тон-
кий тон - получается стандартная частота.
- Громкость сэмпла по умолчанию. Смещение - 25, длина - 1 байт. Может
быть в диапазоне от 0 до 64, 0 - полная тишина, 64 - максимальная
громкость. Задается в линейной шкале.
- Смещение зацикливания сэмпла. Смещение - 26, длина - 2 байта. Это
смещение задается в словах относительно начала сэмпла, включая заре-
зервированные байты. Имеет смысл, если длина повторяемой части больше
единицы.
- Длина повторяемой части. Смещение - 28, длина - 2 байта. Задает коли-
чество слов после смещения зацикливания, которые будут проиграны.
После этого проигрывание продолжается со смещения зацикливания. Если
это значение равно 0 или 1, то сэмпл не зацикливается.
- Длина песни в позициях. Смещение относительно начала файла - либо 470,
если в модуле 15 сэмплов, либо 950, если 31 сэмпл. Задается 1 байтом.
Длина песни в позициях - количество элементов (позиций) в таблице пат-
тернов, которые относятся к композиции. Может быть от 1 до 128.
- Позиция зацикливания песни. Смещение относительно начала файла - либо
471, если в модуле 15 сэмплов, либо 951, если 31 сэмпл. Задается 1 бай-
том. Определяет позицию зацикливания модуля, с которой продолжится про-
игрывание, когда модуль доиграется до конца. Может принимать значения от
0 до 127. Многими трекерами это поле не поддерживается, так как для за-
цикливания есть более эффективные средства.
- Таблица паттернов. Смещение относительно начала файла - либо 472, если в
модуле 15 сэмплов, либо 952, если 31 сэмпл. Представляет собой одномер-
ный массив из 128 элементов (позиций) размером 1 байт. В каждой позиции
хранится номер паттерна. К композиции относятся только первые позиции,
количество которых определяется длиной песни. Чтобы узнать количество
паттернов в модуле, надо просканировать эту таблицу ( все 128 элемен-
тов!). Наибольшее значение, увеличенное на 1, даст количество паттер-
нов. В принципе, в модуле могут находится паттерны, не относящиеся к
композиции. О максимально возможном количестве паттернов см. ниже.
- Сигнатура модуля. В модулях с 15 сэмплами сигнатура отсутствует, поэтому
сразу за таблицей паттернов по смещению 600 начинается первый паттерн.
Сигнатура есть только в модулях с 31 сэмплом, где она находится по сме-
щению 1080, имея длину 4 байта. Теоретически, никаких ограничений на это
поле нет, - здесь могут находится произвольные четыре байта. Но по обще-
принятому правилу, сигнатура - это четыре ASCII-символа с кодами от 32
до 127.
По сигнатуре или ее отсутствию определяется количество каналов и сэмплов
в модуле. По смещению 1080 считываются 4 байта. Для модулей с 15 сэмпла-
ми по этому смещению находится элемент первого паттерна, расположенный в
строке 30 на первом канале, первый байт этого элемента не больше 15 (см.
формат элемента паттерна). Для модулей с 31 сэмплом первый байт сигнату-
ры не меньше 32. Таким образом определяется количество сэмплов в модуле,
а для модулей с 15 сэмплами еще и количество каналов - оно всегда равно
- Если в модуле 31 сэмпл, то количество каналов определяется по сигна-
туре. Известными на сегодняшний день сигнатурами являются:
- сигнатура 2CHN означает, что каналов 2;
- сигнатура M.K. , M!K! или FLT4 - 4 канала;
- сигнатура 6CHN - 6 каналов;
- сигнатура FLT8 , 8CHN или OKTA - 8 каналов;
- сигнатура вида CH задает число каналов равным nn, где - две
ASCII-цифры, число nn - четное число от 10 до 32.
В Protracker'е сигнатура M.K. также означала, что максимально возможное
число паттернов в модуле не больше 64, сигнатура M!K! снимала это огра-
ничение. Но Fast Tracker ][ сохраняет модули с сигнатурами M.K. , CHN
и CH , в которых число паттернов может быть до 256.
Двумя главными временными характеристиками в MOD-формате являются скорость (speed) и темп - количество ударов в минуту (beats per minute) или BPM. Скорость - количество кадров в строке, начальное значение скорости - 6. В MOD-формате один удар принимается равным 4 строкам или 4*speed кадрам. Понятие количество ударов в минуту не совсем корректно в MOD-формате, оно отражает действительность только когда скорость равна 6. Начальное значение BPM - 125.
Зная BPM можно вычислить количество кадров в секунду. Количество кадров в минуту - это BPM*4*6, а в секунду - BPM*4*6/60 или BPM*2/5. Длина одного кадра в секундах равна 5/(BPM*2).
Оглавление | Следующая
|