gpt4 book ai didi

c# - 如何尽快播放声音?

转载 作者:太空狗 更新时间:2023-10-29 23:17:03 25 4
gpt4 key购买 nike

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

最佳答案

SoundEffect 包含实际的波形数据。它会占用大量内存(与波形数据所需的一样多)。

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

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

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


如果您尝试通过将不同的音效混合在一起来播放序列音乐,即使 5 毫秒也很重要,您需要使用 DynamicSoundEffectInstance 实现您自己的混音器。这将确保声音与样本同步。


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

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

关于c# - 如何尽快播放声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com