添付型フィールドにwavファイルを追加してボタンクリックで音を出す。
約1秒後に自動的にリダイレクトします。切り替わらない場合はリンクをクリックしてください。
Accessで音を鳴らすにはいくつか方法がありますよね。
1,フォームにwavファイルを挿入して以下の様にする
oleSound.Action = acOLEActivate
参考にさせていただきました。
tsware.jp
2,API使って音を出す方法
・mciSendString
・PlaySound
などなど
そこでwavファイルの設置の仕方なんですが、AccessDBファイルを現場環境に納品する時に1はDBファイルに包括されているので問題ありませんが、
2の場合はwavファイルがフルパスで指定するのでDBファイルとwavファイルを別で納品して、現場の環境に合わせてwavファイルを設置しなければいけません。
ちなみに1の場合はwavファイル再生の時にMediaPlayerの画面がポップアップされるのでいまいち使い勝手がよくありません。OLEだからかなぁ・・・まぁ、それはさておき
どうせなら、2もあらかじめテーブル内にwavファイルを保持しておいて、使うときにTempフォルダに展開してからそのフルパスを使ってAPIにフルパスを渡して再生すれば、納品時に複数ファイルにならないし、設置環境にわざわざwav保管用のフォルダを作らなくても済むんじゃないかと考えました。(まぁTempフォルダに保管フォルダ作りはするんですけどね)
概略と実装方法は以下みたいな感じで!
概要
① 適切なテーブルに添付型フィールドを作成してそこにwavファイルを複数添付しておく。
➁ アプリケーションの起動時、もしくはファイルを開くときに①で添付したファイルをTempフォルダーに書き出す。
③ APIをCallして特定の音を出す。
実装方法
① 添付型フィールドを適当なテーブルに作成してそこにあらかじめ準備しておいたwavファイルを追加しておく。(複数でもOk)
➁ フォームを開く時にFSOでユーザーのtempフォルダーを取得しそこに保管用フォルダを作成する。
③ 上記保管フォルダーにテーブルに保管しておいた添付ファイル(wavファイル達)を.SaveToFileで出力する。
④ 出力したフルパスをグローバル変数にセットしておき、必要な場面でmciSendStringをcallして音を出す。
てな具合です。
さてやってみましょう
まずはテーブルに添付がたフィールドを作成してwavファイルを保管します。
そのフィールドにwavファイルを追加する。今回は二つ
Public beepSound1DirectoryPath As String Public beepSound2DirectoryPath As String #If Win64 Then Public Declare PtrSafe 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 #Else Public Declare Function mciSendString Lib "winmm" Alias "mciSendStringA" _ (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _ ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long #End If
FSOでtempフォルダのパスを取得してそこに保管用のフォルダを作成し添付データを出力する。
Public Function test() On Error Resume Next Dim fso As New FileSystemObject 'FSO Dim f As Folder 'Folder Dim newFolderName As String '新規作成するフォルダ名 Dim newDirectoryPath As String '新規作成するフォルダのフルパス Set f = fso.GetSpecialFolder(TemporaryFolder) 'Tempフォルダーパスの取得 newFolderName = "TestFolder" 'このAccess用のtempフォルダ名 newDirectoryPath = f & "\" & newFolderName beepSound1DirectoryPath = newDirectoryPath & "\sound1.wav" beepSound2DirectoryPath = newDirectoryPath & "\sound2.wav" If Dir(newDirectoryPath, vbDirectory) = "" Then fso.CreateFolder newDirectoryPath End If Set fso = Nothing '添付型カラムから添付したファイルをTempフォルダに出力する。 Dim DB As DAO.Database Dim R1 As Recordset Set DB = CurrentDb() Set R1 = DB.OpenRecordset("テーブル1") R1.MoveFirst Do Until R1.EOF With R1("AddData").Value 'AddDataカラムのそれぞれのValueに添付データが入っている While Not .EOF .Fields("FileData").SaveToFile newDirectoryPath 'FileDataに添付データが入っている。 'FileNameでnewDirectoryPathに保存される。 .MoveNext Wend End With R1.MoveNext Loop R1.Close DB.Close Set R1 = Nothing Set DB = Nothing End Function
mscSendStringで音をだす。
Private Sub コマンド5_Click() Call mciSendString("play " & beepSound1DirectoryPath, "", 0, 0) End Sub Private Sub コマンド3_Click() Call mciSendString("play " & beepSound2DirectoryPath, "", 0, 0) End Sub
後は最後に閉じるフォームに作成したTempフォルダ内のテストフォルダを削除する機能を必要に応じて実装する。
ボタンおすと音がでます!!!