1: DECLARE SUB ViewLoop () 2: DECLARE SUB DETERMIN () 3: DECLARE SUB SECTOFOR (T1!, K!) 4: DECLARE SUB RECORD (tme!) 5: DECLARE FUNCTION SampleByte% (BP%) 6: DECLARE SUB WriteDSP (byte%, BP%) 7: DECLARE SUB SBReset (BP%) 8: DIM SHARED LS%, LS2%, LS3%, T1, K, DIR$, Y, Y2, VOC, VOC2 9: DIM SHARED SMP%(32766) 10: 'DIM SHARED SM%(32766) 11: 'DIM SHARED SM2%(3276) 12: CONST BP% = &H220 13: CALL SBReset(BP%) 14: CONST UP = 1 15: CONST DOWN = 2 16: SCREEN 12 17: Y = 0: Y2 = -50 18: PRINT "SAY: HELLO" 19: RECORD 20 20: FOR q = 1 TO 2000 21: 'PRINT SMP%(q) 22: NEXT q 23: ViewLoop 24: SYSTEM 25: 26: SUB DETERMIN 27: IF Y = -50 THEN VOC = 80 28: IF Y = -40 THEN VOC = 70 29: IF Y = -30 THEN VOC = 60 30: IF Y = -10 THEN VOC = 50 31: IF Y = 0 THEN VOC = 40 32: IF Y = 10 THEN VOC = 16 33: IF Y = 20 THEN VOC = 22 34: IF Y = 30 THEN VOC = 28 35: IF Y = 40 THEN VOC = 34 36: 37: IF Y2 = -50 THEN VOC2 = 0 38: IF Y2 = -40 THEN VOC2 = 1 39: IF Y2 = -30 THEN VOC2 = 2 40: IF Y2 = -20 THEN VOC2 = 3 41: IF Y2 = -10 THEN VOC2 = 4 42: IF Y2 = 0 THEN VOC2 = 5 43: IF Y2 = 10 THEN VOC2 = 6 44: IF Y2 = 20 THEN VOC2 = 7 45: IF Y2 = 30 THEN VOC2 = 8 46: IF Y2 = 40 THEN VOC2 = 9 47: END SUB 48: 49: SUB PLAYBACK 50: 'DETERMIN 51: 'CALL WriteDSP(&HD1, BP%) 'Turn speaker on 52: 'FOR T% = 1 TO LS% 53: ' CALL WriteDSP(&H10, BP%) 54: ' CALL WriteDSP(SMP%(T%), BP%) 55: ' FOR I = 1 TO VOC2: NEXT 56: 'NEXT T% 57: 'FOR T% = 1 TO LS2% 58: ' CALL WriteDSP(&H10, BP%) 59: ' CALL WriteDSP(SM%(T%), BP%) 60: ' FOR I = 1 TO VOC2: NEXT 61: 'NEXT T% 62: 'FOR T% = 1 TO LS3% 63: ' CALL WriteDSP(&H10, BP%) 64: ' CALL WriteDSP(SM2%(T%), BP%) 65: ' FOR I = 1 TO VOC2: NEXT 66: 'NEXT T% 67: 'CALL WriteDSP(&HD3, BP%) 'Turn speaker off 68: END SUB 69: 70: SUB RECORD (tme) 71: T1 = 1: K = 1 72: SECTOFOR T1, K 73: DETERMIN 74: N = 3.5 75: LS% = tme * 100 76: FOR t% = 1 TO LS% 77: SMP%(t%) = SampleByte(BP%) 78: SMP%(t%) = SMP%(t%) * N 79: LINE ((t% MOD 640), 128 * N)-((t% MOD 640), SMP%(t%)), 2 80: FOR U% = 1 TO VOC: NEXT U% 81: IF t% MOD 640 = 0 THEN CLS 82: NEXT t% 83: 'FOR T% = 1 TO LS2% 84: ' SM%(T%) = SampleByte(BP%) 85: ' SM%(T%) = SM%(T%) * N 86: ' LINE ((T% MOD 640), 128 * N)-((T% MOD 640), SM%(T%)), 2 87: ' FOR U% = 1 TO 40 + VOC: NEXT U% 88: ' IF T% MOD 640 = 0 THEN CLS 89: 'NEXT T% 90: 'FOR T% = 1 TO LS3% 91: ' SM2%(T%) = SampleByte(BP%) 92: ' SM2%(T%) = SM2%(T%) * N 93: ' LINE ((T% MOD 640), 128 * N)-((T% MOD 640), SM2%(T%)), 2 94: ' FOR U% = 1 TO 40 + VOC: NEXT U% 95: ' IF T% MOD 640 = 0 THEN CLS 96: 'NEXT T% 97: 'BEEP 98: END SUB 99: 100: FUNCTION SampleByte% (BP%) 101: CALL WriteDSP(&H20, BP%) 102: datavail% = BP% + 14 103: dly: 104: IF INP(datavail%) AND &H80 = 0 THEN GOTO dly 105: datread% = BP% + 10 106: bt% = INP(datread%) 107: SampleByte% = bt% 108: 109: END FUNCTION 110: 111: SUB SAYSELECT (FILE$) 112: CALL WriteDSP(&HD1, BP%) 113: OPEN FILE$ FOR INPUT AS #1 114: FOR I% = 1 TO 8000 115: LINE INPUT #1, A$ 116: SMP%(I%) = ASC(A$) 117: NEXT 118: CLOSE 119: FOR t% = 1 TO 8000 120: CALL WriteDSP(&H10, BP%) 121: CALL WriteDSP(SMP%(t%), BP%) 122: NEXT t% 123: CALL WriteDSP(&HD3, BP%) 124: END SUB 125: 126: SUB SBReset (BP%) 127: dspreset% = BP% + 6 128: OUT dspreset%, 1 129: FOR t% = 1 TO 10 130: A% = INP(dspreset%) 131: NEXT t% 132: OUT dspreset%, 0 133: dspread% = BP% + 10 134: FOR t% = 1 TO 10 135: A% = INP(dspread%) 136: NEXT t% 137: END SUB 138: 139: SUB SECTOFOR (T1, K) 140: IF T1 = 1 AND K = 0 THEN LS% = 32766: LS2% = 21844 141: IF T1 = 1 AND K = 1 THEN LS% = 32766: LS2% = 27305 142: IF T1 = 1 AND K = 2 THEN LS% = 32766: LS2% = 32766 143: IF T1 = 1 AND K = 3 THEN LS% = 32766: LS2% = 32766: LS3% = 5461 144: IF T1 = 1 AND K = 4 THEN LS% = 32766: LS2% = 32766: LS3% = 10922 145: IF T1 = 1 AND K = 5 THEN LS% = 32766: LS2% = 32766: LS3% = 16383 146: IF T1 = 1 AND K = 6 THEN LS% = 32766: LS2% = 32766: LS3% = 21844 147: IF T1 = 1 AND K = 7 THEN LS% = 32766: LS2% = 32766: LS3% = 27305 148: IF T1 = 1 AND K = 8 THEN LS% = 32766: LS2% = 32766: LS3% = 32766 149: IF T1 = 0 AND K = 1 THEN LS% = 5461 150: IF T1 = 0 AND K = 2 THEN LS% = 10922 151: IF T1 = 0 AND K = 3 THEN LS% = 16383 152: IF T1 = 0 AND K = 4 THEN LS% = 21844 153: IF T1 = 0 AND K = 5 THEN LS% = 27305 154: IF T1 = 0 AND K = 6 THEN LS% = 32766 155: IF T1 = 0 AND K = 7 THEN LS% = 32766: LS2% = 5461 156: IF T1 = 0 AND K = 8 THEN LS% = 32766: LS2% = 10922 157: IF T1 = 0 AND K = 9 THEN LS% = 32766: LS2% = 16383 158: END SUB 159: 160: SUB ViewLoop 161: N = 3.5 162: N2 = 2 163: DO 164: t = t + 1 165: IF mrk > 0 THEN dt = dt + 1 166: SP% = ABS((CINT(SampleByte(BP%) / 2) * 2) - 128) 167: SP% = SP% * N 168: LINE ((t MOD 640), 0 * N)-((t MOD 640), SP%), 2 169: FOR U% = 1 TO VOC: NEXT U% 170: IF t MOD 640 = 0 THEN CLS : t = 1 171: IF mrk = 0 AND SP% <> 0 THEN mrk = 1 172: IF SP% = 0 AND mrk > 0 THEN Cmm = Cmm + 1 ELSE Cmm = 0 173: IF (SP% / N) MOD 2 = 0 THEN X% = (SP% / N) ELSE X% = (SP% / N) + 1 174: IF ABS(SP%) MOD 255 >= 128 THEN SMP%(CnT) = ABS(SP%) MOD 255: SMP%(CnT + 1) = dt: CnT = CnT + 2 175: IF Cmm = 1000 THEN EXIT DO 176: LOOP WHILE INKEY$ = "" 177: FOR q = 0 TO CnT 178: PRINT SMP%(q) 179: NEXT q 180: END SUB 181: 182: SUB WriteDSP (byte%, BP%) 183: dspcmd% = BP% + 12 184: FOR t% = 1 TO 8 185: q% = INP(dspcmd%) 186: NEXT t% 187: OUT dspcmd%, byte% 188: END SUB 189: |