マルチメディア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

現在の音量ボリュームの設定値が入る変数のポインタ。
データ形式はwaveOutSetVolume()と同じ。

waveOutGetVolume()からの戻り値がMMSYSERR_NOERRORであれば、ボリューム設定値の取得は完了です。

サンプルプログラムのダウンロード

サンプルプログラムのソースコードを以下からダウンロードできます。

開発環境Visual Studio 2005
開発言語C言語
ファイル名sample_0001.zip



Windowsは米国Microsoft Corporationの登録商標です。