0

ゲームで sfx を再生したい。最初に、いくつかの mp3 ファイルを開きますmciSendString("open Muzle.mp3 alias Muzle");

私の問題は、mciSendString("play Muzle from 0");まだ少しラグが発生し、ゲームが頻繁にサウンドを再生する必要があることです。

別の質問で、スレッドを使用すると問題が解決すると読みました。私はスレッドの使用にまったく慣れていません。問題は、サウンドが再生されないことです:p。最後に cout を与えて、スレッドが正常に実行されることを確認しました。

私は今この機能を持っています:

void Shout(string SoundName){
    string FNstr;
    wstring FNwstr;
    FNstr = "play " + SoundName + " from 0";
    FNwstr.assign(FNstr.begin(), FNstr.end());
    mciSendString(FNwstr.c_str(), NULL, 0, NULL);
    Sleep(2000);
    cout << "Test woi\n";
}

(Sleepも無しでやってみました。スレッドが最後まで来たら削除されて音が途切れる可能性があるので必要なのかな…スレッドやmmsystemの仕組みがよくわかりません)

このShout()関数を単純に呼び出すと、サウンドが再生され、Sleep(2000) が実行され、次にカウントされます。すべてがうまくいきました。しかし、スレッドを使用する必要があるため、次のことを試します。

thread(Shout, "Muzle");

エラーが発生しました:abort()が呼び出されました。スレッドを切り離す必要があるかもしれないことがわかりました:

thread t(Shout, "Muzle");
t.detach();

これで、すべて正常に動作しているように見えましたが (2 秒後、コンソールに「Test woi」と出力されました)、サウンドは再生されませんでした。

うーん、すべてを読んでくれてありがとう ^.^ . この問題を解決する方法を知っていますか?

4

1 に答える 1

0

おそらく次の 1 つの永続的なスレッドが必要です。おそらく、「待機」オプションを使用してそれを行うことができます。2. サウンドを再生していないときは、コマンドが次のサウンドを再生するのを待ちます -パイプを使用してメッセージをスレッドに送信することはそのような解決策の 1 つですが、他の方法を使用することもできます。

于 2013-07-21T08:54:08.487 に答える