ASIOを利用してWAVファイルを再生する
(その4)
	WAVファイル再生中にダイアログの[一時再生]ボタンを押されたら、WAVファイルの再生を一時停止します。
WAVファイルの再生を一時停止させる場合、サウンド出力処理を停止します。
サンプルコードを以下に示します。
/****************************************************************************/
/*!
 *  @brief  WAVファイルの再生を一時停止する.
 *
 *  @param  [in]    hDlg    ダイアログのウインドウ・ハンドル.
 *
 *  @retval なし.
 */
static void     PauseSoundOutput( HWND hDlg )
{
    //! オーディオ入出力を停止する.
    ASIOStop();
    EnableWindow( GetDlgItem( hDlg, IDC_PLAY          ), TRUE  );
    EnableWindow( GetDlgItem( hDlg, IDC_PAUSE         ), FALSE );
    EnableWindow( GetDlgItem( hDlg, IDC_STOP          ), FALSE );
    EnableWindow( GetDlgItem( hDlg, IDC_FILENAME      ), TRUE  );
    EnableWindow( GetDlgItem( hDlg, IDC_FILE_SELECT   ), TRUE  );
    EnableWindow( GetDlgItem( hDlg, IDC_OUTPUT_DEVICE ), TRUE  );
}
	
	
	ASIOStop()を呼び出して、ASIOでのサウンド入出力を停止します。
    HASIOError ASIOStop( void )
	
	戻り値がASE_OKであれば、サウンド出力は停止されます。
WAVファイル再生中にダイアログの[停止]ボタンを押されたら、WAVファイルの再生を停止します。
WAVファイルの再生を停止させる場合、サウンド出力を終了させてからWAVファイルをクローズします。
サウンド出力の終了は以下の手順で行います。
サンプルコードを以下に示します。
/****************************************************************************/
/*!
 *  @brief  WAVファイルの再生を停止する.
 *
 *  @param  なし.
 *
 *  @retval なし.
 */
static void     StopSoundOutput( HWND hDlg )
{
    //! サウンド出力デバイスをクローズする.
    CloseSoundOutputDevice();
    //! 再生したWAVファイルをクローズする.
    CloseWaveFile();
    //! WAVファイルの読み込み用バッファを解放する.
    if( DataBuff ){
        delete [] DataBuff;
        DataBuff = NULL;
    }
    AppWnd = NULL;
    EnableWindow( GetDlgItem( hDlg, IDC_PLAY          ), TRUE  );
    EnableWindow( GetDlgItem( hDlg, IDC_PAUSE         ), FALSE );
    EnableWindow( GetDlgItem( hDlg, IDC_STOP          ), FALSE );
    EnableWindow( GetDlgItem( hDlg, IDC_FILENAME      ), TRUE  );
    EnableWindow( GetDlgItem( hDlg, IDC_FILE_SELECT   ), TRUE  );
    EnableWindow( GetDlgItem( hDlg, IDC_OUTPUT_DEVICE ), TRUE  );
}
	
	
/****************************************************************************/
/*!
 *  @brief  ASIOドライバをクローズする.
 *
 *  @param  なし.
 *
 *  @retval なし.
 */
static void     CloseSoundOutputDevice( void )
{
    //! オーディオ入出力を停止する.
    ASIOStop();
    //! 入出力バッファを解放する.
    ASIODisposeBuffers();
    //! ASIOをクローズする.
    ASIOExit();
    //! ドライバをアンロードする.
    if( asioDrivers ){
        asioDrivers->removeCurrentDriver();
    }
}
	
	
	ASIOCreateBuffers()で確保したデータバッファを解放します。
    ASIOError ASIODisposeBuffers( void )
	
	戻り値がASE_OKならば、入出力バッファの解放は成功です。
ASIOExit()を呼び出して、ASIOドライバを終了します。
    ASIOError ASIOExit( void )
	
	戻り値がASE_OKならば、ASIOドライバのクローズは成功です。
AsioDriversのメソッドremoveCurrentDriver()を呼び出して、ASIOドライバをアンロードします。
    void AsioDrivers::removeCurrentDriver( void )