ASIOを利用してWAVファイルを再生する
(その4)

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

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ファイルの再生を停止させる場合、サウンド出力を終了させてから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ならば、入出力バッファの解放は成功です。

ASIOをクローズする

ASIOExit()を呼び出して、ASIOドライバを終了します。


    ASIOError ASIOExit( void )
	

戻り値がASE_OKならば、ASIOドライバのクローズは成功です。

ASIOドライバをアンロードする

AsioDriversのメソッドremoveCurrentDriver()を呼び出して、ASIOドライバをアンロードします。


    void AsioDrivers::removeCurrentDriver( void )
	



ASIOは Steinberg Media Technologies AG社の商標です。
Windowsは米国Microsoft Corporationの登録商標です。