• ベストアンサー
※ 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関数を使用して曲の長さ分のタイマーをセットし、タイムアウト時に再度再生させる方法を試しましたが、うまくいきません。初めての取り組みなので、詳しい方のアドバイスをお待ちしています。

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

  • ベストアンサー
回答No.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なタイマなんぞ使ってもろくに精度は出ないでしょうから、 やめたほうが良いです。

if-so-at
質問者

お礼

何とかループできました。 ありがとうございました!!