vb6.0でwavファイルの終了を監視する方法について

このQ&Aのポイント
  • vb6.0でwavファイルの再生を監視する方法についてご教授いただきたくお願いします。
  • wavファイルを再生するにあたり、戻り値が正しく返ってこないため、停止を監視できずに困っています。
  • お手数ですが、vb6.0でwavファイルの終了を監視する方法についてご教授いただけないでしょうか。
回答を見る
  • ベストアンサー

vb6.0でwavファイルの終了を監視する方法について

お世話になります。 vb6.0でwavファイルを再生するプログラムを作成しております。 下記にコードを記述させていただきます。 Private Declare 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 Private Sub MSComm1_OnComm() '演奏が終了しているか確認 If LCase$(Left$(mciSendString("Status MIDI1 mode", "", 0, 0), 7)) = "stopped" Or _ LCase$(Left$(mciSendString("Status MIDI1 mode", "", 0, 0), 7)) = "0" Then ←(1) Dim ret As Long ret = mciSendString("stop midifile ", "", 0, 0) ret = mciSendString("close midifile", "", 0, 0) ret = mciSendString("open """ & P_PLIST_WARNING & """", "", 0, 0) ret = mciSendString("play """ & P_PLIST_WARNING & """ from 0 wait", "", 0, 0) ret = mciSendString("stop """ & P_PLIST_WARNING & """", "", 0, 0) ret = mciSendString("close """ & P_PLIST_WARNING & """", "", 0, 0) End If End Sub wavファイルを再生するにあたり、まず再生されていない状態を確認してから、再生したいと考えています。 しかしながら、(1)のコードで戻り値が"stopped"または"0"ではなく、"263"で返ってきており、停止を監視できず困っております。 お手数ですが、ご教授いただきたく宜しくお願い申し上げます。

noname#164045
noname#164045

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

コードは詳しく見てませんが Declare Function mciGetErrorString Lib "winmm.dll" _ Alias "mciGetErrorStringA" (ByVal dwError As Long, _ ByVal lpstrBuffer As String, ByVal uLength As Long) As Long これで、エラーコードをメッセージに変換できます。 また、その辺りのことが、以下のurlに出てます。 参考になればいいのですが・・。 http://www.mb.ccnw.ne.jp/garger-studio/gameprog/vb0162.html

noname#164045
質問者

お礼

自己解決しました。 フォームロード時に、wavファイルを登録する処理が抜けておりました。 ありがとうございました。

関連するQ&A

  • VBAのwav操作ついて!!

    エクセルのVBAでプログラムを作っているのですが、wavを操作することに関してわからないことがあります。 (general)に -------------------------------------------------------- Private Declare 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 Private Const FILE001_NAME As String = "C:\001.wav" Private Const FILE002_NAME As String = "C:\002.wav" ・・・ ------------------------------------------------------- というのを入れていまして、音を出したいところで Call mciSendString("play """ & FILE○_NAME & """", "", 0, 0) という方式でwavを再生させようと思っています。 ここで、FILEのあとをワークシート1上のA1セル上の数字に変えたいと思います。つまり、A1セル内の数(乱数で1~100のいずれかを表示させています)を○のところに入れるにはどうすればいいでしょうか? どなたかおわかりになる方、教えてください。お願いいたします。

  • midi再生について

    visual basicを使ってゲームを作成しております。 あるサイトを見てmidiの再生をやってみようと下記のコードを入力しました。 Declare 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 Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMillsecounds As Long) Sub MCI_Test() Dim P As String, filename As String filename = "sample.mid" P = """" & ActiveWorkbook.Path & "\" & filename & """" Call mciSendString("open " & P & " alias sample", vbNullString, 0, 0) DoEvents Call mciSendString("play sample from 0", vbNullString, 0, 0) Call Sleep(10000) Call mciSendString("close sample", vbNullString, 0, 0) End Sub このコードでfilenameの部分を変更しwavファイルのsample.wavやMP3ファイルのsample.mp3は再生する事ができました。しかし、midiファイルはsample.midを同じフォルダ内に入れているにも関わらず全く音が鳴りません。どこが間違っているのでしょうか。教えてください。宜しくお願い致します。

  • VBSでCDトレイのオープン/クローズのコーディング方法わかりません。

    VBSでCDトレイのオープン/クローズのコーディング方法わかりません。 Excel for VBA では出来ましたが、VBSで作りたいのです。 http://www.mhl.janis.or.jp/~winarrow/vbscript/htm/vbs230.htm を見ると、VBSではDeclareが使えないようですね。 やり方がわかる方がいましたら、よろしくお願いします。 ----------- [Excel for VBA] Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpSectorsPerCluster As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Sub CD_Open() Ret = mciSendString("set cdaudio door open", vbNullString, 0, 0) End Sub Sub CD_Close() Ret = mciSendString("set cdaudio door closed", vbNullString, 0, 0) End Sub -----------

  • VB2008で簡単なmp3プレイヤーを作ろうと思っています。

    アイコン右クリックでContextMenuを表示させてプログラムの制御をしたいのですが・・・一応、メニューを右クリックから表示させて終了させるとこまでは出来ました。ですが、再生、停止(できれば一時停止も)がわからず探しています。色々とgoogle等でも調べたのですがよくわからず、困っています。 また、mp3を再生する前にファイルを開くウィンドウを別で開き参照させたいのですが、これがいまいちわかりません。他サイトでは Private Declare 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 Private Const FILE_NAME As String = "C:\Test.mp3" Private Sub Command1_Click() Call mciSendString("play """ & FILE_NAME & """", "", 0, 0) End Sub Private Sub Command2_Click() Call mciSendString("close """ & FILE_NAME & """", "", 0, 0) End Sub というのも紹介されてたのですが、これだとファイルを参照してもTest.mp3を再生することになるのではないでしょうか? ホントにVBも始めたばかりでほとんど見よう見まねでやってます。 多少難易度が高くても結構ですのでご教授よろしくお願いいたします。 ※使用環境 WindowsXP Pro SP3 Microsoft Visual Basic 2008を使用

  • VBAでIEの「ファイルのダウンロード」ダイアログを制御

    VBではなくVBAにて、IEの「ファイルのダウンロード」ダイアログを制御したいと思い、過去の同様の質問等を参考に下記のソースを作成して動かしてみましたが、「ファイルのダウンロード」画面で、「保存(S)」ボタンのハンドルを取得するところまではできましたが、sendMessageでクリックができず、次に進むことが出来ませんでした。 手動で「保存(S)」ボタンを押下して、強制的に「名前を付けて保存」画面に遷移させた後プログラムを再開すると、同画面の「保存(S)」ボタンのクリックはできました。 同じロジックで「名前を付けて保存」画面の「保存(S)」は動くのに、「ファイルのダウンロード」画面の「保存(S)」が動かないのはなぜでしょうか。 どなたかおわかりになる方がいらっしゃいましたら、ご回答をお願いします。 ***使用環境*** OS: XP pro IE: 6 OFFICE:2002 ***以下作成したソース(エラー制御は省略)*** Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetDlgCtrlID Lib "user32" (ByVal hwnd As Long) As Long Private Sub Test() Dim ret1 As Long Dim ret2 As Long Const WM_COMMAND As Long = &H111 ret1 = FindWindow("#32770", "ファイルのダウンロード") ret2 = FindWindowEx(ret1, 0, "Button", "保存(&S)") Call SendMessage(ret1, WM_COMMAND, GetDlgCtrlID(ret2), ByVal ret2) ret1 = FindWindow("#32770", "名前を付けて保存") ret2 = FindWindowEx(ret1, 0, "Button", "保存(&S)") Call SendMessage(ret1, WM_COMMAND, GetDlgCtrlID(ret2), ByVal ret2) End Sub ***以上ソース終わり***

  • ファイルを開いて1回しか再生されない

    VBAで音楽を鳴らしたいのですが、 ファイルを立ち上げて音楽を鳴らすプロシージャーを一度実行すると、 もう何度F5を押しても実行されません。 しかしファイルを開きなおすとまた実行できます。でも1回限りです。 コードはこちらです。 ------------------------------------------------------------ Private Declare 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 Sub PlaySound() Dim SoundFile As String, rc As Long SoundFile = "C:\【音楽】\test.mp3" If Dir(SoundFile) = "" Then MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation Exit Sub End If SoundFile = Chr(34) & SoundFile & Chr(34) rc = mciSendString("Open " & SoundFile, "", 0, 0) rc = mciSendString("Play " & SoundFile, "", 0, 0) End Sub ------------------------------------------------------------ 2回目実行した際音楽が鳴らないからってファイルがありませんと表示されるわけでもないです。 当方の環境はOSWIN7、OFFICE2007です。 ご回答よろしくお願いします。

  • vbaで鳴らした音楽を止めたい

    vbaのAPIで音楽を鳴らした後、 曲が終わる前に、vbaで終了させたいのですが Option Compare Database Option Explicit Declare 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 Sub test() Dim mySoundFile As String Dim rc As Long mySoundFile = "C:\tset.mp3" rc = mciSendString("Close " & mySoundFile, "", 0, 0) End Sub これを実行してもエラーにもならないし音楽も鳴り止まないのですが どこがまちがってますか? "C:\tset.mp3"で音楽を再生したので、 "C:\tset.mp3"は存在します。

  • VBAで画像ファイルをダウンロードしたいけどうまく

    VBAで画像ファイルをダウンロードしたいけどうまく行かない・・・ XPで、オフィス2003です。 http://officetanaka.net/other/extra/tips01.htm を参考に、画像ファイルをダウンロードする練習をしているのですが "エラーが発生しました"になってしまいます。 標準モジュールに --------------------------------------------------------- Option Explicit Public Declare Function URLDownloadToFile Lib "urlmon" _ Alias "URLDownloadToFileA" (ByVal pCaller As Long, _ ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long Sub Sample() GetImageFile "http://www.officetanaka.net/sample.jpg", "C:\sample.jpg" End Sub Sub GetImageFile(ImgName As String, SaveName As String) Dim SaveFileName As String, DownloadFile As String, Ret As Long Ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0) If ImgName = "" Then Exit Sub SaveFileName = SaveName DownloadFile = ImgName Ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0) If Ret = 0 Then MsgBox "ダウンロードできました" Else MsgBox "エラーが発生しました" End If End Sub --------------------------------------------------------- を貼り付けました。 Retが0にならなくてはいけないみたいですが、 自分の場合は、-2147221020になってしまいます。 どう修正すればいいのか教えてください。

  • VB6でのmmioOpen関数の使い方

    VB6でwaveファイルから音の波形を取得するプログラム を作りたいと思っているのですが、mmioOpen関数の使い方 が分からずに困っています。とりあえず現在の状況を書くと、 Private Declare Function mmioOpen Lib "winmm.dll" Alias "mmioOpenA" (ByVal szFileName As String, lpmmioinfo As MMIOINFO, ByVal dwOpenFlags As Long) As Long Private Declare Function mmioClose Lib "winmm.dll" (ByVal hmmio As Long, ByVal uFlags As Long) As Long Private Type MMIOINFO dwFlags As Long fccIOProc As Long pIOProc As Long wErrorRet As Long htask As Long cchBuffer As Long pchBuffer As String pchNext As String pchEndRead As String pchEndWrite As String lBufOffset As Long lDiskOffset As Long adwInfo(4) As Long dwReserved1 As Long dwReserved2 As Long hmmio As Long End Type Dim p1 As MMIOINFO Dim h As Long Dim closewav As Long Private Sub Command1_Click() openfilename = "C:\sample.wav" 'WAVEファイルを開く h = mmioOpen(openfilename, p1, MMIO_READ) MsgBox h If h <> 0 Then MsgBox "WAVEファイルのオープンに失敗" End If 'WAVEファイルを閉じる closewav = mmioClose(h, MMIO_FHOPEN) MsgBox closewav End Sub だれか分かる方がいれば、間違っている箇所、やり方などを教えてください。 よろしくお願いします。

  • VB2003で レジストリを格納する

    レジストリを格納するために、以下のように宣言し、 Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Integer, ByVal lpSubKey As String, ByVal Reserved As Integer, ByVal lpClass As String, ByVal dwOptions As Integer, ByVal samDesired As Integer, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Integer, ByRef lpdwDisposition As Integer) As Integer Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal dwType As Integer, ByRef lpData As String, ByVal cbData As Integer) As Integer Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Integer) As Integer 以下のようなコードで、ユーザーエージェントをmozillaからoperaへ(またはoperaからmozilla)書き換えようとしていますが、うまくいきません。 問題点1.同じuser agentの下に”(既定)”が2つできてしまう 問題点2.データが正しく(operaと)書き込まれず、文字化けしたものが書き込まれている。 C言語用のサンプルやVB6.0のサンプルは見ますが、VB2003ではどのように指定するのか、わかりませんでした。 Dim ret As Long Dim hKey As Long, lngDisposition As Long Dim udt As SECURITY_ATTRIBUTES Dim myroot_key As String, mysub_key_user_agent As String, myName As String,StrValue As String myroot_key = &H80000002 '"HKEY_LOCAL_MACHINE" を指定している mysub_key_user_agent ="Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent" myName = "(既定)" strValue="Opera" ret = RegCreateKeyEx(myroot_key, mysub_key_user_agent, 0&, vbNullString, _ 0, &H4 Or &H2, udt, hKey, lngDisposition) If ret = 0 Then ret = RegSetValueEx(hKey, myName, 0, 1, strValue, Len(strValue) + 1) RegCloseKey(hKey)