21. Zvuk: SOUND
Na čo to je
Atari má štyri hlasy – štyri nezávislé zdroje zvuku. Každý vie hrať čistý tón alebo šum, a to naraz s ostatnými. Jeden príkaz hlas zapne a hrá, kým ho iný príkaz nezmení alebo nevypne.
Ako sa to píše
SOUND hlas,výška,skreslenie,hlasitosť| Hodnota | Rozsah | Význam |
|---|---|---|
hlas | 0–3 | ktorý zo štyroch hlasov |
výška | 0–255 | menšie číslo je vyšší tón |
skreslenie | párne 0–14 | 10 je čistý tón, 14 trochu drsnejší; 0, 2, 4, 6, 8 a 12 sú rôzne šumy a bzukoty |
hlasitosť | 0–15 | 0 je ticho, 8 príjemne nahlas |
SOUND hlas,0,0,0 hlas vypne.
Výšky pre tóny jednej oktávy (so skreslením 10):
| Tón | C | D | E | F | G | A | H | C |
|---|---|---|---|---|---|---|---|---|
| Výška | 121 | 108 | 96 | 91 | 81 | 72 | 64 | 60 |
O oktávu vyššie sú čísla približne polovičné, o oktávu nižšie dvojnásobné.
Celý program
Súbor examples/sound.abas zahrá stupnicu:
10 REM SOUND: a scale
20 FOR I=1 TO 8
30 READ P
40 SOUND 0,P,10,8
50 S=15:GOSUB 1000
60 NEXT I
70 SOUND 0,0,0,0
80 END
1000 REM Wait S fiftieths of a second
1010 POKE 20,0
1020 IF PEEK(20)<S THEN 1020
1030 RETURN
2000 DATA 121,108,96,91,81,72,64,60Preklad a spustenie
Zvuk počuť len v emulátore (alebo na skutočnom Atari):
Basic26 sound.abas --runV simulátore tento program nespúšťaj: čaká na hodiny počítača a tie v simulátore stoja (kapitola 18).
Čo uvidíš
Nič – ale budeš počuť osem tónov stupnice C dur, každý necelú tretinu sekundy.
Ako to funguje
- Riadok 30: výšky tónov sú v
DATAna riadku 2000 a čítajú sa po jednej. - Riadok 40: hlas 0 začne hrať tón.
SOUNDnečaká – program ide hneď ďalej a tón znie. - Riadok 50: preto treba počkať. Podprogram na riadku 1000 čaká podľa hodín Atari, tu 15 päťdesiatin sekundy. Dĺžka čakania je dĺžka noty.
- Riadok 70: po poslednom tóne treba hlas vypnúť, inak by posledný tón znel ďalej. (Keď program skončí, preložený program zvuk vypne sám.)
Prečo nie čakacia slučka
Dobové programy držia notu prázdnou slučkou FOR W=1 TO 100:NEXT W. V preloženom programe by takú melódiu nebolo počuť – prebehla by niekoľkokrát rýchlejšie. Čakanie podľa hodín trvá rovnako v interpreteri, v preloženom programe aj na rýchlejšom stroji.
Viac hlasov naraz
Akord sú tri hlasy zapnuté po sebe:
10 SOUND 0,121,10,8
20 SOUND 1,96,10,8
30 SOUND 2,81,10,8Súčet hlasitostí všetkých hlasov by nemal prekročiť asi 32, inak zvuk chrčí.
Zvukové efekty
Efekt vzniká rýchlou zmenou výšky alebo hlasitosti v slučke:
10 REM A falling bomb
20 FOR P=30 TO 200:SOUND 0,P,10,8:NEXT P
30 REM An explosion
40 FOR V=15 TO 0 STEP -1:SOUND 0,90,8,V:S=4:GOSUB 1000:NEXT VSkreslenie 8 je šum; s klesajúcou hlasitosťou znie ako výbuch.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
| chýba čakanie medzi tónmi | je počuť len posledný tón, ostatné prebehnú príliš rýchlo |
| hlas sa nevypne | tón hrá, kým program beží |
| hlas mimo 0–3 | ERROR- 3 AT LINE 40 |
| nepárne skreslenie | hlas mlčí – nepárne hodnoty zvuk nevytvárajú, len nastavia hlasitosť |
čakacia slučka FOR namiesto hodín | melódia je v preloženom programe príliš rýchla |
Vyskúšaj si
- Zahraj stupnicu aj nadol.
- Pridaj do
DATAku každej výške aj dĺžku noty a zahraj jednoduchú pesničku. - Sprav sirénu: výška stúpa od 60 po 120 a zasa klesá, päťkrát za sebou.
Zhrnutie
SOUND hlas,výška,skreslenie,hlasitosťzapne tón, ktorý hrá, kým ho nevypneš.- Menšia výška je vyšší tón; skreslenie 10 je čistý tón.
- Dĺžku noty robí čakanie – podľa hodín, nie prázdnou slučkou.
- Štyri hlasy (0–3) môžu hrať naraz.
Späť: 20. Grafika · Ďalej: 22. Joystick a klávesy