Unity ADX2LE 演出付きでBGMを再生する CriAtomExPlayer
UnityでADX2LEを用いた演出付きBGM再生
サウンドミドルウェアのADX2LEを用いたBGM再生についてまとめてみた。 ※自己流のため参考程度にお願いします。
サンプルプログラム1
using CriWare;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class SoundSample : MonoBehaviour {
public CriAtomSource criAtomSource;
public string bgmCueSheet = "BGM";
public string[] bgmCueNames = new string[] { "BGM1", "BGM2", "BGM3", "BGM4", "BGM5" }; //キューシート「BGM」に入っているキューの名前一覧
private CriAtomExPlayer exPlayer, exPlayer2;
private CriAtomExAcb atomExAcb;
int num = 0;
private IEnumerator Start(){
/* キューシートファイルのロード待ち */
yield return new WaitUntil(() => !CriAtom.CueSheetsAreLoading);
atomExAcb = CriAtom.GetAcb("BGM"); //BGMの入ったACBファイルを拾う
//クロスフェードPlayer
exPlayer = new CriAtomExPlayer(); //プレイヤーの生成
exPlayer.SetCue(atomExAcb, bgmCueNames[0]); //プレイヤーにキューをセットする
exPlayer.Loop(true); //プレイヤーにループを設定する
exPlayer.AttachFader(); //プレイヤーにフェーダーを付ける
exPlayer.SetFadeInTime(1000); //フェードイン時間を設定する
exPlayer.SetFadeOutTime(1000); //フェードアウト時間を設定する
exPlayer.Start(); //再生する
//クロスフェードPlayer2 以下ほぼ同様
exPlayer2 = new CriAtomExPlayer();
exPlayer2.Loop(true);
exPlayer2.AttachFader();
exPlayer2.SetFadeInTime(1000);
exPlayer2.SetFadeOutTime(1000);
CriAtom.SetCategoryVolume("BGM", 0.2); //指定したカテゴリーのボリュームを設定する
CriAtom.SetCategoryVolume("SE", 0.2); //上に同じ
}
//ボタンなどで呼び出す。
public void PlayBGM(){
num = (num + 1) % (bgmCueNames.Length - 1); //numは0からbgmCueNamesの要素の範囲で実行毎に加算される
if(exPlayer.GetStatus() != CriAtomExPlayer.Status.Playing) //exPlayerが再生されているかどうかを判別
{
if (exPlayer2.GetStatus() == CriAtomExPlayer.Status.Playing)
exPlayer2.Stop(); //exPlayer2が再生中なら止める
exPlayer.SetCue(bgmAcb, bgmCueNames[num]); //exPlayerにキューをセットする
exPlayer.Start(); //exPlayerを再生する
return;
}
else if(exPlayer2.GetStatus() != CriAtomExPlayer.Status.Playing) //exPlayer2が再生されているかどうかを判別
{
if (exPlayer.GetStatus() == CriAtomExPlayer.Status.Playing)
exPlayer.Stop(); //exPlayerが再生中だったら止める
exPlayer2.SetCue(bgmAcb, bgmCueNames[num]); //exPlayer2にキューをセットする
exPlayer2.Start(); //exPlayer2を再生する
return;
}
}
}
※以下は公式のマニュアルに記載されている。 CriAtomExPlayerは再生中にSetCueを実行しても停止することはないが、キューをセットした後に Start()を実行するとその前に再生していた音が停止して、新しくセットしたキューが再生される。 CriAtomExPlayerの初期化はシーンのロード時など、負荷が許容できるタイミングで実行するのが 望ましい。 再生する毎に初期化するとフレーム落ちの原因になる。 また、クロスフェードを行うために、AttachFader()を実行する場合は再生する前か停止中に行う。 再生中にAttachFader()を実行すると停止してしまう。 SetFadeInTime()などは再生に影響しない。 exPlayerとexPlayer2がある理由は、クロスフェードするタイミングで前の音をフェードアウトさせながら 次の音をフェードインさせるために2つ宣言している。 この時、音は2音同時に再生される区間を作ることができる。 プレイヤーが1つの場合は、Stop()を実行してフェードアウトが開始されても、次のStart()が実行 されるタイミングで強制的に停止させられる為、フェードアウトしきる前に次の音がフェードインを開始 してしまう。 SetCategoryVolume()はCriAtomCraftLEで設定したカテゴリーの音量を個別に設定することができる。
参考
CRIWARE Unity Plugin Manual: CriAtomExPlayer クラスCRIWARE Unity Plugin Manual: CriAtom クラス
※間違ってたらすみません。
わかった時点で修正します。
コメント
コメントを投稿