4.1.2 音を鳴らすための準備
変数を準備しただけでは、音を鳴らすことは出来ません。いろいろ手間がかかるんです実は…(汗)。というわけで、準備した各変数へ音を鳴らすための設定や初期処理をサササっとやっちゃいましょう。
初期設定と準備
準備した変数へ音を出すための設定を行う例です。これだけ見ると謎の呪文のように見えますが、たいしたことありません。

 ◆DirectX 7の場合
'DirectSoundオブジェクト作成
Set objDrSD = objDrX.DirectSoundCreate("")

'ウィンドウハンドルの取得
lngWindow = FindWindow("XLMAIN", Application.Caption)

'このウィンドウが優先的にDirectXを使う設定
objDrSD.SetCooperativeLevel hwnd:=lngWindow, level:=DSSCL_PRIORITY

'サウンドバッファへWAVファイルを設定
Set objDrSB = objDrSD.CreateSoundBufferFromFile _
                  (Filename:=WAVファイルを指定 _
                 , bufferdesc:=sctDesc _
                 , Format:=sctFormat)

 ※標準モジュールへFindWindow関数を定義する必要があります。
  また、DirectX 7を参照設定に追加する必要があります。

 ◆DirectX 8の場合
'DirectSoundオブジェクト作成
Set objDrSD = objDrX.DirectSoundCreate("")

'ウィンドウハンドルの取得
lngWindow = FindWindow("XLMAIN", Application.Caption)

'このウィンドウが優先的にDirectXを使う設定
objDrSD.SetCooperativeLevel hwnd:=lngWindow, Level:=DSSCL_PRIORITY

'サウンドバッファへWAVファイルを設定
Set objDrSB = objDrSD.CreateSoundBufferFromFile _                   (Filename:=WAVファイルを指定 _
                 , bufferdesc:=sctDesc)
 ※標準モジュールへFindWindow関数を定義する必要があります。
  また、DirectX 8を参照設定に追加する必要があります。


WAVファイルを鳴らすためのオブジェクト(DirectSoundオブジェクト)を作る処理です。DirextXオブジェクト(例ではobjDrX)のDirectSoundCreateメソッドを実行します。メソッドの引数はカラ文字列でOK。なお、この記述はDirectX7と8で同じです。

'DirectSoundオブジェクト作成
Set objDrSD = objDrX.DirectSoundCreate("")


SetCooperativeLevelは、説明などを見ると「協調レベルの設定」と書いてあるけど…もしや直訳か?!と思うほど、第一印象で意味が分かりにくいですね。何をする設定かというと、「指定したウィンドウが優先的にDirectXを使います!」という指定で、早い話が「自分自身(この場合はエクセルのウィンドウ)がアクティブになったとき優先的に使う」という設定です。なお、この記述はDirectX7と8で同じです。

ウィンドウハンドル(ウィンドウの識別番号)と、定数DSSCL_PRIORITY(優先レベル)を指定しましょう。なお、ウィンドウハンドルの取得は、APIのFindWindow関数で行います。詳しくは3.2 ウィンドウハンドル番号を取得するをどうぞ。

'ウィンドウハンドルの取得
lngWindow = FindWindow("XLMAIN", Application.Caption)

'このウィンドウが優先的にDirectXを使う設定
objDrSD.SetCooperativeLevel hwnd:=lngWindow, level:=DSSCL_PRIORITY


サウンドバッファオブジェクトの定義、早い話が鳴らしたいWAVファイルの定義です。上がDirectX 7用で下がDirectX 8用です。鳴らしたいWAVファイルをフルパスで指定しましょう。

なお、CreateSoundBufferFromFileメソッドは、DirectX 7とDirectX 8で微妙に指定する内容が違います。DirextX 7のときは、ファイル名の他に音の効果(例ではsctDesc)と鳴らす音が入っているファイルの形式(例ではsctFormat)、DirextX 8のときはファイル名の他に音の効果(例ではsctDesc)だけです。

ちなみに、音の効果(例ではsctDesc)とファイルの形式(例ではsctFormat)の設定を行わなくてもちゃんと音が出ます。

'サウンドバッファへWAVファイルを設定(DirectX 7のとき)
Set objDrSB = objDrSD.CreateSoundBufferFromFile _
                  (Filename:=WAVファイルを指定 _
                 , bufferdesc:=sctDesc _
                 , Format:=sctFormat)

 または

'サウンドバッファへWAVファイルを設定(DirectX 8のとき)
Set objDrSB = objDrSD.CreateSoundBufferFromFile _                   (Filename:=WAVファイルを指定 _
                 , bufferdesc:=sctDesc)
Copyright(C) 1999-2006 結城圭介。 All rights reserved