C#でDirectSoundを利用してWAVファイルを再生する
(その5)

音量ボリュームと左右バランスの設定

ダイアログにあるボリュームのトラックバーを上下したときに音量ボリュームが変化するようにします。

ボリュームの設定値は単位がdb(デシベル)となるので、0%~100%を-100db~0dbとなるように 10 x log10( トラックバーの値 / 100 ) の式で設定値を変換します。

ダイアログにある音量バランスのトラックバーを左右に動かしたときに音量バランスが変化するようにします。

音量バランスは、中央値を0として負数を設定すると左側が強くなり、正数を設定すると右側が強くなります。
サンプルコードでは、トラックバーの範囲0%~100%を-50%~+50%に変換して音量バランスを設定しています。

サンプルコードを以下に示します。


/****************************************************************************/
/*!
 *  @brief  音量ボリューム設定を変更する.
 *
 *  @param  なし.
 *
 *  @retval なし.
 */
private void Volume_Control()
{
    //! デバイスをオープンしていない場合、バランス設定を行わない.
    if( m_DXBuf == null ){
        return;
    }
    //! ダイアログからボリュームコンロトールの位置を取得する.
    int range = Volume_Bar.Value;
    int vol   = (int)Volume.Min;
    if( range > 0 && range <= 100 ){
        vol = (int)(1000.0 * Math.Log10( range / 100.0 ));
    }
    if( vol < (int)Volume.Min ) vol = (int)Volume.Min;
    if( vol > (int)Volume.Max ) vol = (int)Volume.Max;

    //! ボリューム設定を変更する.
    m_DXBuf.Volume = vol;
}
    


/****************************************************************************/
/*!
 *  @brief  音量バランス設定を変更する.
 *
 *  @param  なし.
 *
 *  @retval なし.
 */
private void Balance_Control()
{
    //! デバイスをオープンしていない場合、バランス設定を行わない.
    if( m_DXBuf == null ){
        return;
    }
    //! ダイアログからバランスコンロトールの位置を取得する.
    int range   = Balance_Bar.Value;
    int balance = ((50 - range) * ((Pan.Right - Pan.Left) / 2)) / 100;

    //! バランス設定を変更する.
    m_DXBuf.Pan = balance;
}
	

音量ボリュームの設定を変更する

SecondaryBufferクラスのプロパティVolumeに音量ボリュームを設定します。


    public int Volume { get; set; }
	

音量ボリュームは、Volume.Min(-10000)からVolume.Max(0)の間で1/100db間隔で設定します。

音量バランスの設定を変更する

SecondaryBufferクラスのプロパティPanに音量バランスを設定します。


    public int Pan { get; set; }
	

音量バランスの設定値は、Pan.Left(-10000)からPan.Right(10000)の間で設定します。

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

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

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



Windows、DirectXおよびDirectSoundは米国Microsoft Corporationの登録商標です。