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

本文关键字:播放 循环 歌曲 BG 是否 音效 何检查 检查 声音 | 更新日期: 2023-09-27 18:01:57

这是我目前正在滚动的设置。鉴于此,我怎么知道_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);
        }
    }

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

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

还有一些我从未使用过,但刚刚发现的是Sound.IsDisposed属性。我肯定也会研究一下这个,因为它可能正是你要找的。

好了,这个问题的答案其实很简单,在微软的MSDN页面上有很好的概述(仅此一次)。

要实现它与我上面目前你需要做以下事情。

创建全局的SoundEffectInstance

 SoundEffectInstance _BGMUSICINSTANCE;

在我的例子中,我在main方法中初始化了SoundEffect所以在它下面我想初始化SoundEffectInstance

_BGMUSICINSTANCE = _BGMUSIC.CreateInstance();

现在实例已经加载好了,我们可以将它的loop属性设置为true。你也可以在main方法或任何你想要的地方这样做。它是一个全局

 _BGMUSICINSTANCE.IsLooped = true;

最后播放歌曲

 _BGMUSICINSTANCE.Play();

引用页面http://msdn.microsoft.com/en-us/library/dd940203 (v = xnagamestudio.31) . aspx