Sinisterly
[VB6] DirectSound Example - Printable Version

+- Sinisterly (https://sinister.ly)
+-- Forum: Coding (https://sinister.ly/Forum-Coding)
+--- Forum: Visual Basic & .NET Framework (https://sinister.ly/Forum-Visual-Basic-NET-Framework)
+--- Thread: [VB6] DirectSound Example (/Thread-VB6-DirectSound-Example)



[VB6] DirectSound Example - Coder-san - 12-02-2010

Hello people. Below is an example of DirectSound (DirectX 7).
DirectX 7 should be available in many OS including XP, I am not sure about the newer ones but their usage should be similar.

With DirectSound you can give your VB6 app multi-channel sounds, with very low usage. Loop or simple, perfect for games. Smile

I wouldn't say this is made or found by me, I just modded the original example.
Full credits go to Jack Hoxley. Here is his website: www.dx4vb.da.ru
I can't seem to find the original example now.

Here is the source. "Y:\VB\Piano\b.wav" is the Wav file it will play.

Code:
Option Explicit
Dim Dx As New DirectX7
Dim Ds As DirectSound
Dim DsBuffer1 As DirectSoundBuffer
Dim DsDesc As DSBUFFERDESC, DsWave As WAVEFORMATEX

Sub Initialise()
Set Ds = Dx.DirectSoundCreate("")
    If Err.Number <> 0 Then
        MsgBox "Unable to Continue, Error creating Directsound object."
        Exit Sub
    End If
Ds.SetCooperativeLevel Me.hWnd, DSSCL_NORMAL
DsDesc.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME Or DSBCAPS_STATIC
DsWave.nFormatTag = WAVE_FORMAT_PCM 'Sound Must be PCM otherwise we get errors
DsWave.nChannels = 2    '1= Mono, 2 = Stereo
DsWave.lSamplesPerSec = 22050
DsWave.nBitsPerSample = 16 '16 =16bit, 8=8bit
DsWave.nBlockAlign = DsWave.nBitsPerSample / 8 * DsWave.nChannels
DsWave.lAvgBytesPerSec = DsWave.lSamplesPerSec * DsWave.nBlockAlign
End Sub

Public Function PlaySound(Bool As Boolean)
On Error GoTo ExitThis
If Bool = True Then
    Call Initialise
    Set DsBuffer1 = Ds.CreateSoundBufferFromFile("Y:\VB\Piano\b.wav", DsDesc, DsWave): DsBuffer1.Play DSBPLAY_DEFAULT
Else
    DsBuffer1.Stop: DsBuffer1.SetCurrentPosition 0
End If
ExitThis: Exit Function
End Function

Private Sub Command1_Click()
Call PlaySound(True)
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Call PlaySound(False)
End Sub

For this to work, you would have to refer DirectX 7 Visual Basic Type Library