在第一个完成后播放第二个SoundEffect

时间:2011-04-22 18:35:03

标签: c# audio

在我的应用中,我正在使用SoundEffect播放一些声音。我想知道是否有一种方法可以知道SoundEffect何时完成其运行,所以第二个将立即开始。

3 个答案:

答案 0 :(得分:2)

据我所知,XNA不支持这种情况。

SoundEffect类公开了一个 Duration 属性,您可以使用该属性来实现您所追求的目标。

构建一些“SoundManager”类(基本上是一个简单的调度程序),它将完成声音播放的所有奇特协调。

此课程将取消SoundEffect播放,在持续时间过后完全安排下一个播放。

答案 1 :(得分:1)

旧的问题,但我今天必须做同样的事情,我尝试了基于持续时间的方法,但最终停止了自己的解决方案,这对我来说似乎是最简单的:

1)创建静态助手类让我们说'SoundsManager'就像麦角酸的答案一样。

2)创建一个SoundsEffectInstanses队列并播放其中的第一个(下面的代码中为“_sheduledSounds”)。

3)更新每个游戏循环的课程,并检查是否停止了声音实例:

public static void Update()
        {
            if (_sheduledSounds != null && _sheduledSounds.Count > 1)
            {
                if (_sheduledSounds.Peek().State == SoundState.Stopped)
                {
                    _sheduledSounds.Dequeue();
                    _sheduledSounds.Peek().Play();
                }
            }
        }

答案 2 :(得分:0)

设置此项 BufferDescription.GlobalFocus flag = True;

这将告诉SoundEffect完成其运行。