menu
 
版本
2024.1.5.8803

2024.1.5.8803

2023.1.13.8732

2022.1.19.8584

2021.1.14.8108

2019.2.15.7667

2019.1.11.7296

2018.1.11.6987

2017.2.10.6745

2017.1.9.6501

2016.2.6.6153

2015.1.9.5624

menu

Audio command queue is full, blocking caller. Reduce number of calls to sound engine or boost command queue memory.

“音频命令队列已满,调用程序被阻止。请减少声音引擎调用或增大命令队列内存”。音频命令队列是一种将所有 API 调用从游戏传递至内部声音引擎的机制。在 Performance Monitor(性能监控器)视图中,可监控此内存缓冲区。在此缓冲区装满命令后,将暂时阻止游戏线程继续添加其他命令。这样做是为了避免因 API 调用丢失而导致游戏和声音引擎之间出现同步问题。不过这可能会造成游戏帧率出现短暂的下降。

可能的原因:

  • 单个游戏帧中的 API 执行的调用太多。这是报告此错误时最常见的原因。该问题通常是由 SetPosition SetRTPCValue SetSwitch 等函数的冗余调用造成的。此外,若在启动实际游戏进程之前设置关卡、创建大量 Game Object(游戏对象)、设置位置和 RTPC,也会出现此问题。

  • 所执行的 API 调用包含大量参数数组,需要占用很大内存(如 SetMultiplePositions 或 Spatial Audio 几何构造调用)。

  • 音频处理线程非常繁忙,导致无法处理命令。在这种情况下,会同时出现 Voice Starvation(声部匮乏)错误。

  • 音频处理线程被阻止或锁死。这表示游戏或 Wwise 出现了问题。

推荐的解决步骤:

  • 分析游戏执行的 API 调用:打开 Profiler Settings (Alt-G),并启用 API Calls(API 调用)。这样可以识别哪个游戏进程在向队列大量输送 API 调用。

  • 检查游戏中 Wwise 的 Game Sync(游戏同步器)更新方式,包括 State(状态)、Switch(切换开关)、Game Parameter(游戏参数)。仅在必要时更新这些参数。

  • 在游戏帧内添加 AK::SoundEngine::RenderAudio 调用,以便将游戏帧拆分为多个音频帧。RenderAudio 只作为同一游戏帧内一系列 API 调用的结束位置标记。它会触发音频命令队列处理,并更新内部声音引擎状态。但是,该函数调用并不会渲染实际的音频。

  • 确保音频处理线程拥有足够高的 CPU 处理优先级(线程名为 AK::EventMgrThread,其优先级由 AkPlatformInitSettings::threadLEngine 设定)。若是因此造成的问题,则游戏会同时出现大量 Voice Starvation 错误。

  • 将调试器连接至游戏,并确认线程(即 AK::EventMgrThread)确实在运行。若未运行,则表示游戏已丢失所有声音。出现此问题时,请联系 Audiokinetic 技术支持部门。

  • 增大命令队列内存(请参阅 AkInitSettings::uCommandQueueSize )。


此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅