見出し画像

UE5 MetaSound プロシージャルな音を作る 02 ~エンベロープを使ってアタック音を再生する~ #UE5 #MetaSounds

【今回のポジティブワード】
1年後の成功を想像すると日々の地味な作業に取り組むことができる
僕はその味をしめてしまったんですよ
~本田圭佑~

MetaSoundのノードは1つのノードに複数の音の知識が無いと何をしているのか分からないです。何をやっているか分からないけど見様見真似で音を再生することが出来るのですが、コントロール出来ないと自分の出したい音が出せません。地道に1つ1つのノードを丁寧に学習していくのが近道です。
今日はよく使いそうだけど全然分からないノードが沢山あるので勉強のしがいがあります。MetaSoundのノード数は多くは無いから、1年後の成功を想像して地味な作業に取り組みましょう。

【前回】

前回は【MIDI Note Noを指定してドの音を鳴らす】について書きました。今回は【エンベロープを使って短い音を再生する】について書いてみます。
「ド~」とずっと再生されてしまっているので、「ド」と単音を再生するようにノードを組んでいきます。
前回からの続きになります。

1. エンベロープを使ってアタック音を再生する

1.1 AD Envelope(Audio)でアタック音を再生する

前回作成した[MS_Procedual01]を複製して、[MS_Procedual02]を作成します。

[MS_Procedual01]をDuplicate(複製)して、[MS_Procedual02]を作成する

[AD Envelope(Audio)]を追加します。

右クリック > AD Envelope(Audio)

[Input:On Play]と[AD Envelope(Audio)]を接続します。
Print Log(Float)は削除します。

[Input:On Play]と[AD Envelope(Audio)]を接続

[AD Envelope(Audio):Out Envelope]と[Sine:Audio]を掛け算(Multiply)する処理を実装します。
[AD Envelope(Audio):Out Envelope]からドラッグ&ドロップし、[Multiply(Audio)]を追加します。

AD Envelope(Audio)からドラッグ&ドロップ > Multiply(Audio)

[AD Envelope(Audio):Out Envelope]と[Sine:Audio]を掛け算(Multiply)した結果を[Output:Audio]に接続します。

[AD Envelope(Audio):Out Envelope]と[Sine:Audio]を掛け算(Multiply)した結果を[Output:Audio]に接続

AD Envelopeの[Attack Time]と[Decay Time]を分かりやすくした図です。
Attack Time:Envelope Valueが1.0になるまでの時間
Decay Time:Envelope Valueが1.0になってから、0.0になるまでの時間

Attack TimeとDecay Timeについて

Sineノード単体では「ド~」とずっと再生されていました。
SineノードにAD Envelopeを掛け算することで「ド」と短い音(アタック音)が聞こえるようになります。

SineノードにAD Envelopeを掛け算することで「ド」をアタック音として再生させる

AD Envelopeの[Attack Curve]と[Decay Curve]を分かりやすくした図です。
デフォルト値の[1.0]はLinear(1.0)で数値が変化していきます。
[1.0]より値が小さくなるとカーブが[Logarithmic(対数)]のカーブに変わります。
[1.0]より値が大きくなるとカーブが[Exponential(指数関数)]のカーブになります。

Curveの形状

最後に[Looping]のチェックボックスをチェックし、[On Finished]を呼び出さないようにします。
[AD Envelope(Audio):On Done]が呼ばれるタイミングで、再び[AD Envelope(Audio):Trigger]が呼ばれてLoopします。

[AD Envelope(Audio):Looping]にチェック > On Finesedを呼び出さないようにする

[AD Envelope(Audio):On Done]で[Output:On Finished]を呼び出すとMetaSoundを停止するのでループは行われません。

On Finishedを呼び出すとMetaSoundが停止(強制終了)扱いになるのでループしない

AD Envelopeは太鼓のバチで叩いた時のようなアタック音を再現する時に使うようです。

1.2 ADSR Envelope(Audio)でアタック音を再生する

Envelopeノードは[AD Envelope]と[ADSR Envelope]の2種類が用意されています。
[ADSR Envelope(Audio)]を試してみましょう。

右クリック > ADSR Envelope(Audio)

[ADSR Envelope(Audio):Audio]と[Sine:Audio]を掛け合わせた音を再生するように編集します。
[AD Envelope]より[ADSR Envelope]の方が細かく値を設定できることが分かります。
この状態で再生しても[ADSR Envelope(Audio):On Done]が実行されず、[Sine:Audio]が実行された状態になります。

[ADSR Envelope(Audio):Audio]と[Sine:Audio]を掛け合わせた音を再生するように編集

[ADSR Envelope(Audio):Trigger Release]を実行するように[Input:On Release]を追加しましょう。

[ADSR Envelope(Audio):Trigger Release]からドラッグ&ドロップ > Promote To Graph Input

[Input Name]を[On Release]に変更します。

Input Name:On Releaseに変更

[Play]後に[On Release]をSimuleteすると、Trigger Release > On Done > On Finishが呼ばれて停止します。

[Play]後に[On Release]をSimuleteすると、
Trigger Release > On Done > On Finishが呼ばれて停止する

ADSR Envelopeにも[Attack Time]と[Decay Time]があります。さらに[Sustain Level]と[ReleaseTime]が追加されています。[Attack][Decay][Sustain][Release]の頭文字をとると[ADSR]になります。
ADRのTimeとSustain Levelについて分かりやすい図を用意しました。

[Attack Time][Decay Time][Release Time]と[Sustain Level]について

Trigger Releaseが呼ばれるまでSustain Levelの数値でSineのAudioが再生されるので、再生され続けていたことが分かりました。

Trriger Releaseが実行されないと Sustain Levelの値が継続する

[Sustain]の状態にも時間を指定してみます。
[Trigger Delay]を追加します。

右クリック > Trigger Delay

Sustain Timeが[0.2(秒)]になるように[Trigger Delay:Delay Time]に[0.41]を設定します。
[Play]を押すと、[0.41]秒後に[ADSR Envelope(Audio):Trigger Release]が実行されるようになります。
Sustain Timeを求める数式です。
Sustain Time = Delay Time - (Attack Time + Decay Time)
0.2 = 0.41 - (0.01 + 0.2)

Inputに[Attack Time],[Decay Time],[Sustain Time]を作成して、Delay Timeを求めるように計算すると良いかもしれません。
Delay Time = Attack Time + Decay Time + Sustain Time
0.41 = 0.01 + 0.2 + 0.2

Sustain Time = Delay Time - (Attack Time + Decay Time)

ADSR Envelopeでは[Attack Curve]と[Decay Curve]の他に[Release Curve]が追加されます。分かりやすくした図を作成しました。
デフォルト値の[1.0]はLinear(1.0)で数値が変化していきます。
[1.0]より値が小さくなるとカーブが[Logarithmic(対数)]のカーブに変わります。
[1.0]より値が大きくなるとカーブが[Exponential(指数関数)]のカーブになります。

Curveの形状

ADSR Envelopeはピアノの鍵盤のように押した時に音が出て(Attack > Decay)、指を押させている間は音が出続け(Sustain)、指を鍵盤から離した時に徐々に音が消えていく(Release)という状態遷移を再現する時に使うようです。

まとめ

図を作って見てようやくEnvelopeの正体が見えてきました。1つ1つのノードの意味を調べるだけでもMetaSoundや音楽の奥深さに「よくできているなぁ~」と驚きを隠せません。MetaSound面白いです!
次回はSineから出るAudioをクリアに聞こえるように修正して、より音を聴こえやすくしてみます。

ADSR Envelopeを学習したことでより音に深みを出せるようになりました。

この記事が気に入ったらサポートをしてみませんか?