버전

menu_open

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

오디오 명령 대기열은 게임에서 오는 모든 API 호출을 내부 사운드 엔진에 전달하는 장치입니다. Performance Monitor 뷰에서는 메모리 버퍼를 모니터링할 수 있습니다. 이 버퍼가 명령어로 가득 차면 또 다른 명령어를 추가하려고 하는 게임 스레드를 일시적으로 차단하게 됩니다. 이 작업은 API 호출 분실을 방지하기 위함인데, API 호출이 분실될 경우 게임과 사운드 엔진 간에 동기화 문제를 야기할 수 있기 때문입니다. 하지만 이 작업은 게임 프레임레이트에 문제를 일으킬 수 있습니다.

유력한 원인:

  • 한 게임 프레임에 너무 많은 API 호출이 일어납니다. 이 원인은 해당 오류를 일으키는 가장 주된 원인입니다. 보통 SetPosition, SetRTPCValue, SetSwitch로의 중복 호출과 같은 것이 주된 원인입니다. 또한 이 오류는 '레벨'을 설정하거나, 수많은 Game Object를 만들거나, 실제 게임 처리가 시작하기 전에 Game Object의 위치와 RTPC를 설정할 경우에도 일어납니다.

  • 매개 변수 배열에 큰 숫자가 있는 메모리 소비량이 많은 API 호출이 일어났습니다 (예: Spatial Audio의 SetMultiplePositions이나 지오메트리 호출).

  • 오디오 처리 스레드가 아주 바빠서 명령어 처리가 방지됩니다. 이 경우 이 오류와 함께 Voice Starvation 오류가 함께 일어나게 됩니다.

  • 오디오 처리 스레드가 차단되거나 교착되었습니다. 이 오류는 게임이나 Wwise 자체의 버그를 표시합니다.

권장 해결 단계:

  • Profiler Settings(Alt-G)에서 API Calls을 활성화하여 게임이 수행하는 API 호출을 프로파일링하세요. 이렇게 하면 어떤 게임 처리가 API 호출로 명령 대기열을 지나치게 채우고 있는지 식별해낼 수 있습니다.

  • Wwise에서 게임이 Game Sync (State, Switch, Game Parameter)를 업데이트하는 방식을 확인해보세요. 아주 필요할 때에만 Game Sync를 업데이트하세요.

  • AK::SoundEngine::RenderAudio에 게임 프레임 내 호출(intra-game-frame call)을 추가해서 한 게임 프레임을 여러 개의 오디오 프레임으로 나누세요. RenderAudio는 게임 프레임과 관련된 API 호출 집합의 끝 부분만 표시합니다. RenderAudio는 내부 사운드 엔진의 상태를 업데이트하기 위해 Audio 명령 대기열 처리를 유발하는데, 사실 이 기능 호출에 의해 실제로 오디오가 렌더링되지 않습니다.

  • 오디오 처리 스레드 (AK::EventMgrThread라고 이름이 지정되어 있지만 AkPlatformInitSettings::threadLEngine에 의해 우선 순위가 설정됨)가 처리하기에 충분히 높은 CPU 우선 순위를 가지는지 확인하세요. 이 사항이 문제였을 경우 게임에 'Voice Starvation' 오류 또한 일어나게 됩니다.

  • 디버거를 게임에 연결해서 AK::EventMgrThread 스레드가 실제로 실행되고 있는지 검토하세요. 실행되지 않을 경우 이미 게임이 모든 사운드를 잃었을 것입니다. 이 경우 Audiokinetic 지원팀에 연락해주세요.

  • 명령 대기열 메모리 크기를 늘리세요. AkInitSettings::uCommandQueueSize를 참고하세요.


이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요