執筆バージョン: Unreal Engine 5.5
|
ヘイガイズ!エンジニアの片平です!
今回は MetaSounds を使用してインタラクティブミュージックの「縦の遷移」を実装する方法をご紹介します。
インタラクティブミュージックとは
インタラクティブミュージックとは、ゲーム内の状況に合わせて BGM を変化させる演出技法です。
具体的な手法には
などがあります。
これらの手法はUE5の標準オーディオ機能である MetaSounds で十分実装できるようになっています。
「縦の遷移」とは
「縦の遷移」とは、楽曲のアレンジ(編曲)を変化させる手法です。
次のようなものがこれにあたります。
- 複数パターン音楽を用意して切り替える
→非戦闘時、戦闘時でシームレスに曲を切り替えるなど
- 楽器レイヤーを追加・削除する
→キャラクターがパワーアップしたときに楽器を足して賑やかにするなど
なぜ「縦」なのかというと DAW (音楽制作ソフト)上でトラックが縦に並んでいるからです。

DAWソフトの画面(Logic Pro 11)
MetaSound について
MetaSound の基本的な機能については当ブログの下記記事にてご紹介しております。
再生や出力などの機能の詳細については省略いたしますので、下記記事をご参照ください。
[UE5] ハンズオン! UE5サウンド新機能”MetaSounds”で効果音を加工してみよう!
作るもの
キャラクターに近づくとBGMに合った歌が聞こえてきます。
離れると歌は消えていきます。
作成手順
プロジェクトの作成
ThirdPersonTemplate から新規のプロジェクトを作成します。
レベルの作成
デフォルトの ThirdPersonMap の壁と床以外のメッシュを取り除きました

キャラクターの作成
歌っている(想定)のキャラクターを作ります。
今回はこちらに処理は組み込まないので適当にキャラクターを作ります。

メッシュは Quinn さんにしました。
レベルの隅っこにおきます。

音源ファイルのインポート
今回は哀愁漂う歌モノの曲をご用意しました。(音量にご注意ください。)
ボーカルは Synthsizer V2 宮舞モカで、歌詞は LLM で作った造語です。
この曲をボーカルとオケを別々に書き出しました。
<ボーカル>
<オケ>
これらのファイルを UE5 にインポートします。

MetaSoundsの作成
Audio -> MetaSound Source から新しい MetaSound を作成します。

名前は「MS_BGM」とします。

「MS_BGM」を開き、Outupt Format を Stereo に変更します。

ボリューム制御用の INPUTS を追加します

VocalVolume
Type : float
Widget : Slider
Orientation : Vertical
下記画像の通りにノードを組みます。

- Input ノードを2つの WavePlayer で同時に再生します。
2つの音源の長さは同一なので同タイミングでループします。
- 2つの WavePlayer の出力を Stereo Mixier でミックスします。
- VocalVolume の Input でボーカルの音量が変更できます。
BGMの再生
Level Blueprint を開き、BeginPlay から下記画像の通りにノードを組みます。

SpawnSound2D で MS_BGM を Spawn して再生し、その AudioComponent を変数に格納しています。
キャラクターとの距離による音量変化
下記の様なノードを組みます。

- 最初に配置した BP_SingCharacter の参照を作る(アウトライナ上で選択された状態で右クリック→ Create Reference To~)
- Player Pawn と BP_SingCharacter の距離によって音量(0.0~1.0)を計算する。
今回は 300uu 以内は音量 = 1.0、300 ~ 2500uuは音量 = 1.0~0.0 のフェードアウトとしました。
- BGMAudioComponent → Set Float Parameter で MetaSounds にボリュームを設定する
完成!
冒頭の動画と同じものができました!
まとめ
15年ほど前、あるタイトルで私が初めてインタラクティブミュージックの威力を強く認識した手法の再現でした。
今回は距離による歌の抜き差しのみでしたが、バウンスでエリアを区切ってアレンジを変えるなどいくらでも応用できると思います。
単純に同じ長さのトラックの差し引きであれば、
インタラクティブに変える要素は音量だけなので処理としてはシンプルに実装出来るのがいいですね!
曲が変わるタイミングを制御したいとなると、音楽のタイミング(拍、ビート)管理が必要になって一気に複雑になります。
UE5であればQuartzを使えば実現できそうだと思いますが、それはまた別に機会に…!
まずは手軽に「縦の遷移」やってみてください!