====== Музыкальный пакет 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}}