WAVEファイルを再生する(サウンドを鳴らす) : Access




BackHome BackTips Backメニュー

Accessでゲームソフトは作らないと思いますが、効果音ぐらいは使いそうです。

音声ファイル(WAVEファイル)を再生するには、API関数のPlaySoundを使います。
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)
下のコードではウィンドウズの起動時の音楽を再生しています。

[Accessフォーム 停止中の画面]
再生ボタンをクリック

[Accessフォーム 再生中の画面]
停止ボタンをクリック

■ Access VBA 実行コード

Option Compare Database
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 AcPlaySound()
    Dim fname As String
    Dim mode As Long
    Me!コマンド7.Enabled = True
    Me!コマンド7.SetFocus
    Me!コマンド6.Enabled = False
    DoEvents
    '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 AcStopSound()
    '再生を停止
    Call PlaySound(vbNullString, 0, 0)
    Me!コマンド6.Enabled = True
    Me!コマンド6.SetFocus
    Me!コマンド7.Enabled = False
End Sub


Private Sub コマンド6_Click()
    '再生
    AcPlaySound
End Sub

Private Sub コマンド7_Click()
    '停止
    AcStopSound
End Sub

BackHome BackTips Backメニュー

Copyright(C) FeedSoft