VB.NETでDirectSoundを利用してWAVファイルを再生する
(その4)

WAVファイルの再生を一時停止する

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ファイルの再生を停止させる場合、サウンド出力を終了させてから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
    



Windows、DirectXおよびDirectSoundは米国Microsoft Corporationの登録商標です。