CRIWARE Unity Plugin Manual  Last Updated: 2024-12-05
[CriAtom]Android端末の音声再生の遅延時間推測

サンプル内容

概要

cri4u_samples_criatom_adv05_game_mini.png

サンプルアプリを実行中のAndroid端末における、音声再生遅延時間を推測するサンプルです。
本サンプルシーンは、以下のような流れになっています。
  1. 遅延推測を開始
  2. 遅延推測が非同期で実行される
  3. 遅延推測の情報を取得して画面上に表示 (実行状態、推測値の2つ)
  4. 遅延推測を終了
注意
本サンプルは 低遅延音声再生 を行うものではありません。別途 Android低遅延音声再生 を参照してください。

操作方法

  • [Estimator Status ]ラベル
    遅延推測処理の実行状態を表示します。4種類の状態が存在し、初期状態は"Stop"です。
    ※ 状態についての詳細はCriWare.CriAtomExLatencyEstimator.Status 列挙体を参照してください。

  • [Estimated Latency[msec]]ラベル
    遅延推測処理の実行結果(推測値)を表示します。単位はミリ秒です。

  • [Initialize Estimator ]ボタン
    遅延推測機能を初期化して、推測処理を開始します。

  • [Finalize Estimator]ボタン
    遅延推測機能を終了します。

シーン情報


ミドルウェア CRI ADX (CRI Atom)
サンプル Advancedサンプル
格納場所 /cri/unity/samples/UnityProject/Assets/Scenes/criatom/advanced/
シーンファイル Scene_05_EstimateSoundLatency.unity


プログラムの解説

実行結果の取得方法について

実行結果はCriWare.CriAtomExLatencyEstimator.GetCurrentInfo 関数で取得します。
本サンプルでは、これらの値を次のコードで実行結果を取得しています。
void Update()
{
info = CriAtomExLatencyEstimator.GetCurrentInfo();
}
infoはCriWare.CriAtomExLatencyEstimator.EstimatorInfo 構造体型変数です。本サンプルシーンクラスのprivateメンバとして保持され、次のコードでラベル表示されます。
GUILayout.Label("Estimator Status : " + info.status); // 遅延推測処理の実行状態を示すメンバ
GUILayout.Space(16);
GUILayout.Label("Estimated Latency[msec]: " + info.estimated_latency); // 推測処理の実行結果(ミリ秒)を示すメンバ
GUILayout.Space(16);
推測処理が完了すると実行状態が"Done"を示し、実行結果として推測値が得られます(0より大きな値になります)。
"Done"以外の状態では、推測値は0になります。
注意
推測値は、Atomライブラリの初期化設定によって変動します。
本サンプルシーンに配置されたCriWare.CriWareInitializer コンポーネントの初期化設定を変更し、シーンを再ロードすることで変動が確認できます。

初期化処理について

初期化はCriWare.CriAtomExLatencyEstimator.InitializeModule 関数で行います。
本サンプルでは、次のコードで初期化を行います。
if (Scene_00_GUI.Button("Initialize Estimator", option)) {
if (!is_initialized) {
// 遅延推測を開始
CriAtomExLatencyEstimator.InitializeModule();
is_initialized = true;
}
}
本サンプルでは、多重初期化を防ぐために is_initializedフラグを用意しています。
InitializeModule 関数を呼ぶと遅延推測機能が初期化されると共に、推測処理が開始されます。
推測処理を開始すると実行状態は"Processing"に遷移します。なお、推測処理は非同期で実行されます。

終了処理について

終了処理はCriWare.CriAtomExLatencyEstimator.FinalizeModule 関数で行います。
本サンプルでは、次のコードで終了処理を行います。
if (Scene_00_GUI.Button("Finalize Estimator", option)) {
if (is_initialized) {
// 遅延推測を終了
CriAtomExLatencyEstimator.FinalizeModule();
is_initialized = false;
}
}
FinalizeModule 関数は完了復帰です。
本関数の呼び出しにより、遅延推測機能はどの状態にあっても必ず非同期処理を停止し、"Stop"状態に遷移します。