home *** CD-ROM | disk | FTP | other *** search
- Attribute VB_Name = "modAudio"
- Option Explicit
-
- 'We will keep our Audio vars here
- Dim dmPerf As DirectMusicPerformance8
- Dim dmLoad As DirectMusicLoader8
- Dim dmSegBank() As DirectMusicSegment8
- Dim dmSegHit() As DirectMusicSegment8
- Dim dmScore As DirectMusicSegment8
-
- Public glNumBankSounds As Long
- Public glNumHitSounds As Long
-
- Public Sub SetNumberSounds()
- Dim sFile As String
- Dim lCount As Long
-
- lCount = 1
- sFile = Dir$(App.path & "\sounds\bank" & format$(CStr(lCount), "00") & ".wav")
- Do While sFile <> vbNullString
- lCount = lCount + 1
- sFile = Dir$(App.path & "\sounds\bank" & format$(CStr(lCount), "00") & ".wav")
- Loop
- glNumBankSounds = lCount - 1
- lCount = 1
- sFile = Dir$(App.path & "\sounds\hit" & format$(CStr(lCount), "00") & ".wav")
- Do While sFile <> vbNullString
- lCount = lCount + 1
- sFile = Dir$(App.path & "\sounds\hit" & format$(CStr(lCount), "00") & ".wav")
- Loop
- glNumHitSounds = lCount - 1
- End Sub
-
- Public Function InitAudio() As Boolean
-
- Dim lCount As Long, dma As DMUS_AUDIOPARAMS
-
- On Error GoTo FailedInit
- InitAudio = True
- 'Create our objects
- Set dmPerf = dx.DirectMusicPerformanceCreate
- Set dmLoad = dx.DirectMusicLoaderCreate
- 'Get the total number of sounds we have for each type of sound
- SetNumberSounds
-
- 'Using that information create an array of segments
- ReDim dmSegBank(1 To glNumBankSounds)
- ReDim dmSegHit(1 To glNumHitSounds)
-
- 'Create a default audio path
- dmPerf.InitAudio frmAir.hwnd, DMUS_AUDIOF_ALL, dma, , DMUS_APATH_SHARED_STEREOPLUSREVERB, 128
- 'Load each of the sounds
- For lCount = 1 To glNumBankSounds
- Set dmSegBank(lCount) = dmLoad.LoadSegment(App.path & "\sounds\bank" & format$(CStr(lCount), "00") & ".wav")
- dmSegBank(lCount).Download dmPerf.GetDefaultAudioPath
- Next
- For lCount = 1 To glNumHitSounds
- Set dmSegHit(lCount) = dmLoad.LoadSegment(App.path & "\sounds\hit" & format$(CStr(lCount), "00") & ".wav")
- dmSegHit(lCount).Download dmPerf.GetDefaultAudioPath
- Next
- Set dmScore = dmLoad.LoadSegment(App.path & "\sounds\score.wav")
- dmScore.Download dmPerf.GetDefaultAudioPath
- Exit Function
-
- FailedInit:
- InitAudio = False
- End Function
-
- Public Sub PlayRandomBankSound()
- Dim lRnd As Long
-
- 'Pick a valid 'Bank' sound randomly and play it
- Randomize
- lRnd = CLng(Rnd * glNumBankSounds) + 1
- Do While lRnd < 1 Or lRnd > glNumBankSounds
- lRnd = CLng(Rnd * glNumBankSounds) + 1
- Loop
- dmPerf.PlaySegmentEx dmSegBank(lRnd), DMUS_SEGF_SECONDARY, 0
- End Sub
-
- Public Sub PlayRandomHitSound()
- Dim lRnd As Long
-
- 'Pick a valid 'Hit' sound randomly and play it
- Randomize
- lRnd = CLng(Rnd * glNumHitSounds) + 1
- Do While lRnd < 1 Or lRnd > glNumHitSounds
- lRnd = CLng(Rnd * glNumHitSounds) + 1
- Loop
- dmPerf.PlaySegmentEx dmSegHit(lRnd), DMUS_SEGF_SECONDARY, 0
- End Sub
-
- Public Sub PlayScoreSound()
- 'Play the sound that happens when we score
- dmPerf.PlaySegmentEx dmScore, DMUS_SEGF_SECONDARY, 0
- End Sub
-
- Public Sub CleanupAudio()
-
- On Error Resume Next
- Dim lCount As Long
-
- 'Unload all of our sounds off of the audio path and destroy them
- For lCount = 1 To glNumBankSounds
- dmSegBank(lCount).Unload dmPerf.GetDefaultAudioPath
- Set dmSegBank(lCount) = Nothing
- Next
- For lCount = 1 To glNumHitSounds
- dmSegHit(lCount).Unload dmPerf.GetDefaultAudioPath
- Set dmSegHit(lCount) = Nothing
- Next
- If Not (dmScore Is Nothing) Then dmScore.Unload dmPerf.GetDefaultAudioPath
- Set dmScore = Nothing
-
- 'Destroy the rest of the objects
- Set dmPerf = Nothing
- Set dmLoad = Nothing
- End Sub
-