C# 可以将SoundEffectInstance用作背景音乐吗?

C# 可以将SoundEffectInstance用作背景音乐吗?,c#,audio,monogame,playback,C#,Audio,Monogame,Playback,我想这样做的原因是能够分层的背景音乐。(例如,简单的歌曲开始播放,播放器触发某些东西,添加一种乐器)。我可以解决时间问题,如果有的话 我想我可以用MediaPlayer/Song做到这一点,但它不起作用 我真正想要的是使用SoundEffectInstance的缺点 p、 我不使用XACT,因为我最终会改用单游戏 谢谢事实上,这就是为什么 但它也有局限性,具体取决于游戏运行的平台: 在Windows Phone上,一个游戏最多可玩16次 SoundEffectInstance实例一次,在所有加载

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

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

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

p、 我不使用XACT,因为我最终会改用单游戏

谢谢

事实上,这就是为什么

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

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

哦,顺便说一句,我已经很久没有玩XNA了,但是我很确定XACT工具在它的生命周期结束时不再是必需的。
我似乎记得,您可以将mp3加载到内容文件夹中,并通过
SoundEffectInstance
对象播放它。

事实上,我认为您会发现将类与类结合使用是播放背景音乐的推荐方式

提供播放、暂停、恢复和停止歌曲的方法和属性。MediaPlayer还公开了洗牌、重复、音量、播放位置和可视化功能

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

此外,在MonoGame中,这些类是通过围绕完成相同任务的特定于平台的类来实现的。例如,在Android上,SoundEffectInstance使用Android SoundPool(用于声音效果),MediaPlayer使用Android MediaPlayer(用于音乐)。请参见MonoGame论坛上的参考

slygamer说:MediaPlayer用于背景音乐,SoundEffect用于音效,这就是它的设计用途


谢谢你的回复!我刚刚尝试使用.mp3格式的SoundEffect/SoundEffectInstance,但没有成功。虽然我可以把.mp3转换成.wav,所以我觉得这没什么大不了的。同时感谢您提供的音效限制信息。我有一个Ambience2D类,它经常在附近播放环境效果。如果我打算发布手机/控制台,我必须记住这一点。(我假设Windows没有限制,其他桌面平台也没有限制(单游戏版))。我不认为这就是它的真正用途。SoundEffectInstance位于未压缩的内存中,因此可以立即播放。因此,相对于MP3,它占用了大量的空间。音乐类根据需要进行解压缩和流式处理,大大减少了RAM的使用量。我会说“视情况而定”,但我不会默认在音乐中使用未压缩的音效。谢谢你的回复。正如我在帖子中所说,我希望能够将不同的仪器分层,并在地图中的不同位置激活它们。为此,我尝试使用MediaPlayer+歌曲,但由于MediaPlayer是静态的,一次只能播放一首歌曲。我已经用SoundEffectInstance测试了代码,到目前为止效果很好。没问题。我回答你问题的标题时没有仔细阅读细节,这是我的错。无论如何,我认为这些信息对其他人仍然有用。干杯