CRI ADX2(Unity)
中級編06 音声の再生時刻を取得する(音声同期タイマ編)
音声同期タイマを使用した再生時刻
まずはじめにこちらの図をご覧ください。
前回紹介した再生済みサンプル数 GetNumPlayedSamples
と、今回紹介する音声同期タイマベースでのGetTimeSyncedWithAudio
を並べた図となります。
見ての通り、GetTimeSyncedWithAudio
で取得した値はカウントアップの粒度が高く、再生中の音声にぴったりと同期した再生時刻が取得できます。
また、例えばスマートフォンでのイヤホン抜き差しなどで音の再生が途切れた場合、これらの再生時刻は更新を一時的に停止して、常に出力される音と同期した時刻を返します。
それでは音声同期タイマの再生時間取得方法について、2通り実装方法をご紹介します。
1. CriAtomExPlayerを利用する場合
CriAtomExPlayback.GetTimeSyncedWithAudio関数を使用するためには音声同期タイマーフラグを有効にした、専用のCriAtomExPlayerを作成する必要があります。
下記の要領でスクリプトからCriAtomExPlayerを作成し、キューの再生と音声に同期した再生時刻の取得を行うことが可能です。
/* 音声同期タイマーを有効にしたAtomExPlayerの生成 */
CriAtomExPlayer atomExPlayer = new CriAtomExPlayer(true);
atomExPlayer.SetCue("Cue1");
CriAtomExPlayback playback = atomExPlayer.Start();
private void Update(){
/* 音声に同期した再生時刻を取得 */
long playTime = playback.GetTimeSyncedWithAudio();
}
2. CriAtomSourceを利用する場合
CriAtomSourceのコンポーネントの機能を利用しつつ上記の音声同期タイマーを用いた再生時刻を使用したい場合は、CriAtomSourceを継承したアプリケーション独自のクラスを定義することで、音声に同期した再生時刻を取得することができます。
下記のように、初期化処理をオーバーライドして、専用のCriAtomExPlayerを作成してください。
using UnityEngine;
using System.Collections;
using CriWare;
public class MyAtomSource : CriAtomSource {
protected override void InternalInitialize()
{
CriAtomPlugin.InitializeLibrary();
/* enableAudioSyncedTimerフラグを有効にしてプレーヤを作成 */
this.player = new CriAtomExPlayer(true);
this.source = new CriAtomEx3dSource();
}
}
注意
GetTimeSyncedWithAudio
は呼び出しの度に時刻が更新されるので、1フレームに1回だけ取得しましょう。