SOUND (TSB)
SOUND (TSB) | |
Syntax: | SOUND <stimme>,<tonhöhe> |
Parameter | |
stimme: Nummer des SID-Oszillators (1..3 und 4) | |
tonhöhe: Wert für eine Tonfrequenz (0..65535) | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Soundkontrolle |
Aufgabe: | Festlegen einer bestimmten Tonhöhe |
Abkürzung: | sO |
Token: | $64 $60 (100 96) |
Verwandte Befehle | |
MUSIC - WAVE - ENVELOPE - PLAY - VOL |
Dieser Artikel beschreibt das TSB-Schlüsselwort SOUND (TSB).
Das entsprechende Simons'-Basic-Schlüsselwort lautet ebenfalls SOUND.
Typ: Anweisung
Syntax: SOUND <stimme>, <tonhöhe>
SOUND (1..3) legt für einen zu spielenden Ton auf einem der drei SID-Oszillatoren die Tonhöhe fest. Die Tonhöhe erstreckt sich beim C64 von 16Hz bis 3848Hz (unter PAL). Sie wird als 16Bit-Wert erwartet, der sich aus Frequenz und Prozessor-Taktrate ergibt.
SOUND 4 definiert die Grenzfilterfrequenz für den Ton des Oszillators 3, wenn mit Hoch-, Tief- oder Bandpassfiltern gearbeitet wird. Der 16Bit-Parameter wird in die beiden SID-Register $D415/$D416 geschrieben. Siehe dazu das Beispiel 2.
Siehe auch: Systemvariable SOUND.
Beispiele[Bearbeiten | Quelltext bearbeiten]
Beispiel 1[Bearbeiten | Quelltext bearbeiten]
Das folgende Programm spielt mit zufällig gewählten Schwingungsformen zufällig gewählte Töne mit abfallender Tonhöhe in zufällig gewählter Dauer. Abbruch auf Tastendruck.
10 cset 1: x$="": s=sound: wave 1,0,$0800: x=rnd(0) 11 repeat: get x$ 12 cgoto int(rnd(1)*4)+13 13 w=17 : w$="Dreieck" : goto 17 14 w=33 : w$="Saegezahn": goto 17 15 w=65 : w$="Rechteck" : goto 17 16 w=129: w$="Rauschen" 17 vol 15: envelope 1,6,1,12,8: wave 1,w 18 print w$ 19 for x=0 to 255 step (rnd(1)*15)+1 20 f=x+256*(255-x): sound 1,f 21 for y=0 to 33 : next y,x 22 for x=0 to 200: next: vol 0 23 for x=0 to 100: next 24 until x$>"": wave 1,0: poke 198,0
Beispiel 2[Bearbeiten | Quelltext bearbeiten]
Festlegen der Grenzfilterfrequenz mit SOUND 4,<gr> am Bespiel gr=2047:
10 def fn gf(x)=256*div(x,8)+(x and 7) 20 SOUND 4, fn gf(2047)
Die Grenzfrequenz wird vom SID als 11Bit-Wert aus den beiden Registern $D415/$D416 ermittelt, wobei die Bits 10 bis 3 aus $D416 und die Bits 2 bis 0 aus $D015 genommen werden. Sie kann Werte von 0 bis 2047 = (2↑11) - 1 haben. Die Funktion gf(x) liefert zur Grenzfrequenz x den passenden 16Bit-Wert für $D415/$D416.
Siehe dazu auch Thema: TSB Info - Post #1126 auf Forum64.de.
$$ | %% | AT | CALL | CENTER | CHECK | COLD | COLOR | COPY | CLS | CSET | D! | D!PEEK | D!POKE | DIR | DISK | DISPLAY | DIV | DO | DO NULL | DRAW TO | DUMP | DUP | ELSE | ERROR | EXEC | FETCH | FIND | GRAPHICS | INSERT | INST | JOY | KEY | KEYGET | LIN | MAP | MEMCLR | MEMCONT | MEMDEF | MEMLEN | MEMLOAD | MEMOR | MEMPEEK | MEMPOS | MEMREAD | MEMRESTORE | MEMSAVE | MERGE | MOB ON/OFF | MOBCOL | MOD | MOVE | MULTI | NRM | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PLACE | RENUMBER | RESUME | RETRACE | SCRLD | SCRSV | SOUND | TEXT | TRACE | USE | WAVE | X!