Beep Tracker v1.0fix7 13.4.2010 +в ордере два раза Home - переход на самое начало музона (0-ю строчку в паттерне) +на экране виден номер версии -модули длиннее одной позиции грузились правильно только по второму разу (загрузка, перемотка, загрузка) -loop не сохранялся в модуле -в BEEPSHOW неправильно учитывался loop (плеер сам по себе не учитывает loop, выставленный в модуле!) Сонг "BigBeep" в комплекте, используйте как образец. Beep Tracker v1.0fix6 15.7.2009 Beep Tracker v1.0fix5 10.7.2009 Beep Tracker v1.0fix4 09.7.2009 Используется 5-канальный импульсный плеер а-ля Tim Follin с добавлением цифровых ударных. Ширину импульсов в каждом канале можно регулировать независимо. Она влияет на громкость и тембр. Если импульс в одном канале приходится на одно время с импульсом в другом канале, то эти импульсы выдаются поочерёдно. Таким образом, каждый канал (даже если его выход выключен) даёт наводку на всех остальных каналах. Средний период каждого канала независим от остальных, но на слух имеет значение не средний период, а, по-видимому, самый частый период. Поэтому верхние ноты играют несколько завышенно (каждый канал ниже этой ноты завышает её примерно на 1/50 частоты). Чтобы компенсировать фальшь, можно использовать команду shift. Для каждого канала и ударников можно указать кнопками T,Y, в какое устройство он будет выводиться: бипер, магнитофон, бипер+магнитофон или никуда. Последний вариант можно использовать во время отладки музыки, чтобы слушать каналы по раздельности. Бипер можно включать/выключать во время проигрывания - кнопками D,1,2,3,4,5 по каналам. При отключении каналов соответствующие им импульсы продолжают генерироваться. Этого невозможно избежать, иначе уедут частоты. При нулевой громкости в канале (в том числе при паузе) автоматически используется нота в 4-й октаве (в каждом канале разная). Так избегается паразитный гул выключенных каналов. В редакторе для одних полей используется десятичная система счисления, а для других - шестнадцатеричная. Десятичные поля помечены значком "10". Композиция состоит из позиций (не более 255). У каждой позиции своя длина в нотных строках (не более 64). В каждой позиции задаются номера использованных треков для темпа, ударных, канала 1, канала 2, канала 3, канала 4 и канала 5. Список позиций называется ордером. Он показан на экране над окном редактирования паттерна. Переход между редактированием паттерна и редактированием ордера - кнопкой "o". Для всех треков (трёх разных типов: темп, ударные, тональник; впрочем, технически темп и ударные хранятся в одинаковом формате) используется общая нумерация 00..FF. Редактор ордера не даёт возможности подставить в клеточку трек не того типа. У композиции есть позиция зацикливания, которую можно указать кнопкой "k" в режиме редактирования ордера. Каждый трек имеет 64 строки независимо от того, какая длина указана в ордере. Поэтому можно использовать один и тот же трек, например, в одном месте как 64-строчный, а в другом - как 32-строчный. Двигаться по ордеру можно кнопками PageUp (CS/3) (на позицию вверх) и PageDown (CS/4) (на позицию вниз с учётом зацикливания). В режиме редактирования ордера то же делают кнопки "вверх" и "вниз". Действуют также кнопки Home (SS/Q) и End (SS/E). В режиме редактирования паттерна двойное нажатие кнопки Home переводит курсор на середину паттерна. В ордере можно набирать номера треков непосредственно цифрами. Для этого надо ввести две шестнадцатеричных цифры. Если вторая кнопка - не цифра, то ввод отменяется. Такой же способ действует для длины позиции, но там число десятичное. Можно получить свободный номер трека автоматически - кнопкой Del (CS/9). Можно получить свободный номер трека и скопировать туда содержимое текущего трека - кнопкой "v". И в паттерне, и в ордере действует кнопка удаления строки со сдвигом текста вверх - BackSpace (CS/0). В ордере она сдвигает всю таблицу, в паттерне только текущий трек. И в паттерне, и в ордере действует кнопка вставки строки со сдвигом текста вниз - Ins (SS/W). В ордере она дублирует строку и сдвигает всю таблицу, в паттерне вставляет чистую строку и сдвигает только текущий трек. Во всех цифровых полях паттерна (в том числе в темпе) "." означает, что используется старое значение параметра. Используется 8 цифровых ударных длиной 4096 байт и частотой дискретизации порядка 22 кГц. Они хранятся в виде одного блока длиной 4096 байт (каждый трек лежит в определённом бите). Номера ударных - 1..8. Значение 9 в колонке ударника означает паузу. Каждая нотная строка звучит в течение целого числа условных квантов. Один квант равен 256 байтам ударника - порядка 46500 тактов (1/75 секунды). Темп в колонке темпа задаётся в квантах. Громкости (ширины импульсов) и частоты в соответствии с параметрами нот меняются один раз за квант. Поведение громкости определяется первыми 4 цифрами при ноте: 1. TL (Total Level) - громкость (начальная). Если в этом поле стоит 1 или 2, то используется текущая накопленная громкость, и она будет спадать (если 1) или расти (если 2). Если в этом поле стоит 3, то громкость будет расти от нуля. 2. DR (Decay Rate) - скорость спада (или роста, см. TL). 3. SL (Sustain Level) - уровень громкости, по достижении которого начнётся скорость SR (см. ниже). 4. SR (Sustain Rate) - скорость спада (автоматически включается спад!) после достижения SL. Манипулируя этими числами, можно получить развитие громкости типа |\, типа /\, типа |`- и др. Скорость "1" - нулевая. В остальном используется логарифмическая шкала: скорость "B" в 2 раза меньше скорости "D", а та в 2 раза меньше скорости "F" и т.п. Шкала громкостей тоже логарифмическая. Поведение частоты определяется последними 2 цифрами при ноте: 5. GM (Gliss Mode) - тип изменения частоты (команда). Команды 1/2 - слайд (плавное глиссандо, портаменто) вниз/вверх. Команды 3/4 - фиксированный сдвиг частоты (относительно заданной ноты) вниз/вверх. Значения 5..F задают полупериод вибрато. 6. GR (Gliss Rate) - скорость слайда/вибрато или величина сдвига частоты. Шкала логарифмическая. Значение "1" соответствует нулевой скорости или нулевому сдвигу. Память под треки выделяется динамически. В памяти они лежат в упакованном виде. Записываются в память они при переходе между позициями, при нажатии кнопки проигрывания, при переходе в файловый диалог и в некоторых других случаях. Сколько осталось свободного места - показывается вверху ("Free"). Ноты располагаются на клавишах следующим образом: s d g h j z x c v b n m Если нажать ноту с CS, то она введётся на октаву выше, а если с SS - на октаву ниже. Текущая октава выбирается в поле ноты кнопками 1..4. Стереть текущую ноту - Del (CS/9). Стереть текущую ноту с параметрами - "=" (SS/L). Пауза - "r". Автоматическая прокрутка при вводе нот или параметров (а также удаления и раздвижения строк) регулируется комбинациями SS/0..SS/8. Проиграть с текущего места можно кнопкой Enter (её надо держать во время проигрывания). Бипер можно включать/выключать во время проигрывания - кнопками D,1,2,3,4,5 по каналам. Перед проигрыванием насильственно выключается турбо-режим (в порт #EFF7 засылается значение #10). Переход в файловый диалог - кнопка Break (CS/Space). Там надо ввести "s" (сохранить модуль) или "l" (загрузить модуль), или что-либо другое (выйти из файлового диалога). Потом надо ввести имя файла. Файловый диалог написан на Бейсике. Модуль генерируется по адресу 24576. При входе в файловый диалог происходит компиляция: данные, используемые для редактирования, перемещаются (не копируются!) в поля модуля и пересчитываются из адресов в смещения. При выходе из файлового диалога происходит декомпиляция: данные перемещаются обратно и пересчитываются в адреса. Таким образом происходит экономия ОЗУ. Сама программа лежит в конце памяти. Проигрывание в режиме редактирования и при нажатии ноты производится тем же плеером, что предназначен для конечного использования. При нажатии ноты компилируется мини-паттерн из 1 строки. При проигрывании по Enter учитываются параметры нот выше по паттерну. Формат модуля Beep Tracker Все смещения - от начала модуля. Звёздочкой помечены поля, которые не нужны плееру. +0 4 "BEEP" (*) +4 1 номер версии (эта версия формата имеет номер 1) +5 2 смещение, с которого лежат сэмплы +7 1 длина сэмплов/256 +8 2 смещение, с которого лежит ордер +10 2 длина ордера в байтах (*) +12 1 позиция зацикливания +13 2 смещение, с которого лежат описатели треков +15 2 длина описателей треков в байтах (*) +17 2 смещение, с которого лежат треки (*) +19 2 длина треков в байтах (*) +21 6 значения, выдаваемые в порт #FE для каналов D,1,2,3,4,5 ордер: ++0 1 длина паттерна (0=конец ордера) ++1 1 номер трека темпа ++2 1 номер трека ударника ++3 1 номер трека канала 1 ++4 1 номер трека канала 2 ++5 1 номер трека канала 3 ++6 1 номер трека канала 4 ++7 1 номер трека канала 5 описатели треков: ++0 2 смещение, с которого лежит трек, плюс #6000 (в версии 0 было #6204) трек темпа/ударника: 0..63 - skip 64..1 + end line 64 - end of track 65.. - data (0..) трек тональника: 0..25 - skip 26..1 + end line 26 - end of track 27..116 - command + end line (нужно, когда нет ноты) 117..206 - command 207 - R + end line 208..255 - note + end line command: 0..14: GR 1..F 15..29: GM 1..F 30..44: SR 1..F 45..59: SL 1..F 60..74: DR 1..F 75..89: TL 1..F с ближайшего выравнивания на #XX00: сэмплы