プロが教える店舗&オフィスのセキュリティ対策術

Active Basic4.23.00でプログラムを書いています。
音楽再生ソフトを作ってみようと思い、作り始めたのですが、なかなかループ再生が出来ません。

チェックボックス1がチェックされていると、ループさせようと思っています。
↓問題のコード
Sub MainWnd_MciNotify(flags As Long, DevID As DWord)
If SendMessage(GetDlgItem(hMainWnd,CheckBox1),BM_GETCHECK,0,0)=BST_CHECKED Then
Dim bErr As Long
Dim mpp As MCI_PLAY_PARMS

mpp.dwCallback=hMainWnd
mpp.dwFrom=0
bErr=mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY or MCI_FROM,mpp)


If bErr Then
MessageBox(hMainWnd,"デバイス再生エラー","Error",MB_OK or MB_ICONHAND)
Exit Sub
End If
Else
mpp.dwCallback=hMainWnd
mpp.dwFrom=0
End If

End Sub

一見、(少なくとも自分は)成功しているように見えるのですが、
2回ループした後、フリーズしてしまいます。
すみませんが、何故そうなるかが分かる方がいらっしゃいましたら、すみませんが、ご教授ください。
お願いします。

A 回答 (1件)

 こんばんは。



 それですと、再生が終了していないにも関わらず、MciNotifyの中で、2度、3度と再生する事に成ってしまいます。
 恐らくこれが原因で固まったのでしょう。
 MciNotifyの第一パラメータflagsを確認して、

 MCI_NOTIFY_SUCCESSFUL

 と等しかった時に再生が終了した事を意味するのですから、その時に再び、音楽を再生してあげれば良いと思います。

 ここが参考になります。
 http://www13.plala.or.jp/kymats/study/MULTIMEDIA …

 以下参考程度に。

Sub MainWnd_MciNotify(flags As Long, DevID As DWord)

'ループのチェックが入っている
If SendMessage(GetDlgItem(hMainWnd,CheckBox1),BM_GETCHECK,0,0) = BST_CHECKED Then

'フラグが再生終了を意味している時
if flags = MCI_NOTIFY_SUCCESSFUL Then
Dim mpp As MCI_PLAY_PARMS
Dim bErr As Long

mpp.dwCallback=hMainWnd
mpp.dwFrom=0

'音楽の位置を先頭に持っていく
bErr = mciSendCommand(DevID,MCI_SEEK,MCI_SEEK_TO_START, byval 0)
If bErr Then MessageBox(hMainWnd,"デバイス再生エラー","Error",MB_OK or MB_ICONHAND)

'再び再生する
bErr = mciSendCommand(DevID,MCI_PLAY,MCI_NOTIFY,mpp)
If bErr Then MessageBox(hMainWnd,"デバイス再生エラー","Error",MB_OK or MB_ICONHAND)
End If
End If

End Sub
    • good
    • 0
この回答へのお礼

詳しい解説ありがとうございました
助かりました!

お礼日時:2009/02/05 19:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!