【问题标题】:FMOD gapless loop and sequence playbackFMOD 无间隙循环和序列播放
【发布时间】:2011-09-07 15:06:19
【问题描述】:

我开始使用 FMOD 库,因为我需要在 C# 应用程序中播放没有间隙的声音(循环中的一个声音和序列中的多个声音)。谁能告诉我正确的方法吗?我尝试根据示例制作一些东西,但它并没有像我希望的那样工作。 首先,当我尝试设置声音是否循环播放时,

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

什么都没有发生。只有在我开始播放之前设置模式时,它才能正常工作。

第二个问题是:如何通知我声音已经结束?我试着这样做:

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++ 式编码方式(无事件、无异常等)。

【问题讨论】:

    标签: c# loops sequence fmod


    【解决方案1】:

    我有第二个问题的答案:要获得通知,您必须首先设置回调,如前所述,然后您必须使用 System.update() 方法(它必须在循环中定期调用)。这是一种轮询,

    【讨论】:

      【解决方案2】:

      要在运行时使用 Channel::setMode 设置声音的循环模式,Sound::setMode 就像为从该声音播放的任何通道设置默认值(它不会影响当前播放的声音)。

      对于 Channel::setCallback,请确保您定期调用 System::update 以让回调触发诸如声音播放到结束之类的事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多