VB.NETでDirectSoundを利用してWAVファイルを再生する
(その4)
WAVファイル再生中にダイアログの[一時再生]ボタンを押されたら、WAVファイルの再生を一時停止します。
WAVファイルの再生を一時停止させる場合、サウンド出力処理を停止します。
サンプルコードを以下に示します。
'****************************************************************************'
'*
'* @brief WAVファイルの再生を一時停止する.
'*
'* @param なし.
'*
'* @retval なし.
'*
Private Sub Pause_WaveSound()
' 再生状態を「停止中」にする.
m_IsPlay = False
' サウンド再生を停止する
If ( IsNothing( m_DXBuf ) = False ) Then
m_DXBuf.Stop()
End If
Play_Button.Enabled = True
Stop_Button.Enabled = True
Pause_Button.Enabled = False
DeviceList_ComboBox.Enabled = False
FileName_TextBox.Enabled = False
FileSel_Button.Enabled = False
End Sub
SecondaryBufferクラスのStop()メソッドを呼び出して現在動作中のサウンド出力処理を停止します。
Public Sub Stop()
※ 再生を停止した場合、再生カーソルは、最後に再生されたサンプルの直後のサンプルに設定されます。
WAVファイル再生中にダイアログの[停止]ボタンを押されたら、WAVファイルの再生を停止します。
WAVファイルの再生を停止させる場合、サウンド出力を終了させてからWAVファイルをクローズします。
サウンド出力の終了は以下の手順で行います。
- サウンド出力を停止。
- イベント監視タスクを停止。
- 再生イベントの解放。
- DirectSoundのバッファ・オブジェクトの解放。
- DirectSoundオブジェクトの解放。
サンプルコードを以下に示します。
'****************************************************************************'
'*
'* @brief WAVファイルの再生を停止する.
'*
'* @param なし.
'*
'* @retval なし.
'*
Private Sub Stop_WaveSound()
' 再生状態を「停止中」にする.
m_IsPlay = False
' サウンド出力デバイスをクローズする.
Call CloseSoundOutDevice()
' 再生したWAVファイルをクローズする.
m_File.Close()
Play_Button.Enabled = True
Stop_Button.Enabled = False
Pause_Button.Enabled = False
DeviceList_ComboBox.Enabled = True
FileName_TextBox.Enabled = True
FileSel_Button.Enabled = True
End Sub
'****************************************************************************/
'*
'* @brief サウンド出力デバイスをクローズする.
'*
'* @param なし.
'*
'* @retval なし.
'*/
Private Sub CloseSoundOutDevice()
m_IsPlay = False
m_IsDoing = False
' サウンド再生を停止する.
If ( IsNothing( m_DXBuf ) = False ) Then
m_DXBuf.Stop()
End If
' 再生イベント用のスレッドを停止する.
If ( IsNothing( m_Thread ) = False ) Then
' ダミーでイベントを発行して、スレッドを起こす.
m_Event.Set()
' スレッドが処理を停止して消滅するまでの間Waitする.
Thread.Sleep( 500 )
End If
' 作成したイベント・オブジェクトを破棄する.
m_Event = Nothing
m_Thread = Nothing
' DirectSoundのイベント・オブジェクトを解放する.
If ( IsNothing( m_DXNotify ) = False ) Then
m_DXNotify.Dispose()
End If
m_DXNotify = Nothing
' DirectSoundのバッファ・オブジェクトを解放する.
If ( IsNothing( m_DXBuf ) = False ) Then
m_DXBuf.Dispose()
End If
m_DXBuf = Nothing
' DirectSoundオブジェクトを解放する.
If ( IsNothing( m_DX ) = False ) Then
m_DX.Dispose()
End If
m_DX = Nothing
End Sub