【问题标题】:Audio looping with XNA on Windows Phone 8 while the sound is still playing当声音仍在播放时,在 Windows Phone 8 上使用 XNA 进行音频循环
【发布时间】:2012-12-30 00:38:26
【问题描述】:

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

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

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

编辑:

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

建议?

【问题讨论】:

  • 既然你想让声音循环播放,你会说它更像一首歌而不是SoundEffect吗?
  • 我有一些短样本,我希望将它们循环播放。我说的是SoundEffect,因为这是我用于播放的 XNA 类。

标签: c# audio xna visual-studio-2012 windows-phone-8


【解决方案1】:

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

【讨论】:

  • 这是个好主意,但我不能使用它!每次我想要的时候,我都需要循环启动/停止。这意味着如果剪辑正在播放循环并且我决定停止循环,则剪辑必须结束而不仅仅是停止。使用您的解决方案,我需要一些东西来查看我在循环剪辑中的位置,停止循环剪辑并在前一个停止时让另一个开始。 (抱歉没说清楚!)
【解决方案2】:

来自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,而只是播放到最后。

【讨论】:

  • 问题不在于循环播放声音,而是在播放时更改其状态。这意味着在调用 SoundClip.Stop() 或剪辑结束之前使其循环/取消循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多