2010-09-17 143 views
0

我最近在XNA框架下的“Song”类下加载了我的游戏音频。XNA MediaPlayer.Volume setter极其缓慢

一切似乎工作正常,直到我决定增加可能性来改变歌曲的音量,使用MediaPlayer.Volume设置。

但是,当我第一次尝试更改音量时,它会慢慢地运行真的(如3到4秒,这对于音量更改而言相当多)。之后,当我尝试再次改变音量时,音量立即改变。

基本上,我有三个音量级别选择: ...所以我的问题是,可能不是因为我改变音量过于频繁或太快。

我只想知道你们中的任何人是否知道MediaPlayer.Volume何时需要更多时间才能运行,因此我可以检查问题出在哪里。

回答

2

如果您身边的Google会发现MediaPlayer存在很多性能问题。而且他们通常依赖于您正在运行的系统。这是由于它在幕后使用Windows Media Player(在Windows上)。

这里是减轻性能问题的几种方法:

  • 切勿从MediaPlayer的读值(例如:音量 - 这包括使用+=设置它)。存储实际值并且只分配给它。
  • 由于上述原因,请使用状态更改事件来接收状态更改通知。
  • 将MediaPlayer类的使用放在一个单独的线程上(ThreadPool在Windows上就足够了) - 这就解决了它阻塞主线程的情况(其中大部分都是这样,但在少数系统上它可以阻止整个进程或整个系统)。
  • 让问题消失的唯一可靠方法是根本不使用MediaPlayer。你可以把你的音乐放入XACT并压缩它(我想你也可以使用SoundEffect)。

如果我不得不猜测(和我做) - 我会说移动你的音量变化到另一个线程将解决你的问题。

+0

非常感谢您的回答!相反,我肯定会改用XACT。 – 2010-09-17 11:53:03

+0

请注意,这会消除用户在Xbox上播放自己的音乐的自动处理功能。 – 2010-09-17 14:21:07