Unreal Engine (UE) Advent Calendar 2024 13日目の記事です
そう、今年の13日は金曜日!
熱心なクリスチャンでもホラー映画愛好家でもない自分は
今夜はライブハウスでセロニアス・モンク1を演奏する人たちが出没する日とか
こちらのタイムラインのフレディさん(マーキュリーじゃない方)が主役になる日とかそんな認識です。
ノリと勢いで張り切って枠をGetしたものの深いことは何ひとつ考えてませんでした…
振り返れば今年は念願のMIDI検定1級を受験することができました
結果は残念ながら不合格でしたが1年で2級までの合格と講師資格をフルコンプできたのは良い結果だったと思います。
と言うわけで今年はMIDIを使ってUnreal Engineを動かしてみた
お話をいたします。
そもそもMIDIってなに?
Musical Instrument Digital Interfaceの頭文字を取った言葉
電子楽器やコンピューターなどのメーカーや機種を問わず、音楽の演奏情報をやりとりするための統一規格です。Musical Instrument Digital Interfaceの頭文字を組み合わせた言葉で、電子楽器やコンピュータ等のメーカーや機種に関わらず音楽の演奏情報を効率良く伝達するための統一規格です。
MIDIの演奏情報とは、楽器演奏の要素となる「音の高さ、大きさ、長さ」と音色や効果 を、数値化(記号化)したものです。音楽波形そのものを伝達するのに比べ約100分の1に圧縮された効率のよい音楽の演奏情報です。
AMEI(一般社団法人 音楽電子事業協会)のサイトより
https://www.amei.or.jp/midi2020.html
本来は電子楽器の操作で使うものとして作られたMIDIですが最近は通信信号としてのMIDIにも注目され始め
VJやバーチャルプロダクションなど音楽用途以外の使われ方もしています。
UE4の頃からMIDIを使ってUnreal Engine上のアクタをコントロールする機能はあったのですが
外部のDAWやMIDIコントローラーを使って何かする、という印象が強かったのです。
今年に入ってからMetaSoundとUnreal Engine5.4の新機能・Harmonixの組み合わせでよりわかり易く、使いやすくなったと感じました。
と、いうわけでMIDIファイルを読み込み演奏と同時にUnreal Engine上のスポットライトを連動させるデモンストレーションを使って説明していきます。
今回の作例
2024/09/15に発表したこちらの作例のブラッシュアップ版です
実はこの当時Harmonixのことを知らなくてBlueprintClassでMIDIデバイスを読み取るというUE4時代のような作り方をしています2
この後職場にてFortniteで音ゲーを作れないだろうか?
という相談をされてサウンドの同期について調べたところHarmonixの存在を知ることになります。
Harmonixは2024年12月現在も実験的機能ですが
便利なので個人的にはなんとか生き残って正式版になってほしいと願っています。
ちなみにHarmonixはFortniteでは使えません、念のため。
準備するもの
- Unreal Engine5.4以上(今回は5.5で検証)
- Standard MIDI File(以下SMF)
- フォーマット1
- 1トラックのみ
- 1小節目から開始
- 使用ノートはGM準拠 Kick Drum:36 Snare Drum:40
Cubaseにてシンプルなドラムデータを作成後、SMFにて書き出し
サンプリングデータ取得のため整音の上、オーディオデータも書き出す
追加するプラグイン
- MetaSound
- 5.4から正式版になったので5.4以降は何もしなくても大丈夫です
- MIDI Device Support
- MIDI信号を音楽以外の用途で使うために便利なプラグイン
- Harmonix(実験的機能)
- MetaSoundでMIDIやサンプラー(後述)を使うための便利なプラグイン
Standard MIDI File(以下SMF)を扱う時気を付けること
SMFはフォーマット1で書き出す
フォーマット0で書き出すとすべてのトラックが一つにまとまってしまうため
現在ほとんどのDAWは初期設定でSMFフォーマット1で書き出すようになっているが設定の再確認はやっておいた方がいい。
楽曲の開始小節を確認する
SMFの中には楽曲が2小節目からスタートさせるものがある。
これは1小節目を設定として使うためと最初からベストな音を出すために音源の立ち上がる時間をわざと空けるため。3
お待たせしました。いよいよ作り方です!
1.HarmonixのFusionSamplerを使い簡単なDrum音源の作成
HarmonixにはFusion Samplerというサンプラーが入っています
サンプラーをものすごくざっくり説明すると任意の音(サンプル)を鍵盤やパッドでそのまま再生したり音階をつけて再生したりできるシロモノです。
Get Wildの冒頭の小室哲哉さんのサンプラーさばきをイメージしていただければと思います。4
ま、UE5.4からサンプラー機能がついたと。
これでUEがあればご自宅でもご自身の声でTMNのアリーナライブごっこができます!!
…話を戻します。
音も同時に再生したいのでDAWで鳴らしたDrum音源からスネアとドラムを切り抜きFusion Patch(サンプラーの素材集)を作りました。
素材をインポートし、まとめて選択、右クリック、フュージョンパッチを作成を選択する
新規フュージョンパッチオプション画面
変更したのは最小ノートと最大ノートの設定のみ
Kick 36
Snare 40
になっているか確認
ファイルを開いて修正できるのでこの段階で上手く割り当てが出来なくても大丈夫です。
これをMeta Sound内のFusion Samplerで呼び出して使うわけです。
Harmonixにはシーケンサー(サンプラーの再生装置)もあるのですがこちらは使っていません。
2.SMFをインポートして1.の音源を再生
用意したSMFをインポートします
SMFをインポートする時、このようなメッセージが出ますが『はい』で、で大丈夫です。
理由は後ほど調べます…
次に右クリック>オーディオ>MetaSoundソースでMetaSoundソースを作成しを以下の通りに組みます
元の音源がモノラルなのでデフォルトのモノラル設定でも大丈夫なのですが、自己満足のため聴く側にリッチな気分に浸ってもらいたいのでステレオに切り替えています。
そして最初からあるOutputが余り、WARNING!を表示していますが今は気にしないで下さい(;^ω^)
音はきちんと鳴ります。
消す方法がわからないので対処法教えてほしいです…
保存したMetaSoundソースをビューポートに配置するとドラムの音が再生されます!
3.MetaSound Output Watchingを使いNote On,Off情報を取得しSpotLightをOnOff (赤:Kick Drum 青:Snare Drum)
ここではUE5.3から追加されたMetaSound Output Watchingという機能を使います
詳細はこちらから。
MetaSoundからSMFのNote On,Off情報を取得します
先ほど作ったMetaSoundソースにMIDIデータを取得するノードを追加します
通常はNoteOnのデータだけ取れば『SpotLightをOnにする』機能は果たすのですがNoteOffを取ることで『SpotLightをOffにする』タイミングを取ることができ『どれだけの間SpotLightをつけておきたいか』を取ることができます。
同じ4分音符でも次の泊ギリギリまで抑えるか鳴らしてすぐに鍵盤を離すかで同じ音符を演奏してもニュアンスが違ってくるので演奏表現にライトを合わせていきました。
同じ色の楽譜とピアノロールの長さを比べてください。
用意したSMFのデータはこんな感じで同じ拍をランダムな長さで再生するように作っています。
次にSpotLightを制御するBlueprint Classを作成します
親クラスはアクタ
ビューポートの配置はこちら
Frontビューで左が青・右が赤です(このままビューポートに置くと配置が逆になる)
赤をKick Drum 青をSnare Drumと連動させていきます。
イベントグラフの配置はこちら
Watch Outputノードを使いそれぞれの楽器のNoteOn・NoteOffを取得しそれぞれのライトに同期させています。
コンパイルしたらビューポートに配置してプレイしてみましょう
それぞれのドラムと連動してライトがOnOffしています。
DAWと照らし合わせた動画がこちらです
さいごに
今回はMIDIでスポットライトを動かすだけのお話でしたが
応用次第ではコンポーザーさんから直接いただいたSMFデータからゲームやバーチャルプロダクションのネタにできる可能性が出てきたと思うと個人的にワクワクします。
MIDIには他にもビジュアル演出に活かせそうな面白いパラメーターがたくさんあるのでこれを機にガチMIDI勢らしい?UEコンテンツを作っていきたいと考えています5
また、来年から積極的にLTや講演をしたいと考えていますのでこのようなネタでお話させていただける勉強会主催者さまのオファーもお待ちしております。
13日の金曜日ガン無視の内容でしたが楽しんでいただければ幸いです。
みんな、生き延びよう!
そしてHappyなクリスマス、そして年末年始を!