10 REM *** FLUTE RESONANCE - LOSSLESS *** \ 12 REM WITH HEADJOINT AND COLTMAN BLOWING CORRECTIONS 12/97 AND VELOCITY 351500 15 REM Set for HP deskjet printer 20 REM PROGRAM BY JOHN W. COLTMAN REV. 12/97 * FLUTRES2.BAS 30 REM WIMBERLY BENNETT SCALE - LARGE C# SET CLOSED - 40 WD = 1.82: REM HEADJOINT WITHDRAWAL 50 SD$ = "####.# ####.# ###.# ###.# ###.#" 60 DIM A$(19): KEY OFF 70 DEFINT B, K: DIM B(51, 19), Q$(39), T(39), L$(39) 80 PI = 3.14159 90 CLS : PRINT "READING KEY MATRIX - PLEASE WAIT" 100 FOR K = 1 TO 19: READ A$(K): NEXT K 110 GOSUB 350 120 FOR N% = 1 TO 51 130 FOR K = 1 TO 19 140 READ B(N%, K): NEXT K: NEXT N% 150 DM = 380.5: REM MOUTH NODE DISTANCE 160 PRINT "DO YOU WANT (1) PRINTOUT OF ENTIRE SCALE (2) MANUAL NOTE CHOICE (3) TRILLS - MANUAL" 170 INPUT "WHICH"; GG 180 PRINT 190 IF GG <> 1 AND GG <> 2 AND GG <> 3 GOTO 160 200 IF GG = 1 GOTO 1500 210 INPUT "DO YOU WANT TO REVIEW PARAMETERS (Y OR N)"; F$ 220 PRINT 230 IF F$ = "Y" OR F$ = "y" THEN GOSUB 1110 235 IF F$ = "N" OR F$ = "n" GOTO 240 238 PRINT "Y or N Please": GOTO 210 240 IF GG = 3 GOTO 2090 250 INPUT "NOTE NAME"; D$ 260 GOSUB 1220 270 DATA TR1,TR2,C#1,C#2,C,B,A#,A,G#1,G#2,G,F#,F,E,D#,D,C#,C,B 280 N% = FL - 46 290 PRINT " A G# D#" 300 PRINT " C# C# B A# G F# F E D C# C B" 310 PRINT " TR1 TR2 C G#" 320 PRINT " "; 330 FOR K = 1 TO 19: PRINT B(N%, K); : NEXT K 340 GOTO 800 350 DIM C(20, 3): REM INCLUDES COLUMN 0 360 FOR K = 1 TO 19 370 FOR P = 0 TO 3 380 READ C(K, P) 390 NEXT P, K 400 RETURN 500 REM ** THESE KEY DATA FOR WIMBERLY BENNETT SCALE 510 REM * POS. H A B 520 DATA -129.6,51,.22,.12: 'TR1 530 DATA -113.8,51,.22,.12: 'TR2 540 DATA -96,58,.26,.14 : 'C# VENT 550 DATA -82.6,1E5,0,0 : 'C# EXTRA 560 DATA -63.7,22.6,.7,.4 : 'C THUMB 570 DATA -44,24.3,.7,.4 : 'B 580 DATA -22,21.3,1.2,.6 : 'B FLAT 590 DATA 0,21.3,1.2,.6 : 'A REFERENCE POSITION 600 DATA 21.6,24.3,.7,.4 : 'G# BACK 610 DATA 22.1,25.5,.7,.4 : 'G# TOP 620 DATA 45.6,22.8,1,.5 : 'G 630 DATA 72,19.8,1.5,.7 : 'F# 640 DATA 100.,19.8,1.5,.7 : 'F 650 DATA 128.9,19.8,1.5,.7: 'E 660 DATA 158.8,17.9,1.4,.8: 'D SHARP 670 DATA 192.3,17.9,1.4,.8: 'D 680 DATA 225.8,17.9,1.4,.8: 'C# 690 DATA 262.0,17.9,1.4,.8: 'C (FOR END USE H=5.8, A AND B =0) 700 DATA 307.7,5.8,0,0 : 'B END (FOR C FOOT USE H=1E5) 800 FOR J = 1 TO 2 810 R = L / 4 + .001 820 C(20, 0) = C(19, 0) 830 FOR K = 19 TO 1 STEP -1 840 DR = C(K + 1, 0) - C(K, 0) 850 R1 = R + DR / 2 860 TF = 1 + .00066 * K * (COS(2 * PI * R1 / L)) ^ 2 870 R = R + TF * DR 880 IF B(N%, K) = 0 THEN GOSUB 920 890 IF B(N%, K) = 1 THEN GOSUB 940 900 NEXT K 910 R = R + DM + C(1, 0): GOTO 950 920 S = 1 / TAN(2 * PI * R / L) + L / 2 / PI / C(K, 1) 930 R = L / 2 / PI * ATN(1 / S): RETURN 940 R = R + C(K, 2) - ((C(K, 2) + C(K, 3)) * (COS(2 * PI * R / L)) ^ 2): RETURN 950 IF R < -L / 4 THEN R = R + L / 2: GOTO 950 960 IF R > L / 4 THEN R = R - L / 2: GOTO 960 970 IF J = 2 GOTO 990 980 RA = R: LA = L: L = L * 1.03 990 NEXT J 1000 LO = LA * (1 - .03 * RA / (R - RA)): CENTS = 51.93 * RA / (R - RA) 1010 IF GG <> 1 GOTO 1030 1020 IF GG = 1 AND N% < 40 GOTO 1800 ELSE GOTO 2040 1030 PRINT : PRINT 1040 PRINT " NOTE FREQUENCY WAVELENGTH COLUMN CENTS" 1050 PRINT " EXCESS DEVIATION" 1060 IF GG = 3 THEN D$ = E$ 1070 PRINT TAB(4); D$; : PRINT TAB(12); USING SD$; F; LA; RA; CENTS 1080 REM 1090 IF GG = 3 GOTO 2090 1100 GOTO 250 1110 PRINT TAB(5); "KEY"; TAB(13); "POSITION"; TAB(25); "H"; TAB(33); "A"; 1120 PRINT TAB(41); "B": PRINT 1130 FOR K = 1 TO 19 1140 PRINT TAB(5); A$(K); 1150 PRINT TAB(15); C(K, 0); TAB(23); C(K, 1); TAB(31); C(K, 2); TAB(39); C(K, 3) 1160 NEXT K 1170 REM 1180 REM 1190 REM 1200 PRINT "HEADJOINT WITHDRAWN "; WD; " MM": INPUT "READY"; DD$: F$ = "N": RETURN 1210 INPUT "NOTE"; D$ 1220 B$ = LEFT$(D$, 1) 1230 Q = ASC(B$) 1240 IF Q > 71 OR Q < 65 GOTO 250 1250 ON (Q - 64) GOTO 1260, 1270, 1280, 1290, 1300, 1310, 1320 1260 AN = 9: GOTO 1330 1270 AN = 11: GOTO 1330 1280 AN = 0: GOTO 1330 1290 AN = 2: GOTO 1330 1300 AN = 4: GOTO 1330 1310 AN = 5: GOTO 1330 1320 AN = 7: GOTO 1330 1330 IF MID$(D$, 2, 1) = "#" THEN BN = AN + 1 ELSE BN = AN 1340 CN$ = RIGHT$(D$, 1) 1350 CN = VAL(CN$) 1360 FL = 12 * CN + BN 1370 IF FL < 47 OR FL > 85 GOTO 250 1380 F = 16.3516 * 2 ^ (FL / 12) REM 12/97 CORRECTIONS 1390 IF FL > 46 AND FL < 55 THEN HJ = .22 * (FL - 54): GOTO 1440 1400 IF FL > 54 AND FL < 62 THEN HJ = .6 - .04 * (FL - 58) ^ 2: GOTO 1440 1405 IF FL = 62 THEN HJ = -.5 1410 IF FL > 62 AND FL < 73 THEN HJ = -3 + .08 * (FL - 68) ^ 2: GOTO 1440 1430 IF FL > 70 THEN HJ = 2.5 - .04 * (FL - 82) ^ 2: GOTO 1440 1440 DM = 380.1 + WD + HJ 1450 L = 351500! * (1 - .176 / F ^ .5) / F: REM WARM AND WET WAVELENGTH 1460 REM FOR 20 DEGREE C WAVELENGTH USE 343340 1470 RETURN 1480 PRINT "FREQUENCY="; F; " TUBE WAVELENGTH="; L 1490 RETURN 1500 INPUT "FLUTE NAME"; MN$ 1510 GOTO 1710 1520 IF B(1, 19) = 2 THEN PP = 2 ELSE PP = 1 1530 FOR N% = 1 TO 39 1540 FL = N% + 46: OC = INT(FL / 12): OC$ = STR$(OC): N2 = FL - OC * 12 + 1 1550 ON N2 GOTO 1590, 1600, 1610, 1620, 1630, 1640, 1650, 1660, 1670, 1560, 1570, 1580 1560 D$ = "A": GOTO 1680 1570 D$ = "A#": GOTO 1680 1580 D$ = "B": GOTO 1680 1590 D$ = "C": GOTO 1680 1600 D$ = "C#": GOTO 1680 1610 D$ = "D": GOTO 1680 1620 D$ = "D#": GOTO 1680 1630 D$ = "E": GOTO 1680 1640 D$ = "F": GOTO 1680 1650 D$ = "F#": GOTO 1680 1660 D$ = "G": GOTO 1680 1670 D$ = "G#": GOTO 1680 1680 D$ = D$ + OC$ 1690 GOSUB 1380: REM GETS FREQ F AND WAVELENGTH L 1700 GOTO 800 1710 LPRINT CHR$(27); "@"; : LPRINT CHR$(27); "N"; CHR$(4): LPRINT MN$ 1720 LPRINT TAB(5); "KEY"; TAB(13); "POSITION"; TAB(25); "H"; TAB(33); "A"; TAB(41); "B": LPRINT 1730 FOR K = 1 TO 19 1740 LPRINT TAB(5); A$(K); TAB(15); C(K, 0); TAB(23); C(K, 1); TAB(31); C(K, 2); TAB(39); C(K, 3): NEXT K 1750 LPRINT "HEADJOINT WITHDRAWN "; WD; "MM" 1760 LPRINT 1770 LPRINT " NOTE FREQUENCY WAVELENGTH COLUMN CENTS" 1780 LPRINT " EXCESS DEVIATION" 1790 GOTO 1520 1800 REM 1810 T(N%) = 51.93 * RA / (R - RA) 1820 LPRINT TAB(4); D$; : LPRINT TAB(12); USING SD$; F; LA; RA; T(N%) 1830 NEXT N% 1840 LPRINT : LPRINT "TRILLS -- DATA ARE FOR UPPER NOTE": LPRINT 1850 LPRINT "TRILL FREQUENCY WAVELENGTH COLUMN CENTS INTERVAL" 1860 LPRINT " EXCESS DEVIATION" 1870 FOR N% = 40 TO 51 1880 ON (N% - 39) GOTO 1890, 1900, 1910, 1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990, 2000 1890 E$ = "C5-D5 (TR2)": FL = 62: LOW = 14: SP = 200: GOTO 2010 1900 E$ = "C#5-D5 (TR2)": FL = 62: LOW = 15: SP = 100: GOTO 2010 1910 E$ = "B5-C#6 (TR2)": FL = 73: LOW = 25: SP = 200: GOTO 2010 1920 E$ = "C#6-D6 (TR2)": FL = 74: LOW = 27: SP = 100: GOTO 2010 1930 E$ = "G6-G#6 (TR2)": FL = 80: LOW = 33: SP = 100: GOTO 2010 1940 E$ = "G#6-A6 (TR2)": FL = 81: LOW = 34: SP = 100: GOTO 2010 1950 E$ = "C#5-D#5 (TR1)": FL = 63: LOW = 15: SP = 200: GOTO 2010 1960 E$ = "C6-D6 (TR1)": FL = 74: LOW = 26: SP = 200: GOTO 2010 1970 E$ = "D6-D#6 (TR1)": FL = 75: LOW = 28: SP = 100: GOTO 2010 1980 E$ = "C#6-D#6 (BOTH)": FL = 75: LOW = 27: SP = 200: GOTO 2010 1990 E$ = "G6-A6 (BOTH+G#)": FL = 81: LOW = 33: SP = 200: GOTO 2010 2000 E$ = "G#6-A#6 (BOTH)": FL = 82: LOW = 34: SP = 200: GOTO 2010 2010 GOSUB 1380 2020 IF GG = 3 GOTO 290 2030 GOTO 800 2040 LPRINT E$; : LPRINT TAB(19); USING SD$; F; LA; RA; CENTS; CENTS - T(LOW) + SP 2050 REM 2060 NEXT N% 2065 LPRINT CHR$(12) 2070 GOTO 5000 2080 END 2090 PRINT : PRINT "TRILL FINGER 1 TRILL FINGER 2 BOTH " 2100 PRINT "(1) C5-D5 (7) C#5-D#5 (10) C#6-D#6 " 2110 PRINT "(2) C#5-D5 (8) C6-D6 (11) G6-A6 +G#" 2120 PRINT "(3) B5-C#6 (9) D6-D#6 (12) G#6-A#6 " 2130 PRINT "(4) C#6-D6 " 2140 PRINT "(5) G6-G#6 " 2150 PRINT "(6) G#6-A6 "; : INPUT "WHICH"; TR 2160 N% = TR + 39: GOTO 1880 3000 REM *** THE FOLLOWING DATA ARE STANDARD FINGERINGS, INC COLTMAN C# ** 3010 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0: 'B3 3020 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0: 'C4 3030 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 3040 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 3050 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0 3060 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 3070 DATA 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 3080 DATA 1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0 3090 DATA 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0: 'G4 3100 DATA 1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0 3110 DATA 1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0 3120 DATA 1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0 3130 DATA 1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3140 DATA 1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3150 DATA 1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3160 DATA 1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0: 'D5 3170 DATA 1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0 3180 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 3190 DATA 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 3200 DATA 1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0 3210 DATA 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0: 'G5 3220 DATA 1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0 3230 DATA 1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0 3240 DATA 1,1,1,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0 3250 DATA 1,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3260 DATA 1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0: 'C6 3270 DATA 1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3280 DATA 1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 3290 DATA 1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0 3300 DATA 1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,0: 'CONVENTIONAL E 3310 DATA 1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0 3320 DATA 1,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0,0,0,0 3330 DATA 1,1,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0: 'G6 3340 DATA 1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0 3350 DATA 1,1,0,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0 3360 DATA 1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,0 3370 DATA 0,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0 3380 DATA 1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,0,0,0,0: 'C6 3390 DATA 1,1,0,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0 3400 DATA 1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0: 'TRILLS BEGIN - 3410 DATA 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3420 DATA 1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3430 DATA 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3440 DATA 1,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0 3450 DATA 1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0 3460 DATA 0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3470 DATA 0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3480 DATA 0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 3490 DATA 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 3500 DATA 0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0 3510 DATA 0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0 3520 END 5000 FOR I = 1 TO 39: READ X: Q$(I) = CHR$(X): NEXT I 5040 S$ = ":---------:---------:---------:---------:---------|---------:---------:---------:---------:---------:" 5050 DATA 66,67,32,68,32,69,70,32,71,32,65,32,66,67,32,68,32,69,70,32,71,32,65,32,66,67,32,68,32,69,70,32,71,32,65,32,66,67,32 5070 QQ$ = "-50 -40 -30 -20 -10 0 10 20 30 40 50" 5080 LPRINT TAB(25); "CENTS DEVIATION FROM A440 SCALE": LPRINT 5090 LPRINT TAB(8); QQ$ 5095 LPRINT CHR$(27); "("; "s"; 17; "H"; : REM SETS HP TO 17 CHARACTERS/INCH 5097 WIDTH LPRINT 136: LPRINT 5100 FOR I = 1 TO 39 5110 GOSUB 5230 5130 IF ASC(Q$(I)) = 32 THEN LPRINT TAB(9); Q$(I - 1); "#"; : GOTO 5160 5140 LPRINT TAB(9); Q$(I); " "; 5160 IF T(I) = 0 THEN LPRINT TAB(15); S$: GOTO 5200 5170 LPRINT TAB(16); S1$; "O"; S2$ 5200 NEXT I 5205 LPRINT CHR$(27); "("; "s"; 10; "H": REM RESETS HP TO 10 CHARACTERS/IN 5207 WIDTH LPRINT 80 5210 REM WIDTH "LPT1:", 80: LPRINT CHR$(27); "@" 5215 LPRINT CHR$(12) 5220 END 5230 T(I) = T(I) + 50: T(I) = INT(T(I) + .5) 5240 IF T(I) < 0 OR T(I) > 100 THEN T(I) = 0 5250 S1$ = LEFT$(S$, T(I)) 5260 S2$ = RIGHT$(S$, 100 - T(I)) 5270 RETURN