2013-03-02 159 views
0

以下是我现在正在播放的设置。鉴于此,我怎么知道_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); 
     } 
    } 
+0

你有没有找到解决这个问题呢? – tmwoods 2013-03-06 16:05:19

+0

我还没有解决方案 – 2013-03-06 16:37:42

回答

0

好吧所以这个问题的答案实际上非常简单,并且在微软的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

0

从这个代码,它看起来像你刚才保存的声音在Sound但你不显示在您实现Sound.Play()方法。虽然没有Sound.IsPlaying布尔值可能会解决您的问题,但有一个Sound.Duration属性可用于解决您的问题,尤其是如果您将它与Timer(可以串联使用以将标志设置为显示声音是否被打。

而且这是我从来没有使用过,但just foundSound.IsDisposed财产。我肯定会考虑这个问题,以及因为这可能正是你在找什么。

+0

完成后不会处理声音效果。如果他们是你每次调用Soundeffect.Play()后都必须重新加载它们。此外还有一个游戏计时器正在运行,所以我不认为使用第二个游戏会非常有效。感谢您的答复。 我知道持续时间属性,但我不知道如何使用它,这基本上是这个问题的全部。虽然没有具体说明。 – 2013-03-02 18:38:00

+0

在声音播放时间内是否使用原始定时器?因为你既可以“借”它,也可以只记下它的价值并将其与持续时间值进行比较。 – tmwoods 2013-03-02 18:40:22

+0

是的,没有。游戏时间正在运行,但是定时器启动后音乐开始播放。 – 2013-03-02 18:41:24