2

C# アプリケーションで音を途切れなく再生する必要があるため (ループ内の 1 つの音とシーケンス内の複数の音の両方)、FMOD ライブラリを使用し始めました。誰でも正しい方法を教えてもらえますか? 例に基づいて何かを作成しようとしましたが、機能したいように機能しません。まず、再生中に音をループさせるかどうかを設定しようとすると、

if (value)  
    sound1.setMode(FMOD.MODE.LOOP_NORMAL);
else 
    sound1.setMode(FMOD.MODE.LOOP_OFF);

何も起こっていません。再生を開始する前に、モードを設定した場合にのみ正常に動作します。

2 番目の問題は、サウンドが最後に達したことをどのように通知できるかということです。私はこのようにしようとしました:

channel.setCallback(eofCallback);

ここで、eofCallback は SoundEndCallback への参照です

    private FMOD.RESULT SoundEndCallback(IntPtr channelraw, FMOD.CHANNEL_CALLBACKTYPE type, IntPtr commanddata1, IntPtr commanddata2)
    {
        FMOD.RESULT result;

        if (type == FMOD.CHANNEL_CALLBACKTYPE.END)
        {
            //logic here
        }
        return FMOD.RESULT.OK;
    }

しかし、このコールバックは、トラックが終了したときではなく、チャネルで手動で stop() を呼び出したときにのみ到達します。

または、最終的に、必要なものを簡単に提供してくれる他のライブラリを知っていますか? 私は FMOD を選びました。これは非常に人気があるためですが、昔ながらの C++ のようなコーディング方法 (イベントなし、例外なしなど) は好きではありません。

4

2 に答える 2

1

そして、2番目の質問に対する答えがあります。通知を受け取るには、最初に前述のようにコールバックを設定する必要があり、その後、System.update()メソッドを使用する必要があります(ループで定期的に呼び出す必要があります)。これは一種のポーリングです、

于 2011-09-08T09:42:01.517 に答える
0

実行時にサウンドのループ モードを設定するには、Channel::setMode を使用します。Sound::setMode は、そのサウンドから再生されるチャンネルのデフォルトを設定するのと似ています (現在再生中のサウンドには影響しません)。

Channel::setCallback に関しては、定期的に System::update を呼び出して、サウンドの再生などのイベントに対してコールバックが発生するようにしてください。

于 2011-09-07T23:35:21.627 に答える