(C) VfNG/NEW Многим в процессе написаний эффектов не хватало где-нибудьпары тысяч тактов. Обычно в таких случаях первым делом пытаютсяоптимизировать проигрыватель музыки. Думаю, что не лишним будетопубликовать форматы компилированых модулей самых известныхмузыкальных редакторов. Это немного облегчит вам жизнь и сделаетболее простым ковыряние в старом PLAYER'е. Начнем, пожалуй, с PRO TRACKER 2.101 by GDC. В следующий раз,может быть, опубликуем формат музыки STP PRO. Tерминология:QUARK: те элементы, из которых состоят SAMPLES, ORNAMENTS.QUANT: число QUARKS в каждом элементе PATTERN. Фактически-ско-рость проигрывания;PATTERN: куплет;POSITION LIST: порядок проигрывания PATTERNS;POSITION: позиция в POSITION LIST; Формат компилированого модуля: +0 DELAY-число QUARKS, за которое проигрывается 1 QUANT; +1 MUS_LEN-число позиций в мелодии; +2 LOOP TO POSITION-номер позиции, в которую будет производитьсязацикливание по проигрывании всей мелодии (0-#FF); +3,64 SAMP_A-смещения от +0 до каждого из 32-х SAMPLE. SAMPLE с но-мером 0-не описан. Его номер используется для заглушения канала. +67,32 ORN_A-аналогично SAMP_A для 16 орнаментов. Орнамент номер0-отсутствие орнамента. +99,2 PAT_OFFSET-смещение от +0 до первого описателя PATTERN'овPAT. +101,30 NAME-имя музыки в ASCII. +131 POSITION LIST-список позиций-номера PATTERN для каждой пози-ции. Окончание таблицы-#FF. +? PAT-описатели PATTERN'ов. Kaждый PATTERN состоит из 3-х кана-лов. В этой таблице-смещения от +0 до описателей каналов каждогоPATTERN. Таким образом по 6 байт/PATTERN. Окончание табли-цы-#0000. +? CHAN-описатели каналов. Канал представлен в виде списка бай-тов, которые анализируются следующим образом:LOOP LD A,(DE) INC DE ADD A,#20 JR C,L1 ADD A,#60 JR C,L2 ADD A,#10 JR C,L3 ADD A,#10 JR C,L4 ADD A,#40 JR C,L5 ADD A,#10 JR C,L6 INC A JR Z,L7 INC A JR Z,L8 INC A JR Z,L9 INC A JR NZ,L10L11 Отключение команд и переход на LOOP.L10 Извлечь следующий байт-в нем значение прибавления к частотеNOISE. Затем на LOOP.L9 Извлечь три байта. В 1-м значение PORT, т.е. то число, кото-рое будет прибавляться к текущей частоте ноты. Следует учесть,что значение частоты самой высокой ноты самое маленькое, а самойнизкой-самое большое, значит: положит. 128-255, отриц. 0-127. Во2-м и 3-м байтах-разница в значениях частоты новой (той на кото-рой вызван PORT) и предидущей ноты. Существует ошибка компилято-ра, который неверно определяет это значение, если новая нотастоит в начале PATTERN. Команду следует выключить, когда суммаприбавлений из +1 превысит значение +2,+3. Переход на LOOP.L8 Извлечь 1 байт. В нем значение GLISSADE. Знаки-аналогичноPORT. Затем переход на LOOP.L7 Извлечь 1 байт. В нем значение для DELAY (скорость проигрыва-ния). Затем переход на LOOP.L6 В А-громкость (0-F). Это значение умножается на 16 и прибав-ляется к началу таблицы TABL1. К полученому значению следует от-носиться как к началу 16-байтовой таблицы, где содержаться зна-чения для регистров амплитуды сопроцессора для каждого значенияизвлекаемого из SAMPLE. Затем переход на LOOP.L5 В А-сколько QUANTS не надо проводить анализ канала, т.е.расстояние в QUANTS между очередными изменениями параметров ка-нала. Затем на LOOP.L4 В А-номер орнамента. Если равен 0, то отсутствие орнамента.Переход на LOOP.L3 Если А=0 то выход. Если 0<А" DB #01,",",#01 DB #1C,#01,#0A DB #01,#FC,#00 DB #EF,#00,#E1 DB #00,#D6,#00 DB #C8,#00,#BD DB #00,#B2,#00 DB #A8,#00,#9F DB #00,#96,#00 DB #8E,#00,#85 DB #00,"~",#00 DB "w",#00,"p" DB #00,"k",#00 DB "d",#00,"^" DB #00,"Y",#00 DB "T",#00,"O" DB #00,"K",#00 DB "G",#00,"B" DB #00,"?",#00 DB ";",#00,"8" DB #00,"5",#00 DB "2",#00,"/" DB #00,",",#00 DB "*",#00,"'" DB #00,"%",#00 DB "#",#00,"!" DB #00,#1F,#00 DB #1D,#00,#1C DB #00,#1A,#00 DB #19,#00,#17 DB #00,#16,#00 DB #15,#00,#13 DB #00,#12,#00 DB #11,#00,#10 DB #00,#0F,#00;---------------------------------------------------------------TABL1 ;ИНИЦИАЛИЗИРУЕТСЯ ПРОЦЕДУРОЙ ;INITVOLVOLTAB DS #F0TABL1_F DS #10;---------------------------------------------------------------LF748 DB #00 ;COUNTER ALF749 DB #00 ;COUNTER BLF74A DB #00 ;COUNTER C;---------------------------------------------------------------LF74B DB #00 ;TONE ALF74C DB #00LF74D DB #00,#00 ;TONE BLF74F DB #00,#00 ;TONE CLF751 DB #00 ;NOISELF752 DB #00 ;MASKSLF753 DB #00 ;AMPLITUDE ALF754 DB #00 ;AMPLITUDE BLF755 DB #00 ;AMPLITUDE CLF756 DB #00 ;ENVELOPE TYPELF757 DB #00 ;ENVELOPE PERIODLF758 DB #00 ;;---------------------------------------------------------------SMP_A DS #40ORN_A DS #20;---------------------------------------------------------------