SOUND (BASIC 3.5)
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]
AUTO | BACKUP | BOX | CHAR | CIRCLE | COLLECT | COLOR | COPY | DEC | DELETE | DIRECTORY | DLOAD | DO | DRAW | DS | DS$ | DSAVE | EL | ELSE | ER | ERR$ | EXIT | GETKEY | GRAPHIC | GSHAPE | HEADER | HELP | HEX$ | INSTR | JOY | KEY | LOCATE | LOOP | MONITOR | PAINT | PRINT USING | PUDEF | RCLR | RDOT | RENAME | RENUMBER | RESUME | RGR | RLUM | SCALE | SCNCLR | SCRATCH | SOUND | SSHAPE | TRAP | TROFF | TRON | UNTIL | VOL | WHILE