5748223 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$ cat -n rec.bas
   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: DIM t AS DOUBLE
 162: N = 3.5
 163: N2 = 2
 164: DO
 165:         t = t + 1
 166:         SP% = SampleByte(BP%)
 167:         SP% = SP% * N
 168:         LINE ((t MOD 640), 128 * N)-((t MOD 640), SP%), 2
 169:         FOR U% = 1 TO VOC: NEXT U%
 170:         IF t MOD 640 = 0 THEN CLS
 171:         IF (SP% / N) MOD 2 = 0 THEN X% = (SP% / N) ELSE X% = (SP% / N) + 1
 172:         IF X% > 125 AND X% < 135 THEN  ELSE SOUND ABS((X% / N2) - 255) * N, 1
 173: LOOP WHILE INKEY$ = ""
 174: END SUB
 175: 
 176: SUB WriteDSP (byte%, BP%)
 177: dspcmd% = BP% + 12
 178: FOR t% = 1 TO 8
 179:         q% = INP(dspcmd%)
 180: NEXT t%
 181: OUT dspcmd%, byte%
 182: END SUB
 183: 
5748224 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-05-09 21:08:21