Win32API mciSendString

音楽の再生

 Excelで音楽を再生するためのコードです。VBAのみでは不可能なため、Win32APIを使用しています。
 コードをVBEに貼り付けると、一部赤く表示されますが、これはAPIをOffice64bit版に対応させるための処理ですので、エラーではありません。

サンプルコード

 事前に、再生用の音声ファイルを準備して下さい。
 拡張子が「wav」「mid」「mp3」「wma」のファイルに対応しています。
 マクロの「Sound_Open」を実行し、準備したファイルを選択すると再生できるようになります。

Option Explicit
Const conFileName As String = "Sample"
'///API/////////////////////////////////////////////////////////////
#If VBA7 And Win64 Then
  '64ビット版
    Declare PtrSafe Function mciSendString Lib _
            "winmm.dll" Alias "mciSendStringA" ( _
        ByVal lpstrCommand As String, _
        ByVal lpstrReturnString As String, _
        ByVal uReturnLength As Long, _
        ByVal hwndback As Long) As Long
#Else
  '32ビット版
    Declare Function mciSendString Lib _
            "winmm.dll" Alias "mciSendStringA" ( _
        ByVal lpstrCommand As String, _
        ByVal lpstrReturnString As String, _
        ByVal uReturnLength As Long, _
        ByVal hwndback As Long) As Long
#End If
'-------------------------------------------------------------------------------------------------------

Sub Sound_Open() '音声ファイルをメモリに読み込み

    Dim lngP As Long
    Dim mciCommand As String
    Dim strFilePath As String
    Const conVBN As String = """"

    '音声ファイルの選択
    strFilePath = Application.GetOpenFilename _
        ("音声ファイル (*.wav;*.mid;*.mp3;*.wma),*.wav;*.mid;*.mp3;*.wma")
    If strFilePath <> "False" Then
        lngP = InStrRev(strFilePath, ".")
        If 0 < lngP Then
            strFilePath = conVBN & strFilePath & conVBN
            mciCommand = "Open " & strFilePath & " alias " & conFileName
            Call mciSendString(mciCommand, "", 0, 0)
        End If
    End If
End Sub
'-------------------------------------------------------------------------------------------------------

Sub Sound_Close() '音声ファイルをメモリからクリア
    'ブックを閉じる前に必ず破棄して下さい
    Call mciSendString("Close All", "", 0, 0)
End Sub
'-------------------------------------------------------------------------------------------------------

Sub Sound_Play() '再生
    '音声ファイルを読み込まないと、再生できません
    Call mciSendString("Play " & conFileName & " from 0", "", 0, 0)
End Sub
'-------------------------------------------------------------------------------------------------------

Sub Sound_Pause() '一時停止
    Call mciSendString("Pause " & conFileName, "", 0, 0)
End Sub
'-------------------------------------------------------------------------------------------------------


Sub Sound_Resume() '一時停止解除
    Call mciSendString("Resume " & conFileName, "", 0, 0)
End Sub
'-------------------------------------------------------------------------------------------------------

Sub Sound_Stop() '停止
    Call mciSendString("Stop " & conFileName, "", 0, 0)
End Sub

留意点

 上記のコードには、以下の6つのモジュールがあります。
  ・Sound_Open:音声ファイルをメモリに読み込み
  ・Sound_Clear:音声ファイルをメモリからクリア
  ・Sound_Play:再生
  ・Sound_Pause:再生中の音声ファイルを一時停止
  ・Sound_Resume:一時停止解除
  ・Sound_Stop:再生中の音声ファイルを停止
 音声ファイルを読み込まないと、音の再生はできません。
 Excelを閉じる前に、音声ファイルを必ずメモリからクリアして下さい。

Excel Tips for Teachers

Copyright (C) 2009- 坂江 保 All Rights Reserved.