[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
VB6 音量調節の仕方 Wav 2
さて、困ったことになった、Waveの音量調節。
MCIコマンドではデバイスによっては使えたり使えなかったり・・・。
ちなみに私の環境では使えないということが分かった以上、もうどうすることもできなかった・・・。
そんななか、ようやく見つけたマイクロソフトのページ。
Visual Basic からのサウンド ファイルの音量を制御する方法
これでできるだろうか・・・ただ、このページ。英語をそのまま機械で翻訳しているので、なんのこっちゃよくわからない。
しかも、肝心のソースの解説は翻訳されずに英語のままときたもんだ。
正直、よくわからない。とにかく作るのみ。formにスライダーとボタンをつける。
スライダーはボリューム。そしてボタンを押下すると音がなるというもの。
まずは、APIの関数
まず、音量を取得する関数。
Declare Function waveOutGetVolume Lib "winmm.dll" (ByVal wDeviceID As Integer, dwVolume As Long) As Integer
ちなみに、マイクロソフトのページでは、"dll"の指定は"MMSYSTEM.dll"となっているが、これでは動かない。というより、ないのである。必ず、"winmm.dll"と指定しよう。
そして、音量をセットする関数。これは、左右の音量をセットする形になっている。
Declare Function waveOutSetVolume Lib "winmm.dll" (ByVal wDeviceID As Integer, ByVal dwVolume As Long) As Integer
次に、waveを出力する関数。
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
waveOutGetVolumeでは、左右両方の音量が一つの変数に格納されるので、まずは左右別々の値にしなくてはいけない。
Dim Pub_onryo As Long '音量
Dim Def_onryo As Long 'このシステムの元の音量
Dim Pub_vol '音声出力時に使うもの。
Dim CurrentVolLeft As Long '元の左の音量
Dim CurrentVolRight As Long '元の右の音量
Dim ret As Integer
Private Sub Form_Load()
'元の音量の取得
ret = waveOutGetVolume(0, Def_onryo)
CurrentVolLeft = Def_onryo And &HFFFF&
CurrentVolRight = ((Def_onryo And &HFFFF0000) / &H10000) And &HFFFF&
End Sub
ちなみに、音量はすべて16進数で示されている。無音は 0 そして最大値はFFFFとなっている。
FFFFは数字に直すと、65535だ。
スライダーのプロパティに最大値は65535として、値を 設定してやること。スライダーの値そのまま
を音量とする。
Private Sub Slider1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Pub_onryo = Slider1.Value
Call set_onryo
End Sub
set_onryoで、音量をセットする。
Sub set_onryo()
'システム音量の変更
Pub_vol = Hex$(Pub_onryo) & Hex$(Pub_onryo)
ret = waveOutSetVolume(0, "&H" & Pub_vol)
End Sub
ボタンをクリックしたら音声を出力
Private Sub BT_WAV_Click()
fnm="bgm.wav"
ret = sndPlaySound(fnm, SND_ASYNC)
End Sub
出来ました\(^o^)/
本当はもっと複雑なロジックですが、わかりやすくするために、必要な処理のみ書きました。
ちなみに、終わるときには、音量を元にもどすことを忘れずに。
Private Sub Form_Unload(Cancel As Integer)
ret = waveOutSetVolume(0, Def_onryo)
End Sub
あぁ、よかった。これで眠れる。
ByRef
2011-05-18 13:22
GET関数の戻り値がBYVALになっています。
この記事へのトラックバック
- この記事にトラックバックする
Amazon
PR
ソフト関連
メーカー直販PC
周辺機器
ランキング
プロフィール
しかしながらあまりの激務に退職。もうシステム系はいやだと思っていたが、ひょんなことから企業の電算室に勤務することとなる。