アクセルを踏むとエンジン音が高くなり、離すと落ち着いた音へ戻る。ゲームの音は、素材を再生するだけでなく、操作に合わせて変化すると動きが伝わりやすくなります。
MetaSounds は、音の再生や加工をノードで組み立てる仕組みです。この記事では1つのエンジン音を鳴らし続け、キーを押している間だけ音を高くします。車の移動処理は用意せず、「ゲーム側の値が、鳴っている音へ届く」ところを小さく試しましょう。

この記事でわかること
- Sound CueとMetaSoundsの使いどころを比べる
- 音を鳴らす合図・音声・設定値の線を読み分ける
- エンジン音をループし、Nキーで高さを変える
- 値の変化をなめらかにして、加速するような音にする
BlueprintでActorを作り、ノードをつなげられる方を想定しています。音素材をUEへ取り込むところから確認したい場合は、Sound WaveとSound Cueの記事を先にどうぞ。
Sound Cueとの違い:音をどこまで組み立てるか
Sound Cue は、用意した音素材を選ぶ、混ぜる、音量や高さを変える、といった鳴らし方を組むアセットです。「3種類の足音から1つ選ぶ」なら、少ないノードで作れます。
MetaSoundsでも同じように素材を鳴らせます。そのうえで、波形から音を作ったり、音声信号を加工したりするところまで、自分で組み立てられます。たとえば「エンジン音を高くしながら、風の音も混ぜる」といった複数の変化を、1つのグラフで扱えます。

| 作りたいもの | 選び方の目安 |
|---|---|
| 足音をランダムに選び、少し高さを変える | Sound Cue でも作れる |
| 波形やノイズから音を作り、加工を組み合わせる | MetaSoundsを検討する |
| すでに問題なく鳴っているSound Cue | 必要な変更がなければ、そのまま使える |
再生中に値を変えられるのはMetaSoundsだけ、という違いではありません。 Sound Cueにも、名前付きのパラメータで音の高さなどを変える仕組みがあります。今回は、MetaSoundsで音を組む第一歩として、数値を1つ受け取る方法を覚えます。
最初はSourceを作る
今回は Third PersonのBlueprintテンプレート で試します。素材には、一定の高さで鳴っているエンジン音の .wav を1つ用意してください。ループ用につなぎ目を整えた数秒程度の音が向いています。手元になければ、同じように伸びる機械音でも高さの変化を試せます。
説明をそろえるため、素材は Mono(音声が1チャンネル) を使い、取り込んだSound Waveを SW_EngineLoop と名付けます。Stereoの素材で進める場合は、後述のWave Playerと出力形式もStereoにそろえてください。
コンテンツブラウザの空白を右クリックし、「Audio > MetaSound Source」を選んで MS_EngineDemo を作ります。MetaSoundの項目がない場合は「Edit > Plugins」でMetaSoundプラグインの有効状態を確認します。
似た名前の MetaSound Patch は、他のMetaSoundから使う部品です。たとえば共通の風の加工をまとめ、複数の音へ組み込むときに使います。Sourceは再生する音、Patchはその中で使う部品 と分ければ、最初に選ぶものが分かります。

Wave Playerで音をループする
MS_EngineDemo を開き、まずは高さを変えずに音を鳴らします。
- ツールバーの「MetaSound」を選び、詳細の「Output Format」を Mono にします。
- 「Interfaces」パネルで UE.Source.OneShot を外します。これは「1回鳴り終えたら終了する音」のための設定です。今回は止めるまで鳴らすため、使いません。
- グラフの空白を右クリックし、Wave Player (Mono) を追加します。
- 「Wave Asset」に
SW_EngineLoopを選び、「Loop」をON、「Pitch Shift」を0にします。 On Playの出力をWave PlayerのPlayへ、Wave PlayerのOut MonoをグラフのOut Monoへつなぎます。

Wave Player は、Sound Waveを実際に再生するノードです。On Play は、このMetaSoundの再生が始まったときの合図。その合図でWave Playerが動き、出てきた音が Out Mono を通って聞こえます。
ツールバーの再生ボタンを押し、音が繰り返し鳴 ればこの段階は成功です。停止ボタンで止めて保存します。つなぎ目でプツッと鳴る場合は、素材自体のループのつなぎ目も確認してください。LoopをONにするだけで、どんな素材も滑らかにつながるわけではありません。
線を読む:合図・音声・データ
グラフの線は、何を運んでいるかで読むと分かりやすくなります。先ほどの最小例にも、次の3つの役割があります。
| 役割 | 運んでいるもの | 今回の例 |
|---|---|---|
| Trigger(トリガー) | 「今、再生を始めて」という合図 | On Play → Play |
| Audio(音声) | 耳へ届く音そのもの | Out Mono → Out Mono |
| データ | 素材や設定値 | Wave Asset、Pitch Shift |
トリガーは合図が出たときに働き、音声は再生中に流れ続けます。再生開始の合図をつなぐだけでは音は聞こえません。音声の出口もつなぐ 必要があります。

データにも型があり、Pitch Shift は Float(小数を扱える数値) です。素材を指定する Wave Asset とは別の種類なので、ピンの名前 と型を見てつなぎます。型の変換ノードが使える組み合わせもありますが、ここでは数値は数値へ、音声は音声へつなげば十分です。
Inputを作り、音の高さを試す
次は、Pitch Shift を外から変えられるようにします。Input は、MetaSoundが外部から値を受け取る入口です。「音の高さをどれだけずらすか」という入口を1つ用意します。
- Wave Playerの
Pitch Shift入力ピンから空白へドラッグし、「Promote to Graph Input」を選びます。 - 作られたInputを選び、詳細の「General > Input」で名前を
PitchOffsetにします。 - 型がFloat、既定値が
0であることを確認し、「Is Constructor Pin」はOFFにします。
Constructor Pinは、再生前に値を決めておくための設定です。今回は鳴らしながら変えるため、OFFにします。また、外から受け取りたい値は「Variables」ではなく Inputs に置きます。

ピッチは音の高さ のことです。ここで扱う Pitch Shift の単位は 半音。ピアノの白鍵と黒鍵を含め、すぐ隣の鍵盤へ移る1つ分の高さに相当します。
| PitchOffset | 聞こえ方 |
|---|---|
0 | 元の高さ |
6 | 半音6つ分、高くなる |
12 | 1オクターブ高くなる |
「0にしたら無音になる」のではなく、高さをずらさない という意味です。Audio Componentの Pitch Multiplier は倍率で、元の高さが 1。名前が似ていますが、基準値が違います。
Blueprintを組む前に、音だけで試せます。PitchOffset を選び、「Editor Options > Widget」を「Slider」、範囲を 0~6 に設定してください。MetaSoundを再生したまま、Input上のスライダーを左から右へ動かします。音が高くなり、左へ戻すと元へ戻れば、InputからWave Playerまでつながっています。停止後、既定値を 0 に戻して保存します。
実践:Nキーで音を変える
今度はエディタのスライダーを、ゲーム中のキー操作へ置き換えます。Audio Component は、Actorに付ける音の再生部品です。鳴っている音に「この値へ変えて」と伝える相手にもなります。
音を鳴らすActorを置く
- Actorを親にしたBlueprint
BP_EngineAudioDemoを作ります。 - 「Components > Add」から「Audio」を追加し、
EngineAudioと名付けます。 EngineAudioを選び、次のように設定します。
| 設定 | 値 | 理由 |
|---|---|---|
| Sound | MS_EngineDemo | 先ほど作った音を使う |
| Auto Activate | ON | ゲーム開始時に鳴らす |
| Volume Multiplier | 0.4 | 聞き比べやすい控えめな音量から始める |
| Pitch Multiplier | 1.0 | 高さはMetaSound側で変える |
| Allow Spatialization | OFF | この実験では方向による変化を付けない |
| Attenuation Settings | None | 距離で小さくしない |
| Override Attenuation | OFF | 独自の距離設定も使わない |

「Class Defaults」で Auto Receive Input を検索し、Player 0 にします。このActorで1人目のプレイヤーのキー入力を受け取る設定です。コンパイル・保存後、BP_EngineAudioDemo をレベルに 1つだけ 置きます。
レベルをPlayして、音が鳴り続けることを確かめてから停止してください。ここで鳴らなければ、キーの処理を組む前に、MetaSound単体の試聴とAudio Componentの Sound を見直します。
押したら6、離したら0を送る
BP_EngineAudioDemo のEvent Graphで、空白を右クリックしてキーボードの N イベントを追加します。Pressed が押した瞬間、Released が離した瞬間です。
「Components」の EngineAudio をグラフへドラッグし、取得ノードを置きます。これは「どの再生部品に命令するか」を指定するための 参照 です。出力ピンから Set Float Parameter を作り、もう1つ同じノードを置きます。
まずPressed側をつなぎます。図中の角括弧は入力欄を表すので、名前には PitchOffset だけを入力してください。

続いて、同じNイベントのReleased側から、もう1つのSet Float Parameterへつなぎます。図は経路ごとに分けていますが、Nイベントを2つ作る必要はありません。

| 接続・設定 | 押したときのノード | 離したときのノード |
|---|---|---|
| 実行入力 | Nの Pressed から | Nの Released から |
| Target | EngineAudio の取得ノードから | 同じ EngineAudio から |
| In Name | PitchOffset | PitchOffset |
| In Float | 6.0 | 0.0 |
Set Float Parameter は、名前を指定して数値を送るノードです。In Name にはMetaSoundのInput名をそのまま写し、In Float に値を入れます。Targetへ MS_EngineDemo のアセットを直接指定するのではなく、その音を鳴らしているEngineAudioへ送る のがポイントです。
聞き比べて、届く仕組みを確かめる
コンパイル・保存後、レベルをPlayし、ゲーム画面を一度クリックしてから N を押します。
- 押していない間:元の高さで鳴る
- 押している間:高い音になる
- 離した瞬間:元の高さへ戻る
キーを押すたびに音を作り直す処理はありません。最初から鳴っている1つの音へ、0 と 6 を送っています。
仕組みを確かめるなら、押したときの In Float を一時的に 12 へ変えてみてください。さらに高く聞こえれば、数値が音へ届いています。次に In Name を PitchOffset_Test へ変えると、対応するInputがないため高さは変わりません。試したら名前を PitchOffset、値を 6 へ戻します。
| うまくいかない状態 | 確認するところ |
|---|---|
| MetaSound単体でも無音 | Wave Assetの指定、On PlayからPlayへの線、Out Monoへの線 |
| 単体では鳴るがゲーム中は無音 | Actorをレベルへ置いたか、SoundとAuto Activateの設定 |
| 音は鳴るがNで変わらない | Auto Receive Input、ゲーム画面の入力フォーカス、TargetとIn Name |
| Inputを変えても反応しない | Inputsに作ったか、Pitch Shiftへの線、Is Constructor PinがOFFか |
| キーを離しても高いまま | Released側の実行線とIn Float=0 |
| 音が重なって聞こえる | 試聴を停止したか、Actorを複数置いていないか |
キー入力が届くか迷ったら、Nイベントから一時的に Print String をつなぐと、音の問題か入力の問題かを分けられます。
急な変化をなめらかにする
このままだと、キーを押した瞬間に高さが切り替わります。少し時間をかけて高くすると、エンジンの回転が上がるような変化になります。
使うのはMetaSoundの InterpTo。今の値から目標の値へ、指定した時間をかけて近づけるノードです。このように値の間を埋めることを 補間 と呼びます。
MS_EngineDemo で、PitchOffset から Pitch Shift へ直結していた線を外し、間にInterpToを挟み ます。

PitchOffset→ InterpToのTargetInterp Time=0.2秒- InterpToの
Value→ Wave PlayerのPitch Shift
再びPlayしてNを押したり離したりすると、上がるときも戻るときも少し滑らかになります。Interp Time を 1.0 にすれば変化がゆっくりになり、違いを聞き取りやすくなります。Blueprintから毎フレーム送り直す必要はありません。送り先の目標値が変わった後は、MetaSound内で値が変化します。
おまけ:ランダムな足音と次の使い道
単発の足音では、選んでから鳴らす
ループするエンジン音と、1回で終わる足音では、終わり方が違います。足音用に別のSource MS_FootstepRandom を作るなら、UE.Source.OneShotを残し、Wave Playerの On Finished をグラフの On Finished へつなぎます。「素材を鳴らし終えたので、この音も終了してよい」と伝えるためです。ここでもOutput FormatはMono、素材はMonoの足音3種類を使います。
複数の素材から選ぶには Random Get (WaveAsset:Array) を使います。配列は、SW_Footstep_01~03 のような素材を並べたリストです。Next で1つ選び、選んだ素材を Value、選び終えた合図を On Next から出します。

足音用Sourceの「Members > Variables」で変数 Footsteps を追加し、型をWaveAsset、配列をONにします。既定値の要素を3つ追加して素材を設定し、Footstepsをグラフへドラッグして In Array へつなぎます。On Play → Next、On Next → Play、Value → Wave Asset の順に組み、Wave PlayerのLoopはOFFにします。音声のOut Mono同士もつなぎます。
「どの音を選んだか」と「選び終えた合図」は別の線 です。これを分けて読めると、トリガーの役割がつかめます。No Repeats = 1 は直前に選んだ要素を避ける設定です。足音を毎回別の再生として鳴らす場合は、選択履歴を共有する Enable Shared State もONにします。
保存して試聴すると、足音が1回鳴って終了します。アニメーションの足が着く瞬間に鳴らす方法は、Sound Cueの記事の足音の実践と共通です。そこで再生するSoundに、このSourceを指定できます。
Audio Componentの用意の仕方は1つではない
今回はActorへAudio Componentを追加しました。必要なときに Spawn Sound 2D や Spawn Sound Attached で音を鳴らし、その戻り値のAudio Componentを使う方法もあります。Play Sound 2D や Play Sound at Location にはこの戻り値がないので、後から操作するなら、最初か らAudio Componentを手元に残せる鳴らし方を選びます。
数値以外に「今、この処理を始めて」という合図も送れます。MetaSoundにTrigger型のInputを作り、Audio Componentへ Execute Trigger Parameter で同じ名前を指定します。音量や高さの調整はFloat、1回の合図はTrigger、と役割で分けます。
ゲームの値を音につなぐ
Nキーの 0 / 6 を、車の速度やアクセル量から求めた値へ置き換えれば、操作に合わせたエンジン音へ発展できます。音を車の位置から聞かせる段階では、距離減衰と3Dサウンドの記事へ進んでください。
また、同じInputの仕組みで複数の音の音量を変えると、探索中は静かで、戦闘に入ると楽器が増えるBGMにも使えます。インタラクティブミュージックの記事では、その組み立て方を扱います。
今回は「入口の名前」「送り先のAudio Component」「変えたい数値」の3つがそろうと、鳴っている音を操作できました。自分のゲームなら、どの値を音へつなぐと動きが伝わるかを考えてみてください。
まとめ
- Sound Cueは「用意した音を選んで鳴らす」、MetaSoundsは「音そのものを組み立てる」
- 合図(実行)・音声・設定値で、線の意味が違う
- 外から値を渡せば、鳴らしながら高さや速さを変えられる
- 急な変化はなめらかにすると、機械らしさが減る
選ぶときの問いかけは、「鳴らし方を変えたいのか、音自体を作りたいのか」 です。前者ならCueで足ります。
素材と設計図の違いは Sound WaveとSound Cue、距離や音量の調整は Attenuationとミキシング へ。
参考:MetaSounds Quick Start、MetaSounds Reference Guide、MetaSound Function Nodes、Sound Cue Reference。