BASIC言語でmciSendCommand関数を扱う時
Active Basicでゲームを作っています。
BGMを流すときに、PlaySound関数で音を鳴らそうと思ったのですが、
これはwav形式しか鳴らせないと知り、mciSendCommand関数を勉強することにしました。
mciSendCommand関数で、BGM(今回はmid)を読み出そうと思ったのですが、
『リピート再生』が出来ません。
いろいろ探してみたのですが、理解できませんでした。
そこで、いろいろ実験したのですが、どうも思うように動いてくれません。
MainWndとMenuの二つのウインドウがあります。
グローバル変数に
Dim bErr As Long
Dim mop As MCI_OPEN_PARMS
を定義してあります。
↓書いたコード(Menuウインドウ)
mop.lpstrElementName=".\BGM\bgm01.mid"
bErr=mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT,mop)
If bErr Then
MessageBox(hMainWnd,"BGMの読み込みに失敗しましたので、強制終了します。","Error",MB_OK or MB_ICONHAND)
SendMessage(hMainWnd,WM_CLOSE,0,0)
End If
'再生
Dim mpp As MCI_PLAY_PARMS
mpp.dwCallback=hMainWnd
bErr=mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY,mpp)
If bErr Then
MessageBox(hMainWnd,"BGMの再生に失敗したので、強制終了します。","ERROR",MB_OK or MB_ICONHAND)
SendMessage(hMainWnd,WM_CLOSE,0,0)
End If
SetWindowPos(hMainWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW)
SetTimer(hMainWnd,2,213000,0)
ここで、1回目の再生処理を入れて、SetTimer関数で、曲の長さ分のタイマーをセットして、曲が終了したらもう一度再生しなおすという方法でしました。
(探したサイトには、『リピート機能は無い』と書いてあったので)
↓タイムアウト時の処理(MainWnd)
If TimerID=2 Then
Dim mpp As MCI_PLAY_PARMS
mpp.dwCallback=hMainWnd
mpp.dwFrom=0
bErr=mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY,mpp)
If bErr Then
MessageBox(hMainWnd,"BGMの再生に失敗したので、強制終了します。","ERROR",MB_OK or MB_ICONHAND)
SendMessage(hMainWnd,WM_CLOSE,0,0)
End If
End If
初めて扱う部分なので、まだ良く分かっていません。
どなたか良いやり方をご存知の方がいらっしゃいましたらご教授下さい。
お願いします。
お礼
久しぶりに過去の投稿を見ていました! ありがとうオございます 早速やってみます!!