====== Музыкальный пакет MEDIA ======
FIXME
{{med230.png?nolink}}
Автор: Сергей Новосельцев (1987-1988).
Музыкальный пакет "MEDIA" является инструментальным программным средством (ПС) для разработки музыкального сопровождения учебных, игровых и демонстрационных программ для ПЭВМ MSX. Пакет состоит из музыкального редактора MED и [[msx:maestro:maestro#GRPLIBM|библиотеки функций для языка C]].
ПЭВМ MSX оснащены трёхголосным программируемым звукогенератором ([[msx:psg:psg|PSG]]) GI AY-3-8910, имеющим диапазон 8 октав и генератор шума. Для программной поддержки [[msx:psg:psg|PSG]] в языке [[msx:basic:|]] имеется оператор ''[[msx:basic_dialogue_programming_language:006#play|PLAY]]'' с встроенным языком MML (Music Macro Language), позволяющим в символической форме представлять нотную запись а также управлять громкостью и формой звукового сигнала; однако среда [[msx:basic:|]] мало приспособлена для создания программ профессионального уровня. В системе же [[msx:dos:|]] музыкальные средства отсутствуют.
Пакет "MEDIA" предоставляет разработчикам программ в [[msx:dos:|]] удобный инструмент подготовки музыкальных фрагментов для [[msx:psg:|PSG]], включения их в программу и управления исполнением, создания музыкальных и шумовых эффектов.
Пакет "MEDIA" разработан в рамках идеологии [[msx:maestro:maestro|ПС "МАЭСТРО"]] и предназначен для использования вместе с ним.
Автор выражает благодарность А.Родионову за идейную и техническую поддержку разработки.
Дополнительную информацию о музыкальных возможностях [[msx:basic:|]] можно узнать тут:
* [[msx:basic_dialogue_programming_language:006]]
* [[msx:using_musical_means_in_basic:using_musical_means_in_basic|]]
8-) В нём написана музыка: [[msx:ar_games:|]]
====== Язык MML+ ======
В качестве основы нотной записи использован язык [[msx:basic_dialogue_programming_language:006:#mml|MML]], реализованный в [[msx:basic:|]] со следующими дополнениями:
* при записи нот большие и малые буквы обозначают разные октавы, большие буквы относятся к октаве, указанной в операторе ''О'', a a малые — к ''O+1'' ; это существенно сокращает количество операторов ''О'' в нотной записи.
Например
о3AbCda
''A'',''C'' — октава 3, ''а'' ''b'',''d'',''a'' — октава 4.
* оператор ''Zn[-]'' повышает (а если указан "-" — понижает) все последующие звуки на "n" полутонов.
* оператор ''Un[-]'' понижает или повышает все последующие звуки, увеличивая или уменьшая на "n" единиц делитель частоты PSG.
* знак '':'' устанавливает на первую следующую за ним ноту или паузу указатель начала цикла для очереди пакетов данного голоса (см. описание функции play()).
* разрешено произвольное количество пробелов в строке, они игнорируются; это позволяет поддерживать "вертикальность" записи аккордов.
* текст между операторами ''<'' и ''>'' рассматривается как комментарий и не транслируется.
* трансляция заканчивается, если встречен символ "%" или "\0".
Операторы для управления LFO и шумом (LFO — Low Frequency Oscillation — изменение частоты звучания генератора относительно основной загруженной ноты):
* операторы ''['' и '']'' включают и выключают LFO для соответствующего голоса; за оператором [ может следовать цифра 0, 1 или 2, задающая форму LFO:
* ''╱╲''
* ''╲╱''
* ''_∏''
* операторы ''{'' и ''}'' включают и выключают LFO для шума; за оператором ''{'' может следовать цифра 0, 1 или 2, задающая форму LFO:
* ''╱╲''
* ''╲╱''
* ''_∏''
* операторы ( и ) включают и выключают шум в соответствующем голосе.
* оператор ''*a'' задаёт амплитуду LFO для данного голоса.
* оператор ''*t'' задаёт период LFO для данного голоса.
* оператор ''/a'' задаёт амплитуду LFO для шума.
* оператор ''/t'' задаёт период LFO для шума.
* оператор ''/f'' задаёт период шума.
Исключён из языка оператор ''X'' подстановки переменной [[msx:basic:|]].
Данный язык будет в дальнейшем обозначаться MML+.
====== Работа с музыкальным редактором MED ======
Музыкальный редактор MED позволяет вести экранное редактирование нотной строки, состоящей из четырёх строк - по одной для каждого из трёх голосов и строки комментариев. При этом осуществляется горизонтальный скроллинг нотной строки.
MED транслирует нотную запись MML+ в формат системной музыкальной очереди, обеспечивает прослушивание полученных фрагментов однократно или в цикле. Можно также включать шум в каждом из голосов, менять характеристики шума, управлять LFO независимо в каждом голосе.
При этом текущее состояние параметров LFO и шума непрерывно отображается на экране.
Записанные музыкальные фразы могут быть сохранены на диске в исходной (MML+) форме или в виде оттранслированного, готового к исполнению программой пользователя музыкального фрагмента, а также могут быть загружены с диска.
Редактор снабжён четырьмя страницами подсказок, которые высвечиваются в верхнем окне экрана. Первая страница описывает клавиши управления редактированием, вторая - операторы языка MML+, третья - операторы MML+ для прямого управления PSG, четвёртая - формы огибающих для оператора S MML+.
После вызова программы MED на экране появляются нотная строка, CUT/PASTE буфер, окно музыкальной очереди, окно прямого управления PSG и строка главного меню с подсвеченным курсором.
Нажатием клавишей → и ← курсор меню устанавливается на нужную функцию; для вызова функции надо нажать пробел или 'Ввод '⏎.
Из главного меню вызываются функции:
* [[#EDIT]]
* [[#LOAD]]
* [[#SAVE]]
* [[#BLOAD]]
* [[#BSAVE]]
* [[#QUIT]]
Во всех четырёх дисковых функциях: [[#LOAD]], [[#SAVE]], [[#BLOAD]], [[#BSAVE]] после выбора функции в верхнем окне экрана появляется запрос: "enter file name:", в ответ на который следует ввести требуемое имя файла.
Для отмены функции и возврата в меню можно нажать STOP или ESC.
===== EDIT =====
Переход в режим редактирования.
Режим редактирования.
После выбора функции "EDIT" главного меню строка меню стирается с экрана, на её месте появляется строка подсказки; кроме того, в верхней части экрана появляется текущая страница подсказки. Переключение страниц подсказки производится нажатием SHIFT+F5.
Редактирование осуществляется в режиме скроллинга строки при неподвижном курсоре. При этом номер позиции, в которой находится курсор, высвечивается над нотной строкой.
Клавиши управления редактированием:
|↑ и ↓|перемещают курсор со строки на строку.|
|← и →|двигают строку.
|SHIFT+← и SHIFT+→|двигают строку с шагом 20 символов.|
|HOME|устанавливает курсор на начало строки.|
|HOME+SHIFT|устанавливает курсор на последний символ в строке.|
|INS|переключает режимы вставки/замены символов (текущий режим указан надписью >INSERT< / OVERTYPE в правой части экрана).|
|BS (backspace)|стирает символ слева от курсора.|
|DEL|стирает символ, на который указывает курсор.|
|SHIFT+CTRL+DEL|стирает все символы текущей строки справа от курсора.|
|GRAPH|PASTE: содержимое CUT/PASTE буфера копируется в нотную строку, начиная с позиции курсора.|
|SELECT|транслирует содержимое строчных буферов голосов 1-3 в музыкальную очередь; в каждой из строк трансляция прекращается по достижении последнего не пробела или символа '%'. В окне музыкальной очереди высвечивается информации о длине музыкальной очереди для каждого из голосов и общей длине музыкального фрагмента, а также продолжительность звучания каждого голоса - в тиках и в секундах. \\ Запускает исполнение музыки.|
|'Ввод '⏎|play; запускает исполнение музыки, однократно или в цикле. Во время исполнения можно продолжать редактирование.|
|STOP|"выключает" музыку.|
|STOP+SHIFT|приостанавливает/продолжает исполнение музыки.|
|F1, F2, F3, F4|включает/выключает LFO для голосов 1-3 и шума. Для голосов, в которых включён LFO, подсвечивается соответствующая колонка в строке "LFO on" окна прямого управления.|
|F5|устанавливает/сбрасывает признак циклического исполнения. \\ Если установлен признак цикла, на экране появляется подсвеченная надпись "CYCLE".|
|F1+SHIFT, F2+SHIFT, F3+SHIFT|включает/выключает шум в голосах 1-3. \\ Для голосов, в которых включён шум, подсвечивается колонка в строке "Noise on" окна прямого управления.|
|F1+CTRL, F2+CTRL, F3+CTRL, F4+CTRL|меняет форму LFO для голосов 1-3 и шума.|
|←+CTRL, →+CTRL|перемещение курсора LFO по строке параметров LFO. \\ В этой строке отображаются текущие значения параметров *a, *t для каждого из голосов и /a, /t, /f для шума.|
|↑+CTRL, ↓+CTRL|увеличение или уменьшение параметра LFO, на который указывает курсор LFO.|
|ESC+SHIFT|сброс всех параметров LFO, выключение LFO и шума.|
|ESC|выход из режима редактирования в главное меню. Окно подсказки стирается, музыка выключается.|
|SHIFT+F5|Вывод справки (подсказки)|
==== CUT/YANK ====
|TAB (1-е нажатие)|переход из режима редактирования в режим CUT/YANK; в этом режиме можно только управлять движением нотной строки; при этом помечается блок текста.|
Выход из режима CUT/YANK может осуществляться следующими способами:
|TAB (2-e нажатие)|YANK: отмеченный блок копируется в CUT/PASTE буфер; возврат в режим редактирования.|
|TAB (2-e нажатие)+SHIFT|CUT: отмеченный блок пересылается в CUT/PASTE буфер; возврат в режим редактирования.|
|TAB (2-e нажатие)+CTRL|возврат в режим редактирования.|
===== LOAD =====
Загрузка символического файла для редактирования.
Если первым символом файла является "%", файл загружается в строчные буфера, начиная с буфера комментариев. Загрузка в каждом буфере начинается с позиции, в которой находился курсор. Разделителями голосов являются знаки "%" или "\0"(0). Знаки–разделители в буфер не переписываются. Также подавляются знаки с шестнадцатеричным значением < 0x20. Максимальная длина каждого голоса 700 байт. Если редактор при вызове функции LOAD находился в режиме замены (OVERTYPE), то старое содержимое буферов, начиная с позиции курсора, стирается; если был включён режим вставки (>INSERT<), это старое содержимое добавляется в конец буфера после вновь загруженного; при этом стирается буфер CUT/PASTE.
Если первый символ файла не "%", файл переписывается в буфер CUT/PASTE (700 байтов), а строчные буфера не изменяются.
===== SAVE =====
Строчные буфера переписываются в файл на диске.
Если в записи содержится символ "%", то символы, стоящие в строке данного голоса правее %, не записываются на диск.
Первым символом файла, а также после каждого голоса записываются "%".
===== BLOAD =====
Файл с диска ( музыкальный фрагмент ) переписывается в область музыкальной очереди редактора (до 10500 байтов).
Фрагмент можно затем прослушать функцией play редактора.
Дальнейшее редактирование фрагмента невозможно.
===== BSAVE =====
Готовый музыкальный фрагмент из области музыкальной очереди редактора записывается на диск.
===== QUIT =====
Выход из редактора в [[msx:dos:|]].
{{tag>MSX Programming Rodionov_A_B}}