2012-01-10 20 views
4

OpenGLを使用してC++で構築されたゲームのバックグラウンドでwavファイルを再生しようとしています。私はwavファイルを再生するために次の行を使用しています:C++/OpenGLでPlaySound()を使用して背景で音を再生する

PlaySound("starwars.wav", NULL, SND_FILENAME|SND_LOOP); 

音楽が始まるときに問題があります。私はキーボードのボタンを押して音楽を始めることを試みましたが、私がそれをすると音楽が始まり、すべてのアニメーションが停止します。これを避ける方法はありますか?私はバックグラウンドでいくつかの音楽を再生したいだけで、PlaySoundはこれを実現する最も簡単な方法のように思えました。

答えて

6

あなたはこれが作るPlaySoundではなく、あなたのケースであなたがループしているわけではないと同じように演奏を、終了する音を待っているよりも、すぐに戻ってくる

SND_ASYNC

に渡したいです。 IIRC PlaySoundは一度に1つのサウンドしか再生できないので、特にゲームを作っている場合は、サウンドライブラリを探すのが最善です。仕事へのあなたのサンプルについて結論

PlaySound("starwars.wav", NULL, SND_ASYNC|SND_FILENAME|SND_LOOP);

Please see this

+0

ありがとうございました。素晴らしい:) – biggdman

+0

問題はありませんが、これを答えとしてマークすることを忘れないでください:)私はまた、あなたは健全なAPIを見て、これはhttp:// stackoverflowを見てくださいと思うと思います。 com/questions/3636715/cross-platform-sound-api-for-games –

1

私はWindowsサウンドAPIとは専門家だが、関数PlaySoundは、ブロック操作であるようにそれはそう、機能が終了するまで、つまり音が最後まで再生されるまで、アプリケーションがフリーズすることを意味します。おそらくこれを回避するフラグがありますか?

サウンドのスレッドを開始できます。サウンドの停止後に終了します。または、簡単なサウンドAPIを調べることもできます。

1

playSound( "*。wav"、NULL、SND_SYNC | SND_LOOP)の形式を使用している場合、playSound()関数に含まれるループでフリーズされるゲームのアニメーションがほとんど制御できませんこれはSND_LOOPですが、SND_SYNCをSND_ASYNCで変更した場合は、注文したとおりに動作しますが、これはウィンドウで機能し、WINMM.LIB(ウィンドウマルチメディアライブラリ)をプロジェクト/ OpenGL/Visual C++に含めることを忘れないでください/ link

関連する問題