11

我需要一种在声音仍在播放时启动/停止循环的方法。我发现一起播放多个声音的最佳方法是使用 XNA。因此,我从包含音频剪辑的对象创建了一个SoundEffectInstance起点。SoundEffect现在的问题是我有一个按钮,它应该将此剪辑的状态从“循环”更改为“非循环”,反之亦然。

这就是问题所在:它抛出一个异常,说必须在第一次播放之前设置循环。所以我认为,从“非循环”切换到“循环”时,我可以等待声音停止,然后重新创建SoundEngineInstance, 设置IsLooped = true并让它重新开始。这一个有效,但是有一些延迟,这会让你失去时间,所以它毫无用处。

我正在寻找的是一种在播放声音时设置或取消设置循环并且没有任何延迟的方法。

编辑:

我尝试使用两个SoundEngineInstance,一个循环,一个不循环,并简单地使用音量在它们之间切换。问题是非循环的片段在第一次播放后就停止了,所以如果我循环它两次然后我把它放到非循环状态,因为非循环的剪辑已经结束,所以没有声音播放!

建议?

4

2 回答 2

2

我有同样的问题,我使用了两个具有相同音频剪辑的实例来解决它,一个带有循环,一个没有它。我在两者之间切换。这可能不是最好的解决方案,但它对我有用。

于 2013-02-05T06:08:29.627 回答
0

来自http://msdn.microsoft.com/en-us/library/dd940203(v=xnagamestudio.31).aspx

  1. 使用如何:播放声音中所示的方法声明 SoundEffect。

  2. 声明一个 SoundEffectInstance,并将其设置为 SoundEffect.CreateInstance 的返回值。

  3. 将 SoundEffectInstance.IsLooped 设置为 true。

  4. 调用 SoundEffectInstance.Play 播放循环声音。

当您不再希望它循环时,您可以将 IsLooped 设置为 false,而只是播放到最后。

于 2013-02-06T14:39:08.827 回答