Wwise SDK 2024.1.1
|
Androidオーディオのレイテンシーは、すべてのアプリケーションで常に問題となっていました。通常のレイテンシーは100ミリ秒以下ですが、一部のデバイスでは最大150 msのレイテンシーを示します。
最近のOSバージョンでは、Googleは "高速オーディオパス" を導入しました。これにより、いくつかの条件が満たされた場合に内部処理の一部がバイパスされ、OSおよびハードウェア処理の待ち時間が大幅に短縮されます。全体的なレイテンシーは、数十ミリ秒に短縮することができます。ハードウェアメーカーが高速オーディオパスを実装することは必須ではないことに注意することが重要です。そのため、多くは実装されていません。さらに、一部のデバイスでは、実際に実装されていない高速パスを通知します。 したがって、ゲームは、エンドユーザのデバイス上の高速オーディオパスの存在を信頼することはできません。 ゲームが幅広いターゲット市場を対象としている場合は、この機能を使用せずにゲームオーディオを設計する必要があります。
一般に、レイテンシーが短くなるとCPU負荷が高くなります。RTPC更新、ゲームオブジェクトの位置、他のゲーム入力などの処理は、フレームごとに行われます。したがって、より小さなフレームでは、これはより頻繁に処理されます。レイテンシーとCPU使用率とのバランスは、実験を通じてのみ見つけることができます。厳しいルールはありません。
いくつかの設定は、Wwise SDKのオーディオレイテンシーを制御します:
AkPlatformInitSettings::uSampleRate
: 使用するサンプルレートWhen set to 0 (the default), the hardware preferred rate is selected, allowing use of the fast audio path.AkPlatformInitSettings::uNumRefillsInVoice
: 前処理するバッファの数。これは、CPU使用状況と中断からの保護です。AkInitSettings::uNumSamplesPerFrame
: バッファあたりのサンプル数。AkPlatformInitSettings::bEnableLowLatency
: Whether the Android fast audio path is requested when initializing audio output streams.AK::SoundEngine::GetDefaultSettings()
and AK::SoundEngine::GetDefaultPlatformInitSettings()
によって返されるデフォルトの設定は、ほとんどのデバイスで、ほとんどの場合" 安全" な設定です。それらを使用して設定します:
uSampleRate
をハードウェア推奨レートに設定します。これは通常48 kHzまたは44.1 kHzです。uNumSamplesPerFrame
to 512.uNumRefillsInVoice
を 4
.に設定します。AkPlatformInitSettings::bEnableLowLatency
to true
.メリット: この設定にすると、高速パスをサポートするデバイス上で、高速パスが選択されます。また、オーディオ設計のCPU使用率に関する制約も少なくなります。
デメリット: CPUによって差があることに対応するために、オーディオの4フレーム分を事前処理しますが、このため、ヘッドルームを必要としないデバイスで、レイテンシーが大きくなることがあります。
Wwiseの初期化を最小限のレイテンシーで行うには、 AK::SoundEngine::GetDefaultSettings()
と、 AK::SoundEngine::GetDefaultPlatformSettings()
をコールし、 uNumRefillsInVoice
を手動で2に変更します。
メリット: 最小限のレイテンシー。
デメリット:使用可能なCPUは限られます。オーディオのレンダリングに割り当てられる時間は非常に短く、システム上の他のイベントによって簡単に妨げられる可能性があります。オーディオ設計(RTPC、Switch、 Positioning、コンテナなど)のCPUオーバーヘッド(負荷)は懸念事項で、注意深くモニタリングする必要があります。
1つのオーディオフレームを処理するのに必要な時間が、CPUの許容範囲よりも低い場合に、オーディオスターベーションが発生します。この時点で、ゲームがサイレンスを出力しなければ、ポップ音やグリッチがユーザーに聞こえてしまうことがあります。
このグリッチ現象を許容できない場合は、この動作を避けるために uNumRefillsInVoice
の初期値を、絶対にオーディオスターベーションが起きないような充分に大きい値にします。uNumRefillsInVoice
は、CPU使用率の変動にいくらかの余裕を持たせるために、少なくとも3、ほとんどのゲームでは通常4に設定する必要があります。
Androidのプログラマーのメモにあるように、Bluetoothデバイスは低レイテンシーにすることも、高速パスを使用することもできません。実際、Bluetooth デバイスでグリッチのないオーディオを実現するには、バッファリングを非常に高くし、フレームを大きくする必要があります。Wwise will detect the usage of a Bluetooth headset and will automatically reset the audio device to have 8,192 samples of latency, which is roughly 180 ms.