Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Компьютеры -> Аудио -> MOD - Формат и технология воспроизведения


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

  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).


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


 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.