home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / sfa4.bas < prev    next >
BASIC Source File  |  1994-05-13  |  2KB  |  66 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 peakarray(30)    'peak leng
  10.     lenp = 0
  11.     lastd = 0   'last direction
  12.     lastgot = 128
  13.  
  14.     DEF SEG = &HA000
  15.     SCREEN 13
  16.     
  17.     DO
  18.         OUT WPORT, &H20           'Tell SoundBlaster you wanna read a byte.
  19.         gotit = INP(RPORT)
  20.         dir = gotit - lastgot
  21.         
  22.         IF dir > 1 THEN currentd = 1 ELSE IF dir < -1 THEN currentd = -1 ELSE currentd = lastd
  23.  
  24.         IF currentd <> lastd THEN
  25.             IF lenp > 309 THEN lenp = 309
  26.             lenp = lenp \ 10
  27.             peakarray(lenp) = peakarray(lenp) + (lenp \ 2)
  28.             lenp = 0
  29.         ELSE
  30.             lenp = lenp + 1
  31.         END IF
  32.         
  33.         atp = atp + 1
  34.  
  35.         lastd = currentd
  36.         lastgot = gotit
  37.         
  38.         IF atp = 2500 THEN
  39.             atp = 0
  40.             FOR r = 0 TO 30
  41.                 xx = peakarray(30 - r)
  42.                 peakarray(30 - r) = 0
  43.                 IF xx > 94 THEN xx = 94
  44.  
  45.                     IF xx < 94 THEN
  46.                         FOR rr = xx + 1 TO 94
  47.                             POKE (((94 - rr) * 320) + r) * 2 + 1, &H0
  48.                         NEXT
  49.                     END IF
  50.  
  51.                     FOR rr = 0 TO xx
  52.                         POKE (((94 - rr) * 320) + r) * 2 + 1, &HF
  53.                     NEXT
  54.             NEXT
  55.         END IF
  56.     LOOP UNTIL INP(&H60) = 1    'esc pressed
  57.  
  58.     SCREEN 0
  59.     PRINT "Realtime Frequency Analysis"
  60.     PRINT
  61.     PRINT " -based on time between wave peaks"
  62.     PRINT " -ie: high frequency / complex frequency --> high peakrate"
  63.     PRINT "      low frequency / simple frequency ----> low peakrate"
  64.     END
  65.  
  66.