home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / m / m003_1 / sdk_dos.ddi / BASIC / VOICE / DEMOVMP.BAS < prev    next >
Encoding:
BASIC Source File  |  1991-11-13  |  4.8 KB  |  196 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 Basic Voice Output (memory version) Example"
  18.  
  19. ' Following statements free memory for the loadable drivers.
  20. ' You must free sufficient memory for the loadable drivers.
  21. ' The free memory must be larger than the driver file size.
  22.  
  23. ' Free 8K memory for the CT-VOICE.DRV at the moment
  24. DUMMY = SETMEM(-8192)
  25.  
  26. ' Allocate 180K buffer for voice data file
  27. DIM buffer%(1 TO 180, 1 TO 512)
  28.  
  29. IF (SBGETENV% = 0) THEN
  30.     IF SBCHKCRD% THEN
  31.         IF SBTSTINT% THEN
  32.             IF SBTSTDMA% >= 0 THEN
  33.  
  34.                 ' Load CT-VOICE.DRV
  35.                 DRVADDX% = LOADDRV% ("CT-VOICE.DRV")
  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.                         CALL SVMSPKER(INT(0))
  46.  
  47.                         ' Load voice file
  48.                         IF (LDVFILE("DEMO.VOC", VARSEG(buffer%(1, 1)),_
  49.                                      VARPTR(buffer%(1, 1))) <> 0) THEN
  50.                             CALL OUTVOC(buffer%())
  51.                         END IF
  52.  
  53.                         ' Terminate driver before exit
  54.                         CALL SVMEXIT
  55.                     END IF
  56.  
  57.                     ' Release memory allocated for CT-VOICE
  58.                     CALL FREEMEM(DRVADDX%)
  59.                 END IF
  60.             ELSE
  61.                 PRINT "Error on DMA channel."
  62.             ENDIF
  63.         ELSE
  64.             PRINT "Error on interrupt."
  65.         ENDIF
  66.     ELSE
  67.         PRINT "Sound Blaster Card not found or wrong I/O setting"
  68.     ENDIF
  69. ELSE
  70.     PRINT "BLASTER environment variable not set or incomplete or invalid."
  71. ENDIF
  72.  
  73.  
  74. ' Return memory to BASIC
  75. DUMMY = SETMEM(8192)
  76.  
  77. END
  78.  
  79.  
  80. ' ------------------------------------------------------------------------ '
  81.  
  82. FUNCTION LOADDRV% (szDrvName$)
  83.  
  84.     DIM szDrvFile$, Handle%, dwFileLen&, wDrvSeg%
  85.  
  86.  
  87.     LOADDRV% = 0
  88.  
  89.     ' search SOUND environment for driver
  90.     szDrvFile$ = ENVIRON$("SOUND")
  91.  
  92.     IF (szDrvFile$ <> "") THEN
  93.         szDrvFile$ = szDrvFile$ + "\DRV\" + szDrvName$
  94.  
  95.         IF (FINDFILE%(szDrvFile$) = 0) THEN
  96.             szDrvFile$ = ""
  97.         ENDIF
  98.     ENDIF
  99.  
  100.     ' search the current directory for driver
  101.     IF (szDrvFile$ = "") THEN
  102.         szDrvFile$ = szDrvName$
  103.     ENDIF
  104.  
  105.     IF (FINDFILE%(szDrvFile$) <> 0) THEN
  106.         Handle% = DOSOPEN%(szDrvFile$)
  107.  
  108.         IF (Handle% <> 0) THEN
  109.             dwFileLen& = FILESIZE(Handle%)
  110.  
  111.             wDrvSeg% = ALLOCMEM(INT((dwFileLen& + 15) / 16))
  112.  
  113.             IF (wDrvSeg% <> 0) THEN
  114.                 IF DOSREAD%(Handle%, INT(0), wDrvSeg%, dwFileLen&) THEN
  115.                     LOADDRV% = wDrvSeg%
  116.                 ENDIF
  117.             ENDIF
  118.  
  119.             DOSCLOSE(Handle%)
  120.         ELSE
  121.             PRINT "Error in opening " + szDrvFile$
  122.         ENDIF
  123.     ELSE
  124.         PRINT "Driver file " + szDrvName$ + " does not exist ..."
  125.     ENDIF
  126.  
  127. END FUNCTION
  128.  
  129. ' ------------------------------------------------------------------------ '
  130.  
  131. REM $STATIC
  132. FUNCTION LDVFILE% (filename$, segment%, offset%)
  133.  
  134. ' This function loads voice file into buffer%
  135.  
  136.     DIM handle%, filelen&
  137.  
  138.     handle% = DOSOPEN(filename$)
  139.     LDVFILE% = 0
  140.  
  141.     IF (handle% <> 0) THEN
  142.         filelen& = FILESIZE&(handle%)
  143.  
  144.         IF (DOSREAD%(handle%, offset%, segment%, filelen&) <> 0) THEN
  145.             LDVFILE% = 1
  146.         ELSE
  147.             PRINT "Read file error."
  148.         END IF
  149.  
  150.         DOSCLOSE (handle%)
  151.     ELSE
  152.         PRINT "Open " + filename$ + "error."
  153.     END IF
  154.  
  155. END FUNCTION
  156.  
  157.  
  158. SUB OUTVOC (buffer%())
  159.  
  160. ' This function output the voice file loaded and check for the keyboard
  161. ' input to pause, stop and break the voice output
  162.  
  163.     DIM userkey AS INTEGER, voice AS INTEGER
  164.  
  165.     ' Turn on DAC speaker
  166.     CALL SVMSPKER(INT(1))
  167.  
  168.     voice% = buffer%(11, 1)
  169.  
  170.     IF (SVMOUTPUT%(buffer%(voice% / 2 + 1, 1)) = 0) THEN
  171.  
  172.         WHILE CTVOICE% <> 0
  173.             c$ = INKEY$
  174.  
  175.             IF c$ <> "" THEN
  176.                 userkey = INT(ASC(LEFT$(c$, 1)))
  177.  
  178.                 SELECT CASE userkey
  179.                     CASE ASC("S"), ASC("s"), 27
  180.                         CALL SVMSTOP
  181.                     CASE ASC("P"), ASC("p")
  182.                         dummy = SVMPAUSE%
  183.                     CASE ASC("C"), ASC("c")
  184.                         dummy = SVMCONT%
  185.                     CASE ASC("B"), ASC("b")
  186.                         dummy = SVMBREAK% (INT(1))
  187.                 END SELECT
  188.             END IF
  189.         WEND
  190.     END IF
  191.  
  192.     ' Turn off DAC speaker
  193.     CALL SVMSPKER(INT(0))
  194.  
  195. END SUB
  196.