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游戏)你找到这个问题的解决方案了吗?我仍然没有解决方案