- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BASIC言語でmciSendCommand関数を扱う時)
BASIC言語でmciSendCommand関数を使ったBGMのリピート再生について
このQ&Aのポイント
- Active Basicでゲームを作っています。BGMを流すためにPlaySound関数を使用する予定でしたが、wav形式のみに対応していることがわかり、mciSendCommand関数を学習しました。
- mciSendCommand関数を使用してBGM(今回はmid形式)を再生しようとしましたが、リピート再生がうまくいきませんでした。いくつかの方法を試しましたが、期待通りの動作をせず困っています。
- MainWndとMenuの2つのウインドウがあり、グローバル変数にはbErrとmopのMCI_OPEN_PARMSが定義されています。再生処理時にSetTimer関数を使用して曲の長さ分のタイマーをセットし、タイムアウト時に再度再生させる方法を試しましたが、うまくいきません。初めての取り組みなので、詳しい方のアドバイスをお待ちしています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
再生開始を指示する際に通知フラグ(MCI_NOTIFY)と、 通知先のウィンドウ(ウィンドウハンドル(HWND))を指定して おきます。 そして通知先に指定したウィンドウに対して飛んでくる MCIからの再生終了通知のメッセージ(MM_MCINOTIFY)を捕まえ、 その処理の中で再度MCIに再生指示すれば、 見かけリピートになるという仕掛けです。 MCI_NOTIFYをgoogleなりで検索してみれば、あとはウィンドウ メッセージの処理のスキルがあれば、すぐにわかると思います。 ちなみに、コードを見れば、下ごしらえはできているように 見えます(よくは見ていませんが)。 Dim mpp As MCI_PLAY_PARMS mpp.dwCallback=hMainWnd <<このウィンドウに通知が飛んできます bErr=mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY,mpp) あとはhMainWndのウィンドウで 再生終了のメッセージをトラップしてみるだけかもしれません。 WM_TIMERなタイマなんぞ使ってもろくに精度は出ないでしょうから、 やめたほうが良いです。
お礼
何とかループできました。 ありがとうございました!!