v2完整版:VoxCPM2语音 + 多轮对话 + 文档重写

- 用VoxCPM2生成128条v2语音(林夏回应+NPC反应+Round3对话)
- story.js全部切换到VoxCPM2音频路径
- engine.js: BGM音量减半(0.2→0.1)、MSG-14前导语支持、结局E用周南新语音
- 林夏.md完整重写:6手势交互、主角有声音、VoxCPM2本地TTS方案
- batch_tts_voxcpm.py: 新增linxia角色、修复self_3y音色、添加全部v2台词
- 新增voice/linxia/参考音色

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
xsl
2026-05-19 14:38:28 +08:00
co-authored by Claude Opus 4.6
parent 0f1b70b1a9
commit 3f53623f12
133 changed files with 1087 additions and 498 deletions
+203 -1
View File
@@ -46,6 +46,10 @@ BASE_URL = f"http://{HOST}:{PORT}"
# speed: 语速倍率(通过 ffmpeg atempo 后处理)
# ──────────────────────────────────────────────────────────────
ROLES = {
"linxia": {
"dir": "linxia",
"speed": 1.00,
},
"mom": {
"dir": "mom",
"speed": 0.92,
@@ -91,7 +95,7 @@ ROLES = {
"speed": 1.20,
},
"self_3y": {
"dir": "xiaomei",
"dir": "linxia",
"speed": 1.15,
},
}
@@ -219,6 +223,204 @@ LINES = [
# ("lv11_0030_self-3y_voice_01", "self_3y", "(明朗版台词)"),
# ("lv11_0030_self-3y_voice_02", "self_3y", "(迷茫版台词)"),
# ("lv11_0030_self-3y_voice_03", "self_3y", "(温柔版台词)"),
# ══════════════════════════════════════════════════════════
# v2: 林夏回应 + NPC 反应(Round 2 & 3
# ══════════════════════════════════════════════════════════
# ── 01 · 林夏自动回应 ──
("v2_msg01_linxia_auto", "linxia", "嗯……好。"),
# ── 02 · 小美 ──
# 林夏回应
("v2_msg02_linxia_warm", "linxia", "好啊,明天不见不散。"),
("v2_msg02_linxia_cold", "linxia", "再说吧。"),
("v2_msg02_linxia_curious", "linxia", "你怎么知道的啊?"),
("v2_msg02_linxia_tap", "linxia", "嗯。"),
# 小美反应
("v2_msg02_react_warm", "xiaomei", "行!那我叫上安安!老地方见!别放鸽子啊!"),
("v2_msg02_react_cold", "xiaomei", "……好吧。你要是改主意了随时说。"),
("v2_msg02_react_curious", "xiaomei",
"还不是阿哲自己发朋友圈!你不知道吗?他发了又秒删……"),
("v2_msg02_react_silent", "xiaomei", "??你还活着吗哈哈。好了不烦你了,有事找我。"),
("v2_msg02_react_tap", "xiaomei", "嗯是什么意思啊哈哈!行吧你休息。"),
# Round 3 (追问路径)
("v2_msg02_r3_linxia_curious", "linxia", "他……发了什么?"),
("v2_msg02_r3_react", "xiaomei",
"就发了一张你们以前的照片,配了一句'值得'。两分钟就删了。"),
# ── 03 · 外卖 · 林夏自动回应 ──
("v2_msg03_linxia_auto", "linxia", "好,我下来拿。"),
# ── 04 · 阿哲 ──
# 林夏回应
("v2_msg04_linxia_warm", "linxia", "你那边……还好吗。"),
("v2_msg04_linxia_cold", "linxia", "知道了。明天寄。"),
("v2_msg04_linxia_curious", "linxia", "你怎么不自己来拿。"),
("v2_msg04_linxia_tap", "linxia", "好。"),
# 阿哲反应
("v2_msg04_react_warm", "azhe", "我……挺好的。你呢?"),
("v2_msg04_react_cold", "azhe", "嗯……谢了。"),
("v2_msg04_react_curious", "azhe", "我……不太方便过去。"),
("v2_msg04_react_silent", "azhe", "那……我晚点再说吧。"),
("v2_msg04_react_tap", "azhe", "谢谢。"),
# Round 3 温暖路径 (阿哲问"你呢?"后)
("v2_msg04_r3w_linxia_warm", "linxia", "不太好。"),
("v2_msg04_r3w_linxia_cold", "linxia", "挺好的。"),
("v2_msg04_r3w_react_warm", "azhe", "……对不起。"),
("v2_msg04_r3w_react_cold", "azhe", "那就好。"),
("v2_msg04_r3w_react_silent", "azhe", "……那,晚安。"),
# Round 3 追问路径 (阿哲说"不太方便"后)
("v2_msg04_r3c_linxia_curious", "linxia", "为什么。"),
("v2_msg04_r3c_linxia_warm", "linxia", "算了,不问了。"),
("v2_msg04_r3c_react_curious", "azhe", "我……没什么。你寄吧。"),
# ── 05 · HR 王姐 ──
# 林夏回应
("v2_msg05_linxia_warm", "linxia", "谢谢王姐。"),
("v2_msg05_linxia_cold", "linxia", "好的,知道了。"),
("v2_msg05_linxia_curious", "linxia", "王姐……有什么建议吗?"),
("v2_msg05_linxia_tap", "linxia", "好。"),
# 王姐反应
("v2_msg05_react_warm", "hr", "别客气。你还年轻,出去看看也好。这行业你知道的。"),
("v2_msg05_react_curious", "hr", "你想听真话?别在这行耗了。你有本事,去试试别的。"),
# ── 06 · 安安 ──
# 林夏回应
("v2_msg06_linxia_warm", "linxia", "在哪儿啊?我看看吧。"),
("v2_msg06_linxia_cold", "linxia", "不了,你们玩好。"),
("v2_msg06_linxia_curious", "linxia", "你喝了多少了?"),
("v2_msg06_linxia_tap", "linxia", "嗯。"),
# 安安反应
("v2_msg06_react_warm", "anan", "对面那个!我给你留了位置!赶紧赶紧!"),
("v2_msg06_react_cold", "anan", "好吧!那我给你寄一杯!"),
("v2_msg06_react_curious", "anan", "才两杯!我清醒得很!……好吧三杯。快来!"),
("v2_msg06_react_silent", "anan", "喂?信号不好吗?好吧以后再约!"),
("v2_msg06_react_tap", "anan", "嗯是来还是不来啊!算了回头聊!"),
# ── 07 · 寝室群 ──
# 林夏回应
("v2_msg07_linxia_warm", "linxia", "恭喜恭喜!太厉害了!"),
("v2_msg07_linxia_cold", "linxia", "恭喜。"),
("v2_msg07_linxia_curious", "linxia", "怎么升的啊?讲讲!"),
# 群反应
("v2_msg07_react_warm", "dorm_a", "哈哈谢谢!我请客!你最近怎么样啊?"),
("v2_msg07_react_curious", "dorm_a", "说来话长!我们老板走了我就顶上了哈哈"),
("v2_msg07_react_tap", "dorm_b", "林夏发表情了哈哈"),
# Round 3 温暖路径 (室友A问"你最近怎么样"后)
("v2_msg07_r3_linxia_warm", "linxia", "挺好的~你请客我去!"),
("v2_msg07_r3_linxia_cold", "linxia", "还行。"),
("v2_msg07_r3_react_cold", "dorm_b", "你是不是有事啊?没事可以跟我们说"),
# ── 09 · 小美(醉)──
# 林夏回应
("v2_msg09_linxia_warm", "linxia", "小美……你没事吧。"),
("v2_msg09_linxia_cold", "linxia", "我知道了。"),
("v2_msg09_linxia_curious", "linxia", "你……为什么现在才说。"),
("v2_msg09_linxia_tap", "linxia", "嗯。"),
# 小美反应
("v2_msg09_react_warm", "xiaomei_drunk",
"我没事……我就是喝多了想告诉你……你别怪我。"),
("v2_msg09_react_curious", "xiaomei_drunk",
"因为你今天……我怕你以后恨我……"),
("v2_msg09_react_tap", "xiaomei_drunk",
"你不生气吗?算了……当我没说。"),
# Round 3 追问路径 (小美说"怕你恨我"后)
("v2_msg09_r3_linxia_warm", "linxia", "我不恨你。"),
("v2_msg09_r3_linxia_cold", "linxia", "我得想想。"),
("v2_msg09_r3_react_warm", "xiaomei_drunk", "谢谢你……谢谢你林夏。"),
("v2_msg09_r3_react_cold", "xiaomei_drunk", "好……对不起。"),
("v2_msg09_r3_react_silent_q", "xiaomei_drunk", "你还在吗?"),
# ── 10 · 妈妈文字 ──
# 林夏回应
("v2_msg10_linxia_warm", "linxia", "没有,怎么了?"),
("v2_msg10_linxia_cold", "linxia", "嗯,要睡了。"),
("v2_msg10_linxia_curious", "linxia", "妈……你能打电话给我吗?"),
("v2_msg10_linxia_tap", "linxia", "嗯。"),
# 妈妈反应
("v2_msg10_react_warm", "mom", "没事,就是想起来问一下。今天怎么样?"),
("v2_msg10_react_cold", "mom", "好,早点睡。"),
("v2_msg10_react_silent", "mom", "看到了回一下。"),
("v2_msg10_react_tap", "mom", "嗯就是睡了?晚安。"),
# 追问路径:妈妈打来电话
("v2_msg10_call_mom", "mom", "怎么了夏夏?你声音不对。"),
("v2_msg10_call_linxia_warm", "linxia", "没什么……就是有点累。"),
("v2_msg10_call_linxia_curious", "linxia", "妈,我辞职了。"),
("v2_msg10_call_react_warm", "mom", "累了就回家歇几天。妈煮了排骨。"),
("v2_msg10_call_react_curious", "mom", "辞了就辞了。回来再说。"),
("v2_msg10_call_react_silent", "mom", "不想说就不说。妈在这呢。"),
# 温暖路径 Round 3 (妈妈问"今天怎么样"后)
("v2_msg10_rw_linxia_warm", "linxia", "还好。"),
("v2_msg10_rw_linxia_curious", "linxia", "不太好。"),
("v2_msg10_rw_react_warm", "mom", "那就好。别太晚了。"),
("v2_msg10_rw_react_curious", "mom", "怎么了?"),
# ── 11 · 阿哲电话 ──
# 林夏回应
("v2_msg11_linxia_warm", "linxia", "可以。但只有5分钟。"),
("v2_msg11_linxia_cold", "linxia", "不方便。我明天寄给你。"),
("v2_msg11_linxia_curious", "linxia", "为什么非要今天来?"),
("v2_msg11_linxia_tap", "linxia", "不了。"),
# 阿哲反应
("v2_msg11_react_warm", "azhe", "好,我马上过来。谢谢。"),
("v2_msg11_react_cold", "azhe", "好吧……那谢了。"),
("v2_msg11_react_curious", "azhe", "我……明天要出差。就5分钟。"),
("v2_msg11_react_tap", "azhe", "好。"),
# ── 12 · 周南 ──
# 林夏回应
("v2_msg12_linxia_warm", "linxia", "周南!你还记得我啊!"),
("v2_msg12_linxia_cold", "linxia", "嗯,你好。"),
("v2_msg12_linxia_curious", "linxia", "你怎么有我微信的?"),
("v2_msg12_linxia_tap", "linxia", "嗯……好久不见。"),
# 周南反应
("v2_msg12_react_warm", "zhounan", "当然记得。你是我们班最安静的那个。"),
("v2_msg12_react_cold", "zhounan", "嗯……好久不见。你现在在哪呢?"),
("v2_msg12_react_curious", "zhounan",
"你忘了吗?毕业那天你加的我。不过你可能早忘了哈哈。"),
("v2_msg12_react_silent", "zhounan",
"你是不是不记得我了?没关系的。就是突然想说声嗨。"),
("v2_msg12_react_tap", "zhounan", "是啊,好久不见。"),
# ── 13 · 周南长语音 ──
# 林夏回应
("v2_msg13_linxia_warm", "linxia", "一个人在北京,还好吗?"),
("v2_msg13_linxia_cold", "linxia", "你讲了好多。"),
("v2_msg13_linxia_curious", "linxia", "……生日快乐。"),
("v2_msg13_linxia_tap", "linxia", "嗯,我都听到了。"),
# 周南反应
("v2_msg13_react_warm", "zhounan", "还行吧。习惯了。你呢?你在北京过得好吗?"),
("v2_msg13_react_cold", "zhounan", "是吗?不好意思,话太多了。"),
("v2_msg13_react_curious", "zhounan", "谢谢你。你是今天第一个跟我说的。"),
("v2_msg13_react_silent", "zhounan", "不好意思突然说这么多……那,晚安。"),
("v2_msg13_react_tap", "zhounan", "嗯。谢谢你听我说。"),
# Round 3 温暖路径 (周南问"你在北京过得好吗"后)
("v2_msg13_r3_linxia_warm", "linxia", "不太好。今天也是我的坏日子。"),
("v2_msg13_r3_linxia_cold", "linxia", "还行吧。"),
("v2_msg13_r3_linxia_curious", "linxia", "你为什么突然联系我?"),
("v2_msg13_r3_react_warm", "zhounan", "那我们算是难兄难妹了。"),
("v2_msg13_r3_react_cold", "zhounan", "那就好。"),
("v2_msg13_r3_react_curious", "zhounan",
"因为……今天生日嘛,想起以前的事。想起你。"),
# ── 14 · 妈妈第二次电话 ──
("v2_msg14_linxia_auto", "linxia", "嗯,我没事。"),
("v2_msg14_mom_ask", "mom", "真的没事?"),
("v2_msg14_react_linked", "mom", "好。那早点睡。妈爱你。"),
("v2_msg14_react_unlinked", "mom", "你今天怎么都不理妈妈?出什么事了吗?"),
# ── 结局 E · 周南秒回 ──
("v2_ending_e_zhounan", "zhounan", "那我下次出差来北京,请你吃饭好不好。"),
# ── 通用林夏短句(备用) ──
("v2_linxia_generic_hmm", "linxia", "嗯。"),
("v2_linxia_generic_ok", "linxia", "好。"),
("v2_linxia_generic_warm_ok", "linxia", "嗯~好啊。"),
("v2_linxia_generic_cold_know", "linxia", "知道了。"),
("v2_linxia_generic_cold_fine", "linxia", "行吧。"),
("v2_linxia_generic_curious", "linxia", "嗯?"),
("v2_linxia_generic_then", "linxia", "然后呢?"),
]
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More