コンテンツにスキップ

UE5でマイク・PCM入力のリップシンクを動かす

v0.3.0 · UE 5.8.2 / Windows x64

UE5でマイクや外部PCMストリームからライブリップシンクを生成する手順です。SoundWave全体を事前解析する代わりに、Blueprintから入力の開始・停止と時間設定を制御します。ライブ入力と通常解析は同じ専用ワーカーを使用します。収録済みの台詞にはSoundWaveの事前解析を利用できます。

Start Microphone(Settings, DeviceIndex=-1)で既定の録音デバイスを使用します。Windowsのマイクアクセス許可が必要です。終了にはStop Microphoneを呼びます。

キャプチャ音声のスピーカーへの折り返しは行いません。起動時にはモデルロードと初期化が必要です。あらかじめSoundWaveを解析してモデルアセットをロードしておくこともできます。

MからStart Microphone、NからStop Microphoneを呼ぶBlueprint。Device Indexは-1。

マイク開始と停止の接続例 · 原寸画像を開く

  1. Start MicrophoneのDevice Index -1は既定デバイスです。
  2. 終了時は同じLAMにStop Microphoneを呼びます。

接続だけの撮影例です。実マイクの録音・動作試験は行っていません。キーイベントを使う場合はActorの入力を有効にしてください。

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

Start PCM Stream(Settings)
→ ゲームスレッドから繰り返し
Push PCM Audio(InterleavedPCM, SampleRate, Channels)
→ Stop Microphone
  • float値域は−1〜1、mono / stereoのインターリーブ形式。
  • サンプルレートは8〜192 kHz、1コール最大2秒。
  • サンプルレートを変更する場合はストリームを再開始。
  • まとめて大きく渡すより、小さいチャンクを定期的に渡します。
Start PCMStream、OnPCMBlockReceivedカスタムイベントからPush PCMAudio、Stop Microphoneを接続したBlueprint。

外部PCMを小さなブロックで渡す · 原寸画像を開く

  1. 先にStart PCMStreamを呼びます。
  2. 外部のPCM供給側からゲームスレッドでイベントを繰り返し呼びます。図は16,000 Hz・monoのfloat配列の例です。
  3. ストリーム終了にもStop Microphoneを使います。

OnPCMBlockReceivedは説明用のカスタムイベントで、自動では呼ばれません。実データに合わせてSample RateとChannelsを指定してください。

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

Set Live Inference Intervalの単位はmsです。約33.3〜1000 msの範囲で、内部では1〜30フレームに丸めます。既定は10フレーム、約333.3 msです。実行中の変更は次の推論ジョブから反映されます。Get Live Inference Intervalで丸めた要求値を確認できます。

Presentation Delayは希望する最小遅延で、既定0.75秒、設定範囲0.4〜2秒です。実効値は要求下限と「処理間隔+結果到着遅延P95+1フレーム」の大きい方で、最大2秒です。実行中は増加方向にだけ調整し、表示時刻を巻き戻しません。縮小は次の開始時に再計算します。

間隔を短くすると更新頻度は上がりますが、実時間動作は機器性能と同時負荷に依存します。指定したmsで結果が届く保証ではありません。

Get Live MetricsでActual Interval、Effective Presentation Delay、Inference P95、Result Latency P95、Initialization、Dropped Intervals、Backend、Stateを取得します。P95は直近60回で、準備中の0は未計測です。Result Latencyはワーカー待ちを含み、Initializationは分離されます。

On Live State ChangedはPreparing / Running / Lagging / Failed / Stoppedを通知します。入力待ちキューは最大2秒、同時推論はセッションあたり1件です。処理が遅れると古い待ち仕事を破棄し、最新位置へ復帰します。結果のない区間では100 ms保持後に100 msで表情を戻します。

Set Live Inference Intervalに333.333333 msを渡し、Get Live MetricsをBreak LAMLive Metricsへ接続したBlueprint。

推論間隔の指定とメトリクスの取得 · 原寸画像を開く

  1. Millisecondsに希望する間隔を渡します。図の333.333333は設定値で、実測時間ではありません。
  2. Get Live Metricsを分解してStateやActual Intervalを読みます。下向き矢印で他の項目を展開できます。

取得先をUIやログへ接続すると値を評価できます。この図は値の出力先を省略した接続例です。Iキーを使う場合はActorの入力を有効にしてください。

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

公開テストはPCM連続入力、実行中の間隔変更、CPU / DirectML、ワーカー競合を扱っています。実マイクの取得・切断、長時間運転は未検証です。機能テストのP95を運用保証として扱わず、対象環境で確認してください。検証結果

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

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

公開ソースのLAM Dialogueが制御を取得すると、実行中のマイク/PCM入力は中断します。管理中のStart Microphone/Start PCM Streamは拒否されます。Is Controlled By Sequencerを確認し、Sequenceの制御解除後に必要な入力を明示的に開始してください。中断した入力は自動再開しません。この連携はv0.3.0 ZIPには未収録です。

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