Обратите также внимание на следующие т о н к и е м о м е н т ы. α) Значения аргументов команд MML не уничтожаются оператором NEW, поэ- тому новую программу следует начинать с конкретного определения текущих значений аргументов команд L,М,S,O,T. Если этого не сделать,то не следует надеяться на значения аргументов, принятые по умолчанию, т.к.воспринимать- ся будут "старые" значения аргументов. Например,последовательно выполните: гамма (legato) гамма (отрывисто) гамма (отрывисто) NEW ──▶ NEW ──▶ NEW Ok Ok Ok 10 PLAY"cdefgab" 10 PLAY"sm500cdefgab" 10 PLAY"cdefgab" run run run Ok Ok Ok β) Запомните, что все текущие значения аргументов команд MML лучше все- го определять в программе я в н о: 10 A$="S M5000 T150 O4 L4":B$="S M5000 T150 O4 L4":C$="S M5000 T150 O4 L4" 20 PLAY A$,B$,C$ Приведем программы, по которым компьютер исполнит несколько разных по сложности музыкальных произведений. 1) 20 '"Во саду ли,в огороде" (Русская народная песня). 30 FOR I=1 TO 2 40 PLAY"T100sm800O6L8ffeedddeffeedddR8ccO5bbaaabO6ccO5bbaaa","T100sm80 0O4L8dfaedfdfdfaedfaR8aeeg+aeaeaeeg+aee","O4L8T100sm800daac+dadadaac+d afR8acebacacacebacc" 50 A$="T100s2m2000O5L16fedfedc+edO4abO5c+dc+defedfedc+eddddcO4BaO5CO4b ag+baef+g+ag+abO5cO4baO5cO4bag+bA4" 60 B$="t100s2m2000O4L16ddffaaeeddffddffddffaaeeddffaaeeeeg+g+aaeeaaeea aeeeeg+g+ccee" 70 C$="t100s2m2000O4L16ddaaR16r16c+c+ddaaddaaddaaR16r16c+c+ddaaaacceeb baaccaaccaacceebbeecc" 80 PLAY A$,B$,C$:PLAY"O4a4","O4E4","O4c4":NEXT 2) 10 '"Гопак" (Украинский народный танец). 20 FOR I=1 TO 2 30 A$="sm2000L8O5T150D4O4AR16g16f+ef+dO3aO4df+aL16gf+geL8f+dO5ddO4aR16 g16" 40 B$="sm2000t150O3L8A4D4ac+df+df+df+ac+df+df+df+" 50 C$="sm2000t150O3L8f+4f+4r8er8aR8AR8AR8ER8AR8AR8A" 60 PLAY A$,B$,C$ 70 A$="O4L8f+ef+dO3aO4df+aL16gf+geL8D4ggB4aO5cO4B4":B$="O3L8ac+df+df+d f+ac+d4gbO4g4f+f+g4":C$="O3L8r8ER8AR8AR8AR8EF+4R8DD4dAD4" 80 PLAY A$,B$,C$ 90 A$="O4L8bO5d4O4bO5l16cdcO4al8bgdgb4aO5cO4b4bO5d4O4bO5cO4B16A16g4":B $="O4L8gb4O3bdf+g4df+O4g4O3df+O4g4gO3bgbdf+O4d4":C$="O3L8gO4g4O3ddad4g dO4d4dad4gdgdR8ab4" 100 PLAY A$,B$,C$ 110 NEXT 3) 2 '"Неаполитанская песенка" (отрывок) П.И.Чайковский. 5 A$="sm1500l6o6t112":B$="sm1500l6o6t112":C$="sm1500l6o6t112" 6 PLAY A$,B$,C$ 10 FOR I=1 TO 2 20 A$="l8o5e-ce-ce-ce-l16fe-dcco4b-b-b-o5co4b-b-b-o5co4b-b-b-o5co4b-a- g" 30 B$="l8o3r8a-o4co3a-o4co3a-o4co3a-o4co3e-b-e-b-e-b-e-b-" 40 C$="o4l8r8r8e-r8e-r8e-r8e-r8e-r8e-r8e-r8e-" 50 PLAY A$,B$,C$ 60 A$="o4l16b-a-a-a-b-a-a-a-b-a-a-a-b-a-gfe-e-fga-b-o5cde-8o3b-8o4e-8" 70 B$="o2l8b-o4do2b-o4do2b-o4do2b-o4do3e-b-r4r8gb-" 80 C$="o3l8r8fr8fr8fr8fr8gr4r8e-g" 90 PLAY A$,B$,C$ 100 A$="l8o5e-ce-ce-ce-l16fe-dcco4b-b-b-o5co4b-b-b-o5co4b-b-b-o5co4b-a -g" 110 B$="l8o3b-8a-o4co3a-o4co3a-o4co3a-o4co3e-b-e-b-e-b-e-b-" 120 C$="o4l8o3go4r8e-r8e-r8e-r8e-r8e-r8e-r8e-r8e-" 130 PLAY A$,B$,C$ 140 A$="o4l16b-a-a-a-b-a-a-a-b-a-a-a-b-a-gfe-e-fga-b-o5cde-e-fga-b-o6c de-8r8e-8r8" 150 B$="o2l8b-o4do2b-o4do2b-o4do2b-o4do3e-r8b-r8o4gr8fr8gr8o3b-r8" 160 C$="o3l8r8fr8fr8fr8fo3gr8o4dr8e-r8dr8cr8o3e-r8" 170 PLAY A$,B$,C$ 180 NEXT 190 PLAY "l8o4e-","l8o4g","l8o4b-" Более того, в музыкальную программу можно ввести элементы случайности. Они давно уже используются в а л е а т о р и к е (лат."aleator" - "азарт- ный игрок"), где исполнителю время от времени предоставляется возможность самому выбирать,что играть. В 1751 году в Англии музыкант Уильям Гейс написал сатирическое руковод- ство "Искусство сочинять музыку исключительно новым способом, пригодным для самых захудалых талантов". Там предлагалось, обмакнув в чернила щетку, провести по ней пальцем. К брызгам-кляксам на заблаговременно подложенной нотной бумаге оставалось подрисовать хвостики, чтобы получились "полноцен- ные ноты". В ту пору предлагались и другие неожиданные способы сочинения музыки. Не избежал заразительного увлечения даже Моцарт. В 1793 году он пишет "Руководство, как при помощи двух игральных костей сочинять вальсы, не имея ни малейшего представления о музыке и композиции". В ХVII в.было создано немало музыкальных пьес "на случайную тему",и не- которые из них приписывают Моцарту и Гайдну. Например, в шестнадцатитакто- вой части можно предусмотреть 11 различных вариантов для каждого такта, что можно представить в виде таблицы из 16 столбцов по 11 тактов в каждой, а исполнителю дано выбирать каждый такт, бросая игральные кости (по-види- мому,музыкант должен заранее бросать кости 16 раз, чтобы не останавливать- ся перед каждым новым тактом). На нотной записи одного произведения этот способ был назван "несложным методом сочинения бесконечного числа менуэ- тов на три счета". "Бесконечное" - это, разумеется, слегка преувеличено, так как на самом деле их 11^16≈4.595╳10^16 (46 квадриллионов). В произве- дениях подобного рода тщательно следили за тем, чтобы любые варианты так- тов, выбранных в соседних столбцах, музыкально сочетались друг с другом и чтобы результат случайного выбора был вполне приемлем для слушателей XVIII в. В современной же музыке возможности случайного выбора все более приближаются к истинно случайным. Конечно,большинство из полученных таким образом пассажей совершенно неинтересны, но встречаются и запоминающиеся отрывки. П р и м е р. Программа "Композитор". ─────────── 10 KEYOFF:PLAY"t100s1m10000l8","t100s1m10000l16" 20 SCREEN1:LOCATE 10,10:PRINT"Пьеска!" 30 DATA "o4gbo5d","o3gbo4dgf+g","o5dco4a","o4fgegce" 40 DATA "o4f+o5dc","o3ao4co3f+ao4df+","o4a#b.a16","o4go3gbo4dgf" 50 DATA "o4g+bo5d","o4efedo3bg+","o5co4ba","o3ao4aedce" 60 DATA "o4bag","o4egcecc+","o4bar8","o4dgf+dco3a" 70 DATA "o4gbo5d","o3gbo4dgeb","o5dco4a","o3ao4aeace" 80 DATA "o4f+o5dc","o4do5dco4af+a","o4a+bb","o3o4gf+gfg" 90 DATA "o5cde","o4egdgc+g","o5do4bg","o4dbgdo3bg" 100 DATA "o4gaf+","o3bo4dcdo3ao4d":Y=1 110 N=16:DATA"o4g","o3g8":Z=RND(-TIME) 120 DIM A$(N),B$(N),C$(N),D$(N),E(N),R(N) 130 FOR I=1 TO N:READ A$(I),B$(I):E(I)=I:NEXT 140 X=INT(RND(1)*15)+1 150 IF E(X)<>0 THEN R(Y)=E(X):Y=Y+1:E(X)=0 ELSE 140 160 IF Y<>16 THEN 140 ELSE C$(N)=A$(N):D$(N)=B$(N) 170 FOR I=1 TO N-1:C$(I)=A$(R(I)):D$(I)=B$(R(I)):NEXT 180 FOR J=1 TO N:PLAY C$(J),D$(J):NEXT VI.3. О п е р а т о р SOUND Этот оператор позволяет квалифицированному пользователю управлять Про- граммируемым Звуковым Генератором (PSG).Имеется четырнадцать 8-битовых ре- гистров,пронумерованных от 0 до 13, каждый из которых предназначен только для записи и может содержать значения в диапазоне от 0 до 255(см.таблицу). ┌───────────┬──────────────────────────┬────────────┬─────────────────┐ │ Н о м е р │ С о д е р ж и м о е │ Значение │ Значение на паре│ │ регистра │ │ │ регистров │ ├───────────┼──────────────────────────┼────────────┼─────────────────┤ │ 0 │ Частота канала(голоса) A │ 0÷255 │ 0÷4095 │ │ 1 │ │ 0÷15 │ │ ├───────────┼──────────────────────────┼────────────┼─────────────────┤ │ 2 │ Частота канала(голоса) B │ 0÷255 │ 0÷4095 │ │ 3 │ │ 0÷15 │ │ ├───────────┼──────────────────────────┼────────────┼─────────────────┤ │ 4 │ Частота канала(голоса) C │ 0÷255 │ 0÷4095 │ │ 5 │ │ 0÷15 │ │ ├───────────┼──────────────────────────┼────────────┼─────────────────┤ │ 6 │ Частота шума │ 0÷31 │ │ ├───────────┼──────────────────────────┼────────────┼─────────────────┤ │ 7 │ Коммутация каналов для │ 0÷63 │ │ │ │ генерации звука │ │ │ ├───────────┼──────────────────────────┼────────────┼─────────────────┤ │ 8 │ Громкость канала А │ 0÷15 │ При значении 16 │ ├───────────┼──────────────────────────┼────────────┤ устанавливается │ │ 9 │ Громкость канала В │ 0÷15 │ режим управляе- │ ├───────────┼──────────────────────────┼────────────┤ мой громкости. │ │ 10 │ Громкость канала С │ 0÷15 │ │ ├───────────┼──────────────────────────┼────────────┼─────────────────┤ │ 11 │ Частота огибающей │ 0÷255 │ │ │ │ ("конверта") │(младш.биты)│ 0÷65535 │ │ 12 │(управление частотой изме-│ 0÷255 │ │ │ │ нения громкости сигнала) │(старш.биты)│ │ ├───────────┼──────────────────────────┼────────────┼─────────────────│ │ │Форма огибающей("конверта") 0÷15 │ │ │ 13 │(управление законом изме-│ │ │ │ │ нения громкости). │ │ │ └───────────┴──────────────────────────┴────────────┘─────────────────┘ Оператор SOUND обеспечивает прямой доступ к регистрам звукового гeнера- тора. Синтаксис оператора: ┌────────────────┐ │ SOUND R,V │ └────────────────┘ где: SOUND ("звук") - служебное слово; R - арифметическое выражение, целая часть значения которого при- надлежит отрезку [0,13] и определяет номер звукового регистра; V - арифметическое выражение,целая часть значения которого принад- лежит [0,255] и определяет новое содержимое звукового регистра,номер кото- рого определяется параметром R. 1. О п р е д е л е н и е ч а с т о т ы з в у ч а н и я Частотой звука управляют 6 регистров (номера 0,1,2,...,5). Данные,кото- рые необходимо поместить в регистры, могут быть определены из уравнения: 1789772.5(Гц) { 1 } { 0 } ────────────── =256╳ содержимое { 3 } + содержимое { 2 } . 16╳частота(Гц) регистров { 5 } регистров { 4 } Все получаемые частоты являются делителями числа 1789800, которое выра- жает в герцах (числе колебаний в секунду) значение частоты звукового гене- ратора. Это число составляет примерно половину тактовой частоты микропро- цессора Z80, равной 3579545 Гц. Например, если мы хотим получить звук частотой 300 Гц из канала А, то содержимое регистров 0 и 1 (голос А!) определяется из уравнения: 1789772.5 ───────── ≈ 373 = 256*1+117 . 16╳300 А теперь запишем с помощью оператора SOUND число 117 в регистр 0, а 1 - в регистр 1: SOUND 0,117:SOUND 1,1 В случае канала В (используйте теперь регистры 2 и 3!) операторы при- мут вид: SOUND 2,117:SOUND 3,1 Поскольку ширина полосы звукового канала не превышает на практике 10000 Гц, минимальное значение, которое может быть введено в пару регистров, за- дается величиной следующего выражения 1789772.5 ────────── ≈ 11.19 16·10000 Таким образом, 11 надо поместить в регистр 0,а 0 -в регистр 1. Звук уже в значительной степени смягчился, но еще "кое-что" слышно (разумеется,пре- дел слышимой частоты зависит как от источника звука, так и от восприятия). Минимальная частота определяется по следующей формуле: 1789772.5/16/4095=27.31 Гц Предложим Вашему вниманию программу вычисления содержимого рассматри- ваемых регистров для любых заданных частот [76]. 20 SCREEN0:KEY OFF 30 CLS 40 PRINT "Вычисление частоты" 50 INPUT "Введите частоту в Гц";HZ 60 IF HZ<28 OR HZ>55932! THEN 30 70 TMP=1789800#/(16*HZ) 80 CT=INT(TMP/256) 90 FT=TMPMOD256 100 PRINT "Частота";TAB(17);":";HZ;"Гц" 110 PRINT "Параметр точной настройки:";FT 120 PRINT "Параметр грубой настройки:";CT 130 PRINT"Будете ли продолжать (Y-да, N-нет)?"; 140 A$=INKEY$:IF A$="" THEN 140 150 IF A$="Y" OR A$="y" THEN 30 160 END Составим программу решения обратной задачи: определения частоты по со- держимому регистров. 20 DEF FNFC(A,B)=INT((1789800#/((256*A)+B))/16) 30 CLS 40 PRINT "Вычисление частоты по значениям регистров" 50 INPUT"Параметр точной настройки:";FT 60 IF FT<0 OR FT>255 THEN BEEP:GOTO 50 70 INPUT "Параметр грубой настройки:";CT 80 IF CT<0 OR CT>15 THEN BEEP:GOTO 70 90 ' Исключение деления на нуль 100 IF CT=0 AND FT=0 THEN BEEP:GOTO 50 110 PRINT "Частота: ";FNFC(CT,FT);"Гц" 120 PRINT "Будете ли продолжать (Y-да, N-нет)?"; 130 A$=INKEY$:IF A$="" THEN 130 140 IF A$="y" OR A$="Y" THEN 30 150 END 2. О п р е д е л е н и е ч а с т о т ы ш у м а Акустический ш у м - это беспорядочные звуковые колебания, характери- зующиеся случайным изменением амплитуды и частоты.Частота шума определяет- ся содержимым 6-го регистра . Следующее соотношение определяет связь меж- ду данными в 6-м регистре и частотой: 1789772.5 (Гц) Данное = ─────────────────── . 16╳частота шума(Гц) Например, оператор SOUND 6,15 означает, что частота шума около 7457 Гц. 3. М и к ш и р о в а н и е (смешивание) з в у к а и ш у м а. Оно определяется значением, записанным в 7-й регистр. ┌───────────────────────┬───────────────────────┐ │ Ш у м │ З в у к │ ├───────┬───────┬───────┼───────┬───────┬───────┤ │ Канал │ Канал │ Канал │ Канал │ Канал │ Канал │ │ С │ В │ А │ С │ В │ А │ ├───────┼───────┼───────┼───────┼───────┼───────┤ │ 32 │ 16 │ 8 │ 4 │ 2 │ 1 │ └───────┴───────┴───────┴───────┴───────┴───────┘ Сложите числа, которые соответствуют выбранному каналу, вычтите резуль- тат из 63 и запишите полученное в регистр 7. Например,если Вы хотите полу- чить звук голосов А и В и одновременно звук и шум голоса С, то проведите несложное вычисление 63-(2+1+4+32)=24 и используйте оператор SOUND 7,24 . П р и м е р. 10 SOUND 0,47:SOUND 1,1 'Частота канала А = 200 Гц. ─────────── 30 SOUND 2,140:SOUND 3,0 'Частота канала В = 800 Гц. 50 SOUND 4,56:SOUND 5,0 'Частота канала С =2000 Гц. 70 SOUND 7,56 'Выбор звука из каналов А, В и С. 80 SOUND 8,9:SOUND 9,10:SOUND10,11'Выбор громкости канала. Выполните эту программу. А затем включите в программу строку: 65 SOUND 6,31 'Определена частота шума. и замените строку 70 на строку 70 SOUND7,48'Звук и шум из канала А, звук из каналов В и С. В результате генерируется звук, смешанный с шумом. Укажем еще один способ заполнения регистра 7. В каждом из каналов возможен следующий выходной сигнал: отсутствие зву- ка, только звук, только шум, звук и шум. Первые два бита регистра 7 должны быть двоичным числом 10, следующие три запрещают (1) или разрешают (0) выход шума, последние три запрещают (1) или разрешают (0) выход звука. Обратите внимание на то, что порядок каналов обратный! П р и м е р. CBA CBA ─────────── SOUND 7, &B10 110 011 шум звук Канал А: шум, т.к. бит, соответствующий шуму из канала A - нулевой. Канал В: отсутствие шума и звука Канал С: звук, т.к. бит, соответствующий звуку из канала C - нулевой. 4. Звуковые эффекты, связанные с ф о р м о й в о л н ы Оператор SOUND позволяет получать звуковые эффекты, достигаемые при по- мощи совместного действия команд S и M. Форма волны ("конверта")определяется значением,записанным в регистр 13 (то же самое значение равно аргументу команды S). Частота огибающей "кон- верта" определяется данными, находящимися в регистрах 11 и 12, при помощи следующего уравнения: 1789772.5(Гц) ───────────── = 256╳ { содержимое } + { содержимое } 256╳частота(Гц) { регистра 12 } { регистра 11 } . Например, если частота=10 Гц, то 1789772.5 ───────── ≈ 699=256╳2+187, 256╳10 и операторы: SOUND 12,2:SOUND 11,187 позволят получить желаемый результат! Минимальное значение частоты, следовательно, равно 0.107 Гц,что прибли- женно соответствует периоду 9.4 секунды. Максимальное значение оценивает- ся около 6991.3 Гц и тем самым принадлежит к слышимым частотам. П р и м е р. Программа, позволяющая генерировать звук движущегося паро- ─────────── воза. 10 FOR I=6 TO 13:READ J:SOUND I,J:NEXT I 20 DATA 31 'Частота шума. 30 DATA 7 'Шум из каналов A,B и C. 40 DATA 16,16,16 'Изменение громкости каналов A,B и C. 50 DATA 71,2 'Период "конверта" равен 12 Гц. 60 DATA 14 'Форма волны равна 14. 5. Определение г р о м к о с т и к а н а л о в Регистры с 8 по 10 устанавливают громкость: регистр 8 ──▶ канала А , регистр 9 ──▶ канала В, регистр 10 ──▶ канала C. Установка лежит в пределах от 0 до 15 (15 соответствует максимальной громкости). Если содержимое регистров равно 16, устанавливается режим автоматичес- ки изменяющейся громкости (громкость будет контролироваться генератором огибающей). П р и м е р ы. SOUND 8,&B00010000:SOUND 9,&B00001111 ────────────── Канал А: Громкость контролируется генератором огибающей. Канал В: Громкость равна 15. Давайте посмотрим, в чем же причины "антагонизма" команд S и V. Дело в том,что при выполнении команды S в соответствующий регистр управления ам- плитудой записывается число 16 = 10000 . Взгляните на рисунок... ² Не используются А м п л и т у д а ┌───────────────────┐ ┌───────────────────────────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ Регистр │ │ │ │██████│▧▧▧▧▧▧│▧▧▧▧▧▧│▧▧▧▧▧▧│▧▧▧▧▧▧│ управления └───▲──┴──────┴──────┴──▲───┴──────┴──────┴──────┴───▲──┘ амплитудой │ │ │ 7-й бит Бит выбора формы пакета 0-й бит При этом в четвертый бит попадает единица, в младшие биты - нули (стар- шие три бита не используются), следовательно, все установленные значения амплитуд сбрасываются. При выполнении же команды V (параметр V находится в диапазоне от 0 = 0000 до 15 = 1111 ) значение четвертого бита всегда будет сброшено на 0. ² ² 6. Р е г и с т р в ы б о р а ф о р м ы п а к е т а Отметим, что хотя параметр S может принимать значения от 0 до 15, некоторым из них соответствуют одинаковые пакеты. В чем причина этого? Выбор ф о р м ы п а к е т а осуществляется при записи требуемого значения в регистр 13.Значащими в нем являются лишь ч е т ы р е м л а д- ш и х разряда. Однако в ряде ситуаций значения двух младших разрядов не играют роли, поэтому при записи в регистр чисел, не превышающих семи, в результате может получаться одна и та же форма пакета. Числам, большим семи, однозначно соответствуют р а з л и ч н ы е фор- мы волновых пакетов. ┌─────────────────────────────────────────────────┐ │ Всегда необходимо помнить, что оператор BEEP │ │ изменяет содержимое звуковых регистров! │ └─────────────────────────────────────────────────┘ Для иллюстрации возможностей оператора SOUND, рассмотрим следующие при- меры: 1) 5 'Звук бомбардировщика. Формирование различных частот в трех канал ах имитирует "биения" в шуме пропеллеров, вращающихся с разными ско ростями. 10 BEEP:FOR I=0 TO 13:READ V:SOUND I,V:NEXT:END ┌────────────────────────────────────┐ │ 100 DATA 200, 14, 220, 14, 240, 14 │ │ 110 DATA 0 │ │ 120 DATA &B10111000 │ │ 130 DATA 15, 15, 15 │ │ 140 DATA 0, 0, 0 │ └────────────────────────────────────┘ А теперь замените выделенный фрагмент на: α) 5 'Звук м о р я β) 5 'Вертолет 1 100 DATA 0,0,0,0,0,0 100 DATA 0,0,255,14,255,14 110 DATA 30 110 DATA 10 120 DATA &B10110111 120 DATA &B10000001 130 DATA 16,0,0 130 DATA 8,8,16 140 DATA 0,90,&B1110 140 DATA 0,20,&B1100 2) 5 'Вертолет 2 3) 5 ' Звук бомбы 10 BEEP:FOR I=0 TO 13:READ V 10 FOR I=0 TO 13:READ V 20 SOUND I,V:NEXT 20 SOUND I,V:NEXT 50 FOR I=5120 TO 300 STEP -10 40 FOR I=50 TO 200:SOUND O,I 60 SOUND 11,I MOD 256 60 A=5^5:NEXT 70 SOUND 12,I\256 80 SOUND 12,100:SOUND 13,9 80 FOR J=0 TO 20:NEXT J,I 80 SOUND 7,&B10011111:END 100 DATA 0,0,255,14,255,14 110 DATA 50,0,0,0,0,0 110 DATA 10 110 DATA 30 120 DATA &B10000001 120 DATA &B10111110 130 DATA 8,8,16 130 DATA 10,0,16 140 DATA 0,20,&1100 140 DATA 0,0,0 Для прекращения звука достаточно выполнить оператор BEEP или сбросить регистры 8-10 на 0. 4) 10 FOR I=1 TO 12:SOUND I+1,I+82:NEXT 20 FOR I=1 TO 8:SOUND I+1,I+81:NEXT '∗∗∗∗ Шум морского прибоя 50 FOR X=0 TO 13:SOUND X,0:NEXT 'Очистка всех регистров 100 SOUND 7,62:SOUND 8,15:SOUND 9,16:SOUND 10,16 110 SOUND 12,16:FOR X=48 TO 170:A=5^5^5 '25ms задержка 120 SOUND 0,X:NEXT:SOUND 8,0 '∗∗∗∗∗∗∗∗∗ Эффект падающей бомбы 130 SOUND 8,0:SOUND 6,15:SOUND 7,7:SOUND 12,16 140 FOR X=8 TO 10:SOUND X,16:NEXT 150 SOUND 13,0:FOR X=1 TO 500:NEXT '∗∗∗∗∗∗∗∗∗∗∗ Эффект взрыва 160 SOUND 1,1:SOUND 7,46:SOUND 8,15:SOUND 9,9 170 FOR X=80 TO 33 STEP -1:POKE 0,X:NEXT 180 X=TAN(1):X=TAN(1) '2·175ms задержка 190 FOR X=55 TO 40 STEP -1 200 POKE 0,X:A=5^5:NEXT '12ms задержка 210 FOR X=40 TO 100:POKE 0,X:NEXT 220 SOUND 8,0:SOUND 9,0 '∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ Эффект свиста 230 END 'Вызывает STOP, далее BEEP и звучание прекращается. П р и м е р ы 5÷10 заимствованы из [76]. 5) 10 'С и р е н а 20 SOUND 0,255:SOUND 1,0:SOUND 8,15:SOUND 7,&B00111110 60 'Нарастание высоты звука 70 FOR I=252 TO 170 STEP -2:SOUND 0,I:NEXT 100 'Убывание высоты звука 110 FOR I=170 TO 252 STEP 1:SOUND 0,I:NEXT 140 GOTO 70 Для генерации завывающего звука используется регистр, позволяющий изме- нять высоту исполняемой ноты. В данном примере высота периодически равно- мерно, круто нарастает, после падает до прежнего уровня. 6) 10 ' Ш у м о в о й эффект 20 SOUND 6,0:SOUND 7,&B00000111 40 'Убывание частоты шума (проверить убывание) 50 FOR I=1 TO 31 60 SOUND 8,10:SOUND 9,10:SOUND 10,10 70 SOUND 6,1 80 FOR J=1 TO 50:NEXT J 90 SOUND 8,0:SOUND 9,0:SOUND 10,0 100 FOR J=1 TO 25:NEXT J 110 NEXT 120 GOTO 50 Для одного канала генерируется шум, частота которого непрерывно меня- ется от высокого значения до низкого. Такой эффект достигается при измене- нии содержимого регистра 6.