ASoundEffect
包含实际波形数据。它会占用大量内存(波形数据需要多少内存)。
ASoundEffectInstance
是一个小对象,包含有关播放的数据(位置、音量等)以及已分配用于播放的“语音”的句柄。
当您使用时SoundEffect.Play
,它会在内部创建一个SoundEffectInstance
. 它还可以池化这些实例 - 因此不需要在后续调用中重新创建它们。
创建一个SoundEffectInstance
需要一些时间和内存。对于以 30FPS(每帧 33 毫秒)运行的游戏中的音效,所涉及的延迟应该是难以察觉的。
如果您尝试通过混合不同的音效来播放排序的音乐,即使 5 毫秒也很重要,您需要使用DynamicSoundEffectInstance
. 这将确保声音与样本同步。
如果您正在尝试创建某种实时可演奏的“乐器”,并且您正在尝试将输入到输出延迟降低至 5 毫秒 - 那么现在就放弃吧。5 毫秒是非常好的,通常需要专业的设备和软件。
不过,如果您需要尽可能减少输入到输出的延迟,您可以比每帧一次更频繁地轮询输入。您可能仍然应该使用 DSEI。我不确定 DSEI 是否具有可配置的播放缓冲区大小,但如果有,您应该使其尽可能小,而不会引入音频故障。