2011-09-07 109 views
2

我开始使用FMOD库,因为我需要在C#应用程序中无间隙地播放声音(循环中的一个声音和序列中的许多声音)。任何人都可以告诉我正确的方法吗?我尝试了基于示例做出一些事情,但它不工作,因为我希望它能够工作。 首先,当我尝试设置,如果声音循环播放,在影片播放,FMOD无间断循环和序列播放

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

没有是怎么回事。在我开始播放之前,当我设置th模式时,它只能正常工作。

第二个问题是:我怎么能通知声音已达到结束?我试图做这样说:

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; 
    } 

但也只能达到这个回调时,我手动调用停止()的通道,轨道末端而不是当。

或者最终你知道任何其他图书馆,可以轻松地给我我需要什么吗?我选择了FMOD,因为它非常流行,但我不喜欢它的老式C++ - 比如编码方式(没有事件,没有例外等)。

回答

0

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

至于Channel :: setCallback,请确保定期调用System :: update以使回调触发事件,如声音播放到最后。

1

我有第二个问题的答案:要得到通知你必须先设置回调,如前所述,之后,你必须使用System.update()方法(它必须定期调用循环)。这是一种民意测验,