• 締切済み

win32 mciについて

WindowsVISTA 32bit にて Microsoft Visual C++ 2008を使い ゲームを作成しています。 mciSendCommandでBGMを鳴らし、PlaySoundで効果音を鳴らしています。 上記WindowsVISTA 32bitでは正常に動作しています。 ただ、Windows7 64bitで動作させると効果音が何度目かの再生の時に タイムラグが発生してwindowsも一時的に止まってしまいます。 このとき、BGMは鳴っていますが、タイムラグが解消しプログラムに 戻るとき一瞬BGMがとまります。 タイムラグの長さは0.5秒から3秒ほどで、頻度はすぐに発生することもあり、 数十回再生後に発生することもあります。 mciSendCommandはファイルからですが、 PlaySoundはファイルからでも、メモリからでも症状は同じです。 リソースはまだためしてはいません。 また、 mciSendCommandを使ってBGMを2回以上ミキシングしても 何回目かの再生で同じ症状が出ますし、 BGMをメモリにおいてPlaySoundで鳴らし、効果音をmciSendCommandで ファイルから鳴らしても何度目かで同じ症状が出ます。 プログラム実行後にSleepやタイマーで2/100秒ほどのウェイトを入れると 少し軽減されるようですが症状は出ます。 64bitOSがMCIをサポートしないというのをネット上で見ましたが、 何か対処の方法はないでしょうか? どなたかご存知の方いらっしゃれば教えてください。

みんなの回答

  • sygh
  • ベストアンサー率76% (42/55)
回答No.2

MCIはループ再生のパフォーマンスが厳しいので、ゲーム向きではありません。 PlaySoundなどのWinAPIも複数チャンネルSEのミキシングなどのゲームで必要とされる機能に対応していないので、せっかくWindows VistaとVisual C++ 2008が使えるのであれば、最新のDirectX SDKをインストールしてXACTの利用を検討してみては? (XACTの日本語資料やC++サンプルがほとんどないため、XNAのヘルプやC#サンプルを参考にするしかないのがつらいところですが)

すると、全ての回答が全文表示されます。
  • ohtawa
  • ベストアンサー率23% (9/38)
回答No.1

解決できるかどうか断定はできませんが waitオプションは使っていらっしゃいますか もし使っていなかったら 使ってみてはいかがでしょうか 使い方は検索すれば出てきます

tomatomatorin
質問者

お礼

早速のご返事ありがとうございます。 waitオプションということでmciSendString関数のオプションでしょうか? PlaySoundにも同期で動作するSND_SYNCがありますが、 ゲームという特性上すぐに返ってこないので使用していません。 waitオプションの解釈が間違っていたらごめんなさい。 詳しく教えて頂けないでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A