|
ややこしい話をする前に、とにかく音を鳴らしてみましょう。例では、ファイルの指定ダイアログで指定したWAVファイルを鳴らします。なお、ファイルの指定ダイアログボックスについては、エクセルマクロTipsの8.3 ファイル選択ダイアログを使うを参照してください。
それと、APIのFindWindowを準備する必要があります。FindWindowについては3.2 ウィンドウハンドル番号を取得するをどうぞ。
なお、WAVファイルはC:\windows\mediaあたりを探すとゴッソリ出てくることでしょう。それと、ボリュームに注意してください(笑)
◆DirectX 7の場合
Sub prcDirectSound7()
Dim objDrX As New DirectX7
Dim objDrSD As DirectSound
Dim objDrSB As DirectSoundBuffer
Dim sctDesc As DSBUFFERDESC
Dim sctFormat As WAVEFORMATEX
Dim lngWindow As Long
Dim vntFileName As Variant
'DirectSoundオブジェクト作成
Set objDrSD = objDrX.DirectSoundCreate("")
'ウィンドウハンドルの取得
lngWindow = FindWindow("XLMAIN", Application.Caption)
'このウィンドウが優先的にDirectXを使う設定
objDrSD.SetCooperativeLevel hwnd:=lngWindow, level:=DSSCL_PRIORITY
'ファイルを開くダイアログを開きます
vntFileName = _
Application.GetOpenFilename( _
FileFilter:="WAVファイル(*.wav),*.wav" _
, FilterIndex:=1 _
, Title:="開けゴマ" _
, MultiSelect:=False _
)
'WAVファイルを選択しなかったときは終了します
If vntFileName = False Then
Exit Sub
End If
'サウンドバッファへWAVファイルを設定
Set objDrSB = objDrSD.CreateSoundBufferFromFile _
(Filename:=vntFileName _
, bufferdesc:=sctDesc _
, Format:=sctFormat)
'演奏します
objDrSB.Play DSBPLAY_DEFAULT
'プロシジャが終了すると音が止まってしまうため
'音が鳴り終わるまで待機します
Do Until objDrSB.GetStatus = 0
DoEvents
Loop
End Sub
|
※標準モジュールへFindWindow関数を定義する必要があります。
また、DirectX 7を参照設定に追加する必要があります。
◆DirectX 8の場合
Sub prcDirectSound8()
Dim objDrX As New DirectX8
Dim objDrSD As DirectSound8
Dim objDrSB As DirectSoundSecondaryBuffer8
Dim sctDesc As DSBUFFERDESC
Dim lngWindow As Long
Dim vntFileName As Variant
'DirectSoundオブジェクト作成
Set objDrSD = objDrX.DirectSoundCreate("")
'ウィンドウハンドルの取得
lngWindow = FindWindow("XLMAIN", Application.Caption)
'このウィンドウが優先的にDirectXを使う設定
objDrSD.SetCooperativeLevel hwnd:=lngWindow, Level:=DSSCL_PRIORITY
'ファイルを開くダイアログを開きます
vntFileName = _
Application.GetOpenFilename( _
FileFilter:="WAVファイル(*.wav),*.wav" _
, FilterIndex:=1 _
, Title:="開けゴマ" _
, MultiSelect:=False _
)
'WAVファイルを選択しなかったときは終了します
If vntFileName = False Then
Exit Sub
End If
'サウンドバッファへWAVファイルを設定
Set objDrSB = objDrSD.CreateSoundBufferFromFile _
(Filename:=vntFileName _
, bufferdesc:=sctDesc)
'演奏します
objDrSB.Play DSBPLAY_DEFAULT
'プロシジャが終了すると音が止まってしまうため
'音が鳴り終わるまで待機します
Do Until objDrSB.GetStatus = 0
DoEvents
Loop
End Sub
|
※標準モジュールへFindWindow関数を定義する必要があります。
また、DirectX 8を参照設定に追加する必要があります。
|
|
|