如何尽快播放声音?

xan*_*r27 5 .net c# audio xna windows-phone-7

我的应用程序中有大约60个声音样本.我必须及时准确地发挥它.5ms将完成.必须播放声音以响应用户操作.所以我不知道接下来会播放什么声音.我想大声地为所有声音预先创建了SoundEffectInstance.创建SoundEffectInstance会占用任何时间和内存吗?它是SoundEffect在内存中的完整副本还是只是一些指针信息.如果我要预先创建SoundEffectInstances,我可以改进我的应用程序吗?有没有其他方法可以在XNA中尽快播放样本?

And*_*ell 3

ASoundEffect包含实际波形数据。它会占用大量内存(波形数据需要多少内存)。

ASoundEffectInstance是一个小对象,包含有关播放的数据(位置、音量等)以及已分配用于播放的“语音”的句柄。

当您使用时SoundEffect.Play,它会在内部创建一个SoundEffectInstance. 它还可以池化这些实例 - 因此不需要在后续调用中重新创建它们。

创建一个SoundEffectInstance需要一些时间和内存。对于以 30FPS(每帧 33 毫秒)运行的游戏中的音效,所涉及的延迟应该是难以察觉的。


如果您尝试通过混合不同的音效来播放排序的音乐,即使 5 毫秒也很重要,您需要使用DynamicSoundEffectInstance. 这将确保声音与样本同步。


如果您正在尝试创建某种实时可演奏的“乐器”,并且您正在尝试将输入到输出延迟降低至 5 毫秒 - 那么现在就放弃吧。5 毫秒是非常好的,通常需要专业的设备和软件。

不过,如果您需要尽可能减少输入到输出的延迟,您可以比每帧一次更频繁地轮询输入。您可能仍然应该使用 DSEI。我不确定 DSEI 是否具有可配置的播放缓冲区大小,但如果有,您应该使其尽可能小,而不会引入音频故障。