当声音仍在播放时,我需要一种循环 start/stop 循环的方法。我发现一起播放多种声音的最佳方法是使用 XNA。所以我从包含音频剪辑的SoundEffect
对象开始创建SoundEffectInstance
。现在问题是我有一个按钮,应该将此剪辑的状态从“循环”更改为“非循环”,反之亦然。
这是问题:它抛出一个异常,说必须在第一次播放之前设置循环。所以我想,在从“非循环”切换到“循环”时,我可以等待声音停止,然后重新创建SoundEngineInstance
,设置IsLooped = true
并再次启动它。这个有效,但有一些延迟,这会让你失去你的时间,所以这是无用的。
我正在寻找的是一种在播放声音时设置或取消设置循环的方法,没有任何延迟。
编辑:
我尝试使用两个SoundEngineInstance
,一个循环和一个循环,只需使用卷在它们之间切换。问题是非循环播放只是在第一次播放后停止,所以如果我将它循环两次然后我将其置于非循环状态,则不会播放声音,因为非循环剪辑已经结束!
建议?
2 回答
我有相同的问题,我使用两个具有相同音频剪辑的实例来解决它,一个带有循环,另一个带有循环。我换了两个。这可能不是最好的解决方案,但它对我有用。
来自http://msdn.microsoft.com/en-us/library/dd940203(v=xnagamestudio.31).aspx:
使用如何:播放声音中显示的方法声明 SoundEffect。
声明一个 SoundEffectInstance,并将其设置为 SoundEffect.CreateInstance 的返回值。
将 SoundEffectInstance.IsLooped 设置为 true。
调用 SoundEffectInstance.Play 播放循环声音。
当你不再希望它循环时,你可以将 IsLooped 设置为 false,但只能播放到最后。