💻

VoicevoxEngine For UE リップシンクコンポーネント

に公開

VoicevoxEngine For UE Ver1.2にリップシンク再生を行うコンポーネントを追加しました。


© 2025 arayz. All rights reserved.

クラス(Blueprint Class)

  • VoicevoxCharacter
    • VoicecoxCharacterLipSyncAudioComponentを追加したCharacterクラスです。

VoicevoxCharacterは以下の機能が追加されています。

  • VoicecoxCharacterLipSyncAudioComponentが追加
  • 初期化時に自動でスケルタルメッシュをコンポーネントに紐づける処理が実行

コンポーネント

  • UAbstractLipSyncAudioComponent
    • C++専用です。Blueprintでは使用できません。
    • AudioComponentを継承しています。
    • リップシンク再生に必要な引数、関数をまとめたクラスです。
    • 独自のコンポーネントを作成したい場合は、このクラスを継承してください。
  • VoicevoxLipSyncAudioComponent
    • VOICEVOXで変換したサウンドデータとAudioQueryから生成したリップシンクデータから、サウンド再生&リップシンクを実行するコンポーネントです。
    • UAbstractLipSyncAudioComponentを継承しています。
  • VoicecoxCharacterLipSyncAudioComponent
    • VoicevoxLipSyncAudioComponentとほぼ同様のコンポーネントです。
    • UAbstractLipSyncAudioComponentを継承しています。
    • VoicevoxCharacterクラスで使用することを想定したコンポーネントです。
      • 通常のCharacterクラスのSkeltalMesh(Mesh)がBlueprintに限り読み取り専用となっており、引数として渡すことが仕様上不可となっています。
    • BlueprintでCharacterクラスを使用する場合は、VoicevoxLipSyncAudioComponentコンポーネントを使用してください。
    • サウンド再生時にスケルタルメッシュのモーフターゲットを更新するため、LipSyncMorphNameMapにモーフターゲット名を設定するのが必須です。

使い方

Blueprint、C++共に使用方法は共通です。

VoicevoxLipSyncAudioComponent

  1. VoicevoxLipSyncAudioComponentを追加
  2. LipSyncMorphNameMapにモーフターゲット名を登録(任意)
  3. OnlipSyncUpdateイベントを追加
  4. OnlipSyncUpdateイベント内でSkeltalMeshのモーフターゲットを更新
  5. Play to AudioAuery等のサウンド&リップシンク再生の関数を実行

VoicecoxCharacterLipSyncAudioComponent

  1. VoicecoxCharacterLipSyncAudioComponentを追加
  2. SetSkeltalMeshにモーフターゲットを更新するSkeltalMeshを引数に渡す(VoicevoxCharacterは任意)
  3. LipSyncMorphNameMapにモーフターゲット名を登録
  4. Play to AudioAuery等のサウンド&リップシンク再生の関数を実行

各コンポーネントのDetails (詳細)パネル

詳細パネルで編集できる変数は以下の通りです。

  • LipSyncMorphNameMap
    • リップシンクで使用するモーフターゲット名のマップです。
    • マップにモーフターゲットの名前を格納すると、リップシンク再生時に変更対象のモーフターゲット名が格納されます。
    • VoicecoxCharacterLipSyncAudioComponentの場合は設定が必須になります。
項目名 説明
母音:あ 母音「あ」の口の形をするモーフターゲットの名前
母音:い 母音「い」の口の形をするモーフターゲットの名前
母音:う 母音「う」の口の形をするモーフターゲットの名前
母音:え 母音「え」の口の形をするモーフターゲットの名前
母音:お 母音「お」の口の形をするモーフターゲットの名前
簡易 シンプルな口パクで使用するモーフターゲットの名前
  • SpeakerId
    • テキスト読み上げで使用するスピーカーID。
    • デフォルトは3(ずんだもんのノーマル)
  • LipSyncSpeed
    • リップシンクの実行速度です。モーフターゲットの値をMaxMouthScaleにするまでの時間です。
      再生したボイスとリップシンクのズレを感じた時に値を変更してください。
  • MaxMouthScale
    • リップシンクに使用するモーフターゲットの最大値を指定します。
  • EnabledLipSync
    • リップシンクを実行するかのフラグです。
      チェックが外れている場合は音の再生のみ行います。心の声の表現に使用してください。
  • EnabledSimpleLipSync
    • 簡易的なリップシンクを実行するかのフラグです。
      • チェックが入っている場合は「簡易」の項目に設定したモーフターゲット名のみでリップシンクを実行します。
        • リップシンク再生の処理が軽くなりますが、人間が喋る時のリップシンクではなくなります。
      • チェックが入っていない場合は母音の「あ」~「お」を計算して値を変更するため、若干重いです。
        • 簡易モードに比べると人間が喋るようなリップシンクに近くなります。
簡易モード ON 簡易モード OFF
© 2025 arayz. All rights reserved.

関数(ノード)

コンポーネントで使用できる関数の一覧です。

各コンポーネント共通の関数

VoicevoxLipSyncAudioComponent、VoicecoxCharacterLipSyncAudioComponent両方で使用できる関数です。
Blueprint、c++共に同じ名前の関数を使用します。

Play to Textノード

テキストを解析してSoundWave生成後、音再生とリップシンク再生を行います。

  • 引数
引数名 説明
Message 音声データに変換するtextデータ
bRunKana AquesTalkライクな記法で実行するか
bEnableInterrogativeUpspeak 疑問文の調整を有効にする
SpeedScale 話速
PitchScale 音高
IntonationScale 抑揚
VolumeScale 音量
PrePhonemeLength 開始無音
PostPhonemeLength 終了無音

Play to AudioAueryノード

VOICEVOX COREで取得したAudioQueryを元にSoundWaveを生成後、音再生とリップシンク再生を行います。

  • 引数
引数名 説明
Query VOICEVOXのAudioQuery
bEnableInterrogativeUpspeak 疑問文の調整を有効にする

Play to AudioQueryAssetノード

AudioQueryアセットからSoundWaveを生成後、音再生とリップシンク再生を行います。

  • 引数
引数名 説明
VoicevoxQuery Queryアセット
bEnableInterrogativeUpspeak 疑問文の調整を有効にする

Set LipSyncData to AudioQueryノード

事前にリップシンクデータを生成するAudioQueryをセットします。
事前生成することでPlay to◯◯ノードに比べて負荷が低く、かつPlayノードを実行するとリップシンク再生を行います。

  • 引数
引数名 説明
Query リップシンクデータをセットするAudioQuery

Set LipSyncData to AudioQueryAssetノード

事前にリップシンクデータを生成するAudioQueryアセットをセットします。
事前生成することでPlay to◯◯ノードに比べて負荷が低く、かつPlayノードを実行するとリップシンク再生を行います。

  • 引数
引数名 説明
VoicevoxQuery リップシンクデータをセットするAudioQueryアセット

Stop Audio And LipSyncノード

リップシンクとサウンド再生を停止します。
VOICEVOXからサウンドデータ生成中にAudioComponentのStopノードを実行しても停止しない場合があるので、サウンド及びリップシンク再生を確実に止める場合はこのノードを使用してください。

  • 引数
    なし。

VoicecoxCharacterLipSyncAudioComponent専用ノード

VoicecoxCharacterLipSyncAudioComponentのみ追加されている関数一覧です。

SetSkeletalMeshノード

リップシンク対象のスケルタルメッシュをコンポーネントにセットします。
LipSyncMorphNameMapとスケルタルメッシュをセットするだけで、PlayToText等のサウンド再生時に自動でリップシンクを行うようになります。

  • 引数
引数名 説明
SkeletalMesh リップシンク対象のスケルタルメッシュ

イベント

Blueprint用のイベントです。

OnCreateSoundWaveイベント

VOICEVOXでサウンド生成完了時に呼び出されます。

  • 引数
    なし。

OnLipSyncUpdateイベント

VoicevoxLipSyncAudioComponentのみ追加されているカスタムイベントです。
サウンド再生中に呼び出されます。モーフターゲットの値更新に必要なリップシンク情報が引数に渡されます。

  • 引数
引数名 説明
VowelType 母音のEnum。
EnabledSimpleLipSyncがtrueの場合はSimple固定になります。
MorphTargetName モーフターゲットの名前。
LipSyncMorphNameMapにセットしたモーフターゲットの名前が入ります。何も設定していない場合は「None」になります。
MorphTargetNum モーフターゲットの値。

## デリゲート(c++)

c++で使用できるデリゲートです。Blueprintは使用できません。

OnCreateSoundWaveNative

VOICEVOXでサウンド生成完了時に呼び出されます。

  • 引数
    なし。

OnLipSyncUpdateNative

VoicevoxLipSyncAudioComponentのみ追加されているデリゲートです。
サウンド再生中に呼び出されます。モーフターゲットの値更新に必要なリップシンク情報が引数に渡されます。

  • 引数
引数名 説明
VowelType 母音のEnum。
EnabledSimpleLipSyncがtrueの場合はSimple固定になります。
MorphTargetName モーフターゲットの名前。
LipSyncMorphNameMapにセットしたモーフターゲットの名前が入ります。何も設定していない場合は「None」になります。
MorphTargetNum モーフターゲットの値。

Discussion