FMOD无间隙循环和序列回放

时间:2011-09-07 15:06:20

标签: c# loops sequence fmod

我开始使用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,因为它非常受欢迎,但我不喜欢它的oldschool C ++ - 就像编码方式一样(没有事件,没有例外等)。

2 个答案:

答案 0 :(得分:1)

我已经回答了第二个问题:要获得通知你必须首先设置前面提到的回调,之后你必须使用System.update()方法(必须在循环中定期调用它) )。这是一种民意调查,

答案 1 :(得分:0)

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

对于Channel :: setCallback,请确保定期调用System :: update,以便为播放到最后的声音等事件触发回调。