オーディオコマンドキューは、ゲームから内部サウンドエンジンへの全てのAPIコールを伝達するメカニズムです。これは、Performance Monitorビューでモニタリングできるメモリバッファです。バッファがコマンドでいっぱいになると、さらにコマンドを追加しようとするゲームスレッドが一時的にブロックされます。目的は、APIコールの損失によるゲームとサウンドエンジンの同期問題を防止することです。ただし、ゲームのフレームレートが乱れる可能性が高くなります。
考えられる原因:
1つのゲームフレームで送信されるAPIコールが多すぎます。これが、このエラーの最も一般的な原因です。 SetPosition
、 SetRTPCValue
、 SetSwitch
などへの余分なコールが理由で、よく発生するエラーです。また、ゲームで新しいレベルを展開するときに、多数のゲームオブジェクトを作成して、実際のゲームプロセスのスタート前にそれらのポジションやRTPCを設定する場合などにも、発生します。
大量のパラメータアレイ( SetMultiplePositions
や、スペーシャルオーディオ用のジオメトリ関連コールなど)が含まれる、メモリ負荷の高い複数のAPIコールが発生しました。
オーディオ処理スレッドに過度の負荷がかかり、コマンド処理を阻止しています。このエラーにボイススターベーションが伴えば、Voice Starvationエラーも表示されます。
オーディオ処理スレッドがブロックされた、またはデッドロックが発生しました。ゲームまたはWwise自体のバグの可能性があります。
推奨される解決策:
API Calls を Profiler Settings (Alt-G)で有効にしてゲームが行っているAPIコールのプロファイリングを行います。これを使って、キューに大量のAPIコールを送り込んでいるゲームプロセスを特定できます。
ゲームがWwiseに対して、ゲームシンク(States, Switches, Game Parameters)をどのように更新しているかを、再確認します。これらの更新は、必要なときだけに行うようにします。
AK::SoundEngine::RenderAudio
にゲームフレーム内コールを追加し、1つのゲームフレームを複数のオーディオフレームに分割します。RenderAudioは、1つのゲームフレームに属する一連のAPIコールの終了だけを認識します。内部サウンドエンジンの状況を更新するために、Audioコマンドキューの処理をトリガーしますが、このファンクションコールでレンダリングされる実際のオーディオはありません。
オーディオ処理スレッド(名前は AK::EventMgrThread
であるものの、プロパティは AkPlatformInitSettings::threadLEngine
経由で設定)のCPUのプライオリティを、処理するのに充分な優先順位にします。問題がある場合は、ゲーム中に"Voice Starvation"エラーも頻繁に発生するはずです。
ゲームにデバッガを接続して、AK::EventMgrThread
というスレッドが実際に稼働しているかを、検証してください。稼働していない場合は、ゲームのサウンドが既に失われていることを意味します。この場合はAudiokineticサポートにご連絡ください。
コマンドキューのメモリサイズを、 AkInitSettings::uCommandQueueSize を参照し、拡張してください。