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 |