教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA API操作】音声ファイルを再生(sndPlaySound)する方法を教えて!

f:id:m_kbou:20200417221049p:plain

音声ファイルを再生するWindowsAPI関数(sndPlaySound)について紹介します。

 

 

構文

記述方法は以下の通りとなります。

(API定義)

Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String,ByVal uFlags As Long) As Long

---------------------------------

(VBA記述)

sndPlaySound(lpszSoundName, uFlags)

[説明]:

音声ファイルを再生するAPI関数はsndPlaySound関数となります。VBAから呼び出して使用する場合には、

---------------------------------

Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String,ByVal uFlags As Long) As Long

---------------------------------

をプロシージャ外で宣言します。

引数であるlpszSoundNameには再生する音声ファイルのパスを指定します。また、uFlagsには再生方法を指定します。再生方法の指定には「0」と「1」の2つがあり、「0」を指定すると音声の再生が終了するまで制御を返さず、「1」を指定すると再生直後に制御を返します。sndPlaySound関数を実行すると戻り値として「True」又は「False」が返ります。「True」の場合は音声ファイルの再生に成功した状態となり、「False」の場合は失敗した状態となります。

 

使い方

での使用方法について説明します。 

[プログラミング例]:

Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Sub サンプル()

  '↓処理①
  Dim 戻り値 As String
  Dim パス As String

  '↓処理②
  パス = "C:\Windows\media\chimes.wav"

  '↓処理③
  戻り値 = sndPlaySound(パス, 0)
  If (戻り値 = True) Then
    MsgBox "再生しました。"
  Else
    MsgBox "再生に失敗しました。"
  End If

End Sub

処理の流れは以下の通りとなります。

[処理①]:変数定義
戻り値とパスを格納する変数定義となります。

[処理②]:音声ファイルパスの指定
音声ファイルのパスを変数:パスにセットします。(※今回の再生ファイルのパスは「C:\Windows\media\chimes.wav」となります。)

[処理③]:OpenProcessによるプロセスハンドルの取得
WindowsAPI関数であるsndPlaySoundを使用した音声ファイルを再生します。各引数には以下の内容をセットして処理を実行します。
・lpszSoundName・・・音声ファイルのパスをセットします。
  ※今回は[処理②]でセットした変数:パスをセットします。
・uFlags・・・再生方法をセットします。
  ※再生終了まで制御を返さない場合は「0」、返す場合は「1」をセットします。
実行すると戻り値として「True」又は「False」が返されます。「True」の場合は再生に成功した状態(MsgBoxで”再生しました。”を表示)となります。また、「False」の場合は再生に失敗した状態(MsgBoxで”再生に失敗しました。”を表示)となります。

f:id:m_kbou:20210522165540p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210522165557p:plain

②結果は音声が再生され、MsgBoxで「再生しました。」が表示されます。

f:id:m_kbou:20210522165610p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

WindowsAPIを使用した音声ファイルを再生する方法についての説明は以上です。

 

おわりに

今回はWindowsAPI関数による音声ファイルの再生方法について説明しました。是非参考にして下さい。