CRI ADX2(Unity)
回想シーンだけリバーブを深くする

キャラクターの心の声や過去の記憶など、ゲーム中の印象的なイベントシーンで
加工されていないドライな音声をそのまま再生してしまうと、なんだか味気ないですね。

とくにゲーム中で再生しているセリフと同じ音声を回想シーンでも再生するとなると
「加工されていない音声」と「回想シーン用の加工されている音声」の両方を用意したくなります。

でもDAWまで戻ってwavファイルを書きだすのも手間ですよね?

今回の記事では「スナップショット」を使って
音声素材はそのまま、回想シーンのセリフにリバーブをかける方法を紹介します。

今回使用するADXの機能

ADXでは、再生した音をミキシングするオブジェクトを「ミキサー」と呼びます。

ミキサー内のバスにはエフェクトが追加でき、
元の音声データはそのままに再生中の音のバリエーションを増やせます。

また、ミキサーのバスにはスナップショットが設定できます。
スナップショットにはエフェクト自体のパラメーター設定はもちろんのこと、
バスからバスへのバスセンド設定も登録できます。

スナップショットをゲームの状況に応じて切り替えることで、ゲームシーンにぴったりな表現が可能です!

今回は、エフェクト無しのバスリバーブをかけるバスのバスセンド値を
スナップショット機能で操作することで、回想シーンにあわせてリバーブをオンオフします。

では実際に試してみましょう!

CRI Atom Craftでデータを準備する

ミキサーにバスの追加とエフェクトの設定

まずはエフェクトを切り替えるためのバスを作ってみましょう。

プロジェクトツリーからデフォルトのMixerミキサーを選択し、
dialoguereverbという名前のバスを作成します。

次に、作成したreverbバスのエフェクトに「リバーブ」を追加します。

最後にdialogueバスにreverbバスへのセンド先を追加します。
ゲーム起動時のデフォルト状態ではリバーブをかけたくないので、
reverbバスへのセンド値を0にしておきましょう。

これでバスの作成とミキサー設定が完了しました!

スナップショットの作成と設定

参考:スナップショットの作成

次はスナップショットを作成しましょう。

まずは「回想シーンではないとき」のスナップショットを作成します。
normalという名前でスナップショットを作成しましょう。

次に、同じ手順でもう一つのスナップショットを作成しましょう。
今回は回想シーン、つまりリバーブをかけたいときに使うスナップショットです。
こちらはflashbackとしておきます。

[全体設定]->[ミキサー]->[Mixer]の下にnormalflashbackができました。

次は作成したスナップショットの設定を変更しましょう。

プロジェクトツリーからミキサー(Mixer)を選択すると、
「ミキサー」の画面上部に編集する「スナップショット」を選べます。
回想シーンに使うflashbackスナップショットを選びましょう。

リバーブが追加されているバスをflashbackスナップショットで操作したいので
dialogueバスをflashbackスナップショット追加します。

次に、追加したdialogueバスのバスセンド値を調整します。

  • dialogueバス→MasterOutバスへのセンド値を0
  • dialogueバス→reverbバスへのセンド値を1

通常再生用に、normalスナップショットも同じ手順で設定してみましょう。
バスセンド値の設定は逆になるので間違えないように!

キューにバスセンドを設定

キューのインスペクター「バスセンド」から「カスタムバスマップの作成」を選びます。

ここで今回使用するバスをカスタムバスマップに追加します。

最後にキューがdialogueバスへセンドされるように設定します。
これで設定が完了しました!

作成したスナップショットのプレビュー再生

それでは作成したスナップショットを再生して確認してみましょう。

CRI Atom Craft上部にあるPreview Mixer欄で
プレビュー時に適用するスナップショットとミキサーの設定を選べます。

Mixernormalを選んで、作成したスナップショットを試してみましょう。
キューを再生すると、この状態ではリバーブがかかっていない音声がきこえますね!

続けて、flashbackスナップショットを選択して再生してみます。
…音声にリバーブがかかりました!

スナップショットが正しく動作したらデータの準備は完了です。
もしうまくいっていないときは、スナップショットとキューのバスセンド設定を確認してみましょう!

サウンドデータをビルドし、Unityプロジェクトにサウンドデータを取り込んだら
次はUnityでの設定です。

ゲーム内で適用する

プログラムからスナップショットを適用するにはCriAtomExクラスのAPIを呼びます。

スナップショットを切り替える

先ほど作成したリバーブのスナップショットを呼び出してみましょう。

//(1)バス設定の初期化
CriAtomEx.AttachDspBusSetting("DspBusSetting_0");
CriAtomEx.ApplyDspBusSnapshot("normal", 0);

//(2)onEnteringFlashbackScene
CriAtomEx.ApplyDspBusSnapshot("flashback", 3000);

//(3)onExitingFlashbackScene
CriAtomEx.ApplyDspBusSnapshot("normal", 0);

(1)バス設定の初期化

ライブラリ初期化後に、AttachDspBusSetting()を呼び出して
CRI Atom Craft上で作成したバス設定をアタッチしましょう。

バス設定をアタッチした直後はスナップショットが適用されていません。
なのでApplyDspBusSnapshot()を呼び出して、normalを適用します。

(2)onEnteringFlashbackScene

次に回想シーンに入るのに合わせて、音声も回想シーン用の設定に切り替えます。

ApplyDspBusSnapshot()flashbackを指定して、音声にリバーブを掛けます。
第二引数を3000(ミリ秒)に指定したので、3秒間かけてゆっくりとflashbackスナップショットの設定がバスに設定されます。

(3)onExitingFlashbackScene

最後に、スナップショットをnormalに切り替えて、回想シーンから出ます。
第二引数を0に指定したので、normalのスナップショット設定がバスに即時適用されます。

参考:CRIWARE Unity プラグインマニュアル - CriAtomEx クラス

これでデータ上で設定したスナップショットをUnity上でも確認できました!

Tips

ACFファイルの登録

AttachDspBusSetting()でバス設定をアタッチするには
あらかじめACF情報を登録しておく必要があります。

以下のコンポーネントやAPIで、ACF情報を登録しておきましょう。

ミキサーとスナップショット間での共有項目について

スナップショットでは「エフェクトのバイパス」ができません。
したがって、今回の回想シーンのようなエフェクトのオンオフする挙動はバスへのセンド値を調整することで実現しました。
スナップショットでは他にも注意が必要なパラメーターがあります。マニュアルを確認してみましょう!

参考:ミキサーとスナップショット間での共有項目

バスとエフェクトをさらに活用する

今回の記事では「リバーブ」のみバスに追加しましたが、
リバーブ自体のパラメーター調整や他のエフェクトと組み合わせるとさらに実践的な音になります!

参考:『ヘブンバーンズレッド』4万5千超のサウンドアセットを効率よく実装・管理する方法

実際のタイトルでのバスや各エフェクトの設定が紹介されています!
ぜひ参考にしてみてください。