home *** CD-ROM | disk | FTP | other *** search
/ Sound, Music & MIDI Collection 2 / SMMVOL2.bin / PROG / BWSB120A.ZIP / DEMO / MMP.BAS < prev    next >
Encoding:
BASIC Source File  |  1995-03-16  |  5.1 KB  |  151 lines

  1. '──────────────────────────────────────────────────────────────────────────
  2. '                     Bells, Whistles, and Sound Boards
  3. '       Copyright (c) 1993-95, Edward Schlunder. All Rights Reserved.
  4. '══════════════════════════════════════════════════════════════════════════
  5. ' MMP.BAS - Example GDM module player.
  6. '           Written by Edward Schlunder (1994-95)
  7. '
  8. '──────────────────────────────────────────────────────────────────────────
  9. DEFINT A-Z
  10.  
  11. 'Comment/Uncomment the approriate code--------------------------
  12. '$INCLUDE: 'BWSB.BI'              '\ These lines for QB/PDS
  13. '$INCLUDE: 'GDMTYPE.BI'           '/
  14.  
  15. '$LINK "MSE_PB.OBJ"               '\
  16. '$INCLUDE "BWSB.PBI"              ' | Use these lines for PB3.x
  17. '$INCLUDE "GDMTYPE.BI"            '/
  18. '---------------------------------------------------------------
  19.  
  20. TYPE MSEConfigFile
  21.   SoundCard     AS INTEGER
  22.   BaseIO        AS INTEGER
  23.   IRQ           AS INTEGER
  24.   DMA           AS INTEGER
  25.   SoundQuality  AS INTEGER
  26. END TYPE
  27.  
  28. DIM ModHead         AS GDMHeader       'Module Header
  29. DIM SndDevMSE(6)    AS STRING          'Array of MSE file names
  30. DIM MSEConfig       AS MSEConfigFile   'Structure of MSE configuration file
  31.  
  32. Freemem& = FRE(-1) - 80000             'Basic Heap - EXE Memory (80000)
  33. A& = SETMEM(-Freemem&)                 'This is the memory freed for module
  34.                                        'and MSE usage.
  35.  
  36. 'Table of MSE file names
  37. SndDevMSE(1) = "GUS"                   'Gravis Ultrasound
  38. SndDevMSE(2) = "SB1X"                  'Sound Blaster 1.xx
  39. SndDevMSE(3) = "SB2X"                  'Sound Blaster 2.xx
  40. SndDevMSE(4) = "SBPRO"                 'Sound Blaster Pro
  41. SndDevMSE(5) = "SB16"                  'Sound Blaster 16
  42. SndDevMSE(6) = "PAS"                   'Pro AudioSpectrum 16
  43.  
  44.  
  45. 'Print our little header thing:
  46. PRINT
  47. PRINT "BWSB v1.15 Example Module Player"
  48. PRINT "Copyright (c) 1993-95, Edward Schlunder"
  49. PRINT
  50.  
  51. OPEN "MSE.CFG" FOR BINARY AS 1
  52.   GET 1, , MSEConfig
  53. CLOSE 1
  54. IF MSEConfig.SoundCard = 0 THEN
  55.   PRINT "No Sound Selected in SETUP. Please run SETUP."
  56.   END
  57. END IF
  58. '============================================================================
  59.  
  60. MSE$ = SndDevMSE(MSEConfig.SoundCard) + ".MSE"
  61.  
  62. SELECT CASE MSEConfig.SoundQuality
  63. CASE 0: Ov = 16
  64. CASE 1: Ov = 22
  65. CASE 2: Ov = 45
  66. CASE 3: Ov = 8
  67. END SELECT
  68.  
  69. 'Set up our sound system:
  70. ErrorFlag = LoadMSE(MSE$, 0, Ov, 4096, MSEConfig.BaseIO, MSEConfig.IRQ, MSEConfig.DMA)
  71.  
  72. SELECT CASE ErrorFlag
  73. CASE 0
  74. CASE 1: PRINT "Base I/O address autodetection failure": END
  75. CASE 2: PRINT "IRQ level autodetection failure": END
  76. CASE 3: PRINT "DMA channel autodetection failure": END
  77. CASE 4: PRINT "DMA channel not supported": END
  78. CASE 6: PRINT "Sound device does not respond": END
  79. CASE 7: PRINT "Memory control blocks destroyed": END
  80. CASE 8: PRINT "Insufficient memory for mixing buffers": END
  81. CASE 9: PRINT "Insufficient memory for MSE file": END
  82. CASE 10: PRINT "MSE has invalid identification string (corrupt/non-existant)": END
  83. CASE 11: PRINT "MSE disk read failure": END
  84. CASE 12: PRINT "MVSOUND.SYS not loaded (required for PAS use)": END
  85. CASE ELSE: PRINT "Unknown error on MSE startup" + STR$(ErrorFlag): END
  86. END SELECT
  87.  
  88. 'Display the actutal settings *used* in the MSE.
  89. PRINT "Addr: "; HEX$(MSEConfig.BaseIO); "h  ";
  90. PRINT "IRQ:"; MSEConfig.IRQ; " ";
  91. PRINT "DMA:"; MSEConfig.DMA
  92.  
  93. IF LEN(COMMAND$) = 0 THEN INPUT "Module file: ", ModFile$ ELSE ModFile$ = COMMAND$
  94.  
  95. TestMOD:
  96. IF LEN(ModFile$) = 0 THEN END
  97. IF INSTR(ModFile$, ".") = 0 THEN ModFile$ = ModFile$ + ".GDM"
  98.  
  99. PRINT "Loading Module: "; ModFile$
  100.  
  101. IF EmsExist THEN ErrorFlag = 1 ELSE ErrorFlag = 0   'Setup EMS use flag
  102. File = FREEFILE
  103. OPEN ModFile$ FOR BINARY AS File
  104. 'Load our module
  105. LoadGDM FILEATTR(File, 2), 0, ErrorFlag, VARSEG(ModHead), VARPTR(ModHead)
  106.  
  107. SELECT CASE ErrorFlag
  108. CASE 0
  109. CASE 1: PRINT "Module is corrupt": END
  110. CASE 2: PRINT "Could not autodetect module type": END
  111. CASE 3: PRINT "Bad format ID": END
  112. CASE 4: PRINT "Out of memory": END
  113. CASE 5: PRINT "Cannot unpack samples": END
  114. CASE 6: PRINT "AdLib samples not supported": END
  115. CASE ELSE: PRINT "Unknown Load Error:" + STR$(ErrorFlag): END
  116. END SELECT
  117.  
  118. MusicChannels = 0                      'Start out at zero..
  119. FOR J = 1 TO 32                        'Scan for used music channels
  120.   IF ASC(MID$(ModHead.PanMap, J, 1)) <> &HFF THEN
  121.     MusicChannels = MusicChannels + 1
  122.   END IF
  123. NEXT
  124.  
  125. PRINT
  126. PRINT "Channels:"; MusicChannels; " Song: "; ModHead.SongTitle
  127. OverRate& = StartOutput(MusicChannels, 0) 'Start your (sound) engines
  128. StartMusic                                'Revv up the music playing
  129.  
  130. PRINT "Oversampling:"; OverRate&; "Hz"
  131. PRINT "D for DOS Shell or any other key to quit"
  132. PRINT
  133. DO
  134.   G$ = INKEY$                          'Poll the keyboard for keys
  135.  
  136.   IF G$ = "D" OR G$ = "d" THEN         'Do a DOS Shell?
  137.     SHELL
  138.     G$ = ""
  139.   END IF
  140.  
  141.   LOCATE , 1                           'Update the music information
  142.   PRINT "Playing Music ─> Order:"; MusicOrder(&HFF); " Pattern:"; MusicPattern(&HFF); " Row:"; MusicRow; "           ";
  143. LOOP UNTIL LEN(G$)
  144.  
  145. StopMusic
  146. StopOutput
  147. UnloadModule
  148. FreeMSE                                'Free MSE from system and memory
  149. END
  150.  
  151.