Музыкальный макроязык (MML) — это язык описания музыки, используемый для секвенсирования музыки на компьютерных и игровых системах .
Ранние функции автоматической генерации музыки использовались в аркадных видеоиграх , которые использовали множество компьютерных звуков. Примером ранней популярной аркадной игры с музыкой является The Circus от Exidy Corporation 1977 года.
Расцвет японских видеоигр начался в 1978 году с появления в японских игровых центрах ( залах игровых автоматов ) игры Space Invaders от Taito . [1]
Вся музыка была проприетарной ( с закрытым исходным кодом ). Выпуск программируемого интервального таймера Intel в 1978 году имел большое значение. Генератор прямоугольных импульсов Intel 8253 Mode 3 использовался для музыки в компьютере Kit MZ-40K (Microcomputer Doctor ( Maikon Hakase ,マイコン博士/まいこんはかせ) ) от SHARP Corporation , изготовленный в Японии в мае 1978 года. Еще один микрокомпьютер BASIC MASTER MB-6880(ja) BASIC Master ( BASIC Master ,ベーシックマスター) использовал 5-битный цифро-аналоговый преобразователь автоматического опорного музыкального сигнала. Также важной была разработка метода генерации с использованием программного обеспечения BASIC . [2] Машина была собрана компанией Hitachi и произведена в Японии в сентябре 1978 года. MZ-40K использовал открытую архитектуру и исходные коды программ , поэтому был своего рода программным обеспечением с открытым исходным кодом .
Первые команды для классического MML появились во внутренней архитектуре операционных систем SP-1002 MONITOR IOCS [3] и SP-5001 BASIC на 8-битном компьютере MZ-80K [4] . Создан корпорацией SHARP в 1978 году в Японии . [5] Он включал в себя аппаратное обеспечение Intel 8253 и отображаемый в памяти ввод-вывод. Звуковыми операторами BASIC были MUSIC, TEMPO и BEEP. [6]
Классический MML, используемый в BASIC , описан здесь. " Команды MML " поставляются в операторе MUSIC. Ноты указываются в трехоктавном диапазоне. Песня представляет собой последовательность монотонов.
"+" (или в каком-то старом коде " ̄") обозначает верхнюю октаву, "-" (или в каком-то старом коде "_") обозначает нижнюю октаву. Символы "CDEFGAB" соответствуют гамме ("Doremi Faso Lassi"). Полутон обозначается следующим за нотой символом "#". За названиями нот следует длительность тона, обозначенная числом от 0 до 9. Аналогично, R обозначает паузу, а также за ней следует число от 0 до 9, обозначающее длительность. Внутреннее значение длительности звука × значения TEMPO. Длина тона полушестидесятой ноты равна 0 (внутреннее значение SP-1002 равно 1) - целая нота равна 9 (внутреннее значение SP-1002 равно 32). Музыка, проигрываемая по вызову $0030 SP-1002 IOCS подпрограммы. [7]
Утверждения TEMPO n составляет 1–9, самый медленный 1.TEMPO 4 аналогичен T=120.
Ниже представлена популярная японская песня « tōryanse », написанная с использованием MML на MZ-731 SHARP S-BASIC 1Z-007B (совместима с SP-5001 Upper). [8]
10 ТЕМПО 4 20 A$ = "E5R1E3R0D3R0E3R0E1R0D1R0-B4R1" 30 B$ = "F3R0F1R0F1R0A3R0F1R0E1R0F1R0E1R0D1R0D1R0E4R1" 40 C$ = "C3R0C1R0C1R0E3R0C1R0-B1R0C1R0-B1R0-A1R0-A1R0-B4R1" 50 D$ = "E1R0E1R0E1R0E1R0E1R0E1R0D1R0E1R0E1R0E1R0D1R0-A1R0-A1R0-B4R1" 60 E$ = "-A1R0-B1R0C1R0D1R0E1R0F1R0E1R0F3R1A3R1B1R0A1R0F3R0E3R0E1R0D1R0E4R1" 100 МУЗЫКА A$ + B$ + B$ 110 МУЗЫКА C$ + C$ + B$ 120 МУЗЫКА C$ + D$ + E$
Современный MML изначально появился в Microsoft BASIC и был распространён в начале 1970-х и 1980-х годов на 8-битных и 16-битных японских персональных компьютерах . NEC PC-6001 включал Microsoft BASIC и Programmable Sound Generator в 1981 году. MML был особенно популярен на персональных компьютерах NEC , таких как NEC PC-8801 . [9] С выпуском в 2001 году программного обеспечения mck (Music Creation Kit) для компиляции MML для воспроизведения музыки на Nintendo Entertainment System , [10] осведомлённость и использование MML возросли. [11] В настоящее время MML популярен среди японских электронных музыкантов [9] и музыкантов, которые создают чиптюны [12] как способ писать музыку для Nintendo Entertainment System .
Современный MML возник как подъязык BASIC , затем обычно включался в ПЗУ микрокомпьютеров. PLAY
Оператор использует аргумент для определения строки тонов, которые воспроизводит звуковой чип. Код MML имеет простой текстовый формат, в котором буквы и цифры используются для описания музыкальных нот, которые должны быть воспроизведены. [9] Кроме того, различные реализации MML добавляют системные расширения, позволяющие изменять параметры аудиосинтеза с помощью специализированных команд или упрощать ввод общих музыкальных фигур, таких как арпеджио .
Хотя многие платформы имеют пользовательские расширения, а требования к регистру букв и другие незначительные синтаксические особенности немного различаются в некоторых реализациях, основные правила синтаксиса, команды и особенности, которые определяют MML и присутствуют полностью или частично во всех реализациях, следующие: [9] [13]
cdefgab
— Буквы a
, соответствующие музыкальным высотамg
и вызывающие воспроизведение соответствующей ноты . Диезные ноты получаются путем добавления a или , а бемольные ноты — путем добавления a . Длительность ноты указывается путем добавления числа, представляющего ее длительность как часть целой ноты — например, представляет восьмую ноту C и половинную ноту F♯ .+
#
-
c8
f+2
p
— Пауза или отдых . Иногда также r
, хотя оригинальные IBM и Microsoft BASIC использовали p
, [14] как и все клоны (например, устройства громкоговорителей Linux и BSD). [15] Длительность паузы указывается таким же образом, как и длительность ноты — например, r1
создает целую паузу .o
— После указания числа o
выбирается октава, в которой будет играть инструмент.>
, — Используется для перехода на одну октаву<
вверх или вниз .l
— После этого следует число, которое определяет длину по умолчанию, используемую нотами или паузами, которые явно не определяют ее. Например, l8 g a b g l16 g a b g
создает серию из четырех восьмых нот , за которой следует серия из четырех шестнадцатых нот .v
— После этого следует число, задает громкость инструмента. Диапазон допустимых значений зависит от конкретного используемого звукового оборудования. Некоторые реализации также позволяют применять огибающую ADSR к амплитуде каждой ноты.t
— После этого следует число, задает темп в ударах в минуту . На оборудовании с более чем одним звуковым каналом часто можно установить каждый канал на разный темп.В дополнение к этому большинство реализаций добавляют собственные ключевые слова и символы для улучшений или расширений, характерных для конкретной системы.
Ниже представлена современная транскрипция Танца кукушек на MML (с пробелами для ясности, хотя некоторые интерпретаторы MML требуют их удаления перед воспроизведением).
т104л4>с16ф16а>с8<а с16ф16а>с8<а с8б-8>с8<б-8 г с8а8>с8<а8 ф с16ф16а>с8<а с16ф16а>с8<а с8б-8>с8<б-8 г >с8<ф2
Standard Musical eXpression (SMX) — это вариант Modern MML, представленный Microsoft в QBASIC , BASICA и заявлении GW-BASIC . PLAY
[ 9] Версия, используемая GW-BASIC, является частью современных BSD, FreeBSD , [16] NetBSD , OpenBSD и MirOS ; см. speaker(4) для получения информации о языке. [17]
PLAY
, который принимает строковый аргумент в формате SMX. [18] [19] [20] Название «Music Macro Language» может происходить от GW-BASIC, который предоставлял возможность «воспроизводить музыку, встраивая музыкальный макроязык в строковый тип данных». [21] Компилятор SBasic из немецкого журнала DOS Extra, созданный DMV Widuch, предлагает ту же команду PLAY, а программа BASIC из нескольких строк может быть скомпилирована в небольшой (несколько КиБ) инструмент для воспроизведения любых файлов MML (часто называемых *.PLY), указанных в командной строке.PLAY
заявлении, как и несколько других реализаций BASIC, произведенных или проданных NEC . [9] [23]BGMPLAY
функции, которые могут использовать либо предустановленную дорожку MML, либо дорожку, представленную в виде строки.{{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )