このチュートリアルでは、MetaSound を使用してプロシージャルな音楽を作成する方法を学びます。 アドベンチャー ゲーム用にプロシージャルに生成された BGM を作成します。
MetaSounds は、ブループリント ビジュアル スクリプティング システムと同様、ノードベースのシステムを使用してサウンド ソースを生成できる高性能オーディオ システムです。
開始する前に
新規ユーザー向けの Unreal Engine向けドキュメントで取り上げられている次のトピックを理解していることを確認してください。
ノードの追加や接続など、ブループリントの基本
MetaSound でプロシージャルな音楽を作成する。
まず、MetaSound アセットを作成します。 次の手順を実行します。
コンテンツ ブラウザ に移動し、[Content (コンテンツ)] > [AdventureGame] > [Artist (アーティスト)] > [Audio (オーディオ)] フォルダに移動します。
[Audio (オーディオ)] フォルダで [Music (音楽)] という新しいフォルダを作成します。
Music」フォルダ内を右クリックし、[Audio (オーディオ)] > [MetaSound Source (MetaSound ソース)] を選択してください。
このアセットに
MS_BGMという名前を付けます。これは MetaSound Background Music を表します。アセットを開きます。
このアセットが MetaSound エディタで開きます。 新しいウィンドウでは、グラフに Input、Output On Finished、および Input Out Mono の 3 つのノードが表示されます。
このオーディオソースが再生されると Input トリガーが実行されます。 MetaSound は常に入力から始まります。
Output On Finished トリガーは、ソースの再生を停止するために実行されます。 ブループリントなどの別の場所からオーディオを停止している場合、このノードを使用してオーディオ ソースの再生を停止する必要はありません。 この場合は、オーディオの開始/停止にブループリントを使用するため、このノードを使用する必要はありません。
Output Out Mono ノードは MetaSound グラフの最終的なオーディオ出力を表し、上流の全てのオーディオ信号を単一チャンネル (モノラル) の出力にルーティングします。 このプラグインに接続されている全てのノードは効果的にミックスダウンされ、サウンドの出力としてエンジンに送信されます。
音楽のテンポおよびリズムの設定
まず、音楽のテンポとリズムを設定するノードを作成してください。 次の手順を実行します。
Input ノードのピンをドラッグして、Trigger Repeat ノードを追加します。
Trigger Repeat ノードで Period ピンをドラッグし、BPM To Seconds ノードを追加します。 全音符の分割 を「16」 に設定します。
BPM To Seconds ノードで BPM ピンをドラッグし、Promote to Graph Input を選択します。
画面の左上にある [Members (メンバー)] パネルで、Input の名前を BPM から Note In に変更します。
[Details (詳細)] パネルで、Note In ノードの [Default Value (デフォルト値)]を「60」に変更します。 また、ノードの下部でこの値を変更することもできます。
Trigger Repeat ノードから、RepeatOut ピンをドラッグし、新しい Trigger Counter ノードを追加します。
Trigger Counter ノードを選択し、Reset Count を 「8」 に設定します。
このセクションではテンポとリズムを設定します。 さらに、追加した 4 つのノード (Trigger Counter、Trigger Repeat、BPM To Seconds、および Input) をハイライト表示して C キーを押すと、全てのノードを含むコメント ボックスが追加されます。 このコメント ボックスに「Tempo and Rhythm」という名前を付けます。
メロディを生成する
次に、定義したテンポとリズムに基づいてメロディを生成する機能を作成します。 次の手順を実行します。
Trigger Counter ノードから:
On Trigger ピンをドラッグし、Random Get (Float:Array) ノードを追加します。
Trigger Counter ノードの On Reset ピンをドラッグし、Random Get ノードの Reset ピンに接続します。
Random Get ノードから In Array ピンをドラッグし、Scale to Note Array ノードを追加します。
Scale to Note Array ノードから Scale Degrees ピンを引き出して Promote to Graph Input を選択して追加し、「Scale」という名前を付けます。
Random Get ノードから Seed ピンをドラッグし、Random (Int) ノードを追加します。
Random (Int) ノードから Next ピンをドラッグし、Trigger Counter ノードの On Reset ピンに接続します。
このセクションはメロディを生成します。 もう一度全ての新しいノードをハイライトし、「Melody Generation」というコメント ボックスを追加します。
メロディを合成する
次に合成を作成し、メロディが実際にどのように聞こえるかを形作ります。 これは生成されたメロディを可聴サウンドに変換することを意味します。 次の手順を実行します。
Random Get ノードで Value ピンをドラッグし、Add (Float) ノードを追加します。
Add ノードで 2つ目の入力ピンの値を「0」から「48」に変更します。
Add ノードから exec ピンをドラッグし、MIDI To Frequency (Float) ノードを追加します。
MIDI To Frequency (Float) ノードから Out Frequency ピンをドラッグし、Sine ノードを追加します。
Sine ノードの Audio 出力ピンからドラッグし、Add (Audio) ノードを追加します。
Sine ノードをもう 1 つ追加して この Add ノードに接続します。 Add ノードから別の入力ピンをドラッグし、Sine ノードを追加します。
新しい Sine ノードで、Frequency ピンをドラッグし、MIDI To Frequency (Float) ノードを追加します。
MIDI To Frequency ノードから MIDI In ピンをドラッグし、Add (Float) ノードを追加します。
Add ノードで操作を行います。
最初の入力ピンを、最初の Sine ノードに接続されている Add ノードに接続します。
2 つ目の入力ピンをドラッグして [Promote to Graph Input (グラフ入力に昇格)] を選択します。 「Detune」と名付けます。
Detune 入力を選択し、[Details (詳細)] パネルでその範囲を 0 と 12 に変更します。
[Details (詳細)] パネルで [Default (デフォルト)] を 12 に変更します。
生成されるメロディが合成されました。 この新しいセクションにコメント ボックスを追加し、「Synthesis」という名前を付けます。
エンベロープでサウンドを形成する
次に、エンベロープを追加してサウンドの時間経過を設定し、より自然な結果になるように開始、サステイン、フェードアウトを制御します。
エンベロープを追加するには、次の手順を実行します。
以前作成したメロディ生成セクションにスクロールしてください (コメント ボックスを追加した場合は、Melody Generation という名前)。 Random Get (Float:Array) ノードからOn Next ピンをドラッグし、AD Envelope (Audio) ノードを追加します。 この新しいノードを、合成セクションで追加した 2 つの Sine ノードの後に移動します。
このノードから Out Envelope ピンをドラッグし、Multiply (Audio) ノードを追加します。
この Multiply ノードの 2 番目の入力ピンをドラッグし、2 つの Sine ノードを接続した Add (Audio) ノードの出力ピンに接続します。
AD Envelope (Audio) ノードで、Decay Time を「0.2」に変更します。
Multiply (Audio) ノードの出力ピンをドラッグし、すでに MetaSound ソースにある Output Out Mono ノードに接続します。
次に、MetaSound ウィンドウの上部にあるツールバーの [Play] ボタンを押します。 プロシージャルに生成された音楽が継続的に再生されます。
Unreal Engine でプロシージャルな音楽を作成する方法の詳細については、MetaSound でプロシージャルな音楽を作成するのページをご覧ください。
ブループリントを使用してゲーム内で音楽を再生する
先に進む前に、レベル内で BGM を再生するブループリントを作成します。
このブループリントはレベルに追加されますが、視覚的表現がないため、Billboard コンポーネントをブループリントに追加します。 このコンポーネントは、レベルの編集時に見つけられるようにエディタで表示する 2D スプライトを追加します。ただし、ゲーム内では表示されません。
背景音楽のブループリントを作成するには、次の手順を実行します。
コンテンツ ブラウザ に移動し、[Content (コンテンツ)] > [AdventureGame] > [Artist (アーティスト)] > [Audio (オーディオ)] > [Music (音楽)] に移動します。
右クリックして、Actor 親クラスから派生した新しいブループリント クラスを作成します。 ブループリント BGM を表す「BP_BGM」という名前を付けます。
[Components (コンポーネント)] パネルで [Add (追加)] をクリックし、Billboard コンポーネントを追加します。 [Details (詳細)] パネルでは、スプライトがデフォルトで S_Actor に設定されていることを確認できます。 スプライトは変更することも、そのままにすることもできます。
[EventGraph (イベント グラフ)] タブに移動して機能の作成を開始します。
Event BeginPlay ノードからドラッグし、Branch ノードを追加します。
Branch ノードで、Condition ピンをドラッグし、[Promote to Variable (変数へ昇格)] を選択します。 変数の名前を「Active」にします。 この変数は、このオーディオ ソースがアクティブかどうかを判断するために使用されます。
[My Blueprint (マイ ブループリント)] パネルの [Variable (変数)] リストで、Active 変数の横にある目のアイコンをクリックして開くと、インスタンスが公開されてレベル エディタで編集可能になります。
ブループリントをコンパイルし、[Details (詳細)] パネルを使用して、Active 変数の [Default Value (デフォルト値)] が true (有効) であることを確認します。
Branch ノードの True ピンをドラッグし、Play Sound 2D ノードを追加します。
Play Sound 2D ノードでドロップダウンを使用し、Sound ピンを MS_BGM に設定します。
Play Sound 2D ノードで下向き矢印をクリックしてノード オプションを展開します。 Volume Multiplier ピンをドラッグし、Promote to Variable (変数へ昇格) を選択します。
変数の目のアイコンをクリックし、変数を公開して編集可能にし、ブループリントをコンパイルして、デフォルト値を「0.5」に変更します。
ブループリントをコンパイルして保存します。
Play Sound 2D ノードの「2D」は、レベル内のプレイヤーの位置に関係なくサウンドが再生されることを示しています。 3D 空間で空間化されていないため、距離と方向がプレイヤーの聞こえ方に影響を与えることはありません。
ゲーム内で音楽をテストする
次にレベル エディタに戻り、BP_BGM ブループリントをレベルに追加します。
レベルにある BP_BGM アクタを選択し、[Details (詳細)] パネルで追加した 2 つの変数が正しく設定されていることを確認してください。[Active] がオンに切り替わり、[Volume Multiplier] が「0.5」に設定されます。
Volume Multiplier にさまざまな値を試し、ユース ケースに最適な値が何かを確認してください。 これは BGM であるため、ボリュームをより低い値に設定して控えめにすることもできます。
では、ゲームをプレイしてみましょう。 作成された音楽がバックグラウンドで再生されるのを聞くことができるようになります。
次の内容
次のモジュールでは、プレイヤー キャラクターにダイナミックなフットステップ サウンド エフェクトを追加し、キャラクターが現在移動している床の種類に応じて異なるサウンドを再生する方法を学習します。