Wwise SDK 2021.1.14
|
在默认情况下,Wwise 声音引擎在名为AK::EventManager
的专门线程中执行所有命令处理和音频渲染,该线程由AkPlatformInitSettings::threadLEngine 参数控制。调用 AK::SoundEngine::RenderAudio
表明游戏帧结束,线程可处理自上次调用 RenderAudio
以来的所有 API 命令。
将 AkInitSettings::bUseLEngineThread
设为 false
会禁用此线程,促使 RenderAudio
同步执行命令处理和音频渲染(如有必要)。音频输出的实际速度仍由音频终端控制。若 RenderAudio
调用间隔短于 AkInitSettings::uNumSamplesPerFrame
和输出采样率限定的缓冲周期,则有些 RenderAudio
调用将跳过音频渲染部分。相反,若 RenderAudio
调用间隔长于输出缓冲周期,则 RenderAudio
可能会一次处理多个缓冲区,导致出现 CPU 用量峰值,并可能最终造成音频卡顿。
启用离线渲染会禁止音频线程异步执行命令处理和音频渲染。每次调用 RenderAudio
时渲染的音频数量取决于发给 AK::SoundEngine::SetOfflineRenderingFrameTime
的非零正值。零值或负值会强制 RenderAudio
精准处理一个音频缓冲区。
注意: 在禁用音频渲染线程或启用离线渲染时,不得从 RenderAudio 调用方的同一线程同步调用 AK::SoundEngine::LoadBank 和 AK::SoundEngine::UnloadBank API。因为这些调用可能会阻塞线程,直到有音频缓冲区被渲染来完成 Stop 操作并释放 SoundBank 媒体(只有并发调用 RenderAudio 才能实现)。 |
在 Microsoft 平台上,由于使用了单线程单元 (STA) 并发模型,在将 AkInitSettings::bUseLEngineThread
设为 false
时,必须从调用 AK::SoundEngine::RenderAudio
的同一线程调用 CoInitializeEx()
。
有些 AK::SoundEngine::Query 函数可能会导致 CPU 用量突然增加。为了最大限度地减少 CPU 用时并确保最佳性能,建议遵守以下准侧:
在默认情况下,Wwise 声音引擎会在音频渲染线程中执行 Bus(总线)和 Voice(声部)处理。
您可以通过 AkInitSettings::taskSchedulerDesc
来并行处理各项 Bus 和 Voice 任务。Wwise 会针对任意一组可安全并发执行的任务调用 AkTaskSchedulerDesc::fcnParallelFor
回调。此请求可传给游戏端任务计划程序,以此为各个工作线程指派执行范围。
备注: 在启动并行执行时,同时运行的任务计划程序线程会生成部分 AK::SoundEngine 回调。 |
备注: 有些插件可能不支持并行执行。 |