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

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

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

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

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

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

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


'****************************************************************************'
'*
'*  @brief  音量ボリューム設定を変更する.
'*
'*  @param  なし.
'*
'*  @retval なし.
'*
Private Sub Volume_Control()

    ' デバイスをオープンしていない場合、バランス設定を行わない.
    If ( IsNothing( m_DXBuf ) = True ) Then
        Exit Sub
    End If

    ' ダイアログからボリュームコンロトールの位置を取得する.
    Dim range As Integer = Volume_Bar.Value
    Dim vol   As Integer = Volume.Min
    If ( range > 0 And range <= 100 ) Then
        vol = Fix( 1000.0 * Math.Log10( range / 100.0 ) )
    End If
    If ( vol < Volume.Min ) Then
        vol = Volume.Min
    End If
    If ( vol > Volume.Max ) Then
        vol = Volume.Max
    End If

    ' ボリューム設定を変更する.
    m_DXBuf.Volume = vol

End Sub
    


'****************************************************************************'
'*
'*  @brief  音量バランス設定を変更する.
'*
'*  @param  なし.
'*
'*  @retval なし.
'*
Private Sub Balance_Control()

    ' デバイスをオープンしていない場合、バランス設定を行わない.
    If ( IsNothing( m_DXBuf ) = True ) Then
        Exit Sub
    End If

    ' ダイアログからバランスコンロトールの位置を取得する.
    Dim range   As Integer = Balance_Bar.Value
    Dim balance As Integer = ((50 - range) * ((Pan.Right - Pan.Left) / 2)) / 100

    ' バランス設定を変更する.
    m_DXBuf.Pan = balance

End Sub
	

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

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


    Public Property Volume() As Integer
	

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

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

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


    Public Property Pan() As Integer
	

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

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

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

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



商標に関する表示