2013-01-15 59 views
11

我需要一种在声音仍在播放时启动/停止循环的方式。我发现一起播放多种声音的最佳方式是使用XNA。所以我从包含音频片段的SoundEffect对象开始创建了一个SoundEffectInstance。 现在的问题是,我有一个按钮,应该将此剪辑的状态从“循环”更改为“非循环”,反之亦然。当声音仍在播放时,在Windows Phone 8上使用XNA进行音频循环播放

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

我在寻找的是一种在播放声音时设置或取消设置循环的方式,无需任何延迟。

编辑:

我试图使用两个SoundEngineInstance,一个环和一个不和使用该体积在它们之间简单地切换。 问题在于第一次播放后非循环播放停止,所以如果我循环播放两次然后我将它放到非循环播放状态,就没有声音播放,因为非循环播放片段已经结束了!

对此提出建议?

+0

既然你想让声音循环,你会说它更像是一首歌,而不是'SoundEffect'吗? – ChiefTwoPencils

+0

我有一些简短的样本,我希望它们成圈。我正在讨论'SoundEffect',因为这是我用于播放的XNA类。 – StepTNT

回答

2

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

+0

这是一个不错的主意,但我无法使用它! 我需要循环来启动/停止每次我想要的。这意味着如果剪辑正在播放一个循环,并且我决定停止循环,剪辑必须结束,而不是停止。用你的解决方案,我需要一些东西来看看我在环状剪辑中的位置,停止环状剪辑,并在另一个停止时启动另一个。 (对不起,不太清楚!) – StepTNT

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,但只能播放到最后。

+0

问题不在于循环播放声音,而是在播放时改变其状态。这意味着在调用'SoundClip.Stop()'之前或在剪辑结束之前使其循环/不循环。 – StepTNT