はじめに
UE4.23+「ADX2 LE v2.10.05」を使用します。
アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
ゲーム内のBGMに対してエフェクトを動的にかける処理を実装します。
サウンドに動的なエフェクトを使う場面の例
- 雨天の屋外から屋内へ入る場合際に、段々と雨の音をくぐもらせる
- スローモーション演出時にローパスフィルタをかける
- 浮遊感や疾走感の表現として、ハイパスフィルタをかける
- ダンスフロア等のロケーション表現
- リバーブエフェクトをかけ、空間を表現
前提
「ADX2 for UE4 LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46
やること
- AtomCraftでキューを作成
- DSPバスを設定し、エフェクトを用意
- UE4にインポート
- ブループリントでリアルタイムにエフェクトのかかり方を変更する
実装
AtomCraft側
キューの作成
キューシート、およびキューを作成します。

画像では「ポリフォニック」で作っていますが、セレクタによるトラック遷移など、他の処理を混ぜたい場合キューのタイプを任意のものにしましょう。
マテリアルからサウンドをトラックに入れます。

DSPバスの作成
エフェクトを構成する「DSPバス」の設定をします。
プロジェクトツリーの「DSPバス設定」を右クリックし、「新規オブジェクト」→「DSPバス設定の作成」を選びます。

新規に「DspBusSetting_1」が作られますので、分かりやすいようF2キーなどでリネームします。

DSPバスの中身を編集……するまえに、まずは必要なパネルを表示します。
ツールバーの「表示」→「メインビュー」→「ミキサー(DSPバス設定)」をクリックして、ミキサーのパネルを表示させます。

下の画像の場所にタブが出たと思います。もしない場合、もう一度ツールバーから表示を行ってみてください。

タブをクリックするとDSPバスの編集画面に移ります。

DSPバスについて
ミキサーについて少し紹介します。
下の画像は少しだけミキサー内でDSPバスを編集してみたものです。

一番左にあるのが「MasterOut」で、それ以外はエフェクトをかけるための「バス」という単位です。
「Reverb」「Flanger」「MixA」のバスはそれぞれエフェクトをかけた音を「MasterOut」に送り、最終的にそれらが合わさったものが「MasterOut」から鳴って音声を形作ります。

エフェクトをかけた音を、さらに別のバスに送って合成することも可能です。

それでは、実際にDSPバスでエフェクトをかけてみましょう。
DSPバスの編集
ミキサーの空いている場所で右クリックし、「DSPバスの追加」をします。

バスが追加されました。

「エフェクト」の横にある+ボタンを押してエフェクトを追加します。今回は試しに「リバーブ(反響)」を追加しました。

「センド」の横の+ボタンを押し、「MasterOut」を選んで「MasterOut」へと音を送ります。

下の画像のようになっていれば大丈夫です。
「MasterOut」へ音の通り道を作ってあげなければ、エフェクトのかかった音は鳴らないようになっています。

バスを選択していれば、インスペクターで名前を変更できます。

エフェクトを選択すると、インスペクターでエフェクトのかかり具合やパラメータが編集可能です。


現時点ではまだエフェクトがどうかかっているかをプレビューすることができません。次の項で、とりあえずエフェクトのプレビューを可能にしてしまいましょう。
バスマップの作成
キューに対してDSPバスを適用するためには、「バスマップ」が必要になります。
プロジェクトツリーの「バスマップ」内の「キュー設定用バスマップ」を右クリックし、「新規オブジェクト」→「バスマップの作成」をクリックします。

新規にバスマップが作られますので、リネームしておきます。

作成したバスマップを選択した状態で、インスペクターの「バスセンド」の項目内の「バス名1」に先ほど作ったバスを指定します。


キューへのDSPバス設定の適用
ワークユニットツリーで、任意のキューを選択します。

インスペクターで「バスマップ」に、作成したバスマップを指定します。

「バスセンド1」にチェックを入れます。

これでプレビューが可能になりました!再生ボタンを押して聞いてみましょう。

インスペクターの下の「バスセンド」ボタンを押すと、エフェクトのかかり具合を設定できます。

「MasterOut」のボリュームを低くすることで、エフェクトのかかった音のみをプレビューすることもできます。

エフェクトを追加する場合
プレビューして気に入らなかったらミキサーに戻ってエフェクトを編集したり、新しく追加するのもいいでしょう。
エフェクトを追加した場合、以下の項目を確認してください。
センドをMasterOutに繋がるように設定する

バスマップのインスペクターで、追加したバスを登録する

キューのインスペクターで、追加したバスセンドにチェックを入れる

キューシートのビルド
UE4での実装
キューシートのインポート
acfファイル、afbファイルをドラッグアンドドロップしてインポートします。

Atom Configファイルも今回使用するものに差し替えておきます。

キュー、リファレンスの配置
レベルにキューを配置します。

レベルブループリントを開きます。

イベントグラフの空いている場所で右クリックし、「Create a Reference to (アクター名)」を選択します。

リファレンスノードが配置されます。

ブループリントノードによるDSPバス操作
UE4内でエフェクトのかかり具合を変動させるには、「Set Bus Send Level」や「Set Bus Send Level Offset」ノードを使用します。


「Set Bus Send Level」は元のバスの音量に乗算するかたちで、「Set Bus Send Level Offset」では元のバスの音量に加算して操作します。
もしエフェクトがかかっているように聞こえない場合、後述する「DSPバス設定の上書き」を試してエフェクトを有効にしてください。
DSPバス設定を上書きする
DSPバス設定をまるごと適用するには、「Attach Dsp Bus Setting」ノードに任意のバス設定名を入力します。

プロジェクトツリー内の「DSPバス設定」名がそのまま使えます。

これを使用することで、DSPバスを設定していないキューに対してもエフェクトをかけることができます。
実装例
以下のグラフ例では、「0」キーを押すごとにバスID0(つまり元の音量)をON/OFFし、
「1」キーを押すごとにバス「Reverb」の音量をON/OFFします。

「Set Bus Send Level by Name」「Set Bus Send Level Offset by Name」ノードでは、AtomCraftのミキサーでつけたバス名を入力します。

特別な処理がない限り、バス名を指定して音量を変動させるのが楽で確実だと思います。
