CRI ADX  Last Updated: 2024-03-21 14:32 p
発音遅延の原因と対策


発音遅延の原因について

Atomライブラリで音声を再生する際、以下の条件を満たすと再生リクエストから発音までの遅延が最小となります。
criAtomExPlayer_Start 関数実行後、最初のサーバ処理でプラットフォーム固有のサウンドライブラリに対して発音リクエストが行われます。)
  1. オンメモリ再生
  2. ボイスの奪い取りが発生しない
  3. フェーダーを使用しない
  4. ネイティブサウンドレンダラに出力
上記1.~4.の条件を満たさない場合、以下のような遅延が生じます。

上記1.について

ストリーミング再生の場合、 criAtomExPlayer_Start 関数実行後、ファイルをある程度読み込んでから発音が開始されます。
(再生開始に必要なデータ量がロードされるまで、再生が遅れます。)
特に、シーク再生を行う場合、ファイルのヘッダーを読み込む⇒ファイルヘッダーを解析してシーク位置を計算する⇒シーク位置のデータを読み込む…という流れを踏むため、再生開始までに長時間待たされる可能性があります。

上記2.について

ボイスの奪い取りが発生する場合、再生中のボイスを停止⇒次の音を再生…という流れになるため、発音までの遅延が増加します。
特に、停止するボイスがストリーミング再生中の場合、ファイルのロード完了待ちが発生し、長時間待たされる可能性があります。

上記3.について

フェーダーを使用する場合、Atomライブラリ内でフェードイン音とフェードアウト音の同期を取る処理が行われるため、発音開始まで1V余分に時間がかかります。

上記4.について

ネイティブサウンドレンダラに出力する場合、デコードされたPCMデータをプラットフォーム固有のサウンドライブラリに渡すと同時に再生リクエストを発行します。
これに対し、ASRを使用する場合にはデコード結果を一旦ソフトウェアでミキシングし、再生中のサウンドバッファに載せる形になります。
(新たに書き込んだデータが再生されるのは、その時点でサウンドバッファに書き込み済みのデータが全て再生された後になります。)
そのため、サウンドバッファサイズ分の遅延が生じます。
注意
AtomライブラリでWASAPI出力を行う場合、ASRの使用が必須となります。
(WASAPIがサンプリングレート変換やミキシングの機能を持たないため、これらの処理をASRで肩代わりする必要があります。)

発音までの遅延を減らす方法

発音までの遅延を減らすには、可能な限り上記1.~4.の条件を満たす必要があります。
その他で発音遅延を減らす方法としては、以下のようなものがあります。

サウンドバッファサイズを小さくする(※ASR使用時のみ有効)

PC版Atomライブラリでは、 criAtom_SetAudioClientBufferDuration_WASAPI 関数でサウンドバッファのサイズを変更可能です。
(ワースト性能のハードウェアに合わせて調整しているため、デフォルト状態では4V分のバッファを持っています。)
注意
ミキシングバッファのサイズを小さくし過ぎると、音途切れが発生します。
どの程度のサイズが適切なのかは、使用するハードウェアにも依存するため、汎用PC向けのアプリケーションで本パラメーターを調整する際には、オプション設定等でユーザが再設定できるようにすることをオススメします。
(アーケードタイトル等、使用するハードが特定されている場合には、ターゲット機向けに調整を行うだけで問題ありません。)

サーバー処理の間隔を短くする

Atomライブラリは、初期化時に指定されたサーバー処理間隔でスレッドを起床し、処理を行います。
そのため、上記1.~4.の条件が同じケースでも、サーバー処理の間隔が短い方が発音までの遅延は小さくなります。
例えば、サーバー処理を30Hzで動作させた場合、発音リクエスト自体が受理されるまでに最大で33.3msかかる可能性があります。
これに対し、サーバー処理を120Hzで動作させた場合、同じタイミングで発音リクエストを行ったとしても、8.3ms以内でリクエストが受理されます。
注意
サーバー処理の動作周期はタイマの精度や、同時に動作しているスレッドの優先順位等にも依存するため、必ずしもサーバー処理間隔以内で発音リクエストが受理されるとは限りません。
また、サーバー処理周波数を上げることで発音までの遅延は短くなりますが、サーバー処理駆動に伴うオーバーヘッドが増えるため、Atomライブラリの処理負荷自体は高くなります。

補足

以上の説明には「Atomライブラリ内で生じる遅延」のみが含まれます。
物理的な発音遅延には、上記以外にプラットフォーム固有のサウンドライブラリ内の遅延や、再生機器の遅延も追加されます。