如何检查声音效果是否正在播放(循环播放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);
}
}
从这段代码来看,您似乎刚刚将声音存储在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