Imports Microsoft.DirectX.DirectSound
Public Class Form1
Const BitRate As Integer = 44100
Const Durata As Integer = 1 ' secondo
Private dsDesc As BufferDescription
Private wvFormat As WaveFormat
Private DS As Device
Dim buff1 As SecondaryBuffer
Dim buff2 As SecondaryBuffer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
DS = New Microsoft.DirectX.DirectSound.Device
DS.SetCooperativeLevel(Me, CooperativeLevel.Normal)
wvFormat.FormatTag = WaveFormatTag.Pcm
wvFormat.Channels = 1
wvFormat.SamplesPerSecond = BitRate
wvFormat.BitsPerSample = 16
wvFormat.AverageBytesPerSecond = 2 * BitRate
wvFormat.BlockAlign = 2
dsDesc = New BufferDescription(wvFormat)
dsDesc.BufferBytes = 2 * Durata * BitRate
dsDesc.Flags = 0
buff1 = PlayWave(440)
buff2 = PlayWave(1000)
End Sub
Function PlayWave(ByVal FREQ As Double) As SecondaryBuffer
' create a buffer
Dim dsBuffer As SecondaryBuffer
dsBuffer = New SecondaryBuffer(dsDesc, DS)
Dim sbuf(Durata * BitRate) As Short
' create tone
For i As Integer = 0 To Durata * BitRate
sbuf(i) = CShort(10000 * Math.Sin(2 * Math.PI * FREQ * i / BitRate))
Next
' copy to buffer
dsBuffer.Write(0, sbuf, LockFlag.EntireBuffer)
Return dsBuffer
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
buff1.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
buff2.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
buff1.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default)
buff2.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default)
End Sub
End Class