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 )