버전
오디오 명령 대기열은 게임에서 오는 모든 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를 시작해 보세요