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