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