コンテンツにスキップ

UE5のSoundWaveを事前解析してリップシンクを再生する

v0.3.0 · UE 5.8.2 / Win64

**Unreal Engine 5(UE5)**で収録済みの台詞を使う場合は、SoundWaveをエディタで一度解析し、ARKit 52表情カーブをClipアセットに保存できます。ロード済みClipを既存のPlay Expression Clipノードへ渡せば、再生時のモデルロード・解析用デコード・推論を省けます。解析待ちを省く機能で、アセット読み込みや音声出力までの遅延は別に残ります。

用途 選ぶ経路
あらかじめ決まった台詞を繰り返し再生 本ページの保存済みClip
ゲーム中にSoundWaveを解析 従来のAnalyze SoundWave Async
マイク・外部PCMを逐次処理 ライブ入力

初版の対応環境はUE 5.8.2 / Win64です。通常のSoundWave、mono / stereo、8〜192 kHz、最大300秒、非ループ・1倍速を対象とします。外部WAV / MP3は先にUEへインポートしてください。従来の動的解析とライブ入力は引き続き利用できます。

保存されるのはfloat32のARKit 52カーブ(30 fps)です。カーブ配列だけで約366 KiB/分となり、音声とメタデータの容量は別です。Visemeは保存しません。公開ソースのViseme変換を利用する場合、方式・テンプレート・入力補正・強度を再生時に変更できますが、その変換処理のCPU負荷は残ります。

  1. Content Browserで通常のSoundWaveを選択します。複数選択も可能です。
  2. 右クリックしてGenerate LAM Expression Clipを選びます。
  3. Style / Smooth / Suppress Silent Mouth / Symmetrize / Auto Blink / Blink Seedを設定します。
  4. Generateを押し、完了を待ちます。失敗理由は画面とOutput Logに表示されます。
  5. Save Allで生成アセットをディスクに保存します。

Styleは0〜11のスタイル番号で、12種類の感情ラベルではありません。各設定の意図は表情カーブ設定を参照してください。生成の完了だけではディスクへ保存されません。

元音声と同じフォルダーに<音声名>_LAMClipが生成されます。同じ音声に対応する既存の出力Clipは更新され、別種類・別音声の同名アセットがある場合は_1、_2のように連番が付きます。設定違いを残す場合は、先に既存Clipを複製またはリネームしてください。

バッチは1音声ずつ処理し、失敗した項目を記録して次へ進みます。PIE中は生成できません。Cancelまたはウィンドウを閉じる操作で残りの処理を中止します。実行中の推論呼び出しは完了まで待ちますが、その結果は反映しません。完了済みClipと、更新に失敗したClipの旧データは保持されます。

SoundWaveを右クリックしたメニューのGenerate LAM Expression Clip。

SoundWaveの右クリックメニューから生成を開始する · 原寸画像を開く

  1. Content BrowserでSoundWaveを選択し、この項目を開きます。

撮影 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · v0.3.0に含まれる操作。

Style 0、SmoothとSuppress Silent Mouthを有効、SymmetrizeとAuto Blinkを無効、Blink Seed 1234にした生成設定。

Clipに保存する解析設定 · 原寸画像を開く

  1. Styleは0〜11の話者スタイル番号です。感情名ではありません。
  2. SmoothとSuppress Silent Mouthは有効、Symmetrizeは無効の例です。
  3. Auto Blinkは無効。Blink Seed 1234は自動瞬き用のシードです。

設定後、ダイアログ下部のGenerateを押します。この生成ダイアログはv0.3.0に含まれます。

撮影 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · v0.3.0に含まれる操作。

進捗バーとFinished. 1 clips, 0 failures. Save generated assets to keep them.の実際の完了表示。

生成完了を確認する · 原寸画像を開く

  1. この撮影では1件成功、失敗0件でした。完了後も保存が必要です。

1音声を生成した操作例です。新しい性能測定や網羅的な検証結果ではありません。

撮影 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · v0.3.0に含まれる操作。

Save Contentダイアログでspeech_stream_LAMClipが選択され、Save Selectedボタンが表示されている。

生成したClipをディスクへ保存する · 原寸画像を開く

  1. Save Allを押し、生成されたspeech_stream_LAMClipが選択されていることを確認します。
  2. Save Selectedで保存を確定します。

撮影 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · v0.3.0に含まれる操作。

生成アセットはULAMExpressionClipを継承するULAMBakedExpressionClipです。既存のClip入力ピンに直接指定できます。再生の前にAnalyze SoundWave Asyncを挟む必要はありません。

ロード画面 / BeginPlay
→ 保存済みClipと元のSoundWaveをロード
→ Prime Sound(元のSoundWave)
後の再生イベント
→ Play Expression Clip(保存済みClip)
AnimGraph
既存のポーズ → Apply LAM ARKit Curves → Output Pose

ActorのLAMコンポーネントとAnimBPのSource Componentを接続してください。Blueprintの接続とCurve Profileは従来と共通です。Visemeを使う構成では対応するApply LAM Viseme Curvesを使用します。

Clipのハード参照は元SoundWaveもロード対象にします。Soft Object Referenceで管理する場合はAsync Load Assetの完了を待ち、ロードしたClipを変数などで保持します。ストリーミング音声にはPrime Soundを先行して呼び、必要に応じて音声のRetain On Load設定を使います。

Play Expression Clip With Settings、Pause / Resume / Seek / Stop、音量、フェード、2D / 3D、Submix、再生イベントは既存の再生制御と共通です。保存済みカーブは参照を共有し、各フレームで52値を補間します。再生ごとの全配列コピーは行いません。

BeginPlayでspeech_streamをPrime Soundへ渡し、Space Barから保存済みClipをPlay Expression Clipで再生するBlueprint。

音声を先読みして保存済みClipを再生する · 原寸画像を開く

  1. Prime Soundには元のSoundWaveを指定します。先読みは早めに要求します。
  2. Play Expression ClipのClipには保存済みのspeech_stream_LAMClipを指定します。

ノードのアセット名は欄幅によって省略されています。Prime Soundは読込完了通知ではありません。キー入力を使うActorには入力の受け取り設定が必要です。

撮影 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · v0.3.0に含まれる操作。

音声やモデルを変更したら再生成する

「音声やモデルを変更したら再生成する」へのリンク

Clipを右クリックしてRegenerateを選ぶと、そのClipに記録された解析設定で再生成します。設定を変えたい場合は、元音声のGenerate LAM Expression Clipを使います。

Clipには音声の更新GUID、入力PCMのSHA-1、モデルGUID、モデルのパス、処理・形式バージョンを記録します。音声の再インポート、加工・圧縮設定の変更、モデル更新後は、UE標準のValidate Assetsで確認して再生成・保存してください。エディタの検証ではモデルをロードする場合があります。再生時に自動で再生成される仕組みではありません。

解析中に音声やモデルが変更されると、その結果は破棄されます。ロード時には形式バージョン、音声参照、長さ、フレーム数、カーブ数、値の妥当性も検証します。破損・未対応形式の場合、On Playback FailedのError.CodeはInvalidBakedClipとなり、エラー理由も通知されます。自動で動的解析へ切り替えることはありません。

Content Browserのspeech_stream_LAMClipと、その右クリックメニューのRegenerate。

保存済みClipを再生成する · 原寸画像を開く

  1. Clipを右クリックしてRegenerateを選び、記録済み設定で再生成します。

撮影 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · v0.3.0に含まれる操作。

  1. 生成したClipと元SoundWaveを保存します。
  2. BlueprintなどからClipを参照し、Cook対象に含めます。
  3. Soft参照だけで管理する場合は、Asset ManagerまたはAdditional Asset Directories to Cookで対象を明示します。
  4. CookしたDevelopment / Shippingのアプリで再生を確認します。

モデルの同梱設定は変更されません。 保存済みClipの再生経路ではモデルをロードしませんが、この機能はモデル除外による配布サイズ削減を提供するものではありません。生成にはモデルが必要で、動的解析・ライブ入力でも使用します。モデルとパッケージ化の既存設定を維持してください。

Editor Utility Blueprint / PythonからエディタサブシステムLAMBakeSubsystemを取得します。

API 用途
GenerateClips(Sounds, Settings) SoundWave群を指定した設定で生成
RegenerateClips(Clips) 保存された設定で再生成
IsBusy / GetProgress / GetStatus 処理状況を確認
GeneratedClips / Errors 完了したClipとエラーを取得
Cancel 未完了の処理を中止

開始関数のtrueは要求を受け付けたことを示し、生成成功や保存完了を意味しません。処理中・PIE中・対象なしでは開始できません。エディタのTickを継続させ、タイマーや非同期の通知処理から状態を確認します。Pythonの同期ループで完了を待つと処理が進みません。 完了後はErrorsを確認し、生成アセットを明示的に保存してください。API定義

デモf3b6f13のEditorをビルドした後、デモのプロジェクトルートで実行します。テストは/Game/Audio/*_LAMClip、/Game/Examples/BP_LAMBakedPlayback、検証マップを生成・保存するため、テスト用チェックアウトを使用してください。

ターミナル
./Tools/test_baked_clips.ps1 -Engine D:\Unreal\UE_5.8
./Tools/package.ps1 -Configuration Development -IncludeBaked
./Tools/package.ps1 -Configuration Shipping -IncludeBaked
./Tools/test_playback_controls.ps1 -Configuration Development -IncludeBaked
./Tools/test_playback_controls.ps1 -Configuration Shipping -IncludeBaked

生成されたBP_LAMBakedPlaybackは、レベル配置後にBeginPlayで先読みし、Spaceで再生する接続例です。Tools/build_baked_examples.pyは生成済み/Game/Audio/speech_stream_LAMClipを使用し、既存の同名Blueprintを上書きしません。キャラクターメッシュとAnimBPは自分のものを接続してください。既存の動的解析例も引き続き利用できます。

2026-09-28の公開記録では自動テスト12件とEditor / Development / Shippingの再生テスト計18件が成功しています。数値比較・性能値・未検証範囲は事前解析Clipの検証結果を参照してください。本ページ作成時にUEテストを再実行した結果ではありません。

症状 確認すること
生成メニューがない v0.3.0の導入・有効化・Editor再起動、選択対象がSoundWaveであることを確認
生成できない PIEを終了し、他のバッチ完了を待つ。モデル設定とOutput Logを確認
再起動するとClipがない 生成後にSave Allを実行したか確認
音声を変更しても表情が変わらない Validate Assets → Regenerate → Save All。設定を変えるなら元音声から生成
再生開始に待ちがある Clipロード、元音声の先読み、ストレージと音声バッファを確認。解析待ちと区別する
InvalidBakedClip エラー理由を確認し、対応版で再生成・保存・再Cookする
パッケージ版だけ失敗する ClipとSoundWaveのCook対象、Soft参照のロード完了を確認

一般的な音声・表情・モデルの問題はトラブル対処も参照してください。

Sequencerとの連携(公開ソース)

「Sequencerとの連携(公開ソース)」へのリンク

公開ソースのLAM Dialogueでは、ここで保存したClipをSequencerへ直接配置し、音声と表情を同じセクションで編集できます。再生用Blueprintイベントは不要ですが、Apply LAMノードを持つAnimBPは必要です。トラック追加・スクラブ・MRQ出力を参照してください。専用トラックはv0.3.0 ZIPには未収録です。

ライセンス・クレジット · デモのソース