目录

音频渲染的自定义调度

音频渲染线程

在默认情况下,Wwise 声音引擎在名为AK::EventManager 的专门线程中执行所有命令处理和音频渲染,该线程由AkPlatformInitSettingsthreadLEngine 参数控制。调用 AK::SoundEngine::RenderAudio 表明游戏帧结束,线程可以处理完自上次调用 RenderAudio 以来的所有 API 命令。

AkInitSettings::bUseLEngineThread 设置为false 会禁止此线程,使 RenderAudio 同步执行命令处理和音频渲染(如需要)。音频输出的实际速度仍由音频终端控制。如果 RenderAudio 调用间隔时间短于 AkInitSettings::uNumSamplesPerFrame 和输出采样率确定的缓冲周期,则某些 RenderAudio 调用将跳过音频渲染部分。相反,如果 RenderAudio 调用间隔时间长于输出缓冲周期,RenderAudio 一次可能会处理多个缓冲区,造成 CPU 占用上的尖峰,并可能最终导致音频卡顿。

在禁用音频渲染线程时,不得从 RenderAudio 调用方的同一线程同步调用 AK::SoundEngine::LoadBankAK::SoundEngine::UnloadBank API:这些调用可能会阻塞线程,直到能有一个音频缓冲区被渲染来完成 Stop(停止播放)操作并释放 SoundBank 媒体条件下才能解除阻塞,而如果不是并发调用 RenderAudio,则不可能等到有这种条件。

当将AkInitSettings::bUseLEngineThread设定为False时(这种情况是因为STA的使用),CoInitializeEx()需要从调用AK::SoundEngine::Render()的线程中调用。

并行执行音频渲染任务

在默认情况下,Wwise 声音引擎会在音频渲染线程中执行 Bus(总线)和 Voice(声部)处理。

您可以通过 AkInitSettings::taskSchedulerDesc 来并行处理各项 Bus 和 Voice 任务。Wwise 会针对任意一组可安全并发执行的任务调用 AkTaskSchedulerDesc::fcnParallelFor 回调。此请求可传给游戏端任务计划程序,以此为各个工作线程指派执行范围。

注解:
在启动并行执行时,同时运行的任务计划程序线程会生成部分 AK::SoundEngine 回调。
有些插件可能不支持并行执行。