home *** CD-ROM | disk | FTP | other *** search
/ Sound Sensations! / sound_sensations.iso / soundb / qb_sbkit / demovmp.bas < prev    next >
BASIC Source File  |  1990-07-04  |  3KB  |  147 lines

  1. '
  2. ' This program output the voice file DEMO.VOC
  3. '
  4.  
  5. ' $INCLUDE: 'SBC.BI'
  6. ' $INCLUDE: 'SBCSYS.BI'
  7. ' $INCLUDE: 'SBCVOICE.BI'
  8.  
  9. DECLARE FUNCTION LDVFILE% (filename$, segment%, offset%)
  10. DECLARE SUB OUTVOC (buffer%())
  11.  
  12. REM $DYNAMIC
  13. CLEAR
  14.  
  15. CLS
  16.  
  17. PRINT "SBK QuickBasic Voice Output (memory version) Example"
  18.  
  19. ' Free 4K memory for the CT-VOICE.DRV
  20. DUMMY = SETMEM(-4096)
  21.  
  22. ' Allocate 180K buffer for voice data file
  23. DIM buffer%(1 TO 180, 1 TO 512)
  24.  
  25. ' Set I/O address
  26. CTIOADDX (&H220)
  27.  
  28. ' Check for Sound Blaster Card
  29. IF ((SBCHKCRD% AND 4) = 4) THEN
  30.  
  31.     ' Scan for interrupt
  32.     IF (SBSCNINT% > 0) THEN
  33.  
  34.       ' Load CT-VOICE.DRV
  35.       DRVADDX% = LOADDRV%
  36.  
  37.       ' If driver loaded successfully
  38.       IF (DRVADDX% <> 0) THEN
  39.  
  40.           ' Set driver address
  41.           CTVADDX (DRVADDX%)
  42.  
  43.           ' Initialize driver
  44.           IF (SVMINIT% = 0) THEN
  45.  
  46.             CALL SVMSPKER(INT(0))
  47.  
  48.             ' Load voice file
  49.             IF (LDVFILE("DEMO.VOC", VARSEG(buffer%(1, 1)), VARPTR(buffer%(1, 1))) <> 0) THEN
  50.               CALL OUTVOC(buffer%())
  51.             END IF
  52.  
  53.             ' Terminate driver before exit
  54.             CALL SVMEXIT
  55.  
  56.           END IF
  57.  
  58.       END IF
  59.  
  60.  
  61.     END IF
  62.  
  63. ELSE
  64.     PRINT "Sound Blaster Card not found"
  65. END IF
  66.  
  67. ' Return memory to BASIC
  68. DUMMY = SETMEM(4096)
  69.  
  70. END
  71.  
  72.  
  73. ' ------------------------------------------------------------------------ '
  74.  
  75.  
  76. ' ------------------------------------------------------------------------ '
  77.  
  78. REM $STATIC
  79. FUNCTION LDVFILE% (filename$, segment%, offset%)
  80.  
  81. ' This function loads voice file into buffer%
  82.  
  83.     DIM handle%, filelen&
  84.  
  85.     handle% = DOSOPEN(filename$)
  86.     LDVFILE% = 0
  87.  
  88.     IF (handle% <> 0) THEN
  89.       filelen& = FILESIZE&(handle%)
  90.  
  91.       IF (DOSREAD%(handle%, offset%, segment%, filelen&) <> 0) THEN
  92.           LDVFILE% = 1
  93.       ELSE
  94.           PRINT "Read file error."
  95.       END IF
  96.  
  97.       DOSCLOSE (handle%)
  98.     ELSE
  99.       PRINT "Open " + filename$ + "error."
  100.     END IF
  101.  
  102. END FUNCTION
  103.  
  104. SUB OUTVOC (buffer%())
  105.  
  106. ' This function output the voice file loaded and check for the keyboard
  107. ' input to pause, stop and break the voice output
  108.  
  109.     DIM userkey AS INTEGER, voice AS INTEGER
  110.  
  111.     ' Turn on DAC speaker
  112.     CALL SVMSPKER(INT(1))
  113.  
  114.     voice% = buffer%(11, 1)
  115.  
  116.     IF (SVMOUTPUT%(buffer%(voice% / 2 + 1, 1)) = 0) THEN
  117.  
  118.       WHILE CTVOICE% <> 0
  119.  
  120.           c$ = INKEY$
  121.  
  122.           IF c$ <> "" THEN
  123.  
  124.             userkey = INT(ASC(LEFT$(c$, 1)))
  125.  
  126.             SELECT CASE userkey
  127.              CASE ASC("S"), ASC("s"), 27
  128.                  CALL SVMSTOP
  129.              CASE ASC("P"), ASC("p")
  130.                  CALL SVMPAUSE
  131.              CASE ASC("C"), ASC("c")
  132.                  CALL SVMCONT
  133.              CASE ASC("B"), ASC("b")
  134.                  SVMBREAK (INT(1))
  135.             END SELECT
  136.  
  137.           END IF
  138.  
  139.       WEND
  140.  
  141.     END IF
  142.  
  143.     ' Turn off DAC speaker
  144.     CALL SVMSPKER(INT(0))
  145.  
  146. END SUB
  147.