1010 '* programmed for the IBM-PC * * by Jason Vollmer * *************************************************************************
1020 '
1030 'This prelude is well-suited for the single voice of the PC. Every note of the original piece is played. The tempo gradually slows in the last 2 meas- ures, as a keyboardist might play it, and ends with the PC's approximation of a chord.
1040 '
1050 'The user is given the option to change the tempo from the standard tempo for this piece of 112 beats per minute.
1060 '
1070 ON ERROR GOTO 1990 'Checks for advanced BASIC
1080 '
1090 '************************************************************************* * LOAD THE NOTES * *************************************************************************
1100 '
1110 ' The elements of the M$ array each contain the first 8 notes of the prelude's corresponding measure. For these 32 measures, line 1800 plays each series of 8 notes twice, producing 16 sixteenth notes per measure.
1120 '
1130 ' Note: The PC does not require notes to be organized into measures.
1140 '
1150 DIM M$(32)
1160 M$(1) = "O3 CEG O4 CE O3 G O4 CE"
1170 M$(2) = "O3 CDA O4 DF O3 A O4 DF"
1180 M$(3) = "O2 B O3 DG O4 DF O3 G O4 DF"
1190 M$(4) = M$(1)
1200 M$(5) = "O3 CEA O4 EA O3 A O4 EA"
1210 M$(6) = "O3 CDF#A O4 D O3 F#A O4 D"
1220 M$(7) = "O2 B O3 DG O4 DG O3 G O4 DG"
1230 M$(8) = "O2 B O3 CEG O4 C O3 EG O4 C"
1240 M$(9) = "O2 A O3 CEG O4 C O3 EG O4 C"
1250 M$(10) = "O2 DA O3 DF# O4 C O3 DF# O4 C"
1260 M$(11) = "O2 GB O3 DGBDGB"
1270 M$(12) = "O2 GB- O3 EG O4 C# O3 EG O4 C#"
1280 M$(13) = "O2 FA O3 DA O4 D O3 DA O4 D"
1290 M$(14) = "O2 FA- O3 DFBDFB"
1300 M$(15) = "O2 EG O3 CG O4 C O3 CG O4 C"
1310 M$(16) = "O2 EFA O3 CF O2 A O3 CF"
1320 M$(17) = "O2 DFA O3 CF O2 A O3 CF"
1330 M$(18) = "O1 G O2 DGB O3 F O2 GB O3 F"
1340 M$(19) = "O2 CEG O3 CE O2 G O3 CE"
1350 M$(20) = "O2 CGB- O3 CE O2 B- O3 CE"
1360 M$(21) = "O1 F O2 FA O3 CE O2 A O3 CE"
1370 M$(22) = "O1 F# O2 CA O3 CE- O2 A O3 CE-"
1380 M$(23) = "O1 A- O2 FB O3 CD O2 B O3 CD"
1390 M$(24) = "O1 G O2 FGB O3 D O2 GB O3 D"
1400 M$(25) = "O1 G O2 EG O3 CE O2 G O3 CE"
1410 M$(26) = "O1 G O2 DG O3 CF O2 G O3 CF"
1420 M$(27) = M$(18)
1430 M$(28) = "O1 G O2 E-A O3 CF# O2 A O3 CF#"
1440 M$(29) = "O1 G O2 EG O3 CG O2 G O3 CG"
1450 M$(30) = M$(26)
1460 M$(31) = M$(18)
1470 M$(32) = "O1 C O2 CGB- O3 E O2 GB- O3 E"
1480 M33$ = "O1 C O2 CFA O3 CFC O2 A O3 C O2 AFAFDFD"
1490 M34A$ = "O1 CB O3 GB O4 DFD O3 B O4 D O3 BGB"
1500 M34B$ = "O3 DFED P32"
1510 ENDING.CHORD$ = "T255 L64 O1 C O2 C O3 EG O4 C1"
1520 '
1530 '************************************************************************* * ALLOW THE USER TO CHANGE TEMPO * *************************************************************************
1560 PRINT "Is standard tempo for this piece of 112 ok?"
1570 INPUT " (Enter Y or N): ",T$
1580 IF T$="Y" OR T$="y" THEN 1630
1590 INPUT " Tempo desired (54-255): ";TEMPO
1600 IF TEMPO >=54 AND TEMPO<=255 THEN 1670
1610 PRINT "Invalid response"
1620 INPUT "Please enter a tempo between 54 and 255: ",TEMPO:GOTO 1600
1630 TEMPO=112
1640 '
1650 ' ************************************************************************ * SET THE SCREEN DISPLAY * ************************************************************************
1660 '
1670 CLS:KEY OFF:PRINT "Now playing..."
1680 LOCATE 2,31:PRINT "P R E L U D E 1"
1690 LOCATE 4,30:PRINT "i n C M a j o r"
1700 LOCATE 8,37:PRINT "f r o m"
1710 LOCATE 12,15:PRINT "T H E W E L L - T E M P E R E D C L A V I E R"
1720 LOCATE 14,35:PRINT "B o o k 1"
1730 LOCATE 17,39:PRINT "b y"
1740 LOCATE 20,33:PRINT "J. S. B A C H"
1750 '
1760 '************************************************************************* * PLAY THE NOTES * *************************************************************************
1770 '
1780 PLAY "ML T=TEMPO; L16"
1790 FOR I=1 TO 32
1800 PLAY "XM$(I); XM$(I);"
1810 NEXT
1820 TEMPO2=TEMPO*.9
1830 PLAY "T=TEMPO2; XM33$;"
1840 TEMPO3=TEMPO*.75
1850 PLAY "T=TEMPO3; XM34A$;"
1860 TEMPO4=TEMPO*.6
1870 PLAY "T=TEMPO4; XM34B$;"
1880 PLAY "T=TEMPO; XENDING.CHORD$;"
1890 '
1900 '************************************************************************* * ALLOW REPLAY AND FINISH * *************************************************************************
1910 '
1920 LOCATE 1,1:PRINT SPC(14)
1930 FOR I=1 TO 1500:NEXT 'Delay loop
1940 LOCATE 21,1:INPUT "Play again (Enter Y or N): ";A$
1950 IF A$="Y" OR A$="y" THEN 1550
1960 PRINT "End of music program"
1970 END
1980 '
1990 IF ERR=73 THEN CLS: PRINT "THIS PROGRAM USES THE 'PLAY' STATEMENT WHICH REQUIRES ADVANCED BASIC.": PRINT "LOAD 'BASICA' AND RE-RUN.":END
2000 ON ERROR GOTO 0
OGRAM USES THE 'PLAY' STATEMENT WHICH REQUIRES ADVANCED BASIC.": PRINT "LOAD 'BASICA' AN