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 |