Excel VBA:WAVEファイルを再生する |PlaySound関数の使い方

Excelで音楽や効果音の音声ファイル(WAVEファイル)を再生するVBAを掲載しています。




Homeに戻る > Excel プログラムのTipsへ

音楽と効果音はゲームソフトには必ず必要です。

音声ファイル(WAVEファイル)を再生するには、API関数のPlaySoundを使います。

PlaySoundの構文

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _ (ByVal pszSound As String, ByVal hmod As Long, ByVal fdwSound As Long) As Long

PlaySoundの引数

  • pszSound - WAVファイル名を指定します。vbNullStringにすると停止します。
  • hmod - 通常0です。
  • fdwSound - 繰り返し等の再生方法を指定します。

再生例

  • サウンドを非同期再生する。再生中に停止しません
    Call PlaySound(fname, 0, SND_ASYNC)
  • サウンドを同期再生する。再生中に停止する
    Call PlaySound(fname, 0, SND_SYNC)
  • サウンドを停止する
    Call PlaySound(vbNullString, 0, 0)
  • サウンドを繰り返し再生する。
    Call PlaySound(fname, 0, SND_LOOP)
  • サウンドを非同期で繰り返し再生する。
    Call PlaySound(fname, 0, SND_ASYNC Or SND_LOOP)

下のコードではウィンドウズの起動時の音楽を再生しています。

関連する「サウンドを再生する」を掲載していますので参照してください。



WAVEファイルを再生するVBA


ExcelシートのVBAコード

Option Explicit

'サウンドデータを演奏する
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _
    (ByVal pszSound As String, ByVal hmod As Long, ByVal fdwSound As Long) As Long

'アプリケーション特有の関連付けを使ってサウンドを再生
Private Const SND_APPLICATION = &H80

'pszSound パラメータは、レジストリまたは WIN.INI ファイルに記述されているシステムイベントの別名(エイリアス)。
'SND_FILENAME や SND_RESOURCE と同時に指定することはできない。
Private Const SND_ALIAS = &H10000

'pszSound パラメータは、定義済みのサウンド識別子
Private Const SND_ALIAS_ID = &H110000

'サウンドを非同期再生し、サウンドが開始されると、PlaySound 関数は即座に制御を返す。
'非同期再生されているサウンドを停止するには、pszSound パラメータで NULL を指定して PlaySound 関数を呼び出す。
Private Const SND_ASYNC = &H1

'pszSound パラメータは、ファイル名を表す。
Private Const SND_FILENAME = &H20000

'サウンドを繰り返し再生。
'pszSound パラメータで NULL を指定して PlaySound 関数を呼び出すと、サウンドが停止。
'サウンドイベントを非同期再生するよう指示するために、SND_ASYNC と同時に指定しなければならない。
Private Const SND_LOOP = &H8

'サウンドイベントのファイルは、メモリ内に既にロードされてる。
'pszSound パラメータは、メモリ内のサウンドイメージへのポインタを表す。
Private Const SND_MEMORY = &H4

'既定のサウンドイベントを使わない。
'指定されたサウンドが見つからなかった場合、PlaySound 関数は、既定のサウンド(一般の警告音)を再生せずに静かに制御す。
Private Const SND_NODEFAULT = &H2

'既にほかのサウンドが再生されている場合、指定されたサウンドを再生しない。
'指定されたサウンドを再生するために必要なリソースが、ほかのサウンドを再生していてビジーであり、
'指定されたサウンドを再生できない場合、この関数は指定されたサウンドを再生せずに、即座に FALSE を返す。
'このフラグを指定しなかった場合、PlaySound 関数は現在再生されているサウンドを停止して、指定された新しいサウンドを再生しようとする。
Private Const SND_NOSTOP = &H10

'ドライバがビジー状態の場合、指定されたサウンドを再生せずに即座に制御を返す。
Private Const SND_NOWAIT = &H2000

'呼び出し側タスクに関係するサウンドの再生を停止する。
'pszSound パラメータが NULL ではない場合、指定したサウンドのすべてのインスタンスを停止。
'pszSound パラメータが NULL の場合、呼び出し側タスクに関係するすべてのサウンドを停止。
'SND_RESOURCE パラメータで指定したサウンドイベントを停止させる場合は、hmod パラメータでインスタンスハンドルも指定しなければならない。
Private Const SND_PURGE = &H40

'pszSound パラメータは、リソース識別子を表す。
'hmod パラメータで、リソースを保持している実行可能ファイルのインタンスハンドルを指定しなければならない。
Private Const SND_RESOURCE = &H40004

'サウンドイベントを同期再生する。
'PlaySound 関数は、サウンドの再生が完了した後で制御を返す。
Private Const SND_SYNC = &H0

Private Sub ExPlaySound()
    Dim fname As String
    Dim mode As Long
    Dim i As Integer
    
    CommandButton1.Enabled = False
    CommandButton2.Enabled = True
    '1回では変わらない時がある為
    For i = 1 To 5
        DoEvents
    Next
    
    'waveファイル名
    fname = "C:\WINDOWS\Media\Windows XP Startup.wav"

    'モードは非同期で繰り返し
    mode = SND_ASYNC Or SND_LOOP
    
    'waveファイルを再生
    Call PlaySound(fname, 0, mode)
End Sub

Private Sub ExStopSound()
    '再生を停止
    Call PlaySound(vbNullString, 0, 0)
    CommandButton1.Enabled = True
    CommandButton2.Enabled = False
End Sub

Private Sub CommandButton1_Click()
    '再生
    ExPlaySound
End Sub

Private Sub CommandButton2_Click()
    '停止
    ExStopSound
End Sub


Excel実行画面

停止中のシート画面

「再生」ボタンで音声が鳴ります。

「再生」ボタンで音声が鳴ります

再生中の画面

「停止」ボタンで音声は鳴り止みます。

「停止」ボタンで音声は鳴り止みます。


Homeに戻る > Excel プログラムのTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved