Иллюстрированный самоучитель по Basic, вводный курс

Музыка в Бейсике (оператор PLAY)

Оператор play позволяет составлять музыкальные фрагменты и проигрывать их в различных сочетаниях в ходе выполнения программы. Как и оператор draw, оператор play имеет свой набор команд для определения мелодии. С помощью этих команд вы можете задать темп, октаву, паузы и другие музыкальные характеристики. Команды объединяются в строку и присваиваются строковой переменной. Когда вы захотите услышать мелодию, обратитесь к оператору play с командой:

"X"+VARPTR (строковая переменная)

В представленной ниже программе оператор play используется для последовательного проигрывания нот в семи октавах.

Последовательно проигрывает все ноты в 7 октавах:

scale$ = "CDEFGAB" PLAY "LI6" FOR I = 0 ТО 6
PLAY "0" + STR$(1%)
PLAY "X" + VARPTR$(scale$) NEXT I

А вот еще один пример – всем известная мелодия "Happy birthday to you!".

CLS
PLAY "L8 MF MS 03 GG L4 AG 04 С 03 L2 В"
PLAY "L8 MF MS 03 GG Ы AG 04 D L2 C"
PLAY "L8 MF MS 03 GG L4 04 GE L8 CC 03 L4 В А"
PLAY "04 L8 FF L4 ECD LI C"
END

Все команды оператора play перечислены в табл. 3.4. Испытав их, вы убедитесь, что они предоставляют широкие возможности для "музицирования". Таково еще одно замечательное применение двоичного кода.

Таблица 3.4. Команды оператора PLAY.

Команда Действие
Буква от А до G Исполнение ноты, обозначенной указанной буквой
Буква от А до G, за которой следует знак #, + или - Исполнение ноты в соответствии с буквой, где знак # или + означают "диез", а знак - соответствует "бемоль"
Lx Исполнение последующих нот с интервалом 1/х, где х меняется в диапазоне от 1 до 64
Ox Играть в октаве х. Третья октава начинается со среднего "ми" (нота С). Всего имеется семь октав (с 0 по 6), расположенных между "ми" и "ре" (от С до В)
Px Пауза длительностью 1/х (х от 0 до 64)
Tx Задание темпа или четвертных нот, исполняемых в минуту (х может меняться от 32 до 255; по умолчанию равно 120)
Nx Исполнение ноты х, которая может меняться от 0 до 84. Каждая октава имеет 12 нот, включая диезы и бемоли. 0 означает паузу
MN Нормаль. Каждая нота звучит 7/8 времени, заданного в команде L
ML Легато. Каждая нота звучит полный интервал, заданный в команде L
MF Стаккато. Каждая нота звучит 3/4 времени, заданного в команде L
MS Установка режима непосредственного исполнения. Каждая нота, заданная в операторах PLAY и SOUND, исполняется только после завершения предыдущей. Исполнение программы приостанавливается до окончания музыки. Этот режим принимается по умолчанию
MB Установка режима фонового исполнения. Каждая нота, заданная в операторах PLAY и SOUND, сохраняется в отдельном буфере и исполняется в процессе работы основной программы
. (точка) Увеличение продолжительности звучания на 50%

Фоновая музыка – весьма эффективное средство, дополняющее визуальное восприятие работы компьютера. Она успокаивающе действует на нетерпеливого клиента, который вынужден ждать, скажем, окончания выполнения программы службы знакомств.

В очередной программе фоновая музыка делает поздравление из ранее рассмотренного примера более теплым. В операторах play команда mf заменена командой мв (фоновое исполнение). В результате программа выводит на экран имя именинника, не дожидаясь окончания музыки. Музыка продолжается в процессе исполнения цикла for…next, во время которого на экране пишется имя крокодила Гены.

' Поздравление с днем рождения!
CLS
PLAY "L8 MB MS 03 GG L4 AG 04 С 03 L2 В"
PLAY "L8 MB MS 03 GG L4 AG 04 D L2 C"
PLAY "L8 MB MS 03 GG L4 04 GE L8 CC 03 L4 В А"
PLAY "04 L8 FF L4 ECD LI C"
FOR I = 1 TO 24
LOCATE I, I
PRINT "КРОКОДИЛ ГЕНА, С ДНЕМ РОЖДЕНИЯ!" NEXT I END

В следующей программе параметр х цикла for…next внутри цикла используется для обозначения длительности звучания ноты G (соль) в третьей октаве.

FOR X = 1 ТО 64
PLAY "L" + STR$(X)
PLAY "03G" NEXT

Поскольку аргумент команды L является знаменателем дроби, обозначающей длительность ноты, с возрастанием х длительность звучания становится все короче. Запустите программу и вы услышите музыку, напоминающую звук скачущего пластмассового шарика.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.