首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XAudio2话音池

XAudio2话音池
EN

Stack Overflow用户
提问于 2020-07-28 23:02:48
回答 1查看 244关注 0票数 0

我似乎有些矛盾的信息,我不知道什么是最新的,什么是适当的。

在这个演讲中:https://www.microsoft.com/en-us/download/details.aspx?id=6871

他们建议在应用程序级别集中声音,因为破坏声音是有代价的。

然而,看看https://learn.microsoft.com/en-us/windows/win32/api/xaudio2/nf-xaudio2-ixaudio2-createsourcevoice

它指出:

XAudio2对相同格式的声音使用内部内存池。这意味着当更多的声音被创建并被销毁时,对声音的内存分配将会减少。为了尽量减少实时分配,标题可以预先创建预期的最大话音数,然后根据需要删除它们。然后,的声音将从XAudio2池中重用。内存池绑定到XAudio2引擎实例。

因此,这使我相信我不需要池,因为XAudio2有内部池。然后在另一节:https://learn.microsoft.com/en-us/windows/win32/api/xaudio2/nf-xaudio2-ixaudio2voice-destroyvoice

为了避免阻止DestroyVoice调用的标题线程中断,应用程序可以销毁单独的非关键线程上的声音,或应用程序可以使用语音池策略来重用声音,而不是销毁它们的。请注意,声音只能与具有相同数据格式和与声音一起创建的相同频道数的音频重复使用。通过使用适当的比率参数调用IXAudio2SourceVoice::SetFrequencyRatio,语音可以以与语音不同的采样速率播放音频数据。

这又有关于池的信息,这使得我似乎应该集中声音。有人知道哪些信息是正确的吗?我应该集中声音还是把它留给XAudio2的内部池?

EN

回答 1

Stack Overflow用户

发布于 2020-07-30 05:28:11

这些文档并不是不一致的,但有点微妙。如果您只是创建相同格式的声音,那么在内部它们将被重用,以帮助最小化创建/销毁声音的成本。

但是,您可以在应用程序级别进一步直接重用源声音。它们必须使用相同的基本格式(PCM与ADPCM、比特率和信道计数),但它们可以是不同的采样速率。

例如,请参阅音频DirectX工具包的语音重用代码。

对于游戏来说,你可能也想优先考虑声音,并且使用“盗取声音”来避免同时播放太多声音,这将是一个混乱的过程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63144009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档