Elektronisches Akkordeon
Mit diesem Programm steht dem Einzug des C 64 in die Hausmusik nichts mehr im Wege. Spielen Sie auf der Tastatur wie auf einem richtigen Akkordeon.
Wer sich das Listing genauer betrachtet, wird bemerken, wie einfach doch das Programm aufgebaut ist. Trotzdem produziert es erstaunlich harmonische Klänge. Außerdem wurden die einzelnen Akkorde so auf der Tastatur verteilt, daß geübte Akkordeonspieler nach einer kurzen Eingewöhnungsphase wie auf einem »echten« Instrument spielen können.
Wenn das Programm mit »RUN« gestartet wurde, befindet man sich sofort im Spielmodus. Wie die Tastatur mit den Akkorden belegt ist, zeigt unser Bild.

Durch Druck auf die große Space-Taste gelangt man in einen Änderungsmodus. Folgende Funktionen sind über die Zifferntasten verfügbar (jeweils vorher Space-Taste drücken):
| »1«: | Baß auf Sägezahnschwingung schalten. |
| »2«: | Baß auf Rechteckschwingung schalten. |
| »3«: | Baß auf Dreieckschwingung schalten. |
| »4«: | Baß auf Rauschen schalten. |
| »5«: | Akkord auf Sägezahnschwingung schalten. |
| »6«: | Akkord auf Rechteckschwingung schalten. |
| »7«: | Akkord auf Dreieckschwingung schalten |
| »8«: | Akkord auf Rauschen schalten. |
| »9«: | Kleine Rechteckimpulsweite einschalten (nur in Verbindung mit Rechteckschwingung). |
| »0« | Große Rechteckschwingung einschalten (nur in Verbindung mit Rechteckschwingung). |
| »*« | Einschaltwerte wiederherstellen (»1«, »5« und »9«). |
Es empfiehlt sich übrigens, den Computer mit einem Überspielkabel über die Audio/Video-Buchse an eine Stereoanlage anzuschließen. Man erhält so einen wesentlich besseren Klang, vor allem fülligere Bässe. Auch sollte man ruhig einmal mit der ADSR-Hüllkurve experimentieren. Sie wird in den Zeilen 10 bis 60 festgelegt.
Technisches zum Programm
Das eigentliche Problem bestand darin, die 40 Tasten schnellstmöglich abzufragen. Eine Kolonne von IF-THEN-Anweisungen wäre sicher nicht die Optimallösung. Der Programmautor hatte da folgende geniale Idee: In den Zeilen 80 und 90 wird auf einen Tastendruck gewartet, dieser als Buchstabe beziehungsweise Zahl übernommen und einem Zahlenwert (ASC-Funktion) zugeordnet. Der Wert wird nun in ein anderes Format umgerechnet (Zeilen 300, 320, 340 und 360) und über eine Reihe von ON-GOTO-Befehlen der entsprechende Dreiklang/Baß angesprungen.
Auf eine aufwendige Bildschirmgestaltung wurde zum Wohle des abtippenden Lesers verzichtet.
(Hermann Huck/tr)1 rem a k k o r d e o n (2) 2 rem von hermann huck 3 rem 7987 weingarten 4 rem laurastr.34 6 a=54272:b=54273:rem fuer tonhoehe 7 c=54279:d=54280:rem fuer tonhoehe 8 e=54286:f=54287:rem fuer tonhoehe 10 poke54277,1*16+15:rem anschl.abschw. 20 poke54284,1*16+15:rem anschl.abschw. 30 poke54291,1*16+15:rem anschl.abschw. 40 poke54278,15*16+8:rem halt.auskl. 50 poke54285,15*16+8:rem halt.auskl. 60 poke54292,15*16+8:rem halt.auskl. 70 poke54296,15:rem lautst. 71 tl=255 :rem tastenverh.low grundein. 72 th=0 :rem tastenverh.high grundmin. 74 wb=33 :rem wellenform bass grundein. 76 wa=33 :rem wellenform akk. grundein. 77 poke54274,tl:poke54275,th 78 poke54281,tl:poke54282,th 79 poke54288,tl:poke54289,th 80 gett$:ift$=""then80 90 x=asc(t$) 100 ifx<=58then200 110 ifx>=65then250 120 goto80 200 ifx>=44andx<=50then300 210 ifx>=51then320 215 ifx=32then5200 220 goto80 250 ifx<=90andx>=78then360 260 ifx<=77then340 270 goto80 300 x=x-43 310 onxgoto2150,80,2210,2250,1750,610,710 320 x=x-50 330 onxgoto1210,1310,1410,1510,1610,1650,1710,1550 340 x=x-64 350 onxgoto1150,2010,1910,950,910,850,650,750,1310,1250,1350,1450,2110 360 x=x-77 370 onxgoto2050,1410,1510,1110,810,1050,610,1210,1950,1010,1850,710,1810 610 pokea,91 :pokeb,4 620 pokec,90 :poked,4 630 pokee,89 :pokef,4 :rem c 640 goto5000 650 pokea,103:pokeb,17 660 pokec,237:poked,21 670 pokee,20 :pokef,26:rem c-dur 680 goto5100 710 pokea,134:pokeb,6 720 pokec,133:poked,6 730 pokee,132:pokef,6 :rem g 740 goto5000 750 pokea,109:pokeb,16 760 pokec,137:poked,19 770 pokee,20 :pokef,26:rem g-dur 780 goto5100 810 pokea,208:pokeb,5 820 pokec,207:poked,5 830 pokee,206:pokef,5 :rem f 840 goto5000 850 pokea,103:pokeb,17 860 pokec,59 :poked,23 870 pokee,69 :pokef,29:rem f-dur 880 goto5100 910 pokea,194:pokeb,7 920 pokec,193:poked,7 930 pokee,192:pokef,7 :rem b 940 goto5000 950 pokea,137:pokeb,19 960 pokec,59 :poked,23 970 pokee,3 :pokef,31:rem b-dur 980 goto5100 1010 pokea,46 :pokeb,5 1020 pokec,45 :poked,5 1030 pokee,44 :pokef,5 :rem es 1040 goto5000 1050 pokea,129:pokeb,15 1060 pokec,178:poked,20 1070 pokee,20 :pokef,26:rem es-dur 1080 goto5100 1110 pokea,233:pokeb,6 1120 pokec,232:poked,6 1130 pokee,231:pokef,6 :rem as 1140 goto5000 1150 pokea,103:pokeb,17 1160 pokec,178:poked,20 1170 pokee,160:pokef,27:rem as-dur 1180 goto5100 1210 pokea,227:pokeb,4 1220 pokec,226:poked,4 1230 pokee,225:pokef,4 :rem d 1240 goto5000 1250 pokea,162:pokeb,14 1260 pokec,137:poked,19 1270 pokee,157:pokef,24:rem d-dur 1280 goto5100 1310 pokea,82 :pokeb,7 1320 pokec,81 :poked,7 1330 pokee,80 :pokef,7 :rem a 1340 goto5000 1350 pokea,162:pokeb,14 1360 pokec,112:poked,18 1370 pokee,237:pokef,21:rem a-dur 1380 goto5100 1410 pokea,124:pokeb,5 1420 pokec,123:poked,5 1430 pokee,122:pokef,5 :rem e 1440 goto5000 1450 pokea,208:pokeb,13 1460 pokec,109:poked,16 1470 pokee,237:pokef,21:rem e-dur 1480 goto5100 1510 pokea,56 :pokeb,8 1520 pokec,55 :poked,8 1530 pokee,54 :pokef,8 :rem h 1540 goto5000 1550 pokea,78 :pokeb,12 1560 pokec,109:poked,16 1570 pokee,178:pokef,20:rem h-dur 1580 goto5100 1610 pokea,40 :pokeb,6 1620 pokec,39 :poked,6 1630 pokee,38 :pokef,6 :rem fis 1640 goto5000 1650 pokea,157:pokeb,4 1660 pokec,156:poked,4 1670 pokee,155:pokef,4 :rem cis 1680 goto5000 1710 pokea,233:pokeb,6 1720 pokec,232:poked,6 1730 pokee,231:pokef,6 :rem gis 1740 goto5000 1750 pokea,46 :pokeb,5 1760 pokec,45 :poked,5 1770 pokee,44 :pokef,5 :rem dis 1780 goto5000 1810 pokea,109:pokeb,16 1820 pokec,178:poked,20 1830 pokee,160:pokef,27:rem as-moll 1840 goto5100 1850 pokea,129:pokeb,15 1860 pokec,178:poked,20 1870 pokee,157:pokef,24:rem es-moll 1880 goto5100 1910 pokea,112:pokeb,18 1930 pokee,3 :pokef,31:rem b -moll 1940 goto5100 1950 pokea,103:pokeb,17 1960 pokec,59 :poked,23 1970 pokee,160:pokef,27:rem f -moll 1980 goto5100 2010 pokea,103:pokeb,17 2020 pokec,178:poked,20 2030 pokee,20 :pokef,26:rem c -moll 2040 goto5100 2050 pokea,129:pokeb,15 2060 pokec,137:poked,19 2070 pokee,20 :pokef,26:rem g -moll 2080 goto5100 2110 pokea,162:pokeb,14 2120 pokec,137:poked,19 2130 pokee,59 :pokef,23:rem d -moll 2140 goto5100 2150 pokea,162:pokeb,14 2160 pokec,103:poked,17 2170 pokee,237:pokef,21:rem a -moll 2180 goto5100 2210 pokea,10 :pokeb,13 2220 pokec,109:poked,16 2230 pokee,237:pokef,21:rem e -moll 2240 goto5100 2250 pokea,78 :pokeb,12 2260 pokec,109:poked,16 2270 pokee,137:pokef,19:rem h -moll 2280 goto5100 5000 rem bass ausloesen 5010 poke54276,wb 5020 poke54283,wb 5030 poke54290,wb:rem einschalten 5040 fori=1to100:next:rem klangdauer 5050 poke54276,wb-1 5060 poke54283,wb-1 5070 poke54290,wb-1:rem ausschalten 5080 goto80 5100 rem akkord ausloesen 5110 poke54276,wa 5120 poke54283,wa 5130 poke54290,wa:rem einschalten 5140 fori=1to100:next:rem klangdauer 5150 poke54276,wa-1 5160 poke54283,wa-1 5170 poke54290,wa-1:rem ausschalten 5180 goto80 5200 gett$:ift$=""then5200 5210 ift$="1"thenwb=33:goto80 5220 ift$="2"thenwb=65:goto80 5230 ift$="3"thenwb=17:goto80 5240 ift$="4"thenwb=129:goto80 5250 ift$="5"thenwa=33 :goto80 5260 ift$="6"thenwa=65 :goto80 5270 ift$="7"thenwa=17 :goto80 5280 ift$="8"thenwa=129:goto80 5290 ift$="9"thentl=255:th=0:goto77 5300 ift$="0"thentl=0 :th=8:goto77 5305 ift$="*"then71 5310 goto5200