SOUND (BASIC 3.5)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. SOUND (Begriffsklärung).


SOUND (BASIC 3.5)
Syntax: SOUND <Stimme>,<Frequenzwert>,<Dauer>
Parameter
<Stimme>: numerischer Ausdruck im Wertebereich von 1 bis 3
<Frequenzwert>: numerischer Ausdruck im Wertebereich von 0 bis 1023
<Dauer>: numerischer Ausdruck im Wertebereich von 0 bis 65535
Einordnung
Typ: Anweisung
Kontext: Tonerzeugung
Aufgabe: Erzeugung von Toneffekten und Ausgabe von Musik
Abkürzung: sO
Token: $da (218)
Verwandte Befehle
VOL

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl SOUND in Commodore BASIC V3.5. Für den gleichnamigen Befehl von BASIC V7.0, siehe SOUND (BASIC 7.0).

Die Anweisung SOUND dient zur Erzeugung von Toneffekten und der Ausgabe von Musik. Die Klangerzeugung erfolgt im Hintergrund, das BASIC-Programm läuft also während der Tonausgabe weiter, außer die ausgewählte Stimme ist bereits belegt. In diesem Fall wartet SOUND, bis der aktive Ton beendet ist.

Folgende Parameter werden dem Befehl übergeben:

  • <Stimme>: Gibt an, welcher Oszillator (Tongenerator) zur Tonerzeugung benutzt wird. Die Stimmen 1 und 2 erzeugen eine Rechteckwelle, die Stimme 3 weißes Rauschen. Andere Werte führen zu einem ?SYNTAX ERROR. Die Stimmen 2 und 3 können nicht gleichzeitig verwenden werden.
  • <Frequenzwert>: Bestimmt die Frequenz des erzeugten Tons in Sound-Register-Einheiten. Erlaubt sind die Werte von 0 bis 1023, außerhalb dieses Bereichs wird ein ?ILLEGAL QUANTITY ERROR ausgegeben. Zur Umrechnung einer Frequenz von Hz in den passenden Frequenzwert kann folgende Formel benutzt werden:
Hz nach Frequenzwert Frequenzwert = 1024 - (Grundfrequenz / Tonfrequenz)
Frequenzwert nach Hz Frequenz = Grundfrequenz / (1024 - Frequenzwert)
Die Grundfrequenz ist abhängig von der Videonorm und beträgt für PAL 111840,45 und für NTSC 111860,781.
  • <Dauer>: Gibt an wie lange (in Jiffy-Einheiten) der Ton erzeugt wird. Erlaubt sind die Werte von 0 bis 65535, außerhalb dieses Bereichs wird ein ?ILLEGAL QUANTITY ERROR ausgegeben. Die Länge einer Einheit ist ebenfalls abhängig von der Videonorm und beträgt bei PAL 1/50s, bei NTSC 1/60s. Eine Dauer von 0 ist ein Sonderfall und bewirkt, dass die Soundausgabe der angegebenen Stimme beendet wird.

Möchte man mit SOUND Musik spielen, so sollte zwischen die einzelnen Noten eine kurze Pause eingefügt werden.

Notentabelle:

Oktave Note deutsch Note engl./int. ideale
Freq. (Hz)
PAL-Modus NTSC-Modus
Freq.-
Wert
erzeugte
Freq. (Hz)
Abweichung Freq.-
Wert
erzeugte
Freq. (Hz)
Abweichung
0 A A2 110,00 7 109,97 -0,03 7 109,99 -0,01
Ais / B A#2 / Bb2 116,54 64 116,50 -0,04 64 116,52 -0,02
H B2 123,47 118 123,44 -0,03 118 123,47 0,00
c C3 130,81 169 130,81 0,00 169 130,83 0,02
cis / des C#3 / Db3 138,59 217 138,59 0,00 217 138,61 0,02
d D3 146,83 262 146,77 -0,06 262 146,80 -0,03
dis / es D#3 / Eb3 155,56 305 155,55 -0,01 305 155,58 0,02
e E3 164,81 345 164,71 -0,10 345 164,74 -0,07
f F3 174,61 383 174,48 -0,13 383 174,51 -0,10
fis / ges F#3 / Gb3 185,00 419 184,86 -0,14 419 184,89 -0,11
g G3 196,00 453 195,87 -0,13 453 195,90 -0,10
gis / as G#3 / Ab3 207,65 485 207,50 -0,15 485 207,53 -0,12
1 a A3 220,00 516 220,16 0,16 516 220,20 0,20
ais / b A#3 / Bb3 233,08 544 233,00 -0,08 544 233,04 -0,04
h B3 246,94 571 246,89 -0,05 571 246,93 -0,01
c' C4 261,63 597 261,92 0,29 596 261,36 -0,27
cis' / des' C#4 / Db4 277,18 621 277,52 0,34 620 276,88 -0,30
d' D4 293,66 643 293,54 -0,12 643 293,60 -0,06
dis' / es' D#4 / Eb4 311,13 665 311,53 0,40 664 310,72 -0,41
e' E4 329,63 685 329,91 0,28 685 329,97 0,34
f' F4 349,23 704 349,50 0,27 704 349,56 0,33
fis' / ges' F#4 / Gb4 369,99 722 370,33 0,34 722 370,40 0,41
g' G4 392,00 739 392,42 0,42 739 392,49 0,49
gis' / as' G#4 / Ab4 415,30 755 415,76 0,46 755 415,84 0,54
2 a' A4 440,00 770 440,32 0,32 770 440,40 0,40
ais' / b' A#4 / Bb4 466,16 784 466,00 -0,16 784 466,09 -0,07
h' B4 493,88 798 494,87 0,99 798 494,96 1,08
c'' C5 523,25 810 522,62 -0,63 810 522,71 -0,54
cis'' / des'' C#5 / Db5 554,37 822 553,67 -0,70 822 553,77 -0,60
d'' D5 587,33 834 588,63 1,30 834 588,74 1,41
dis'' / es'' D#5 / Eb5 622,25 844 621,34 -0,91 844 621,45 -0,80
e'' E5 659,26 854 657,89 -1,37 854 658,00 -1,26
f'' F5 698,46 864 699,00 0,54 864 699,13 0,67
fis'' / ges'' F#5 / Gb5 739,99 873 740,67 0,68 873 740,80 0,81
g'' G5 783,99 881 782,10 -1,89 881 782,24 -1,75
gis'' / as'' G#5 / Ab5 830,61 889 828,45 -2,16 889 828,60 -2,01
3 a'' A5 880,00 897 880,63 0,63 897 880,79 0,79
ais'' / b'' A#5 / Bb5 932,33 904 932,00 -0,33 904 932,17 -0,16
h'' B5 987,77 911 989,74 1,97 911 989,92 2,15
c''' C6 1046,50 917 1045,24 -1,26 917 1045,43 -1,07
cis''' / des''' C#6 / Db6 1108,73 923 1107,33 -1,40 923 1107,53 -1,20
d''' D6 1174,66 929 1177,27 2,61 929 1177,48 2,82
dis''' / es''' D#6 / Eb6 1244,51 934 1242,67 -1,84 934 1242,90 -1,61
e''' E6 1318,51 939 1315,77 -2,74 939 1316,01 -2,50
f''' F6 1396,91 944 1398,01 1,10 944 1398,26 1,35
fis''' / ges''' F#6 / Gb6 1479,98 948 1471,58 -8,40 948 1471,85 -8,13
g''' G6 1567,98 953 1575,22 7,24 953 1575,50 7,52
gis''' / as''' G#6 / Ab6 1661,22 957 1669,26 8,04 957 1669,56 8,34
4 a''' A6 1760,00 960 1747,51 -12,49 960 1747,82 -12,18
ais''' / b''' A#6 / Bb6 1864,66 964 1864,01 -0,65 964 1864,35 -0,31
h''' B6 1975,53 967 1962,11 -13,42 967 1962,47 -13,06
c'''' C7 2093,00 971 2110,20 17,20 971 2110,58 17,58
cis'''' / des'''' C#7 / Db7 2217,46 974 2236,81 19,35 974 2237,22 19,76
d'''' D7 2349,32 976 2330,01 -19,31 976 2330,43 -18,89
dis'''' / es'''' D#7 / Eb7 2489,02 979 2485,34 -3,68 979 2485,80 -3,22
e'''' E7 2637,02 982 2662,87 25,85 982 2663,35 26,33
f'''' F7 2793,83 984 2796,01 2,18 984 2796,52 2,69
fis'''' / ges'''' F#7 / Gb7 2959,96 986 2943,17 -16,79 986 2943,70 -16,26
g'''' G7 3135,96 988 3106,68 -29,28 988 3107,24 -28,72
gis'''' / as'''' G#7 / Ab7 3322,44 990 3289,43 -33,01 990 3290,02 -32,42
5 a'''' A7 3520,00 992 3495,01 -24,99 992 3495,65 -24,35
ais'''' / b'''' A#7 / Bb7 3729,31 994 3728,02 -1,29 994 3728,69 -0,62
h'''' B7 3951,07 996 3994,30 43,23 996 3995,03 43,96
c'''' C8 4186,01 997 4142,24 -43,77 997 4142,99 -43,02

Beispiele[Bearbeiten | Quelltext bearbeiten]

Hinweis: Vor dem Aufruf des Befehls SOUND muss die Lautstärke mit dem Befehl VOL angestellt werden, z.B. mit VOL 5 !

SOUND 1,770,60

Spielt auf einem NTSC-System für eine Sekunde den Kammerton a'.

10 DO
20 SOUND 1,767,30:SOUND 2,775,30
30 SOUND 1,831,30:SOUND 2,838,30
40 GET K$:LOOP UNTIL A$

Imitiert ein Martinshorn. Die Schleife wird bei Tastendruck beendet.

Das folgende Beispiel spielt ein Musikstück (in diesem Fall Hänschen klein) ab und zwar zuerst mit einer Stimme und dann dreimal zweistimmig in verschiedenen Variationen:

10 DIM NO$,N$,N,BD,VL,V(4),N(9),NO(12*5-1)
20 FOR N=0 TO 12*5-1:READ NO(N):NEXT:REM FREQUENZWERTE FUER NOTEN EINLESEN
30 O$=" A BC D EF G ":REM NOTENAUFTEILUNG
40 BD=73:REM DAUER GANZE NOTE
50 VL=5:REM LAUTSTAERKE
60 V(0)=2:REM BASISOKTAVE DER PRIMAEREN STIMME
100 FOR I=1 TO 4
110 PRINT STR$(I);". DURCHGANG:"
120 IF I=1 THEN V(1)=0:REM NUR EINE STIMME
130 IF I=2 THEN V(1)=2:V(2)=3:V(3)=0:REM 2. STIMME EINE OKTAVE HOEHER
140 IF I=3 THEN V(1)=2:V(2)=2:V(3)=1:REM 2. STIMME LEICHT ERHOEHT
150 IF I=4 THEN V(1)=2:V(2)=3:V(3)=-1:REM 2. STIMME KNAPP EINE OKTAVE HOEHER
160 GOSUB 1000:REM STUECK ABSPIELEN
170 NEXT
999 END
1000 RESTORE 30000:VOL VL
1010 N(0)=0:N(1)=1:N(2)=0:N(3)=0:N(4)=1:N(8)=0:P$=""
1020 READ NO$
1030 DO WHILE NO$<>""
1040 FOR N=1 TO LEN(NO$)
1050 N$=MID$(NO$,N,1):P$=P$+N$
1060 IF N$="R" THEN N(0)=-1:IF N<LEN(NO$) THEN NEXT:REM R = PAUSE (REST)
1070 IF N$>="A" AND N$<="G" THEN N(0)=INSTR(O$,N$) :IF N<LEN(NO$) THEN NEXT
1080 IF N$>="1" AND N$<="8" THEN N(1)=VAL(N$):IF N<LEN(NO$) THEN NEXT
1090 IF N$="*" THEN N(3)=-1:IF N<LEN(NO$) THEN NEXT:REM UM HALBTON TIEFER
1100 IF N$="#" THEN N(3)=1:IF N<LEN(NO$) THEN NEXT:REM UM HALBTON HOEHER
1120 IF N$="'" THEN N(2)=N(2)+1:IF N<LEN(NO$) THEN NEXT:REM + EINE OKTAVE
1130 IF N$="," THEN N(2)=N(2)-1:IF N<LEN(NO$) THEN NEXT:REM - EINE OKTAVE
1140 IF N$="." THEN N(4)=1.5:IF N<LEN(NO$) THEN NEXT:REM FAKTOR PUNKTIERTE NOTE
1150 IF N$=" " OR N=LEN(NO$) THEN GOSUB 2000:REM NOTE SPIELEN
1160 NEXT
1180 PRINT
1190 READ NO$
1200 LOOP
1210 GOSUB 3000
1220 RETURN
2000 IF N(0)>=0 THEN N(6)=NO((V(1)+N2)*12+N(0)+N(3)):ELSE N(6)=-1
2010 IF V(1)>0 AND N(0)>=0 THEN N(7)=NO((V(2)+N2)*12+N(0)+N(3)):ELSE N(7)=-1
2020 N(5)=INT(BD/N(1)*N(4))
2030 GOSUB 3000:REM AKTUELLE NOTE FERTIG SPIELEN
2050 N(9)=TI+1:DO:LOOP WHILE TI<N(9):REM KURZE PAUSE
2060 IF N(6)>=0 THEN SOUND 1,N(6),255
2070 IF N(7)>=0 THEN SOUND V(1),N(7),255
2080 N(9)=TI+N(5)
2090 PRINT P$;" ";
2100 N(0)=0:N(1)=1:N(2)=0:N(3)=0:N(4)=1:N(8)=0:P$=""
2110 RETURN
3000 DO:LOOP WHILE TI<N(9):REM WARTEN, BIS NOTE FERTIG GESPIELT
3010 SOUND 1,0,0:IF V(1)>0 THEN SOUND V(1),0,0
3020 RETURN
20000 REM NOTENTABELLE
20105 REM  A   BB  B   C   C#  D   EB  E   F   F#  G   AB 
20010 DATA 007,064,118,169,217,262,305,345,383,419,453,485
20020 DATA 516,544,571,597,621,643,665,685,704,722,739,755
20030 DATA 770,784,798,810,822,834,844,854,864,873,881,889
20040 DATA 897,904,911,917,923,929,934,939,944,948,953,957
20050 DATA 960,964,967,971,974,976,979,982,984,986,988,990
30000 REM DAS MUSIKSTUECK SELBST 
30010 DATA "G4 E4 E2 F4 D4 D2"
30020 DATA "C4 D4 E4 F4 G4 G4 G2"
30030 DATA "G4 E4 E2 F4 D4 D2"
30040 DATA "C4 E4 G4 G4 C1"
30050 DATA "D4 D4 D4 D4 D4 E4 F2"
30060 DATA "E4 E4 E4 E4 E4 F4 G2"
30070 DATA "G4 E4 E2 F4 D4 D2"
30080 DATA "C4 E4 G4 G4 C1"
30090 DATA ""

Die Notation ist leicht an Liliypond[1] angelehnt. Die Buchstaben A bis G entsprechen den englischen Noten, # erhöht um einen Halbton, * erniedrigt um einen Halbton, R kennzeichnet eine Pause. Die Ziffern 1 bis 8 geben die Notenlänge an (1=ganz, 2=halb, 4=viertel ...) und ein Punkt verlängert die Note um die Hälfte. Getrennt werden die einzelnen Noten durch ein Leerzeichen. Ein Leerstring markiert das Ende des Stücks.

Weblinks[Bearbeiten | Quelltext bearbeiten]