C# 如何检查是否正在播放音效(循环播放BG歌曲)

C# 如何检查是否正在播放音效(循环播放BG歌曲),c#,windows-phone-7,xna-4.0,soundeffect,C#,Windows Phone 7,Xna 4.0,Soundeffect,这是我目前正在进行的设置。鉴于此,我如何判断音乐音效何时结束?我正在运行一个每秒循环几次的游戏循环,我最终想要循环这首歌 using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; SoundEffect _BGMUSIC; public Page1() { ... LoadSound("sfx/piano.wav", out _BGMUSIC); ... }

这是我目前正在进行的设置。鉴于此,我如何判断音乐音效何时结束?我正在运行一个每秒循环几次的游戏循环,我最终想要循环这首歌

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);
        }
    }

从这段代码看,您似乎刚刚将声音存储在
sound
中,但没有显示在何处实现
sound.Play()
方法。虽然没有可能解决问题的
Sound.IsPlaying
布尔值,但有一个
Sound.Duration
属性可用于解决问题,特别是如果您将其与
计时器
(可串联使用以设置标志以显示声音是否正在播放)结合使用


还有一个我从未使用过的东西,就是
Sound.IsDisposed
属性。我肯定也会研究它,因为它可能正是您要找的东西。

好吧,所以这个问题的答案实际上非常简单,并且在Microsoft的MSDN页面中很好地概括了(这一次)

为了实现上面提到的功能,您需要执行以下操作

创建一个全局SoundEffectInstance

 SoundEffectInstance _BGMUSICINSTANCE;
在我的示例中,我在main方法中初始化SoundEffect,因此在它下面我想初始化SoundEffectInstance。

_BGMUSICINSTANCE = _BGMUSIC.CreateInstance();
现在实例已加载并准备就绪,我们可以将其循环属性设置为true。您也可以在main方法中或任何您想要的地方执行此操作。它是一个全局的

 _BGMUSICINSTANCE.IsLooped = true;
最后播放歌曲

 _BGMUSICINSTANCE.Play();
参考页

声音效果在完成后不会被处理。如果是,您必须在每次调用Soundeffect.Play()后重新加载它们。另外,已经有一个游戏计时器在运行,所以我认为使用秒不是很有效。谢谢你的回答。我知道Duration属性,但我不知道如何使用它,这基本上就是这个问题的全部内容。虽然没有特别说明。在声音播放时间内是否使用原始计时器?Beca使用你可以“借用”它,或者只记下它的值,并将其与持续时间值进行比较。是和否。游戏时间正在运行,但音乐在计时器启动后开始。因此,你可以在播放歌曲时使用计时器的值吗?计时器是否有可能完全停止?是的,为了提高效率,有一些要点游戏计时器停止,因为不需要。(这是一个silverlight游戏)你找到这个问题的解决方案了吗?我仍然没有解决方案