语言: 中文 | English
- 由于Cubism SDK Core可能具有安全隐患,因此请谨慎使用本程序加载安全性未知或来源不明的模型。
-
Request
GET /chat?Text=聊天文本 HTTP/1.1 Accept-Charset: UTF-8 User-Agent: DesktopLive2D/v0.1.1
Response 格式
- Headers
{ "Text": "返回文本", //返回聊天文本,必须 "...": "..." //其他字段不做要求 }
- Body
bytes of XXX.wav //音频数据,可无
配置
"ChatAPI" : { "ChatSavePath" : "chat", //聊天音频和文本保存路径 "CustomChatServer" : { "HostPort" : "http://127.0.0.1:50721", //服务器地址,http或https均可 "On" : true, //开启自定义聊天接口 "ReadTimeOut" : 10, //等待响应时间(秒) "Route" : "/chat" //路径 }, }
服务端示例:
@app.route("/chat", methods=["GET"]) def chat(): # 接收客户端的聊天文本 text = request.args.get("Text", "") print("文本: %s" % text) # 构造响应 rsp = make_response() # 响应头中添加Text字段 rsp.headers.add_header("Text", "坐在电脑前很久了哦,快去休息一下吧!".encode("utf-8")) # 响应body中写入音频数据 with open("serverFiles\\nn.longsittingtip_0.wav", "rb") as f: rsp.set_data(f.read()) return rsp
动作组Chat,调用茉莉云或者自定义聊天接口时触发的动作。
每次聊天都会在本地产生文本文件和音频文件(如有使用语音),注意及时清理。
-
参考 https://github.com/murcherful/Live2D_Displyer
以下是上述项目关于自定义动作组和触发位置说明的引用
- 设置触发区域和相应动作组
- 首先要了解
model3.json
中有关动作和触发区域的设定,以及文件的结构- 文件的结构大致为,模型文件可能不包含
Groups
和HitAreas
,如果没有,请安以下规则填写,Group
可无{ "Version":3, "FileReferences": {...}, "Groups": [...], "HitAreas": [...] }
FileReferences
的结构"FileReferences": { "Moc": ..., "Textures": [...], "Motions": {...}, ... }
Motions
的结构为,path
为yyy.motion3.json
与xxx.model3.json
的相对路径"Motions": { "Idle":[ {"File": "path", "FeedINTime": 0.5, "FeedOutTime": 0.5}, {"File": "path", "FeedINTime": 0.5, "FeedOutTime": 0.5}, ... ], "TapBody":[ {"File": "path", "FeedINTime": 0.5, "FeedOutTime": 0.5}, {"File": "path", "FeedINTime": 0.5, "FeedOutTime": 0.5}, ... ], "TapArea1":[ {"File": "path", "FeedINTime": 0.5, "FeedOutTime": 0.5}, {"File": "path", "FeedINTime": 0.5, "FeedOutTime": 0.5}, ... ], ... }
Motions
下的分组,比如Idle
,TapBody
,TapArea1
等,表示鼠标点击至相应区域会触发的动作组,触发时,会随机一个动作组中的动作。注意,程序定义的分组标识有其中Idle TapBody TapArea1 TapArea2 TapArea3 TapArea4 TapArea5 TapArea6 TapArea7 TapArea8 TapArea9
Idle
为空闲时的动作组,其他为触发相应区域的动作组HitAreas
的结构为其中"HitAreas": [ {"Name": "Body", "Id":"id"}, {"Name": "Area1", "Id":"id"}, {"Name": "Area2", "Id":"id"}, ... ]
Name
为指定的区域名,程序定义的区域名有这些区域与动作组的名称像对应Body Area1 Area2 Area3 Area4 Area5 Area6 Area7 Area8 Area9
- 文件的结构大致为,模型文件可能不包含
- 了解了文件结构,想要设置相应的动作,首先要定义触发区域。而定义触发区域首先要知道模型区域的名字。这时:
-
-
- 一年更新一次,节日当天运行会有提示
- 节日列表源是免费节日api
- 接入茉莉云的聊天机器人api
- 右键双击打开聊天输入板,回车提交输入,左键双击聊天板取消并关闭
- api来自茉莉云
- 可自行注册茉莉云账号,创建机器人,并在设置中修改key和secret
- 展示
-
- 语音播放需要在model3.json文件中添加motion的Sound属性,或者通过设置页面修改
- 仅支持.wav格式,详细参数参考Cubism Live2D SDK for Native的口型同步
- 口型同步只支持单声道的.wav格式
-
- 文本显示需要在model3.json文件中添加motion的Text属性,也可直接在设置页面编辑
- 需要自己修改模型的model3.json文件,详细参考Hiyori的模型
-
选项介绍:
名称 介绍 番剧列表 显示或隐藏番剧列表 鼠标追踪 开启后角色会看向鼠标 背景穿透 除可交互的位置外,鼠标点击会透过窗体 防遮挡 鼠标移动到窗口上时,角色窗口会变为透明,配合免打扰使用 免打扰 任何鼠标点击事件不会受角色窗口影响 显示背景 鼠标移动到窗口上会显示实际窗体 置顶显示 绘制角色到屏幕最上方,不会受其他窗口影响 静音 关闭语音播放 显示文本 播放动作时同时显示语音的文本 隐藏 最小化
-
效果图如下
可以通过模型设置修改模型的文本,动作,动作组,和语音
用户设置参数介绍:
名称 解释 应用名称 应用的名称,在系统托盘和设置标题栏上显示 用户名称 默认为当前用户的名称,暂无用途 托盘图标 任务栏图标,可使用自定义图片 模型路径 模型存放的文件夹,默认为exe同路径下的Resources 口型同步 口型同步的放大倍数,设置了单声道的wav音频时,会自动进行口型同步,口型同步不明显时可修改该参数,范围0-99 动作频率 闲置时自动播放动作的间隔,单位秒,范围0-99 FPS 帧率,越大消耗系统性能越多,建议在48左右,范围:1-99,不可为0 窗口宽度 人物绘制的宽度,越大消耗系统性能越多,实际宽度请打开显示背景以确认 窗口高度 人物绘制高度,同上 Key 茉莉云聊天机器人api的key值,可前往官网免费注册 Secret 茉莉云聊天机器人api的secret值,同上 模型设置介绍:
动作组
具有特定功能的动作组名称 字段含义 Morning 0-12点启动问候语 Afternoon 12-18点启动问候语 Evening 18-22点启动问候语 Midnight 22-24点启动问候语 LongSittingTip 运行时间满1h休息提示 Idle 闲置时自动播放 TapHead 点击头部触发语音 TapBody 点击身体触发语音 TapSpecial 特触(参考碧蓝航线) Chat 调用聊天接口时触发的动作 选择动作后可在右边修改动作内容
交互动作组保存.model3.json文件中,也可通过修改json文件实现自定义
示例:
{ "Idle": [ //动作组Idle,播放时会从动作组中随机出一个动作 { "File": "motions/Hiyori_m04.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5, "Sound": "sounds/Hiyori.jp.9.wav", "Text": "好吃的?Hiyori也想尝尝看呢!" }, { "File": "motions/Hiyori_m05.motion3.json", //动作路径 "Sound": "sounds/Hiyori.jp.1.wav", //音频文件路径 "FadeInTime": 0.5, "FadeOutTime": 0.5, "Text": "是在学习吗,要加油啊!" //语音文本 } ] }
-
模型文件夹即Resources文件夹,其位置可更改,但至少有一个模型
其内存放模型
-
音频和动作文件列表应放在对应模型的sounds和motions文件夹内,不能为其他位置
-
音频文件只支持.wav格式,口型同步只支持单声道的.wav格式
-
程序错误无法启动时可删去config.json文件以初始化
-
LPK模型需要解压为包含*.moc3, *.model3.json和纹理图片的文件夹形式
- Visual Studio 2022
- Cubism Live2D SDK for Native
- Qt5
- jsoncpp
- cpp-httplib + openssl
- 模型的语音借助ACGTTS生成
- 以Cubism官方Native SDK为模板,结合以下两篇文章进行的修改:
https://zhuanlan.zhihu.com/p/126276925
https://zhuanlan.zhihu.com/p/511077879
在vs_project文件夹下,目前只整理了x86的项目,所有绝对路径已经改成相对路径,支持库也已经打包在vs_project\thirdParty文件夹下,应该可以做到开箱即用(maybe)
用Visual Studio 2022 (建议VS 2022) 打开 vs_project\proj_msvc2022_x86_mt\Demo.sln,有两个项目配置:
* Console -> Debug
* Window -> Release
-
使用以下库静态库:
Qt库
- Qt5Widgets.lib
- Qt5Core.lib
- Qt5Gui.lib
- qtmain.lib (子系统设置为窗口时需要)
Windows系统
- Winmm.lib
- libssl.lib
- libcrypto.lib
-
引入头文件<httplib.h>
-
运行时需要的动态库:
Qt运行环境 安装Qt后,使用Qt\bin下的windeployqt.exe 执行:
windeployqt.exe "编译之后的程序.exe"
Openssl (32位)
- libssl-3.dll
- libcrypto-3.dll
Openssl (64位)
- libssl-3-x64.dll
- libcrypto-3-x64.dll
对于没有Visual C++的环境需要额外安装或者将以下dll放在exe文件同目录下
- vcruntime140_1.dll (x64)
- vcruntime140.dll (x86/x64)
- msvcp140.dll (x86/x64)
- msvcp140_1.dll (x86/x64)
以上步骤可能无法解决所有问题,需要自行查找方案.