ЗВУК_
PLAY, SOUND, SON, SREP, SOFF
Дополнительные звуковые возможности MegaBasic
реализуются двумя операторами: PLAY и SOUND. Совместно с SOUND работают
операторы SON, SREP и SOFF, играющие роль переключателей.
Оператор PLAY воспроизводит заданные звуки
непосредственно в момент своего выполнения интерпретатором MegaBasic.
При этом, естественно, выполнение каких-либо других операторов возможно
лишь после завершения действий, предписанных PLAY (аналогично оператору
ВЕЕР Spectrum-Бейсика).
Иначе работает оператор SOUND. Он лишь
закладывает в специальный «звуковой буфер» данные,
необходимые для воспроизведения звука, а «спусковым
крючком» служит оператор SON, запускающий отработку данных. В
этом случае на фоне воспроизводимого звука возможно продолжение хода
программы (работа в среде так называемого «генератора звука на
прерываниях»).
Прежде чем рассматривать назначение параметров,
входящих в операторы PLAY и SOUND, сделаем несколько общих оговорок.
Во-первых, высота звука указывается не в герцах или нотах той или иной
октавы, а в условных единицах в интервале от 1 до 256. При выходе
значений за эти пределы учитывается только остаток от деления на 256.
Во-вторых, длительность звучания ноты задается не в единицах времени, а
просто количеством звуковых колебаний, поэтому при прочих равных
условиях более высокие звуки оказываются короче.
Отдельно работающие операторы PLAY и SOUND не
позволяют составлять музыкальные фразы, основное их назначение —
генерация разнообразных звуковых эффектов.
Операторы PLAY и SOUND используют по пять параметров:
PLAY_m,s,f,r,q[,r,q...]
SOUND_a,m,q,r,n
Сначала рассмотрим параметры, которые в обоих
операторах имеют одинаковый смысл, и, естественно, обозначены
одинаковыми буквами, хотя они и стоят на разных позициях:
m - «качество» звука: 0 — чистый тон, ненулевое значение — шум;
г - число шагов изменения частоты в пределах
одного цикла звучания. В операторе PLAY значение этого параметра может
быть сколь угодно большим, а в операторе SOUND только от 1 до 256.
Поскольку действие оператора PLAY не удается прекратить даже командами
MegaBasic ESCAPE (Space/E) и RESET (Space/R), то в случае
«перебора» значения параметра г в операторе PLAY проще
перезагрузить MegaBasic, чем дожидаться окончания трелей;
q - смещение частоты от шага к шагу в условных единицах (1...256). Значения параметра от 1 до 127 соответствуют
повышению частоты, а от 129 до 256 — понижению. При q=0 или q=l 28 высота звука не меняется.
Можно помещать в один оператор PLAY несколько
пар параметров г и q с разными значениями, что позволяет разнообразить
звук. Например:
PLAY_0,10,10ОО, 10,10,20,20
Следующие два параметра используются только в операторе PLAY:
s - темп звучания. Ни в одной из версий MegaBasic не удалось заметить, что значение этого параметра как-то влияет на работу PLAY;
f - начальная частота звука (1 ...256)75.
В операторе SOUND тоже имеются два параметра, которым нет аналогов в PLAY:
а — способ заполнения звукового буфера:
при а=0 данные в буфере заменяются, а при ненулевом значении параметра
добавляются к содержимому буфера. Звуковой буфер оператора SOUND
довольно емкий, но не «резиновый». При его переполнении
возможен сбой программы, поэтому следует помнить, что SOUND с нулевым
параметром а очищает буфер;
п - число повторений (1...256) циклов, заданных параметром г.
Как уже говорилось, генерация звука, «заложенного» в буфер оператором SOUND, запускается оператором
SON
Вспомогательный оператор
SREPm
обычно «ходит в паре» с оператором
SON. Инструкция SREP.J) задает однократное воспроизведение
последовательности звуков из буфера, а ненулевое значение m приводит к
циклическому повторению звукового эффекта, прервать которое можно
только оператором
SOFF
Естественно, звук прерывается также при остановке программы.
Использование всех пяти операторов MegaBasic, управляющих звуком, иллюстрируется следующим примером:
10 LET m=0
15 GO SUB 2000
20 SON: PAUSE 50: GO SUB 1000
30 SOFF: LET m=NOT m: GO TO 15 1000 PLAY_0f 10,1000,10,10: RETURN: REM Музыка 2000 SOUND_1,m,100,5,5:SREP_1: RETURN: REM Шум