UE4初心者が頑張ってるブログ

Unreal Engine4を使用した開発メモ、及びそれに関連することについて不定期に書いています。

UE4 Procedural Midiをちょこっと分析して使ってみる

この記事は裏Unreal Engine 4 (UE4) Advent Calendar 2016への参加7日目の記事です。

qiita.com

 

※ページの最後に作成したプロジェクトの共有リンクを張っておきます。

 プロジェクトを直に見たい方はそちらをご覧ください。

 

昨日(6日)はalweiさんのロケットパンチ講座でしたが、

unrealengine.hatenablog.com

 

今日(7日)はDTMで作成したMIDI(.mid)ファイルをUE4上で再生してみよう回です。

プロジェクトの作成から始めて、音を再生するところまで書きたいと思います。

Procedural Midiはまだ公式のドキュメントが無いようなので、

手探り状態でいろいろ試してみます。

 

最終的にはこんな感じになりました。

www.youtube.com

録画ソフトの影響で音が途切れて聞こえる箇所があります。

 

(グレーマンたちが手を繋いでるように見える)

 

一応補足

音源の作成、及び.mid書き出しには

Aria Maestosaを使用しています。

http://ariamaestosa.sourceforge.net/

フリーで使えて、機能も充分なので私のお気に入り。

 

DTM : PC上で音を作ること(打ち込み音楽とか言われてるアレ)

.mid : 大体のソフトで読み込めるスタンダードmidiファイルのこと

 

DTMMIDIの詳しい説明は自分で調べてください。

先に言っておきますが私はDTM超初心者です!

 

本題

今回はUE4のマーケットプレイスにある

「Procedural Midiプラグインを使います。

https://www.unrealengine.com/marketplace/procedural-midi?lang=ja

f:id:MozPaca:20161206110020p:plain

「エンジンにインストールする」をクリックして、

このプラグインを使用したいバージョンを選択しましょう。

インストール可能なバージョンは4.12~4.14までです。(2016年12月7日現在)

 

導入することでできるようになること

マーケットプレイスのテクニカルノートより引用

・Ability to Import/Play Midi.

 Midi(.mid)ファイルの読み込みと再生ができます。

・Create Audio Notes Procedurally.

 Midi音声ファイルをプロシージャとして作成します。

・Create Procedural Audio Note in Sound Cue Editor.

 Sound Cueエディタで作成したプロシージャを扱えます。

(英語読めないので、ミスがありましたら教えてください) 

 

プロジェクトの作成

では早速やっていきましょう。

私の環境では現在4.14.0が起動しないので、

ver.4.13.2でやっていきます。

f:id:MozPaca:20161206120603p:plain

 

インストール済みのプラグインをクリックし、

Pricedural Midiがインストールされていることを

確認してから作成しましょう。

f:id:MozPaca:20161206120652p:plain

(今回のプロジェクトではSubstance Pluginは使いません) 

 

名前などは適当に。

f:id:MozPaca:20161206121439p:plain

 

プラグインが有効になっているか確認する 

先ほどエンジンにプラグインがインストールされているかの確認をしましたが、

今度はそのプラグインが有効になっているかを確認しましょう。

 

Edit→Plaginを開きます。

f:id:MozPaca:20161206122616p:plain

 

Installed→Audio→Midi AssetのEnabledにチェックが入っていたら

有効になっています。もし、チェックが入っていなければチェックを入れましょう。

f:id:MozPaca:20161206122815p:plain

 

.midをインポートする

通常UE4は.midファイルをインポートすると

f:id:MozPaca:20161206122155p:plain

このように読み込めません。

 

しかし、Procedural Midiプラグインを有効にしている場合

f:id:MozPaca:20161206123234p:plain

インポートボタンもしくはドラッグ&ドロップで読み込んでくれます。

 

ちなみにMidiファイルの中はこのようになっています。

f:id:MozPaca:20161206145451p:plain

配列の中に鳴らすべき音を示す数値が格納されています。

 

ブループリント以外で必要なものを作成する

先ほどの動画ではグレーマンが発光していましたが、

発光させるために必要なMeshとMaterialなどを準備したいと思います。

 

MeshにはStarter Contentに収録されているShape_Cubeを使用します。

Static Meshであれば何でも大丈夫のようです。

(グレーマンは一度Static Meshに変換してから使いました)

f:id:MozPaca:20161206143452p:plain

 

次にマテリアルですが、

色の変化などはDynamic Material Instanceで行うので、

f:id:MozPaca:20161206143738p:plain

このように、Emissive ColorにVector Parameterを入れておくだけでいいでしょう。

f:id:MozPaca:20161206143835p:plain

 

処理を書いていく

まずはActor型のブループリントを作成してください。

このブループリントは再生や描画に必要な処理の親クラスとして作成します。

f:id:MozPaca:20161206124542p:plain

 

名前はこんな感じ

f:id:MozPaca:20161206192328p:plain

 

ではBP_Baseを開いてください。

コンポーネントに「MIDI Processor Component」を追加します。

f:id:MozPaca:20161206131244p:plain

 

このコンポーネントMidiの再生に使用するイベントや、

再生スピードを変えることができるようです。

f:id:MozPaca:20161206131500p:plain

 

変数を一つ作成します。

MIDI Asset型の変数です。

どうやらインポートしたMidiファイルは

この型の変数に格納できるようです。

とりあえず、先ほど読み込んでおいた.midをデフォルト値に入れておきましょう。

f:id:MozPaca:20161206132103p:plain

 

ノードを組みます。

開始時にMidiのセットアップの処理を書きます。

f:id:MozPaca:20161206185849p:plain

 

次にBP_Baseから継承したファイルを作成しましょう。

情報の受け渡しを行うBP_PLayerBaseを作成します。

f:id:MozPaca:20161206193435p:plain

f:id:MozPaca:20161206193403p:plain

 

これらのBaseファイルを使用するファイルを作成します。

BP_Baseから継承してBP_Playerを作成しましょう。

f:id:MozPaca:20161206193819p:plain

 

Material Dynamic Instanceを戻り値とした配列の変数を作成します。

f:id:MozPaca:20161206193834p:plain

 

開始時にMeshを指定個数作成し、

音が再生されるたびにランダムに色を変える処理を書きます。

f:id:MozPaca:20161206194007p:plain

レベルに配置する際はこのBP_Playerを配置してください。

 

生成されたBoxが指定個数(15個)並んだ様子

f:id:MozPaca:20161206210704p:plain

 

鳴らしてみる

このままBP_Playerをレベルに配置し、

Playボタンを押すとMidi Asset変数に格納している

MIDI音源が再生されます。

 

MIDI音源を再生するならここまでで終了です。

まだいろいろ機能がありそうなので調べてみたいと思います。

 

こんな感じになりました。

www.youtube.com

 

気づいたこと

 今回Procedural Midiを触ってみて気づいたことがあります。

・アフタータッチや、ピッチベンドがかけられる?

サンプルを見ると、これらの特殊効果についての

記述がありました。もしかすると特定の音に対して、

特殊効果をかけられるかもしれません。

 

DTM上でパートの数によって発光するBoxの数が違う。

これは私がAria Maestosaを使用して作成したものですが

見てのとおりパートはグランドピアノ一つです。

www.youtube.com

これをUE4上で再生すると

このようにBoxが一つしか発光しません。

www.youtube.com

 

楽器や特定の音域でBoxの担当があるのかと思い、

同じ楽器で二つのパートを作ってみました。

www.youtube.com

UE4で再生し確認したところ、どうやら違うようです。

こちらは二つのBoxが発光していました。

www.youtube.com

Boxの発光数はDTM上のパートの数で決まるようです。

Procedural Midiを使う際には、パートの多い音源をおすすめします。

 

・純粋に面白い

これ一番大事じゃないでしょうか。

一見どこで使うかわからないような処理が多いですが、

Midiのような特殊なものを扱うのは楽しいです。 

 

プロジェクトはアップロードしています

今回作成したプロジェクトは

Googleドライブにアップロードしていますので参考までにどうぞ。

MidiTestProject.zip - Google ドライブ

 

明日

明日(8日)はてんちょー(@shop_0761)さんの

水彩風マテリアルをつくってみる」です。

マテリアルは勉強中なのですごく楽しみです。