Closed HowardJoness closed 1 month ago
或者说 能否推荐一个根据tts输出的speech.wav自动对口型的方法?
系统版本:Microsoft Windows 10 Pro 10.0.19045 N/A Build 19045
Python 版本:Python 3.12.0
窗口库:pygame 2.6.0
如题,当我运行
self.model.SetParameterValue("ParamMouthY", 1.0)
代码时,Live2D输出窗口会先无响应一下,然后程序退出。请问如何解决此问题
SetParameterValue
有三个参数,会不会是这个问题?(不确定是不是打错了)
或者说 能否推荐一个根据tts输出的speech.wav自动对口型的方法?
目前想到有两种方法:
在对应模型的配置文件xxx.model3.json
中定义一个动作组tts
,把Sound
路径换成tts生成的音频路径:
"Motions": {
"tts": [
{
"File": "",
"Sound": "tts_results/speech.wav"
}
],
"Idle": [
{
"File": "motions/haru_g_idle.motion3.json",
"FadeInTime": 0.5,
"FadeOutTime": 0.5,
"Sound": "",
"Text": ""
},
{
"File": "motions/haru_g_m15.motion3.json",
"FadeInTime": 0.5,
"FadeOutTime": 0.5,
"Sound": "",
"Text": ""
}
],
...
tts生成后播放动作model.StartMotion("tts", 0, live2d.MotionPriority.FORCE.value)
,播放动作时同时也会读取音频文件进行口型同步。
另一种方法比较麻烦,需要自行写一个算法,读取wav文件的波形数据,转换为ParamMouthOpenY
的值,并同步到绘制上。
tts生成后播放动作
model.StartMotion("tts", 0, live2d.MotionPriority.FORCE.value)
,播放动作时同时也会读取音频文件进行口型同步。
试了这个方法 但是模型没有张嘴qwq (日志显示Speak动作在极短的时间内完成了
用第二种方法吧。
添加了读取 wav 文件响度的工具:package/live2d/utils/lipsync.py
用法:
关闭内置的口型同步
model.SetLipSyncEnable(False)
创建 wavHandler 对象并设置口型同步幅度
wavHandler = WavHandler()
lipSyncN = 3
在播放动作的时候,同时播放音频并进行口型同步
def start_callback(group, no):
pygame.mixer.music.load("audio1.wav")
pygame.mixer.music.play()
print("start lipsync")
wavHandler.Start("audio1.wav")
model.StartMotion("Speak", 0, live2d.MotionPriority.FORCE.value, start_callback)
将 wav 响度同步到 ParamMouthOpenY
上
if wavHandler.Update(): # 获取 wav 的下一帧片段,并返回当前音频是否已结束
model.SetParameterValue("ParamMouthOpenY", wavHandler.GetRms() * lipSyncN, 1)
好了 万分感谢您的帮助
系统版本:Microsoft Windows 10 Pro 10.0.19045 N/A Build 19045
Python 版本:Python 3.12.0
窗口库:pygame 2.6.0
如题,当我运行
self.model.SetParameterValue("ParamMouthY", 1.0)
代码时,Live2D输出窗口会先无响应一下,然后程序退出。请问如何解决此问题