マルチメディアAPI(MME)を利用してWAVファイルを再生する
(その5)
ダイアログにあるボリュームのトラックバーを上下したときに音量ボリュームが変化するようにします。
トラックバーを縦方向に配置した場合、上側が0%、下側が100%となるので、上側が100%、下側が0%になるように ((100 - トラックバーの値) / 100) をボリューム設定の最大値に乗算して設定する音量ボリュームの値とします。
サンプルコードを以下に示します。
/****************************************************************************/
/*!
* @brief 音量ボリューム設定を変更する.
*
* @param [in] hVolume ボリュームコントロールバーのハンドル.
*
* @retval 新しいボリューム設定値.
*/
static DWORD VolumeControl( HWND hVolume )
{
//! デバイスをオープンしていない場合、ボリューム設定を行わない.
if( !hWO ){
return 0;
}
//! ダイアログからボリュームコンロトールの位置を取得する.
DWORD range = SendMessage( hVolume, TBM_GETPOS, 0, 0 );
DWORD volume = ((100 - range) * 0xFFFF) / 100;
//! ボリューム設定を変更する.
DWORD wk_vol = ((volume << 16) & 0xFFFF0000) + (volume & 0xFFFF);
if( waveOutSetVolume( hWO, wk_vol ) != MMSYSERR_NOERROR ){
return 0;
}
return volume;
}
waveOutSetVolume()を呼び出して、音量ボリュームの設定を変更します。
MMRESULT waveOutSetVolume( HWAVEOUT hwo, DWORD dwVolume )
引数 | 説明 |
---|---|
hwo | サウンド出力デバイスのハンドル |
dwVolume |
音量ボリュームの設定値 データ形式は以下のとおり
左右のボリュームが個別に設定が可能な場合
左右のボリュームが個別に設定できない場合 最小ボリューム(無音)=0x0000、最大ボリューム=0xFFFF |
waveOutGetVolume()からの戻り値がMMSYSERR_NOERRORであれば、音量ボリュームの設定は完了です。
ちなみに現在のボリューム設定値を取得するには、waveOutGetVolume()を使用します。
MMRESULT waveOutGetVolume( HWAVEOUT hwo, LPDWORD pdwVolume )
引数 | 説明 |
---|---|
hwo | サウンド出力デバイスのハンドル |
pdwVolume |
現在の音量ボリュームの設定値が入る変数のポインタ。 |
waveOutGetVolume()からの戻り値がMMSYSERR_NOERRORであれば、ボリューム設定値の取得は完了です。
サンプルプログラムのソースコードを以下からダウンロードできます。
開発環境 | Visual Studio 2005 |
---|---|
開発言語 | C言語 |
ファイル名 | sample_0001.zip |