ZX Forum
#04
19 ноября 1997 |
|
Мир звуков Спектрума - глава 5: Оператор PLAY для музыкального сопроцессора AY- 3-8910 (AY-3-8912).
5. Оператор PLAY С этой главы начинается часть книги, посвященная музыкальному сопроцессору AY- 3-8910 (или AY-3-8912), встроенному в ZX- Spectrum 128, а также во все его модифика- ции. При включении ZX-Spectrum 128 на экра- не появляется меню, предлагающее на выбор несколько пунктов. Все они неплохо описа- ны в [2], в нашем же случае выберите пункт 128 BASIC. В этом режиме Вам становится доступен оператор PLAY, обслуживающий му- зыкальный сопроцессор. В общем виде формат оператора PLAY вы- глядит так: PLAY A$[,B$,C$,D$,E$,F$,G$,H$] где A$...H$ - символьные строки, задающие музыкальную программу. Сам сопроцессор ис- пользует для управления своими тремя кана- лами (A, B и C) только A$, B$ и C$. Если для Вас три канала много, то Вы можете ис- пользовать только два, или даже один, за- дав соответствующее количество стрингов (пустой стринг также указывает на то, что канал не используется). Остальные строки (D$...H$) предназначе- ны для управления музыкальными инструмен- тами, которые можно подключить к ZX-Spec- trum 128 через MIDI-интерфейс. Все заданные стринги исполняются однов- ременно, что позволяет создавать сложные и красивые мелодии. В стрингах используются специальные ко- манды. Остановимся на них подробнее. Ноты ДО, РЕ, МИ, ФА, СОЛЬ, ЛЯ и СИ те- кущей октавы обозначаются строчными латин- скими буквами, соответственно, c, d, e, f, g, a и b (по международному стандарту). Ноты следующей октавы обозначаются пропис- ными латинскими буквами C, D, E, F, G, A и B. Например, оператор PLAY "cdefgabC" проиграет гамму ДО-мажор. Полутона задаются знаками # (диез) и $ (бемоль), стоящими перед нотой. Например, ДО-диез запишется как #c, а СИ-бемоль - $b. Чтобы проиграть гамму ДО-минор, введи- те PLAY "cd$efg$a$bC". Допустимо использование нескольких дие- зов или бемолей подряд. Так, ноту d можно записать как ##c. Длительность определяется числом от 1 до 9, стоящим перед нотой (табл. 3). Уста- новленная длительность распространяется на все последующие ноты и паузы (см. команду &). По умолчанию устанавливается длитель- ность, равная 5 (одна четвертая). Кроме обычных нот, Вы можете задавать триоли. Для этого используются числа от 10 до 12. Ноты триоли следуют непосредствен- но за числом. Например: PLAY "3fed&11fed&fed" Триоли не изменяют установленной дли- тельности нот. Кроме стандартных длитель- ностей нот Вы можете использовать произ- вольные. Для этого перед нотой через сим- вол подчеркивания ("_") ставят несколь- ко параметров, задающих требуемую длитель- ность. Например, ноту ДО длительностью 3/8 (1/8 +1/4) можно записать так: "3_5c". Длительность всех последующих нот и пауз определяет последний параметр в связке. Довольно странные эффекты получаются при соединении длительностей обычных нот и триолей (например: "3_12cde"). Поэкспери- ментируйте с этим. Про запись нот, вроде бы, все. Теперь о командах: O - изменение октавы. Номер октавы за- дается числом от 0 до 8, следующим за ко- мандой (по умолчанию установлена октава 5). Соответствие параметра команды O музы- кальным октавам приведено в табл. 4. Обра- тите внимание, что ноты ниже b октавы 1 без MIDI-интерфейса воспроизводиться бу- дут неправильно. Также немаловажно, что хотя максимальный номер октавы равен вось- ми, ничто Вам не мешает использовать сле- дующую - девятую, обозначая ноты прописны- ми буквами. N - разделитель параметров. Использует- ся для отделения двух числовых параметров друг от друга. Например, когда надо задать длительность ноты сразу за установкой ок- тавы: "O4N5d". По существу, эта команда является излишеством, так как вместо нее можно использовать пробел: "O4 5d". & - пауза. Длительность паузы устанав- ливается так же, как и длительность ноты (см. выше). Например: "6c&de3&de". V - установка громкости. Громкость за- дается числом от 0 (минимальная - выключе- но) до 15 (максимальная). Например: "V10". По умолчанию установлена громкость 15. W - программирование эффектов. Ноты мо- гут воспроизводиться не только с фиксиро- ванной громкостью, но и со всевозможными эффектами: затуханиями, всплесками и т.д. Характер эффекта задается числом от 0 до 7, в соответствии с табл. 5. По умолчанию установлен эффект 0. X - временной параметр звукового эффек- та. Для эффектов 0...3 параметр задает длительность действия, для 4 и 5 - период, 6 и 7 - полупериод (см. табл.5). Значение параметра выбирается из диапазона 0... 65535. По умолчанию установлено 65535. Эффекты отключаются по завершении стри- нга либо при изменении громкости (команда V). Следующая программа продемонстрирует действие всех эффектов: 10 FOR A=0 TO 7 20 PLAY "UX1000W"+STR$ A+"cdef&" 30 NEXT A К сожалению, в музыкальном сопроцессо- ре всего один генератор огибающей, поэто- му Вам не удастся настроить несколько ка- налов на разные эффекты одновременно. Хо- тя одинаковые эффекты Вы можете использо- вать сразу в нескольких каналах, причем параметры огибающей необходимо задать только в одном из них, а в остальных дос- таточно указать команду U (см. выше). T - темп исполнения. Задается числом от 60 до 240. По умолчанию устанавливается темп, соответствующий команде T120. За- дать темп можно лишь для всей мелодии в целом, поэтому он определяется только в стринге канала A (в других каналах коман- да T игнорируется). (.) - повтор (репризы). Музыкальная фраза, взятая в скобки, повторится два ра- за. Допустимо использовать скобки в скоб- ках (до 4 вложений). Закрывающая скобка без соответствующей ей открывающей заста- вит музыкальную фразу повторяться беско- нечно от начала стринга. Используется это, например, в басовых и ударных партиях. H - останов оператора PLAY. Встретив эту команду в стринге любого канала, опе- ратор PLAY закончит свою работу. Команда используется, например, для выхода из "за- цикленной" басовой партии, когда заканчи- вается основная мелодия. !.! - комментарий. Используется для вставки пояснений. Например: PLAY "!SCALE:!cdefgabC". Если после комментария в стринге ника- ких команд нет, то закрывающий знак "!" ставить необязательно. M - устанавливает режим работы каналов. Каждый канал может воспроизводить не толь- ко чистый тон, но и так называемый белый шум. Распределение режимов задается чис- лом от 1 до 63, определяемым суммой кодов, соответствующих режиму каждого из каналов (табл. 6). Как и генератор огибающей, ге- нератор шума в музыкальном сопроцессоре только один, поэтому Вам не удастся нас- троить несколько каналов одновременно на шум с разной частотой. По умолчанию все три канала настроены на тон (команда M7). В следующем примере канал A настраи- вается на тон, а канал B - на шум: PLAY "M17cegbdfaCH","O3cC)". Если Вы укажете команду M0, то все ка- налы будут молчать, а Вы услышите потрес- кивание. Y - установка канала MIDI-интерфейса. Число от 1 до 16, следующее за командой, задает номер канала интерфейса, в который необходимо направить вывод музыкальных данных. Z - передача управляющих кодов MIDI-ин- терфейсу. Код MIDI (число от 0 до 255) должен располагаться сразу за командой. Допустимо передавать сразу два байта. В этом случае их значения нужно отделить друг от друга пробелом или командой N. Обратите внимание, что все команды опе- ратора PLAY должны быть набраны прописны- ми буквами! В заключение приведу краткую сводку ко- манд оператора PLAY (табл. 7) и сообщения об ошибках, которые могут возникать во время его выполнения (табл. 8).
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября