Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:
реклама
Все подробности Как выгодно продать швейцарские часы? Все о выкупе элитных часов тут.

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MOD

Copyright (c) 1998 Anodyne

Формат MOD-файлов и технология их воспроизведения

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-файла выглядит следующим образом:

  1. заголовок, его длина может быть либо 600, либо 1084 байта, в зависимости от количества сэмплов (см.ниже);
  2. паттерны, хранятся по порядку номеров сразу после заголовка, начиная с паттерна 0; так как размер паттерна для конкретного модуля - константа, то зная номер паттерна легко рассчитать его смещение в файле;
  3. сэмплы, идут по порядку номеров сразу за последним паттерном, каждый сэмпл представляет собой сырую волновую форму из знаковых 8-битовых выборок; первые два байта в каждом сэмпле зарезервированы и не предназначены для хранения выборок, но, на практике, они там всегда есть.

Количество сэмплов в MOD-файле может быть либо 15, либо 31. По этому критерию все MOD-файлы делятся на два типа. В модулях с 15 сэмплами заголовок имеет длину 600 байтов, в модулях с 31 сэмплом - 1084 байта.

В общем виде заголовок имеет следующий формат:

  1. имя песни (song name);
  2. дескрипторы сэмплов;
  3. длина песни в позициях;
  4. позиция зацикливания песни;
  5. таблица паттернов;
  6. сигнатура модуля.

Рассмотрим эти поля более подробно.

  1. Имя песни. Хранится в файле по смещению 0 и имеет длину 20 байтов. Явля- ется строкой, заканчивающейся нулевым байтом, но может занимать все 20 байтов.
  2. Дескрипторы сэмплов. Их количество может быть либо 15, либо 31, в зави- симости от того, сколько сэмплов в модуле. Дескрипторы хранятся по по- рядку номеров сразу за именем песни, длина каждого дескриптора - 30 бай- тов. Таким образом, дескриптор первого сэмпла находится по смещению 20, дескриптор второго - по смещению 50 и т.д. Формат дескриптора (смещения даны относительно начала дескриптора):
    1. Имя сэмпла. Смещение - 0, длина - 22 байта. Это строка с нулевым бай- том в конце, но может занимать все 22 байта.
    2. Длина сэмпла. Смещение - 22, длина - 2 байта. Длина сэмпла - это сло- во в "тупоконечном" формате. Задает количество слов в сэмпле, т.е. если умножить это значение на 2, то получится длина сэмпла в байтах. В это число входят и зарезервированные 2 байта в начале сэмпла. Но если длина сэмпла - 1 слово, то это означает полное отсутствие сэм- пла, в области сэмплов в этом случае 2 байта не хранятся.
    3. Значение тонкого тона. Смещение - 24, длина - 1 байт. Старший нибл всегда равен 0, в младшем хранится знаковое число от -8 до 7. Каждой ноте соответствует своя частота выборки сэмпла. Но для каждого кон- кретного сэмпла эта частота повышается либо понижается на заданное число тонких тонов. Например, если значение тонкого тона равно 2, то частота повышается на 2 тонких тона; если значение равно -8, то нота играется на полутон ниже. Необходимость тонких тонов связана с тем, что звук может быть оцифрован на частоте, не совпадающей ни с одной из нотных частот. С помощью тонких тонов это можно скорректировать, например, средний A имеет частоту выборки 14093 Гц, а звук этой же высоты оцифрован на частоте 14195 Гц; тогда понижаем ее на один тон- кий тон - получается стандартная частота.
    4. Громкость сэмпла по умолчанию. Смещение - 25, длина - 1 байт. Может быть в диапазоне от 0 до 64, 0 - полная тишина, 64 - максимальная громкость. Задается в линейной шкале.
    5. Смещение зацикливания сэмпла. Смещение - 26, длина - 2 байта. Это смещение задается в словах относительно начала сэмпла, включая заре- зервированные байты. Имеет смысл, если длина повторяемой части больше единицы.
    6. Длина повторяемой части. Смещение - 28, длина - 2 байта. Задает коли- чество слов после смещения зацикливания, которые будут проиграны. После этого проигрывание продолжается со смещения зацикливания. Если это значение равно 0 или 1, то сэмпл не зацикливается.
  3. Длина песни в позициях. Смещение относительно начала файла - либо 470, если в модуле 15 сэмплов, либо 950, если 31 сэмпл. Задается 1 байтом. Длина песни в позициях - количество элементов (позиций) в таблице пат- тернов, которые относятся к композиции. Может быть от 1 до 128.
  4. Позиция зацикливания песни. Смещение относительно начала файла - либо 471, если в модуле 15 сэмплов, либо 951, если 31 сэмпл. Задается 1 бай- том. Определяет позицию зацикливания модуля, с которой продолжится про- игрывание, когда модуль доиграется до конца. Может принимать значения от 0 до 127. Многими трекерами это поле не поддерживается, так как для за- цикливания есть более эффективные средства.
  5. Таблица паттернов. Смещение относительно начала файла - либо 472, если в модуле 15 сэмплов, либо 952, если 31 сэмпл. Представляет собой одномер- ный массив из 128 элементов (позиций) размером 1 байт. В каждой позиции хранится номер паттерна. К композиции относятся только первые позиции, количество которых определяется длиной песни. Чтобы узнать количество паттернов в модуле, надо просканировать эту таблицу ( все 128 элемен- тов!). Наибольшее значение, увеличенное на 1, даст количество паттер- нов. В принципе, в модуле могут находится паттерны, не относящиеся к композиции. О максимально возможном количестве паттернов см. ниже.
  6. Сигнатура модуля. В модулях с 15 сэмплами сигнатура отсутствует, поэтому сразу за таблицей паттернов по смещению 600 начинается первый паттерн. Сигнатура есть только в модулях с 31 сэмплом, где она находится по сме- щению 1080, имея длину 4 байта. Теоретически, никаких ограничений на это поле нет, - здесь могут находится произвольные четыре байта. Но по обще- принятому правилу, сигнатура - это четыре ASCII-символа с кодами от 32 до 127. По сигнатуре или ее отсутствию определяется количество каналов и сэмплов в модуле. По смещению 1080 считываются 4 байта. Для модулей с 15 сэмпла- ми по этому смещению находится элемент первого паттерна, расположенный в строке 30 на первом канале, первый байт этого элемента не больше 15 (см. формат элемента паттерна). Для модулей с 31 сэмплом первый байт сигнату- ры не меньше 32. Таким образом определяется количество сэмплов в модуле, а для модулей с 15 сэмплами еще и количество каналов - оно всегда равно
  7. Если в модуле 31 сэмпл, то количество каналов определяется по сигна- туре. Известными на сегодняшний день сигнатурами являются:
    1. сигнатура 2CHN означает, что каналов 2;
    2. сигнатура M.K. , M!K! или FLT4 - 4 канала;
    3. сигнатура 6CHN - 6 каналов;
    4. сигнатура FLT8 , 8CHN или OKTA - 8 каналов;
    5. сигнатура вида 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).


Оглавление | Следующая

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог