6
0

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 1 year has passed since last update.

Unreal Engine (UE)Advent Calendar 2022

Day 21

UE5+サウンドミドルウェアADXで、BGMに動的なドラムパートを(再生編)

Last updated at Posted at 2022-12-21

はじめに

アンリアルエンジンとサウンドミドルウェア「ADX for UE」を連携させ、パーカッションのないメロディラインに動的にドラムパートを追加する実装のチュートリアルです。

ゲーム内のシチュエーションに合わせてパートを追加するだけでなく、細かな状況に合わせて使用する打楽器を変えてみたり、はたまたユーザーがドラムパターンを作れてしまう、といった活用も可能です。

当記事は過去記事「ADX2 for UE4で、BGMのテンポに合わせた演出を実装する」の実装法を活用して別アプローチをするものですが、この記事だけでも実装が可能かと思います。

前提

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

なお、ADX2は「ADX」へ名称が変更になりましたが、ツール構成は変更ありません(2がないから古いほう、というわけではありません)。

記事執筆時点のADX for UEのSDKバージョンはADX LE UE SDK(1.31.00.01)です。

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

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

実装

AtomCraftでサウンドを構成する

まずはサウンドオーサリングツール「AtomCraft」で、実装に使用するためのメロディとパーカッションを構成していきます。

マテリアルの用意

プロジェクトを作成し、マテリアル(音源ファイル)をインポートします。
画像では分かりやすいようサブフォルダにメロディとドラムを分別しています。
A01.png
メロディパートについては、インスペクターにてループ情報の上書きを「True」、ループタイプを「ループ」にしループ再生されるよう設定します。
A02.png

メロディ用キューの作成

新規にキューを作成します。
キューシートを右クリックし「新規オブジェクト」→「キュー『ポリフォニック』の作成」です。
A03.png
作成したキューへ、メロディとなるマテリアルをひとつだけ配置します。
A04.png

メロディのビートタイミングを取得できるようマーカーを作成します。
トラックリストの空欄で右クリックし、「新規オブジェクト」→「ビート同期情報の作成」を選択します。
A05.png
BeatSyncマーカーが作られました。
A06.png
マーカーをクリックして選択しておき、インスペクターにてメロディのBPMを入力します。
A07.png
今回は仮に2小節分のドラムパターンを演奏すると仮定し、分子を「8」と設定します。
A08.png
インスペクターの「BeatSync」にてビートパターンをいじれたりするのですが、ここはUEで同じようなことをやっていくので触らずに置いておきます。
A09.png
同じようにメロディひとつにつきひとつのキューを構成します。
A10.png

ドラム用キューの作成

ドラム用にも同じく「ポリフォニック」のキューを作成します。
A11.png
こちらもキック、ハイハット、スネアなどのキューを作成し対応するマテリアルを入れていきます。
A12.png

ちょっとした余談ですが、キューのタイプを「ランダム」にするとひとつの打楽器からランダムな音を鳴らすことができます。少し変わった演出にも使えそうですし、微妙に異なるパターンのマテリアルをランダムで鳴らすことで「マシンガン効果」の軽減にも役立ちます。
A16.png
A17.png
(この例ではキック、ハイハット2種、スネアが再生のたびにランダムに鳴ります)

キューシートのビルド

ここまでできたらキューシートをビルドします。

A14.png
A15.png

UEでの実装

ここからはUE5を起動して実装していきます。

キューシートのインポート、サウンド確認

ビルドしたキューシートをインポートします。
生成されたacf、acbファイルをUEのコンテンツブラウザにドラッグアンドドロップするとインポートメニューが表示されます。
基本的にはそのままでOKです。
B01.png
インポートしたキューがコンテンツブラウザに表示されました。
B02.png
プロジェクト設定を開きます。
B03.png
CriWareタブ内、「AtomConfig」でビルドしたacfファイルを指定します。
B04.png
音声が再生されるかテストしてみましょう。
レベル上にメロディ用キューをドラッグアンドドロップします。
B05.png
ゲームを再生します。メロディが単体で再生され、ループするようになっているでしょうか?
B06.png
確認が終わったら配置したキューを削除するか、「Auto Activate」のチェックを外して自動的に再生されないようにします。
B07.png

BGM再生用のキューを作成する

メロディとドラムパートを再生するための専用のブループリントを作っていきましょう。
コンテンツブラウザの適当な場所で右クリックし、「Blueprint Class」を選択して新しいアクターを作成します。
C01.png
親クラスは「Actor」です。
C02.png
作成できたらダブルクリックして開き、「Atom Component」を追加します。
C03.png
追加したコンポーネントを選択し、Detailsパネルにて初期値となるサウンドを指定しておきます。
うっかりサウンドを指定し忘れたときにエラーが出るのを防ぐためです。
C04.png
レベル上でサウンドを指定できるようにするため、Construction Scriptに移動します。
タブをクリックして切り替えます。
C05.png
コンポーネントをGetし、Set Soundノードでサウンドを指定します。再生するサウンドは変数から指定するので、空欄にしておきます。
C06.png
SetSoundノードのアウトプットピン「New Sound」を右クリックして「Promote to Variable」で変数化します。
C07.png
新しく変数が作られます。「MelodySound」とでも名前をつけておきましょう。
C08.png
My Blueprintパネルにて、作成された変数の目のボタンを押し外部からアクセス可能にしておきます。
C09.png
アクターをレベルに配置すると、Detailパネルから「Melody Sound」が指定できるようになりました。
C10.png

bpmに合わせてドラムを鳴らす

静かなメロディにドラムパートを動的に追加していきます。
コンポーネントをGetし、
D01.png
線を引き出してAssign On Beat Sync Callbackを選択します。
D02.png
ノードとイベントノードが配置されました。
これらはそれぞれ「bpmのタイミングに合わせてイベントを呼び出す」ノードと「呼び出される」イベントノードになります。
D03.png
線をつなぎ、分かりやすい位置に並べ直します。
D04.png
ドラムを鳴らすため、Spawn Atom Sound 2Dノードを置きます。「Sound」にはキック音を指定します。
D05.png
Spawn Atom Sound 2Dノードは「Params」ピンに再生情報が必要なので、線を引き出しMake AtomComponentParamsを配置します。
D06.png

ゲームを再生してみましょう。メロディのテンポに合わせてキック音が再生されているのが分かるでしょうか?

裏拍を追加する

キックを鳴らすのと平行して、裏拍にハイハットの音を鳴らしリズム感を追加していきます。

まずはイベントノードの「Beat Sync Info」アウトプットピンからビートの同期情報を取り出します。
線を引き出し、Break Atom Beat Sync Infoノードを作ります。
D08.png
現在何拍目か、bpmなどの情報が取得できます。
ビートタイミングから裏拍までの時間は60÷bpm÷2で求めることができます。
E01.png
Delayノードで裏拍までの時間を待機し、ふたたびSpawn Atom Sound 2Dノードを使いハイハットを鳴らします。
E02.png

任意で再生を開始する

現状ではゲームの再生と同時にメロディの再生が開始されますが、これを任意のタイミングで開始できるようにしてみましょう。
アクター内のAtomコンポーネントを選択し、Detailsパネルで「Auto Activate」のチェックを外します。
これでAtomコンポーネントのメロディキューが自動的に再生されなくなりました。
F01.png
カスタムイベントを作成し、コンポーネントをPlayノードを使って再生します。
F02.png
Bind Event to On Atom Beat Sync Callbackを使ってのビートタイミングとイベントの紐づけは、メロディの再生開始時に行われるようつなぎ直します。
F03.png

レベル上でこのアクターを選択しておき、レベルブループリントを開きます。
F04.png
イベントグラフの空欄で「Create a Reference to (アクター名)」を選択し、リファレンスノードを作ります。
F05.png
Input Key 1イベントからカスタムイベントを呼び出せば、キー入力により再生が開始されます。
F06.png

これで基本的な動的ドラムが実装できました!
効果的なタイミングでドラムパートを徐々に追加していく、変化していくなどの演出を使いゲームを盛り上げてみましょう!

この記事をベースに、ドラムパターンをプログラムしたり打楽器の差し替えを行う実装についての記事を公開しました。

より柔軟なインタラクティブ要素が追加できるようになるかと思いますので、よろしければ参照してみてください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?