SOUND (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
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.