我正在尝试使用SoundEffect.Play()来理解线程和排队模型,以便我可以准确地计时音符。
声音是否在UI线程上同步播放?或者是用于在正确的时间播放样本的后台线程?
我已经读过我需要调用FrameworkDispatcher.Update()来播放声音,但这是做什么的?
是否有声音队列?如果我在正在播放的SoundEffect上调用play,该怎么办?另一个实例是并行启动,还是当前停止?
至于测序声音,我认为最好的方法是使用后台线程和Thread.Sleep()来确保我在正确的时间醒来播放下一个“音符”。或者有更好的方法来解决这个问题吗?
答案 0 :(得分:1)
SoundEffects以异步方式播放。这就是为什么你可以一次玩很多游戏。
假设您正在Silverlight中创建应用程序,则必须调用FrameworkDispatcher.Update()
(通常每秒20次),因为SoundEffect
来自XNA框架并且期望基础游戏循环作为它的执行模型。重复调用FrameworkDispatcher.Update()
可以模拟这一点。
在ApplicationLifeObject
中设置对此的调用是最常见的方式。
在排序声音方面,我会使用计时器并以这种方式触发新声音,而不是通过Thread.Sleep
进行大量调用。