wrote :: 2004.02.09

トップページ > Excel > VBA > サウンドを再生する

サウンドを再生する

別に、こんなことを知っていたからといって「だから何だ?」ってテクニックなんですが…(^^;
VBAから、WAVEファイルやMP3などのサウンドを再生するには次のようにします。

■Shell関数を使う方法
Shell関数は、指定した外部プログラム(exeファイル)を起動する関数です。VBAの標準関数ですから、手軽に利用できるのがメリットです。
サウンドを再生するためにShell関数で起動するのは「Media Player」です。ただし、派手な視覚エフェクトが表示される最近のWindows Media Playerではなく、昔のWindowsから付属されていた古いMedia Playerを使います。



↑これが古いMedia Playerです。このMedia Playerは、再生したいサウンドファイルを指定することで、起動と同時に指定したサウンドファイルを再生することができます。さらに、再生が終了したら自動的にMedia Player自身を終了させるという引数もあります。
次のサンプルは、C:\Windows\Media\tada.wavを再生します。tada.wavは、Windowsを起動するときに鳴る例の「ジャジャ〜ン」というサウンドファイルです。

Sub Sample1()
    Dim SoundFile As String
    SoundFile = "C:\Windows\Media\tada.wav"
    If Dir(SoundFile) = "" Then
        MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation
        Exit Sub
    End If
    Shell "mplay32.exe /play /close " & SoundFile
End Sub

Media Playerの実体であるmplay32.exeは、通常Windows\System32フォルダにあります。一般的に、このフォルダにはパスが通っていますので、ファイル名だけを指定すれば起動できます。もちろん、mplay32.exeが存在しないとShell関数は失敗します。
上記のサンプルを実行して、もしサウンドが鳴りやまないときは、Media Playerのオプションで[繰り返し]がオンになっているのかもしれません。タスクバーなどでMedia Playerを開き、[編集]メニューの[オプション]をクリックして表示される[オプション]ダイアログボックスで、[繰り返す]チェックボックスをオフにしてください。



mplay32.exeでは、WAVEファイルだけでなく、MIDIファイル(*.mid)とMP3ファイル(*.mp3)も再生できました。

■APIを使う方法
APIを使えば、Media Playerのような外部プログラムを使わずにサウンドを再生することも可能です。使うAPIはmciSendStringだけです。
次のサンプルは、APIを使ってC:\Windows\Media\tada.wavを再生します。

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Sub Sample2()
    Dim SoundFile As String, rc As Long
    SoundFile = "C:\Windows\Media\tada.wav"
    If Dir(SoundFile) = "" Then
        MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation
        Exit Sub
    End If
    rc = mciSendString("Play " & SoundFile, "", 0, 0)
End Sub

mciSendStringには他にもいろんな機能がありますが、解説しだすとExcel VBAの範疇ではなくなってしまいます。興味のある方は、googleなどでmciSendStringを検索してみてください。VisualBasic系のサイトなら参考になると思います。


[目次]に戻る