2013-03-02 67 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