CRIWARE Unity Plugin Manual  Last Updated: 2024-12-05
音声に同期した再生時刻を取得する
CriAtomSource::time 等で取得可能な再生時刻は、「再生開始を指示してからの経過時間」です。
このため、一時的に音声データの供給が途切れたり、システムによる割り込みにより音声再生が妨げられたりした場合に、再生される音声と取得可能な再生時刻にズレが発生してしまいます。

リズムゲームの譜面制御等、再生される音声に厳密に同期した制御を行いたい場合には、 CriWare.CriAtomExPlayback::GetTimeSyncedWithAudio による音声同期タイマーを用いた再生時刻の取得をご利用いただけます。

  • CriAtomExPlayerを直接利用する場合
    音声同期タイマーを有効にする場合、専用の CriWare.CriAtomExPlayer を作成する必要があります。
    下記の要領でスクリプトから CriWare.CriAtomExPlayer を作成し、キューの再生と音声に同期した再生時刻の取得を行うことが可能です。

    /* enableAudioSyncedTimerフラグを有効にしてプレーヤを作成 */
    CriAtomExPlayer player = new CriAtomExPlayer(true);
    /* 再生するキューシートとキュー名をプレーヤに設定 */
    player.SetCue(CriAtom.GetAcb("<CueSheetName>"), "<CueName>");
    /* 再生開始 */
    CriAtomExPlayback playback = player.Start();
    ...
    /* 音声に同期した再生時刻を取得 */
    long playTime = playback.GetTimeSyncedWithAudio();


  • CriAtomSourceを利用する場合
    CriWare.CriAtomSource を継承したアプリケーション独自のクラスを定義することで、コンポーネントの機能を利用しつつ、音声に同期した再生時刻を取得することができます。
    下記のように、初期化処理をオーバーライドして、専用の CriWare.CriAtomExPlayer を作成してください。

    using System.Collections;
    public class MyAtomSource : CriAtomSource {
    protected override void InternalInitialize()
    {
    CriAtomPlugin.InitializeLibrary();
    /* enableAudioSyncedTimerフラグを有効にしてプレーヤを作成 */
    this.player = new CriAtomExPlayer(true);
    this.source = new CriAtomEx3dSource();
    }
    }