MOD
Формат MOD-файлов и технология их воспроизведения
- 1. Общие понятия о MOD-формате
- 2. Структура mod-файла
- 3. Принцип воспроизведения mod-файлов
- 4. Эффекты в MOD-формате
- Эффект 0. Arpeggio.
- Эффект 1. Portamento up.
- Эффект 2. Portamento down.
- Эффект 3. Tone portamento.
- Эффект 4. Vibrato.
- Эффект 5. Tone portamento + volume slide.
- Эффект 6. Vibrato + volume slide.
- Эффект 7. Tremolo.
- Эффект 8. Pan.
- Эффект 9. Sample offset.
- Эффект a. Volume slide.
- Эффект b. Position jump.
- Эффект c. Set volume.
- Эффект d. Pattern break.
- Эффект e0. Set filter.
- Эффект e1. Fine portamento up
- Эффект e2. Fine portamento down.
- Эффект e3. Glissando control.
- Эффект e4. Vibrato waveform.
- Эффект e5. Set finetune.
- Эффект e6. Pattern loop.
- Эффект e7. Tremolo waveform.
- Эффект e8. 16 position pan.
- Эффект e9. Retrig note.
- Эффект ea. Fine volume slide up.
- Эффект eb. Fine volume slide down.
- Эффект ec. Cut note.
- Эффект ed. Note delay.
- Эффект ee. Pattern delay.
- Эффект ef. Invert loop.
- Эффект f. Set speed.
- 5. Классификация способов воспроизведения
- 6. Асинхронное воспроизведение
- 7. Воспроизведение mod-файлов в win32
- 8. Литература
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.
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).