バージョン

menu_open
ターゲットプラットフォーム:
Wwise SDK 2021.1.14
Androidでのレイテンシーのコントロール

Androidオーディオのレイテンシーは、すべてのアプリケーションで常に問題となっていました。通常のレイテンシーは100ミリ秒以下ですが、一部のデバイスでは最大150 msのレイテンシーを示します。

最近のOSバージョンでは、Googleは "高速オーディオパス" を導入しました。これにより、いくつかの条件が満たされた場合に内部処理の一部がバイパスされ、OSおよびハードウェア処理の待ち時間が大幅に短縮されます。全体的なレイテンシーは、数十ミリ秒に短縮することができます。ハードウェアメーカーが高速オーディオパスを実装することは必須ではないことに注意することが重要です。そのため、多くは実装されていません。さらに、一部のデバイスでは、実際に実装されていない高速パスを通知します。したがって、ゲームは、エンドユーザのデバイス上の高速オーディオパスの存在を信頼することはできません。ゲームが幅広いターゲット市場を対象としている場合は、この機能を使用せずにゲームオーディオを設計する必要があります。

一般に、レイテンシーが短くなるとCPU負荷が高くなります。RTPC更新、ゲームオブジェクトの位置、他のゲーム入力などの処理は、フレームごとに行われます。したがって、より小さなフレームでは、これはより頻繁に処理されます。レイテンシーとCPU使用率とのバランスは、実験を通じてのみ見つけることができます。厳しいルールはありません。

レイテンシーをコントロールするWwiseの初期設定

いくつかの設定は、Wwise SDKのオーディオレイテンシーを制御します:

  • AkPlatformInitSettings::uSampleRate: 使用するサンプルレートハードウェア推奨レート(およびフレームごとのサンプル)に設定すると、オーディオ高速パスを選択できます。
  • AkPlatformInitSettings::uNumRefillsInVoice: 前処理するバッファの数。これは、CPU使用状況と中断からの保護です。
  • AkInitSettings::uNumSamplesPerFrame: バッファあたりのサンプル数。ハードウェアの推奨サイズ(およびサンプルレート)に設定すると、オーディオの高速パスを選択できます。

デフォルト設定、ワンサイズ対応レイテンシー

AK::SoundEngine::GetDefaultSettings() and AK::SoundEngine::GetDefaultPlatformInitSettings() によって返されるデフォルトの設定は、ほとんどのデバイスで、ほとんどの場合" 安全" な設定です。それらを使用して設定します:

  • uSampleRate をハードウェア推奨レートに設定します。これは通常48 kHzまたは44.1 kHzです。
  • uNumSamplesPerFrame をハードウェア推奨レートに設定します。これは通常、サンプル数128、192、または240のオーダーですが、デバイスによって、もっと高くなります。
  • uNumRefillsInVoice4.に設定します。

メリット: この設定にすると、高速パスをサポートするデバイス上で、高速パスが選択されます。また、オーディオ設計のCPU使用率に関する制約も少なくなります。
デメリット: CPUによって差があることに対応するために、オーディオの4フレーム分を事前処理しますが、このため、ヘッドルームを必要としないデバイスで、レイテンシーが大きくなることがあります。

最短レイテンシーの設定

Wwiseの初期化を最小限のレイテンシーで行うには、 AK::SoundEngine::GetDefaultSettings() と、 AK::SoundEngine::GetDefaultPlatformSettings() をコールし、 uNumRefillsInVoice を手動で2に変更します。

メリット: 最小限のレイテンシー。
デメリット:使用可能なCPUは限られます。オーディオのレンダリングに割り当てられる時間は非常に短く、システム上の他のイベントによって簡単に妨げられる可能性があります。オーディオ設計(RTPC、Switch、 Positioning、コンテナなど)のCPUオーバーヘッド(負荷)は懸念事項で、注意深くモニタリングする必要があります。

uNumRefillsInVoiceの設定が低すぎると、何が起きるか?

1つのオーディオフレームを処理するのに必要な時間が、CPUの許容範囲よりも低い場合に、オーディオスターベーションが発生します。この時点で、ゲームがサイレンスを出力しなければ、ポップ音やグリッチがユーザーに聞こえてしまうことがあります。

Androidでこれが発生すると、Wwiseは自動的に、Wwiseのインターナルバッファのサイズをわずかに増やし、それ以上のオーディオスターベーションを回避しようとします。これを、オーディオスターベーションが発生するすべてのフレームで行い、オーディオスターベーションが発生しない最小限のバッファーが確保されるまで、続けます。この時点で、WwiseはレイテンシーとCPU使用量の最適なバランスに到達します。

一連の処理は比較的速やかに行われ、オーディオのグリッチは、最初にゲームをスタートしたり、アプリをバックグランド状態から再び再生したりするときに、ほんの数ミリ秒しか耳に聞こえないのが一般的です。

このグリッチ現象を許容できない場合は、この動作を避けるために uNumRefillsInVoice の初期値を、絶対にオーディオスターベーションが起きないような充分に大きい値にします。uNumRefillsInVoice は、CPU使用率の変動にいくらかの余裕を持たせるために、少なくとも3、ほとんどのゲームでは通常4に設定する必要があります。

Bluetooth の例外

Androidのプログラマーのメモにあるように、Bluetoothデバイスはレイテンシーを短くすることが出来ず、高速パスを使用します。実際に、Bluetoothデバイスで問題のないオーディオを使用するには、バッファリングが非常に高く、フレームが大きくなければなりません。WwiseはBluetoothヘッドセットの使用状況を検出し、オーディオハードウェアを自動的にリセットして8,192サンプルのレイテンシーを約180msにします。


このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう