CRI ADX2(Unity)
中級編03 再生遅延を改善する

ユーザーが画面をタップした際の効果音や、画面効果に合わせた効果音など、気持ちのよいゲーム体験にレスポンスのよい音声再生は欠かせません。
特にリズムゲームなどでは、なるべく音声再生の遅延を減らしたいですよね。
本記事では、音声再生遅延を改善する方法について解説します。

オンメモリ再生の利用

CRIWAREには音声データの再生方法が三つあります。

  • 事前にメモリ上にロードするオンメモリ再生
  • 逐次読み出しながら再生するストリーミング再生
  • 上記のハイブリッドであるゼロレイテンシーストリーム再生

高いレスポンスが必要な効果音などは、CRI Atom Craftで必ずオンメモリ再生を行うように設定しましょう。
設定方法は以下の記事を参考にしてください。
https://criware.info/memory-or-stream/

※デフォルトではオンメモリ再生が行われる設定になっています。

バッファリング時間の調整

CRIWARE Library Initializerコンポーネントの設定項目のうち、下の画像にある「バッファリング時間(Buffering Time)」に注目しましょう。
これらは「どれだけの長さの音声データが溜まって(バッファリングされて)から出力を開始するか」の設定です。
再生開始時に十分にバッファリングがされれば、再生中にデータが足りなくなって音途切れするのを避けることができます。

この値を小さくするとバッファリングを待つ時間が短くなるため、再生開始から実際に音が流れるまでの時間を短くすることができます。
特に Android のデフォルト設定は、かなり古い端末でも音途切れが発生しないように大きめの値になっていますので、思い切って短くしてみましょう!
アプリがサポートする端末で音途切れが発生しないかだけは確認しましょう。

サーバー周波数の設定

同じくCRIWARE Library Initializerコンポーネントのサーバー周波数(Server Frequency)の設定を変えることでも、再生レスポンスをわずかに改善できる可能性があります。

CRIWAREは、アプリケーションのメインスレッドから呼び出された命令をサーバースレッドで処理します。
サーバー周波数とは、このサーバー処理を実行する頻度です。
設定値を高くすると、再生開始命令が実際に処理されるまでの間隔が短くなり、結果として音が出力されるまでの待ち時間が短くなるかもしれません。

「可能性がある」「かもしれない」と書いたのは、処理が実行されるのがわずかに早くなっても、その先でバッファリングなどでより長時間の待ちが発生するので、大きな効果が現れないことが多いからです。
より高頻度に処理を行うということは、それだけCPUの処理負荷が高くなるということなので、あまり効果がないようだったらサーバー周波数の設定値は高くしすぎないようにしましょう。
アプリケーションのフレームレートと同程度で十分かと思います。

Androidの再生遅延の改善(低遅延再生)

Android端末で動作を確認している場合、これまでに紹介した対応を行ってもまだ遅延が大きいかもしれません。
CRIWAREでは、Android向けに特別な「低遅延再生」機能を提供しています。
いくつか追加の設定が必要なので解説していきます。

まず、CRIWARE Library Initializerコンポーネントの低遅延再生標準ボイスプール数を設定します。

注意
低遅延再生用の標準ボイスプールのStreaming Voices(ストリーム再生数)1つにつき、CriFsLoaderハンドルが1つ必要です。
したがって画像下部の[Streaming Voices]の値を増やす場合、画像上部の[Initialize FileSystem]の[Nubmer of Loaders]の値も増やしてください。

今回はメモリ再生用ボイスプールを3、ストリーム再生用ボイスプールを2とします。
(ストリーム再生用ボイスプールを2つ増やしたので[Nubmer of Loaders]を2つ増やします)

次にCriAtomSourceコンポーネントの「Low Latency Playback」のチェックをオンにします。

以上で、低遅延再生を利用できます!
実機で動作を確認すると、通常再生時よりも再生遅延が大きく減っているのが確認できるはずです。

Tips

低遅延音声再生利用時の制限事項

本機能はSE再生など遅延を少しでも減らしたい音声のみ使用し、BGMやエフェクトを使用したい音は通常再生を行ってください。
低遅延音声再生ボイスプールから音声を再生する場合、以下のような制限事項があります。

  • コーデックはADX/HCAのみ使用可能です。HCA-MXを使用した場合、効果が得られません。
  • エンベロープ機能は使用できません。データにエンベロープが設定されていた場合は無視されます。
  • 低遅延再生標準ボイスプールの最大数はメモリ再生・ストリーム再生あわせて27までとなります。
  • 音声データのサンプリングレートは48000Hz以下です。
  • 2Dパン、ボリューム調整のみ可能。ピッチ調整やリバーブなどのエフェクト機能(DSP)などは使えません
    ※ランタイム時のピッチ調整だけでなく、CRI Atom Craft側で設定したキュー設定によるピッチ変更もできません。

低遅延音声再生用ボイスプール数について

低遅延音声再生向けボイスプールの上限は6となります。
(メモリ再生用ボイスプール数) + (ストリーム再生用ボイスプール数) の合計値が、こちらの値以下となるように設定する必要があります。
ただし、Untiy標準オーディオが有効な場合は上限を5まで下げる必要があります。

CRIWAREプラグインを導入している場合の、Unity標準オーディオ設定の変更についてはこちらをご確認ください。
https://game.criware.jp/manual/unity_plugin/jpn/contents/atom4u_tips.html

低遅延音声再生と標準再生の指定方法

「Low Latency Playback」のチェックをtrueにしないデフォルト状態のCriAtomSourceで音声を再生した場合は、標準または低遅延再生用のボイスプールから空き状態に応じて自動的にボイスが割り当てられます。
低遅延再生を行わないことを明示的に設定したい場合は、以下のいずれかの対応を行ってください。

  • 音源毎にCriAtomExPlayer::SetSoundRendererTypeをASR指定で呼び出す。
  • CRI Atom Craftツールにおいて、パラメータパレットを用いてサウンドレンダラータイプを設定する。

CRIWAREプラグインの再生の仕組み

CRIWAREプラグインの音声再生の仕組みについては、以下のページで解説しています。
CRIWARE Unity Plug-inマニュアル 再生の基本的な仕組み

author:我妻