-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbas06-02.txt
458 lines (421 loc) · 35.7 KB
/
bas06-02.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
Обратите также внимание на следующие т о н к и е м о м е н т ы.
α) Значения аргументов команд 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.