5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unreal Engine 4 (UE4) その2Advent Calendar 2020

Day 20

UE4+ADX2でサウンドエフェクターを作ってみる

Last updated at Posted at 2020-12-19

はじめに

アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
BGMに自由に変化をかけられるサウンドエフェクターとそのUIを作ります。

こんな感じになります↓

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

前提

ADX2 for UE4の導入や基本的な使い方は以下の記事にあります。当記事だけでも実装はできるかと思いますが、必要に応じて参照してください。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46

実装

AtomCraftでBGMとエフェクトを構成する

マテリアルのインポート

音源を用意し、AtomCraftに「マテリアル」として取り込みます。
A01.png

キューの作成

新規にキューを作成します。「新規オブジェクト」→「キュー『ポリフォニック』の作成」を選びます。
A02.png
作成したキューにマテリアルをD&Dし、トラックを作ります。
A03.png

AISACコントロールの作成

サウンドにエフェクトをかける「AISACコントロール」を作成します。
トラックリストの空欄で右クリックし、「新規オブジェクト」→「AISACの作成」を選択します。
A04.png
ダイアログが出るので、ハイパスフィルター用の設定をします。
A05.png
「AISACグラフタイプ」を「バンドパス - Cof高域」にします。
A06.png
AISACコントロールが作られますが、必要なAISACコントロールを一括で作成したいので、一旦下部の「タイムライン」タブをクリックして戻ります。
A07.png
ローパスフィルター用のAISACコントロールとピッチ変更用のAISACコントロールを作成します。
A08.png
A09.png

AISACコントロールの編集

作成したAISACコントロールのグラフを編集します。
コントロールポイントをつまみ、上下に動かしてシンプルな直線にします。
ハイパスでは半分まで下るように、
A10.png
ローパスでは半分まで上るように、
A11.png
ピッチは「0.5」の値が真ん中にくるようなグラフにします。
A12.png

ここまでできたら、上部のスライダーを動かして動作をチェックしてみましょう。

バンドパスの編集

リバーブなどのエフェクトをかけるための「バンドパス」を作ります。
プロジェクトツリーの「DspBusSettings_0」をダブルクリックすると、ミキサーが表示されます。
A13.png
「MasterOut」の横の空欄で右クリックし、「DSPバスの追加」を選びます。
A14.png
「Atom Sound Renderer(ASR)」→「リバーブ」を選択します。
A15.png
インスペクターでリバーブのかかり方を調節できます。
A16.png
同じように「フェーザー」「コーラス」のバス、エフェクトを追加します。また、それぞれのバスをリネームしました。
A17.png
好みのエフェクトを追加してもいいでしょう。
また、下部の「センド」に「MasterOut」を追加し、エフェクトがかかったサウンドがMasterに流れるようにします。
A18.png

バスマップの作成

使用するバスを登録した「バスマップ」が必要なので作成していきます。
プロジェクトツリーの「バスマップ」から、「BusMap_Default」を選択します。もし別途使用したいバスマップがある場合、そちらを指定します。
A19.png
インスペクターで、使用するバスを登録します。画像のようになっていればひとまずOKです。
A20.png
キューにバスを設定します。
キューを選択し、インスペクターでバスマップを「BusMap_Default」または任意のバスマップに設定し、各バスセンドにチェックをつけ「MasterOut」以外の音量を0にします。
A21.png
これで初期状態ではエフェクトのかからないサウンドが再生されることになります。

キューシートのビルド

ここまでできたら、キューシートをビルドし、UE4に持っていく準備をします。
A22.png
A23.png

UE4でUI、エフェクターを構成する

キューシートのインポート

ビルドしたキューシートをインポートします。
B02.png

acfファイルの設定

ツールバーの「Edit」→「Project Settings」からプロジェクト設定を開きます。
B03.png
CriWareタブの「Atom Config」にインポートしたacfファイルを指定し、再起動します。
B04.png

キューの配置

コンテンツブラウザからレベル上にAtomキューをD&Dして配置します。
B05.png
DetailsパネルでAISACコントロールの初期値を設定します。ピッチだけは「0.5」が通常の再生になるため、設定しておきます。
B06.png

ウィジェットの作成

エフェクトを操作するためのUIを作成します。
例として、UMGでこんなUIを作ってみました。単純な画像とテキスト、スライダーの組み合わせです。
B00.png
上部のパネル上でマウスを動かすと、X方向ではローパスフィルターが、Y方向ではハイパスフィルターがかかります。
B01.png
下部のスライダーはピッチと、各バスの音量を変更できるものです。

ハイパス・ローパスフィルターの処理

ウィジェットのブループリントでフィルターの処理を作ります。
ウィジェットのブループリント内で、「Atom Sound」型の変数を作っておきます。
B11.png

次の画像では、Tickごとに
①マウスがイメージの上に乗っているか判別し、
②ビューポート上のマウス位置を取得します。
③マウスのX軸をローパスフィルターに反映し、
④マウスのY軸をハイパスフィルターに反映します。
B07.png
「GridOffset」はそれぞれフィルター用画像の位置が、「GirdSize」はフィルター用画像の大きさが代入されています。

ピッチ・エフェクトスライダーの処理

各スライダーの値を「Set Bus Send Level」、「Set Bus Send Level Offset」に代入します。
Slider_Masterだけは初期値が1なので割合で指定できる「Set Bus Send Level」を、
他のスライダーは初期値が0なので、オフセット値で操作できる「Set Bus Send Level Offset」を使用します。
ピッチだけはAISACコントロールで管理しているので、「Set Aisac by Name」ノードを使っています。
B08.png

これでUI処理の実装は完了です。

ウィジェットの呼び出し

最後に、ゲーム内でUIを呼び出せるようにします。
レベルブループリントを開きます。
B09.png
レベル内でAtom Soundを選択しておき、グラフ内で右クリックしリファレンスノードを作成します。
B12.png
B14.png

「Create Widget」でウィジェットを呼び出し、ウィジェットブループリントが持つ変数「Atom Sound」にレベル内のAtom Soundを代入します。
「Set Viewport Mouse Capture Mode」「Show Mouse Cursor」を使ってマウスカーソルを操作可能にします。
B10.png

完成!

B13.png

スライダーを動かしたり、グリッド内でマウスを動かして動作を確認してみましょう。
処理を分解してインタラクティブミュージック的な演出にしてもいいですし、そのデバッグ機能としても使えるかと思います。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?