home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / sfa6.bas < prev    next >
BASIC Source File  |  1994-05-13  |  5KB  |  151 lines

  1. DEFINT A-Z
  2.  
  3.     CONST BPORT = &H220  'Base Port address
  4.     CONST XPORT = &H226  'Reset port address
  5.     CONST WPORT = &H22C  'Write port address
  6.     CONST RPORT = &H22A  'Read port address
  7.     CONST APORT = &H22E  'Data Available port address
  8.  
  9.     DIM chgarray(40) 'change
  10.     DIM lenarray(40) 'sust. len.
  11.     DIM peakarray(30)    'peak leng
  12.     lenp = 0
  13.     lastd = 0   'last direction
  14.     lastgot = 128
  15.     lch0 = 0
  16.     tz0 = 0
  17.  
  18.     DEF SEG = &HA000
  19.     SCREEN 13
  20.  
  21.     lens = 0: lasts = 0
  22.     
  23.     DO
  24.         OUT WPORT, &H20           'Tell SoundBlaster you wanna read a byte.
  25.         gotit = INP(RPORT)
  26.         gg = (gotit - 128)
  27.         dir = gotit - lastgot
  28.  
  29.         IF dir > 1 THEN currentd = 1 ELSE IF dir < -1 THEN currentd = -1 ELSE currentd = lastd
  30.  
  31.         IF currentd <> lastd THEN
  32.             IF lenp > 309 THEN lenp = 309
  33.             lenp = lenp \ 10
  34.             peakarray(lenp) = peakarray(lenp) + (lenp \ 2)
  35.             lenp = 0
  36.         ELSE
  37.             lenp = lenp + 1
  38.         END IF
  39.         
  40.         lastd = currentd
  41.         lastgot = gotit
  42.  
  43.         IF gg > 4 THEN current = 1 ELSE IF gg < -4 THEN current = -1 ELSE current = lasts
  44.         IF current <> lasts THEN
  45.             IF lens > 309 THEN lens = 309
  46.             lens = lens \ 10
  47.             lenarray(lens) = lenarray(lens) + lens
  48.             lens = 0
  49.         ELSE
  50.             lens = lens + 1
  51.         END IF
  52.  
  53.         IF ABS(gg) > 4 THEN
  54.             chng = ABS(gotit - last)
  55.             IF chng > 39 THEN chng = 39
  56.             IF chng = 0 THEN
  57.                 tz0 = tz0 + 1
  58.                 lch0 = 1
  59.             ELSE
  60.                 IF lch0 = 1 THEN
  61.                     xx = 41 - tz0
  62.                     IF xx < 0 THEN xx = 0
  63.                     chgarray(xx \ 2) = chgarray(xx \ 2) + 1
  64.                     tz0 = 0
  65.                     lch0 = 0
  66.                 ELSE
  67.                     chgarray((chng + 40) \ 2) = chgarray((chng + 40) \ 2) + 1
  68.                 END IF
  69.             END IF
  70.         END IF
  71.         
  72.         at1 = at1 + 1
  73.         at = at + 1
  74.  
  75.         lasts = current
  76.         last = gotit
  77.         
  78.         IF at1 = 750 THEN
  79.             at1 = 0
  80.             FOR r = 0 TO 40
  81.                 xx = chgarray(r)
  82.                 chgarray(r) = 0
  83.                 IF xx > 94 THEN xx = 94
  84.  
  85.                     IF xx < 94 THEN
  86.                         FOR rr = xx + 1 TO 94
  87.                             POKE (((94 - rr) * 320) + r) * 2 + 1, &H0
  88.                         NEXT
  89.                     END IF
  90.  
  91.                     FOR rr = 0 TO xx
  92.                         POKE (((94 - rr) * 320) + r) * 2 + 1, &HF
  93.                     NEXT
  94.             NEXT
  95.         END IF
  96.  
  97.         IF at = 2500 THEN
  98.             at = 0
  99.             FOR r = 0 TO 30
  100.                 xx = lenarray(30 - r)
  101.                 lenarray(30 - r) = 0
  102.                 IF xx > 94 THEN xx = 94
  103.  
  104.                     IF xx < 94 THEN
  105.                         FOR rr = xx + 1 TO 94
  106.                             POKE (((94 - rr) * 320) + r) * 2 + 10, &H0
  107.                         NEXT
  108.                     END IF
  109.  
  110.                     FOR rr = 0 TO xx
  111.                         POKE (((94 - rr) * 320) + r) * 2 + 10, &H9
  112.                     NEXT
  113.             NEXT
  114.  
  115.             FOR r = 0 TO 30
  116.                 xx = peakarray(30 - r)
  117.                 peakarray(30 - r) = 0
  118.                 IF xx > 94 THEN xx = 94
  119.  
  120.                     IF xx < 94 THEN
  121.                         FOR rr = xx + 1 TO 94
  122.                             POKE (((94 - rr) * 320) + r) * 2 + 331, &H0
  123.                         NEXT
  124.                     END IF
  125.  
  126.                     FOR rr = 0 TO xx
  127.                         POKE (((94 - rr) * 320) + r) * 2 + 331, &HC
  128.                     NEXT
  129.             NEXT
  130.  
  131.         END IF
  132.     LOOP UNTIL INP(&H60) = 1    'esc pressed
  133.  
  134.     SCREEN 0
  135.  
  136.     PRINT "Realtime Frequency Analysis"
  137.     PRINT
  138.     PRINT " -based on angles from sample point to sample point (white)"
  139.     PRINT " -ie: high frequency / high volume --> high angle"
  140.     PRINT "      low frequency / low volume ----> low angle"
  141.     PRINT "                 combined with"
  142.     PRINT " -based sustinance above/below neutral sample point (blue)"
  143.     PRINT " -ie: high frequency / complex frequency --> high crossrate"
  144.     PRINT "      low frequency / simple frequency ----> low crossrate"
  145.     PRINT "                 combined with"
  146.     PRINT " -based on time between wave peaks (red)"
  147.     PRINT " -ie: high frequency / complex frequency --> high peakrate"
  148.     PRINT "      low frequency / simple frequency ----> low peakrate"
  149.     END
  150.  
  151.