如何检查音效是否正在播放(循环播放BG歌曲)
以下是我现在正在播放的设置。鉴于此,我怎么知道_BGMusic SoundEfect何时结束?我正在运行一个游戏循环,每秒循环几次,我最终想要循环播放这首歌曲。如何检查音效是否正在播放(循环播放BG歌曲)
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
SoundEffect _BGMUSIC;
public Page1() {
...
LoadSound("sfx/piano.wav", out _BGMUSIC);
...
}
private void LoadSound(String SoundFilePath, out SoundEffect Sound) {
// For error checking, assume we'll fail to load the file.
Sound = null;
try {
// Holds informations about a file stream.
StreamResourceInfo SoundFileInfo =
App.GetResourceStream(new Uri(SoundFilePath, UriKind.Relative));
// Create the SoundEffect from the Stream
Sound = SoundEffect.FromStream(SoundFileInfo.Stream);
FrameworkDispatcher.Update();
} catch (NullReferenceException) {
// Display an error message
MessageBox.Show("Couldn't load sound " + SoundFilePath);
}
}
好吧所以这个问题的答案实际上非常简单,并且在微软的MSDN页面中很好地概述了(一次)
要实现它与我目前上面的目前你需要做到以下几点。
创建一个全局SoundEffectInstance
SoundEffectInstance _BGMUSICINSTANCE;
在我的例子我初始化SoundEffect中在我的主要方法,因此它下面我想初始化SoundEffectInstance。
_BGMUSICINSTANCE = _BGMUSIC.CreateInstance();
现在该实例被加载并准备好,我们可以将其循环属性设置为true。您也可以在主要方法中或您想要的任何位置执行此操作。这是一个全球性的
_BGMUSICINSTANCE.IsLooped = true;
最后播放的歌曲
_BGMUSICINSTANCE.Play();
参考页 http://msdn.microsoft.com/en-us/library/dd940203(v=xnagamestudio.31).aspx
从这个代码,它看起来像你刚才保存的声音在Sound
但你不显示在您实现Sound.Play()
方法。虽然没有Sound.IsPlaying
布尔值可能会解决您的问题,但有一个Sound.Duration
属性可用于解决您的问题,尤其是如果您将它与Timer
(可以串联使用以将标志设置为显示声音是否被打。
而且这是我从来没有使用过,但just found是Sound.IsDisposed
财产。我肯定会考虑这个问题,以及因为这可能正是你在找什么。
完成后不会处理声音效果。如果他们是你每次调用Soundeffect.Play()后都必须重新加载它们。此外还有一个游戏计时器正在运行,所以我不认为使用第二个游戏会非常有效。感谢您的答复。 我知道持续时间属性,但我不知道如何使用它,这基本上是这个问题的全部。虽然没有具体说明。 – 2013-03-02 18:38:00
在声音播放时间内是否使用原始定时器?因为你既可以“借”它,也可以只记下它的价值并将其与持续时间值进行比较。 – tmwoods 2013-03-02 18:40:22
是的,没有。游戏时间正在运行,但是定时器启动后音乐开始播放。 – 2013-03-02 18:41:24
你有没有找到解决这个问题呢? – tmwoods 2013-03-06 16:05:19
我还没有解决方案 – 2013-03-06 16:37:42