DEFINT J: DEFDBL G, K, V-X: DEFSNG A-F, H-I, L-U, Y-Z CLS : PRINT "WELCOME TO SPKR.EXE v.1.01 Copyright (C) 1996 Donald L. Klipstein&&Fs IS THE DRIVER'S FREE AIR RESONANT FREQ (Min .5 Hz max 1000)&&Qts IS THAT RESONANCE'S Q WITH THE DRIVER'S TERMINALS SHORTED (Min .01 max 25)" PRINT "&Vas IS THE DRIVER'S COMPLIANCE, AIR VOL. EQUIV.&Min .001 C.F. max 10000, max 100000 after multiplying by no. of drivers&&BOX VOLUME - min .001 max 100000 C.F.&&PORT FREQ - min 1 Hz max 1000 Hz. USE 1 Hz FOR NO PORT." PRINT "&MAX INTL. BOX DEPTH 165' OR .14 WAVE OF PORT FREQ&BOX Ht & WIDTH CANNOT BOTH EXCEED 284' OR 1/4 WAVE OF PORT FREQ&External box ht. and width must exceed 1.5#&&hit any key to start" 1 IF INKEY$ = "" THEN 1 2 CLS : SCREEN 2: GOSUB 4: GOSUB 6: GOSUB 7: GOTO 24 3 PRINT "INVALID DRIVER" 4 INPUT "Fs"; FS: INPUT "Qts"; QT: INPUT "Vas"; UA IF FS < .5 THEN 3 IF FS > 1000 THEN 3 IF QT < .01 THEN 3 IF QT > 25 THEN 3 IF UA < .001 THEN 3 IF UA > 10000 THEN 3 C5 = QT / FS: S = FS * QT INPUT "DRIVER DIA, IN."; D3: D32 = D3 * D3 C0 = .00019 * UA / D3 * S: C4 = C5 - 2 * C0 IF C4 <= 0 THEN PRINT "DRIVER CONE MASS <=0": GOTO 3 UQ = SQR(QT): UU = SQR(UQ): QT2 = QT * QT: FS2 = FS * FS: A4 = .000076 * D32 / SQR(FS * UU) / (SQR(UA) + 4.5 / D3 + .0005 * D32 * D3) 5 INPUT "HOW MANY DRIVERS"; ND: IF ND < .999 THEN 5 ND = INT(.5 + ND): UT = UA * ND IF UT > 100000 THEN PRINT "TOTAL VAS>100000 c.f. TRY FEWER DRIVERS": GOTO 5 RETURN 6 PRINT _ "&SELECT ENVIRONMENT&1) ON FLOOR, AWAY FROM WALLS&2) 1/4 SPACE - ON FLOOR, AGAINST OR RECESSED INTO A WALL&3) ANECHOIC FULL SPACE&4) STANDARD HALF SPACE - AGAINST OR RECESSED INTO A WALL, NO FLOOR COUPLING&5) Use 5-component Thiel-Small circuit" INPUT JE: RETURN 7 A = UT * QT2: IF QT > .2 THEN 8 PRINT "QB3 METHOD Vb="; .01 * INT(.5 + 266.7 * A); " ft^3 Fb="; .1 * INT(.5 + 3.536 / C5); "Hz&30% OVERSIZE Vb="; .01 * INT(.5 + 346.7 * A); " ft^3 Fb="; .1 * INT(.5 + 3.89 / C5); "Hz" PRINT "60% OVERSIZE Vb="; .01 * INT(.5 + 426.7 * A); " ft^3 Fb="; .1 * INT(.5 + 3.78 / C5); "Hz&DOUBLE SIZE Vb="; .01 * INT(.5 + 533.3 * A); " ft^3 Fb="; .1 * INT(.5 + 3.536 / C5); "Hz" GOTO 233 8 IF QT > .383 THEN 9 F = SQR(UU): Q = A * QT / SQR(SQR(UU * F)): PRINT "QB3-B4 METHOD Vb="; .01 * INT(.5 + 1148.9 * Q); " ft^3 Fb="; .1 * INT(.5 + (5.939 * UU - 2.196 * QT) / C5); "Hz&30% OVERSIZE Vb="; .01 * INT(.5 + 1493.5 * Q); " ft^3 Fb="; .1 * INT(.5 + _ 3.5 / C5 / SQR(F)); "Hz" GOTO 232 9 IF QT > 1 THEN 23 Q = .1 * (QT > .59) * (QT - .59): PRINT "C4 METHOD Vb="; .01 * INT(.5 + UT / (.003364 + .00007 / QT2 / QT2 / QT / UU) * (1 - 4.9 * Q)); " ft^3 Fb="; .1 * INT(.5 + FS * (5.028 + .58 / QT2 / UU) * (1 - Q)); "Hz" 22 IF QT > .8 THEN 23 232 PRINT "2X2 METHOD Vb="; .01 * INT(.5 + 400 * A); " ft^3 Fb="; FS; "Hz" 233 PRINT ".383 METHOD Vb="; .01 * INT(.5 + 482 * A); " ft^3 Fb="; .1 * INT(.5 + 3.83 / C5); "Hz" 23 INPUT "&BOX VOLUME (ft^3)"; UB INPUT "PORT FREQ.(Hz)(min 1)(1 Hz for no port)"; FB INPUT "BOX Ht, IN."; B5: INPUT "BOX WIDTH, IN."; B6: B56 = B5 * B6 IF B5 <= 3409.5 THEN 255 IF B6 > 3409.5 THEN 25 255 IF B5 <= 1.5 THEN 25 B23 = 2.3 * (B5 - 1.47) * (B6 - 1.47) IF B23 > .00201 THEN 26 25 CLS : PRINT "INVALID BOX": GOTO 23 26 IF FB < 1 THEN FB = 1 IF FB > 1000 THEN FB = 1000 27 IF UB < .001 THEN UB = .001 IF UB > 100000 THEN UB = 100000 F8 = B23 / UB: IF F8 < 2 THEN UB = .5 * B23: F8 = 2 IF FB > .5 * F8 THEN FB = .5 * F8 FB2 = FB * FB F = F8 * (F8 - FB): C2 = .8 / F: C1 = FB * C2 RETURN 24 CLS : PRINT "+12&&&+6&&&0dB&&&-6&&&-12&&&-18" LINE (32, 27)-(608, 27), , , -7197: LINE (32, 75)-(608, 75), , , -7197 LINE (32, 39)-(608, 39), , , -21846: LINE (32, 63)-(608, 63), , , -21846 LINE (32, 51)-(608, 51), , , 2032: LINE (32, 99)-(607, 99) FOR J = 576 TO 64 STEP -32: LINE (J, 4)-(J, 122): NEXT J: LINE (608, 3)-(32, 123), , B YA = 3.774E+07 / FS2 / UT 30 H = UB / S / UT: H5 = 5 * H: L = H * FB2: F = 15.8501 IF JE = 1 THEN 34 IF JE = 2 THEN 66 IF JE = 3 THEN 78 IF JE = 4 THEN 80 ELSE 90 34 SP = 1: B2 = 1.25E+07 / B56: C3 = C0 * SQR(ND * 1.2 + .4): Y = YA * .5 35 SS = 2: A1 = C5 / C3 / C3 / Y: Y = Y * C5: B1 = B2 * .70711 36 FOR J = 32 TO 608 STEP 8: FF = F * F: Z = (FF + B1) / (FF + B2) C = C3 * Z: R = Z * A1: RR = R * R O = F * C: A = 1 / O: XX = RR + A * A: T = C * L IF F > F8 THEN D1 = F * H5 ELSE D1 = F * H / (1 - FF * C2 + F * C1) N = 1 / T: Q = T * R: B = N / Q: XR = R / XX: K = 1 + Q * XR XA = A / XX: I = Q * XA: A = A * T: E = (1 + N) / A: Q = B * B + E * E D = (K * B + I * E) / Q: M = A - D1: G = (I * B - K * E) / Q - M V = D * D + G * G: E = (K * D + I * G) / V: W = (I * D - K * G) / V P = 1 - M * W: M = M * E: I = W + O + P / A + XA + F * C4 - S / F A = E - M / A + XR: Q = A4 * F: D = A + 1 - Q * I: Q = I + Q * A A = (1 + RR * O * O) * Z * B * Y * (P * P + M * M) / (D * D + Q * Q) GOSUB 100: LINE -(J, J1): F = F * 1.05926: NEXT J 46 LOCATE 7, 76: A = 7.11 / SQR(SQR(Y)): GOSUB 100: PRINT 130 - J1 - 3 * (JE < 3): LOCATE 17, 1 A$ = " " A = 2.65E-08 * L * FB2 * UB: E = 2.65E-08 * FS2 * FS: T = QT * SQR(1 + UT / UB): Q = A * SP F = SS + Q * SS * SS: IF A * YA * C5 > 2 * F * F THEN A$ = "TRY A SMALLER BOX OR LOWER PORT FREQUENCY." IF Q > .64 THEN A$ = "TRY A SMALLER BOX FOR BETTER PORT COUPLING" F = E * UT * SP: IF F > QT THEN A$ = "TRY FEWER DRIVERS TO FLATTEN THE MIDRANGE." IF T < QT * 1.25 THEN 89 IF T * T > 1 THEN A$ = "TRY A LARGER BOX FOR MORE BASS. " IF T > 3 THEN A$ = "TRY A LARGER BOX OR FEWER DRIVERS. " 89 IF T < .25 THEN A$ = "TRY A SMALLER BOX FOR FLATTER RESPONSE. " IF E * UA > QT THEN A$ = "DRIVER REFERENCE EFFICIENCY > 100%." IF D32 * ND > B56 THEN A$ = "DRIVERS WILL NOT FIT IN THE FRONT PANEL" PRINT " 16Hz 20 25 32 40 50 63 80 100 125 160 200 250 315 400 500 630 800 1KHz"; A$ PRINT "1 TO CHANGE PORT FREQ. ("; FB; "Hz ) &2 TO CHANGE BOX VOLUME ("; UB; "Ft^3 ) " PRINT "3 TO TOTALLY REDO THE BOX (8) Change driver type&4 TO CHANGE NUMBER OF DRIVERS ("; ND; ")" PRINT "5 REDO EVERYTHING, (6) CHANGE ENVIRONMENT, (7) REPLOT LAST CURVE (X) END" 52 A$ = INKEY$: IF A$ = "" THEN 52 LINE -(32, 123), , , 0 IF A$ = "7" THEN 24 IF A$ = "1" THEN LOCATE 19, 37: INPUT FB: GOSUB 26: GOTO 30 IF A$ = "2" THEN LOCATE 20, 38: INPUT UB: GOSUB 27: GOTO 30 IF A$ = "3" THEN GOSUB 7: GOTO 24 IF A$ = "4" THEN GOSUB 5: GOTO 24 IF A$ = "6" THEN GOSUB 6: GOTO 24 IF A$ = "8" THEN GOSUB 4: GOTO 24 IF A$ = "5" THEN 2 IF A$ = "X" THEN END IF A$ = "x" THEN END ELSE 52 66 SP = 2: C = C0 * SQR(ND * 1.2 + .4): Y = YA * .5 68 SS = 1: R = C5 / C / C / Y: Y = Y * C5: T = C * L: N = 1 / T: C3 = R * T: B = N / C3: B1 = B * B RR = R * R: E1 = T * RR: B2 = C * (N + N * N): N = B * Y: Z = RR * C * C * N: O = 1 / C FOR J = 32 TO 608 STEP 8: FF = F * F IF F > F8 THEN D1 = H5 ELSE D1 = H / (1 - FF * C2 + F * C1) A = O / F: XX = RR + A * A: K = 1 + E1 / XX: XA = A / XX: I = C3 * XA: E = F * B2: U = B1 + E * E D = (K * B + I * E) / U: Q = A * T: M = Q - F * D1: G = (I * B - K * E) / U - M: V = D * D + G * G: E = (K * D + I * G) / V W = (I * D - K * G) / V: P = 1 - M * W: M = M * E: I = W + P / Q + XA + F * (C + C4) - S / F: A = E - M / Q + R / XX Q = A4 * F: D = A + 1 - Q * I: A = I + Q * A: A = (N + FF * Z) * (P * P + M * M) / (D * D + A * A) GOSUB 100: LINE -(J, J1): F = F * 1.05926: NEXT J: GOTO 46 78 SP = .5: B2 = 2.5E+07 / B56: C3 = C0 * SQR(ND * .6 + .4): Y = YA: GOTO 35 80 SP = 1: C = C0 * SQR(ND * .6 + .4): Y = YA: GOTO 68 90 B = S * L / FS2: Y = YA * C5: SP = 0: SS = 1 FOR J = 32 TO 608 STEP 8: U = F * C5: E = 1 / (L / F - F * H): T = E + U - S / F: E = U - E * B A = E * E / (1 + T * T): GOSUB 100: LINE -(J, J1): F = F * 1.05926: NEXT J GOTO 46 100 IF A > 17.3 THEN J1 = 1: RETURN ELSE JV = 1000 * A IF JV > 460 THEN 101 ELSE 102 101 IF JV > 2900 THEN 103 ELSE 104 102 IF JV > 73 THEN 105 ELSE 106 103 IF JV > 7290 THEN 107 ELSE 108 104 IF JV > 1155 THEN 109 ELSE 110 105 IF JV > 183 THEN 111 ELSE 112 106 IF JV > 29 THEN 113 ELSE 114 107 IF JV > 11600 THEN 115 ELSE 116 108 IF JV > 4600 THEN 117 ELSE 118 109 IF JV > 1830 THEN 119 ELSE 120 110 IF JV > 729 THEN 121 ELSE 122 111 IF JV > 290 THEN 123 ELSE 124 112 IF JV > 116 THEN 125 ELSE 126 113 IF JV > 46 THEN 127 ELSE 128 114 IF JV > 18 THEN 129 ELSE 130 115 IF JV > 14500 THEN 131 ELSE 132 116 IF JV > 9170 THEN 133 ELSE 134 117 IF JV > 5790 THEN 135 ELSE 136 118 IF JV > 3650 THEN 137 ELSE 138 119 IF JV > 2300 THEN 139 ELSE 140 120 IF JV > 1454 THEN 141 ELSE 142 121 IF JV > 917 THEN 143 ELSE 144 122 IF JV > 579 THEN 145 ELSE 146 123 IF JV > 365 THEN 147 ELSE 148 124 IF JV > 230 THEN 149 ELSE 150 125 IF JV > 145 THEN 151 ELSE 152 126 IF JV > 92 THEN 153 ELSE 154 127 IF JV > 58 THEN 155 ELSE 156 128 IF JV > 36 THEN 157 ELSE 158 129 IF JV > 23 THEN 159 ELSE 160 130 IF JV > 15 THEN 161 ELSE J1 = 125: RETURN 131 IF JV > 16300 THEN J1 = 2: RETURN ELSE J1 = 4 + (JV > 15400): RETURN 132 IF JV > 12950 THEN 165 ELSE 166 133 IF JV > 10300 THEN 167 ELSE 168 134 IF JV > 8180 THEN 169 ELSE 170 135 IF JV > 6490 THEN 171 ELSE 172 136 IF JV > 5160 THEN 173 ELSE 174 137 IF JV > 4100 THEN 175 ELSE 176 138 IF JV > 3250 THEN 177 ELSE 178 139 IF JV > 2585 THEN 179 ELSE 180 140 IF JV > 2050 THEN 181 ELSE 182 141 IF JV > 1630 THEN 183 ELSE 184 142 IF JV > 1296 THEN 185 ELSE 186 143 IF JV > 1029 THEN 187 ELSE 188 144 IF JV > 818 THEN 189 ELSE 190 145 IF JV > 649 THEN 191 ELSE 192 146 IF JV > 516 THEN 193 ELSE 194 147 IF JV > 410 THEN 195 ELSE 196 148 IF JV > 325 THEN 197 ELSE 198 149 IF JV > 258 THEN 199 ELSE 200 150 IF JV > 205 THEN 201 ELSE 202 151 IF JV > 163 THEN 203 ELSE 204 152 IF JV > 130 THEN 205 ELSE 206 153 IF JV > 103 THEN 207 ELSE 208 154 IF JV > 82 THEN 209 ELSE 210 155 IF JV > 65 THEN 211 ELSE 212 156 IF JV > 52 THEN 213 ELSE 214 157 IF JV > 41 THEN 215 ELSE 216 158 IF JV > 32 THEN 217 ELSE 218 159 IF JV > 26 THEN 219 ELSE 220 160 IF JV > 20 THEN 221 ELSE 222 161 IF JV > 16 THEN 223 ELSE 224 165 J1 = 6 + (JV > 13700): RETURN 166 J1 = 8 + (JV > 12200): RETURN 167 J1 = 10 + (JV > 10900): RETURN 168 J1 = 12 + (JV > 9720): RETURN 169 J1 = 14 + (JV > 8660): RETURN 170 J1 = 16 + (JV > 7720): RETURN 171 J1 = 18 + (JV > 6880): RETURN 172 J1 = 20 + (JV > 6130): RETURN 173 J1 = 22 + (JV > 5460): RETURN 174 J1 = 24 + (JV > 4870): RETURN 175 J1 = 26 + (JV > 4340): RETURN 176 J1 = 28 + (JV > 3870): RETURN 177 J1 = 30 + (JV > 3450): RETURN 178 J1 = 32 + (JV > 3070): RETURN 179 J1 = 34 + (JV > 2740): RETURN 180 J1 = 36 + (JV > 2440): RETURN 181 J1 = 38 + (JV > 2175): RETURN 182 J1 = 40 + (JV > 1940): RETURN 183 J1 = 42 + (JV > 1730): RETURN 184 J1 = 44 + (JV > 1540): RETURN 185 J1 = 46 + (JV > 1370): RETURN 186 J1 = 48 + (JV > 1223): RETURN 187 J1 = 50 + (JV > 1090): RETURN 188 J1 = 52 + (JV > 972): RETURN 189 J1 = 54 + (JV > 866): RETURN 190 J1 = 56 + (JV > 772): RETURN 191 J1 = 58 + (JV > 688): RETURN 192 J1 = 60 + (JV > 613): RETURN 193 J1 = 62 + (JV > 546): RETURN 194 J1 = 64 + (JV > 487): RETURN 195 J1 = 66 + (JV > 434): RETURN 196 J1 = 68 + (JV > 387): RETURN 197 J1 = 70 + (JV > 345): RETURN 198 J1 = 72 + (JV > 307): RETURN 199 J1 = 74 + (JV > 274): RETURN 200 J1 = 76 + (JV > 244): RETURN 201 J1 = 78 + (JV > 217): RETURN 202 J1 = 80 + (JV > 194): RETURN 203 J1 = 82 + (JV > 173): RETURN 204 J1 = 84 + (JV > 154): RETURN 205 J1 = 86 + (JV > 137): RETURN 206 J1 = 88 + (JV > 122): RETURN 207 J1 = 90 + (JV > 109): RETURN 208 J1 = 92 + (JV > 97): RETURN 209 J1 = 94 + (JV > 87): RETURN 210 J1 = 96 + (JV > 77): RETURN 211 J1 = 98 + (JV > 69): RETURN 212 J1 = 100 + (JV > 61): RETURN 213 J1 = 102 + (JV > 55): RETURN 214 J1 = 104 + (JV > 49): RETURN 215 J1 = 106 + (JV > 43): RETURN 216 J1 = 108 + (JV > 39): RETURN 217 J1 = 110 + (JV > 34): RETURN 218 J1 = 112 + (JV > 31): RETURN 219 J1 = 114 + (JV > 27): RETURN 220 J1 = 116 + (JV > 24): RETURN 221 J1 = 118 + (JV > 22): RETURN 222 J1 = 120 + (JV > 19): RETURN 223 J1 = 122 + (JV > 17): RETURN 224 J1 = 124 + (JV > 15): RETURN