0
0

More than 1 year has passed since last update.

ADX+UE4で、BGMに紐づけて多様なサウンドを再生する

Last updated at Posted at 2022-09-06

はじめに

アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を使って、BGMの特定のタイミングに紐づけて自動的にサウンドを再生できるようにします。

また、ここで再生されるサウンドはゲーム中の状況により変化をもたせられるので、
「ベースは同じだが、エリアにより旋律の異なるBGMを再生できる」
「BGMの開始時に流れるサウンドが異なり、第一印象が変化する」
「戦闘終了時にBGMの再生が終わった際の演出にバリエーションをもたせる」
といったシチュエーションが演出できます。

分岐にはAtomCraftの「ゲーム変数」機能を使用します。

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

記事執筆時点のADX2 for UE4のSDKバージョンはv1_29です。

前提

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

実装

AtomCraftで効果音を構成する

マテリアルの用意

A01.png
今回はベースとなるBGM(BGM_Base)を用意し、さらに

  • BGMの開始と同時に再生するキック音を2種(BGM_PhraseA,B)
  • BGMの途中で流れるフレーズを2種(SE_KickA,B)
    追加してみました。

キューの作成

まずはBGM用のキューを作成します。
キューシートを右クリックし、「新規オブジェクト」→「キュー『ポリフォニック』の作成」を選択します。
A02.png
作成したキューに名前をつけ、マテリアル「BGM_Base」をドラッグアンドドロップしてトラックを作ります。
A03.png

次に分岐するサウンド用のキューをふたつ作成します。
キューシートを右クリックし、「新規オブジェクト」→今度は「キュー『スイッチ』の作成」を選択します。
A04.png
作成したキューにフレーズ用のふたつのトラックを入れます。
A05.png
同じようにキューを作成し、キック用のマテリアルを入れてトラックを作ります。
A06.png

ゲーム変数の設定

サウンドを分岐させるため、ゲーム変数を作成します。
プロジェクトツリーの「ゲーム変数」を右クリックし、「新規オブジェクト」→「ゲーム変数の作成」を選びます。
A07.png
新しく作られたゲーム変数に分かりやすいよう名前をつけておきます。
A08.png

フレーズ用のキューを選択し、インスペクターにて「スイッチ」のボタンを押すとトラック分岐用のメニューが現れます。
A09.png
スイッチ変数に先ほど作成したゲーム変数を設定します。
A10.png
デフォルトでは変数による配分が等分にされており、選択肢がふたつの場合は0.5以下であればひとつめのトラックが、0.5超であればふたつめのトラックが再生されます。配分を任意で入力することも可能です(合計が1.0になるようにしてください)。
A11.png
プロジェクトツリーの中のゲーム変数を選択し、インスペクターにて「初期値」を変更すると、数値が変わった場合の聞こえ方をテスト再生することが可能です。
A12.png
同様にキック用のキューにもゲーム変数による分岐を設定します。
A13.png

アクションの設定

キュー内の任意のタイミングに埋め込み、他のサウンドを呼び出したりする機能を「アクション」と呼びます。
ベースとなるBGMのキューにアクションを設定していきます。
ベースとなるキューを選択して、トラックリストの空欄で右クリックし「新規オブジェクト」→「アクショントラックの作成」を選択します。
A14.png
新しくアクショントラックが作られます。アクショントラックは対象となるオブジェクトがないと機能しないので、フレーズ用のキューをワークユニットツリーからドラッグアンドドロップして指定してあげます。
A15.png
同じようにふたつめのアクショントラックを作成し、こちらにはキック用のキューを指定します。
A16.png
アクショントラックを選択すると、インスペクターでトラック名が入力できるので識別用に名前をつけておくといいかもしれません。
A17.png
アクショントラックの横のタイムライン上で右クリックし、「新規オブジェクト」→「スタートアクションの作成」を選択します。
A18.png
キューの呼び出しを行うマーカーが設置されるので、任意の位置までドラッグして持っていきます。
BGM開始時のキックを呼び出すためのマーカーなので、今回はタイムラインの最初に配置します。
A19.png
フレーズ呼び出しはBGMの途中で呼び出したいので、5小節目に作成しました。
A20.png
BGMのタイミングに合わせてマーカーを設置したい場合、時計のボタンから「タイムベースの編集」を行いビートに合わせた表示にしておくといいでしょう。
A21.png
BPMを設定すればOKです。
A22.png

この状態でテスト再生すると、AtomCraft上でもサウンドが呼び出されます。
ゲーム変数の初期値を変更すると、やはりサウンドが分岐し違った音が流れるようになります。

キューシートのビルド

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

UEでの実装

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

AtomCraftでビルドしたキューシートをインポートします。
acbファイル、acfファイルともにコンテンツブラウザにドラッグアンドドロップしておきます。
B01.png
B02.png
ツールバーの「Edit」→「Project Settings」からプロジェクト設定を開き……
B03.png
CriWareタブの「Atom Config」に、インポートしたacfファイルを指定します。
B04.png

ここで一度再起動しておきます。

BGMの再生

レベルブループリントからBGMを再生してみましょう。
「Open Level Blueprint」からレベルブループリントのエディタを開きます。
B05.png
再生に必要なのはこれだけです。
Spawn Sound 2DノードにはベースとなるBGMのキューを指定します。
B06.png

ゲームをテスト再生すると、AtomCraftでのプレビューと同じようにBGMが再生され、またアクションによるサウンド呼び出しも機能しているようです。

ゲーム変数によるサウンド分岐

仕上げにゲーム変数を変更し、サウンドが変わるか確認してみます。

Rキーでの再生後にSet Atom Game Variableでゲーム変数を「0.0」に設定します。
同じようにTキーでも再生を開始し、こちらではSet Atom Game Variableでゲーム変数を「1.0」に設定します。
B07.png
RキーとTキーでそれぞれ違うバリエーションのアクションが呼び出されることになります。

このままではキーを押すたびにBGMが重なってしまうので、再生開始する際にBGMを止める処理を入れてみましょう。
(テスト用なのでここからは実装しなくても大丈夫です)
Spawn Sound 2Dノードの青いアウトプットピンを右クリックし、「Promote to Variable」でAtomキュー(正確にはAtom Component)を変数化します。
B08.png
Setノードが作られるので、処理の最後に置きます。
B09.png
再生開始時に再生中のBGMが有効であればDestroyComponentし、新たに再生を開始する処理になりました。
B10.png
この処理ならテストのたびにいちいちゲームを再生しなおさなくて済みます。

補足

「アクション」による機能は単なる再生だけではなく、パラメータを変更したり別の方法でサウンドを分岐させたり、といったこともできます。
呼び出したトラックの性質も受け継がれるため、演出のために試しておくといい機能になるでしょう。

0
0
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
0
0