ADX+UE5で扱うAISACコントロールを、UE5のカーブアセットで管理する

# はじめに
ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではアンリアルエンジン5とサウンドミドルウェア「ADX for UE」を連携させ、
Aisacコントロールを行う際のグラフをUE5標準のカーブアセットに置き換えて管理する方法を紹介します。
UE5の扱いに慣れている開発者がサウンドデザインをする場合に、パラメータ調整をUE内で完結させられるほか、音声の変動量や係数などをロジックからリアルタイムに変化させられる利点などがあります。

Aisacコントロールとは、ADX for UEで使用するサウンドをリアルタイムにパラメータ変化させ、音量やピッチ、ハイパスフィルタやローパスフィルタなど、多様な表現が可能な機能です。

以下は一例として、「Aisacコントロールを使用し、雨音をクロスフェードさせて変化させる」実装です。
[![サンプル](http://img.youtube.com/vi/Hb-gFNz_Q0A/0.jpg)](https://youtu.be/Hb-gFNz_Q0A)

実装記事はこちら

https://qiita.com/SigRem/items/7a534e5f2fa4109015dc

当記事ではUE5.3を使用します。基本的にブループリントのみでの実装を想定しています。
ADX for UEはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/

# 前提
ADX for UEの導入や基本的な使い方は以下の記事にあります。必要に応じて参照してください。
**ADX for UEの導入で、一歩上のサウンド表現を（導入編）**

https://qiita.com/SigRem/items/4250925f6d66a4fd287a

**ADX for UEの導入で、一歩上のサウンド表現を（実践編）**

https://qiita.com/SigRem/items/c089b71c42e898980a46


# Aisacコントロール

AISACコントロールは、AtomCraft上でキューに対して設定することができるグラフで管理されます。
変動量を設定し、そのままAISACコントロールのスライダーを動かすことで音声のテストが可能です。

![C01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/33ff6b80-7d65-395e-ce76-cd7cea85efb0.png)


変動の対象となるのは音量やピッチの他、各種エフェクトなどにも値を渡してかかり方を操作することができます。
![C02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/0ce444ce-0b9a-7e77-656c-84f7c03af4fc.png)



# UE5のカーブアセット

UE5でのカーブアセットも、同じように曲線グラフで形づくられるものです。
こちらはAISACコントロールとは違い、カーブグラフそのものがひとつのアセットとして扱われます。
![C02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/0ef06263-f510-7809-6c05-9c2cea049cdc.png)
ブループリントなどのロジックからアクセスも可能です。


# AtomCraftでのAISACコントロールの設定

0.0～1.0の変化量を同じにする

カーブアセットの使用を前提としたAISACコントロールの設定方法です。
まずは通常どおりにトラックリストの空欄で右クリックし、「新規オブジェクト」→「AISACのを作成」をします。
![C03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/a7884622-1abb-1a19-5430-cd059a417248.png)

AISACの基本情報を編集します。
![C04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/dcfe4d75-4308-5076-2530-7915da1b3cb7.png)

新しいグラフが開くので、「横と縦の0.0～1.0が同じ変動量になる」グラフを作成します。
右肩上がりの直線グラフになります。
これは「UE側ですべてのカーブ挙動を決定する」シチュエーションで有効です。
![C05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/a5267a45-be84-ea39-b255-3900c6eee21f.png)

コントロールポイントごとに、「ポイントリスト」ウィンドウで数値を設定すると楽です。
![C06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/b48d9dc3-4753-cbbe-b924-52cb0c4972ea.png)




# UE5でカーブをAisacコントロールの数値として使う

## カーブアセットの作成

UE5でのカーブアセットの作成方法です。
コンテンツブラウザの空欄で右クリックし、「Miscellaneous」→「Curve」を選択します。
![A01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/f60bf16a-68f7-02ff-1b09-6a4c3a2553fd.png)

カーブのクラスを選びます。今回AISACコントロールに対して必要な情報はFloat変数ひとつなので、「CurveFloat」をクリックします。
![A02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/b2f98373-39b0-0362-3735-477272688130.png)

新しいカーブアセットが作られます。適当に名前をつけておきます。
![A03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/082b6831-a8b6-9271-5fb8-432c8f4b1b29.png)

カーブアセットを開くと、グラフの編集画面になります。
![A04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/3208a48f-c95f-9a39-53a7-e603b8ed1742.png)

右クリックして「Add Key」かマウス中ボタンクリックで、マウスカーソルの位置にキーを追加できます。
![A05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/7cc915e8-1dd4-2630-9d97-981d3cd5d7b0.png)

キーが追加されました。
![A06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/170b2c49-f39a-90fa-cf65-093f8981c188.png)

同じようにキーを追加すると、それをつなぐようなグラフになります。
![A07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/4cf42d54-5c4c-469f-e86e-dce18dd0fb55.png)

キーを選択した状態では、上部のテキストボックスで直接数値を入力することができます。
この機能は複数のキーを選択した状態でも有効です。
![A07B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/79b98fb2-65d8-8dba-bd0c-1ba6533191d8.png)

キーを選択して右クリックすると、カーブの補間タイプが選択できます。
「Auto」を選択すると……
![A08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/560e0996-1d79-4d55-49a6-da01f59e8fbf.png)

滑らかにグラフが補完され、実際のサウンド変化もパラメータの推移が滑らかになります。
![A09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/d411671d-b2bf-4eec-4915-a9828dfbf541.png)

適当にグラフを作ったら保存します。



## ブループリントでカーブからAISACコントロールに値を渡す

ブループリントを使って、カーブアセットの数値をAISACコントロールに反映させる方法です。

レベルブループリントを開きます。
![B01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/66f9429f-5a01-d7f9-fe97-a7182e889116.png)


ひとまずキーを押したらAtomキューが再生される処理を作ります。

**Input Key T**でキー入力のイベントを取得します。
![B02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/abd7298a-cf02-e995-6c90-9642a4014eed.png)

**Spawb Sound at Location**ノードでサウンドをスポーンさせます。
![B03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/2c7acbea-546c-c5c9-e3b7-dedc57c9f285.png)
スポーンさせるキューを、キューシートから指定します。
![B04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/b93c59d7-014e-c547-2997-ca6681d03af0.png)

仮の処理として、プレイヤーキャラを取得し、またそのキャラクターの座標をスポーン地点とします。
![B05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/23401bbf-338a-00f1-ef2e-be92e49bfa6f.png)


Atomキューの再生ノードの青いアウトプットピンを右クリックして、「Promote to Variable」でキューを変数として登録します。
![B06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/e67cd3af-eaf9-5d69-02f2-7bb4a7666bed.png)

名前をつけると自動的に**Set**ノードが置かれます。
![B07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/8467b3de-90b4-652a-bb72-192f94c63b7d.png)

新しくカーブアセットを指定するための変数を作成します。
![B08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/6f25e2d9-8c98-d52c-e1d0-ea2e43c7c05c.png)

「Variable Type」を「Curve Float」の「Object Reference」に変更します。
![B09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/15f15d3b-30d0-9d99-9a0e-9da4219dab2d.png)

**コンパイルし**、「Curve Asset」の初期値を先ほど作成したカーブアセットにします。
![B10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/82bcabb6-d338-3197-9057-ee35b22de112.png)


カーブアセットの**Get**ノードから線を伸ばして、**Get Float Value**ノードでカーブアセットの数値が取得できるようになります。
![B11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/e8788c8e-57da-7c2a-e605-e7db23532bc9.png)

取得した値を**Set Aisac Control Value**の値として代入します。これで、カーブアセットの数値をAisacコントロールの値として使えるようになります。
![B12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/25c91870-7b68-6041-be78-32f9832be82a.png)


別のキーを押すと、カーブアセットの数値を取得して、そのまま**Set Aisac by Name**でAISACコントロールに反映させる処理です。
Float型の変数「Current Value」を作成して、カーブグラフの横の数値として代入しています。

Tキーを押すとキューがスポーンされて再生が開始され、Yキー、Uキーを押すごとにカーブを参照しAisacコントロールの値を取得し代入します。
![B13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/6831b63b-e0b0-5c19-8b9f-4652c9cba453.png)




# 補足

カーブドリブンの実装を紹介してきましたが、もちろんAtomCraftでグラフを作ることのメリットも多々あります。キューを直接編集して新しいパラメータを設定したり、セッションウィンドウを使ったイテレーションなどの恩恵はUE5で完結できません。
UEを触らないアーティストの方にサウンドデザインを任せるならAtomCraftで、逆にエンジニアが主導でサウンドデザインを行う場合はUE5のカーブ機能を採用するなど、プロジェクトごとに比重を変えていくのがベストでしょう。