将SoundEffectInstance用于背景音乐是​​否可以接受?

时间:2014-11-10 14:45:47

标签: c# audio monogame playback

我想要这样做的原因是能够分层背景音乐。 (例如,简单的歌曲开始播放,播放器触发某些内容,添加乐器)。我可以解决时间问题,如果有的话。

我以为我可以用MediaPlayer / Song做到这一点,但它不会起作用。

我真正想要的是使用SoundEffectInstance的缺点。

p.s,我不会使用XACT,因为我最终会转到MonoGame。

由于

2 个答案:

答案 0 :(得分:2)

实际上,那是SoundEffectInstance的用途!

但它有局限性,具体取决于游戏运行的平台:

  

在Windows Phone上,游戏总共最多可以播放16个   一次SoundEffectInstance实例,跨所有加载组合   SoundEffect对象。加载总数的唯一限制   SoundEffectInstance和SoundEffect对象是可用内存。   但是,用户一次只能播放16种音效。尝试   播放超出此限制的SoundEffectInstance将失败。在Windows上,   没有硬性限制。玩太多的实例可能会导致   性能下降。在Xbox 360上,限制是300音效   实例加载或播放。如果需要,请处置旧实例   更多。

哦,顺便说一句,自从我玩XNA以来已经很长时间了,但我很确定XACT工具在它的生命周期结束时不再是必需的。 我好像记得你可以在Content文件夹中加载一个mp3并通过SoundEffectInstance对象播放它。

答案 1 :(得分:1)

实际上,我认为您会发现使用MediaPlayer课程结合Song课程是推荐播放背景音乐的方式。

  

提供播放,暂停,恢复和停止歌曲的方法和属性。 MediaPlayer还可以显示随机播放,重复播放,音量播放位置和可视化功能。

认为的主要区别在于MediaPlayer可以将数据流式传输到内存中,而不是一次性加载所有内容。因此,对于长时间播放音乐曲目,这是可行的方法。

此外,在MonoGame中,这些类是通过包装执行相同操作的平台特定类来实现的。例如,在Android上,SoundEffectInstance使用Android SoundPool(用于声音效果),MediaPlayer使用Android MediaPlayer(用于音乐)。请参阅MonoGame论坛上的this post以供参考。

   slygamer说:用于背景音乐的MediaPlayer和用于音效的SoundEffect是如何设计使用的。