関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2019.07.17UE4UE/ Audio
執筆バージョン: Unreal Engine 4.22 |
はじめまして、エンジニアの片平です。
今回はUE4.22で新規追加された”TimeSynth“を使用し、BGMに同期した演出を作ってみます。
新たなオーディオコンポーネントであり、従来のUE4の機能では困難だったオーディオ再生位置の正確な管理が可能となります。結果として、インタラクティブミュージックや音楽に合わせた視覚的演出がバツグンに作りやすくなります!
その他に、TimeSynth には音量のグループ化、フィルター、フィルターを時間的に変化させるエンベロープ機能なども搭載されていますが、これらの機能についてはこの記事では扱いません。
なお、この機能は早期アクセスのため今後のアップデートによっては仕様が変更される可能性があります。ご留意ください。
それでは、今回は TwinStickShooter プロジェクトを改造して以下の3つの機能を実装してみようと思います。
① BGMをループさせる
② BGMに同期したアニメーション
③ BGMに同期したオーディオ再生
プロジェクトを開いたら、まず Audio>TimeSynth プラグインを有効にします。
再起動を求められるので再起動します。
使用するオーディオファイルをまとめてインポートしておきます。
BGM … 常に後ろで流れているループBGMです。トランス風味。
melody1~3 … 敵を破壊した時に鳴るメロディです。
今回は TwinStickPawn に TimeSynthComponent を追加しました。
レベルブループリントで使う場合は Begin Play に AddTimeSynthComponent を繋ぎます。
指定した TimeSynthClip を再生します。再生タイミングは TimeSynthClip の設定で指定した ClipQuantization になります。(後述)
戻り値のハンドラで再生停止やフェードアウトの制御ができます。
指定した QuantizationType のタイミングで OnQuantizationEvent デリゲートに繋いだイベントを呼び出します。
デリゲート先のイベントには QuantizationType 、 NumBars、 Beat が渡され、現在の再生位置が特定できます。
以下のように TwinStickPawn の Blueprint を組みます。
SetBPM でBPMを設定します。今回のBGMはBPM = 147なので147.0を設定します。
AddQuantizationEventDelegate ノードで4小節毎に呼ばれるイベント 4BarEvent と、1拍毎に呼ばれるイベント BeatEvent を作ります。
Activate で TimeSynthComponent を有効化します。
コンテンツブラウザの右クリックメニューから サウンド>TimeSynthClip を選択し、新たな TimeSynthClip を作成します。
作成した TimeSynthClip を開き、各種設定をします。
主要な部分を解説します。
<Clip>
Sounds : 新しいエレメントを追加し、Sound Wave にBGM用のオーディオである「BGM」を選択します。
<VolumeControl>
Fade in Time : フェードインさせる必要はないので NumBars、Beats 共に0にしておきます。
Apply Fade Out : フェードアウトさせる必要はないのでチェックを外しておきます。
<TimeControl>
ClipDuration : clip の長さです。今回のBGMは4小節ちょうどの長さのため NumBars = 4、NumBeats = 0を設定します。
ClipQuantization : クリップを再生するタイミング(間隔)の設定です。BGMの場合は小節の頭から鳴って欲しいため 1Bar を選択します。
ちなみに Bar = 小節、Beat = 拍 です。
PlayClip を追加します。ゲーム開始時に再生を開始し、以降は 4BarEvent で4小節毎に鳴らすようにしています。
BGMが切れ目なくループ再生されてますね。
ターゲットがBGMに合わせて鼓動するようにしてみます。
BeatEvent から全てのターゲットActorの BeatProduction を呼びます。
ちなみに BeatProduction ではタイムラインでスケールを変動させて鼓動アニメーションを実装しています。
音楽の拍に合わせてターゲットが鼓動します!
ターゲットを破壊した時、賑やかしのメロディが入るようにします。
破壊効果音用の TimeSynthClip を作成します。
<Clip>
Sounds : 3つのメロディをランダムで鳴らすため、3つ設定しています。
※RondomWeightで抽選に重みを付けることもできますが、今回は均等にしたいので 1.0 のままです。
<TimeControl>
ClipQuantization :1小節の始まりと同時に鳴らしたいので1Barにしています。
単純にターゲット破壊時にこのイベントを呼べばOKです。自動的に次の1小節の始まりを待って同期再生してくれます。
※同タイミングで複数の発音すると煩くなるので実際の実装時には同時発音制御が必要です。
ターゲットを破壊した後にBGMと同期したメロディが流れました!
自機ショットを1/16音符で同期させたり、ライトの色を拍に合わせて切り替えたりしてます。
音楽と同期する演出は非常に効果的です。工夫次第で色々出来ると思うので是非試してみてください!
この機能で本格的なインタラクティブミュージックもやってみたいです…