fix(#549): 预设配音无声 - 顶层voice_id+custom_text与tts配置路径不匹配 #626
Reference in New Issue
Block a user
Delete Branch "fix/549-preset-voice-silent"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
用户选择预设配音并输入文案后,生成的视频里听不到配音,等于选了也白选。
根因
前后端配置路径不匹配:
config.voice_id+config.custom_text(顶层字段)config.tts嵌套对象读取 TTS 配置修复
在
_maybe_add_voiceover_layer增加桥接兼容逻辑:tts.enabled为 False 但顶层有voice_id+custom_text时tts配置已存在时优先使用 tts 配置,不被顶层字段覆盖测试
新增4个单元测试:
test_top_level_voice_id_with_text_triggers_tts- 桥接触发正常test_tts_config_takes_priority- tts配置优先于顶层字段test_top_level_voice_id_without_text_no_trigger- 缺文本不触发test_no_voice_config_no_trigger- 无配置不触发109个测试全绿。
根因:前端一键生成页面传 config.voice_id + config.custom_text(顶层字段), 统一渲染引擎从 config.tts 嵌套对象读取TTS配置,路径完全不匹配, 导致 TTS 配音从未被触发,选了预设配音也等于没选。 修复:在 _maybe_add_voiceover_layer 增加桥接兼容逻辑—— 当 tts.enabled 为 False 但顶层有 voice_id + custom_text 时, 自动映射为 tts 配置并触发配音生成。 新增4个单元测试覆盖:桥接触发、tts配置优先、缺文本不触发、无配置不触发。🚀 预览环境已部署
代码审查结果 - PR #626
⚠️ 问题(1个需要修改)
config.tts.enabled显式设置为False时,代码仍会执行桥接逻辑并强制启用 TTS,违背了显式配置优先的原则。tts: {enabled: false}意在禁用配音,但同时又传了voice_id等顶层字段(可能是脏数据或旧逻辑残留),系统会错误地启用配音,导致非预期行为。tts配置不存在或为空时才进行桥接,而不是仅检查enabled为假。建议修改条件为if not config.get("tts"):,确保只要tts字段存在(无论 enabled 是 true 还是 false),都优先使用tts配置,不再回退到顶层字段。💡 建议(2个可选)
top_voice_id,如果该 ID 包含敏感信息(如鉴权 Token),可能存在信息泄露风险。voice_id的性质,如果是公开的模型 ID(如示例中的longxiaoxia_v3)则当前做法可接受;如果是敏感 Token,建议仅打印 ID 的前几位或脱敏处理。config.tts存在且enabled为False时,即使存在顶层voice_id和custom_text,也不应触发桥接和配音。这能直接覆盖上述逻辑问题。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 12:13:23 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #626 已关闭或合并,对应的预览环境已被清理。