Skip to content

feat(tts): 按字幕或目标语言统一选择数字朗读规则(首期) - #463

Merged
buxuku merged 1 commit into
mainfrom
feat/dubbing-language-number-reading
Sep 5, 2026
Merged

feat(tts): 按字幕或目标语言统一选择数字朗读规则(首期)#463
buxuku merged 1 commit into
mainfrom
feat/dubbing-language-number-reading

Conversation

@buxuku

@buxuku buxuku commented Sep 5, 2026

Copy link
Copy Markdown
Owner

背景

后续优化 #458。原修复依据 Kokoro 音色的中英文属性决定是否加载中文 FST,无法覆盖「英文音色读中文字幕」、纯数字字幕以及 ZipVoice 混合文本等情况。

首期实现

  • 统一解析配音语言:手动指定 > 任务/字幕元数据 > 整份字幕的保守语言检测 > 音色语言。保留 en-GBzh-Hant 等地区/文字标签,不逐行猜测纯数字的语言。
  • 流水线按实际文本来源传递语言:翻译任务使用目标语言,翻译关闭时使用源语言;字幕 sidecar 仅在路径匹配对应文本列时提供语言。
  • Kokoro 按最终配音语言选择中文数字/日期/电话 FST;英文交给原生英文前端。ZipVoice 仅对中文输入转换数字,参考文本独立使用参考音频的语言。
  • ZipVoice 中文规则覆盖整数、小数、百分比、千分位、明确的日期/电话与前导零;保护网址、邮件、字母数字编号、版本/IP、时间/范围、歧义日期和不安全大整数。原始字幕文本不变。
  • 配音工作台和任务向导新增「配音语言」选择及本地模型语言能力检查,支持自动模式、会话恢复、配方保存与预览。
  • 每条成功音频记录输入指纹(文本、语言、引擎、音色、规则版本、语速及相关质量设置)。配置变化后标记需更新并阻止导出旧音频;失败重试不覆盖旧指纹,局部重生成不将其他旧音频误标为有效。
  • 配音检查点续跑使用检查后的会话配置,避免已重新生成的音频被旧任务配置判错。

范围与兼容性

  • 首期针对当前本地中英文模型:Kokoro / ZipVoice 支持中英文,VITS 仅中文。不新增其他语言模型,不保证任意语言/歧义数字的读法。
  • 云端仍由服务商及音色决定发音,本次不向 API 添加未经适配的语言参数,也不套用中文数字转换。
  • 旧版生成的本地 WAV 保留,但因缺少语言/规则指纹需重新生成后再导出;旧云端音频在未显式指定语言时保持兼容。
  • 新增纯 JS 依赖 tinyld@1.3.4;检测分数只用于保守排序,短文本或不确定结果回退,用户可手动覆盖。
  • 后续可独立扩展云端语言参数、更多语言的数字规范化和模型实例缓存;本 PR 不包含这些工作。

验证

  • npm run test:dubbing:217 项通过,以及真实 processor / worker 调用链测试(原生合成边界使用 stub),覆盖持久化、失败重试、局部更新、预览、导出、流水线及检查点续跑。
  • npm run test:voice-clone:193 项通过;加入 CI。
  • npm run test:pipelinenpm run test:recipesnpm run check:i18n 通过。
  • npm run build 通过(renderer + main)。
  • Browser 技能验证了工作台语言选择、自动语言提示、跨语言提示与不支持语言的禁用状态,并检查了宽屏和 1000px 窗口布局;使用的临时 IPC fixture 已移除,不进入提交。
  • 当前环境未安装 Kokoro/ZipVoice 模型,尚未做真实音频试听。合并前建议重点试听:中文/英文各自的 90%20261,234.56,以及不同语言音色与字幕的组合。

@buxuku
buxuku merged commit e640284 into main Sep 5, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant