Skip to content

feat: 为 variance 参数添加绝对值编辑模式 - #9

Draft
KakaruHayate wants to merge 2 commits into
LiuYunPlayer:masterfrom
KakaruHayate:feature/absolute-variance-mode-upstream
Draft

feat: 为 variance 参数添加绝对值编辑模式#9
KakaruHayate wants to merge 2 commits into
LiuYunPlayer:masterfrom
KakaruHayate:feature/absolute-variance-mode-upstream

Conversation

@KakaruHayate

@KakaruHayate KakaruHayate commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

状态

Draft:依赖 TuneLab 宿主补齐 voice piecewise automation 的合成消费链。

本 PR 完成 DiffSingerForTuneLab 插件侧实现;在宿主改动合入前,absolute 轨可以编辑和保存,但不能可靠传入 voice synthesis,不应作为开箱即用功能合并发布。宿主侧缺口与接线位置见下文。

功能

为 energy、breathiness、voicing、tension 增加 part 级 variance_param_mode

  • delta(默认,兼容现有工程):保留现有连续归一化偏移轨;
  • absolute:改用分段绝对轨。energy / breathiness / voicing 使用 [-96, 0] dB,tension 使用 [-10, 10] 模型声学单位;未编辑区为 NaN,表示跟随 variance 模型预测。

两种模式分别保存在 continuous / piecewise 容器中,切换模式不会覆盖另一侧数据。absolute 模式下编辑轨本身就是最终实参,因此不再重复暴露只读 variance 回显轨。

合成语义

absolute 轨表示最终声学目标

  • 有编辑值:直接采用目标,并钳到参数的声学范围;
  • NaN 或无轨:跟随模型预测,并钳到同一声学范围;
  • 不经过 delta 逆运算,也不受 delta 编辑量程限制。

这保证目标值真正可达。例如 voicing 的 predicted=-40 dB, target=0 dB 结果为 0 dB,不会受 delta 模式 1.25(即最多 predicted + 12 dB)限制而停在 -28 dB

对于 voicing_domain: mulaw,预测值先从模型线上域解码为 dB,完成组合后再编码回模型输入域;轨值和编辑语义仍保持 dB。

主要改动

  • 增加 absolute/delta 模式选择和对应的 continuous/piecewise 轨声明;
  • absolute 模式下同步隐藏 synthesized variance readback 声明与产物;
  • 增加 DiffSingerVarianceMath.CombineAbsoluteFrame 作为零 SDK 依赖的单一数学实现;
  • 移除不再需要的 DeltaInverse / InvertVoicing 数值求逆;
  • 修正 tension absolute 轨标签:tension 是模型声学单位,不标注为 dB;
  • 增加中文本地化及 schema 文档 §14.6–14.7。

验证

  • 单元测试:80/80 passed
  • 插件 Release 构建:0 warning / 0 error
  • 新增 VarianceAbsoluteTests,覆盖:
    • voicing 全声学范围目标可达;
    • NaN 跟随预测;
    • 编辑目标与预测值及 delta 量程无关;
    • 预测和目标均钳到各自声学范围。

TuneLab 宿主依赖

TuneLab release/2.0.02c21ab9)已有 piecewise 轨的编辑、显示、序列化和段间 NaN 语义,但 voice synthesis 路径仍只从 continuous Automations 读取:

  1. VoiceSynthesisSnapshotFactory.cs 需要按 AutomationConfig.IsPiecewisePiecewiseAutomationsAutomations 冻结正确 evaluator;piecewise 无数据时返回 NaN,且不叠加 continuous automation vibrato。
  2. VoiceSynthesisContext.cs 需要为 PiecewiseAutomations 建立 live evaluator,并接入现有项及 ItemAdded / ItemRemoved / RangeModified 失效通知。
  3. 同一 key 在 continuous / piecewise 间切换时,live evaluator 和订阅必须随当前声明刷新,不能回退到另一容器中的孤儿数据。

这些都是 TuneLab host-internal 改动,不需要修改冻结的 TuneLab.SDK / TuneLab.Foundation 公共 ABI。完整依据和接线清单见 docs/tunelab-voicebank-schema.md §14.7。

kakaru and others added 2 commits July 29, 2026 14:56
基于上游 master (fadbfe9) 重放 PR #2 的 absolute variance 编辑模式,并修正已知问题:
- absolute 轨直接采用用户声学目标;未编辑 NaN 帧跟随预测;
- 移除 delta 逆函数绕行,修复 voicing 高目标不可达(predicted=-40, target=0 现正确输出 0dB);
- mulaw voicing 仍按线上域解码→组合→编码回线上域;
- 新增零依赖 VarianceAbsoluteTests,覆盖目标直用、NaN 跟随、声学范围钳位、与预测无关性;
- docs 增加 §14.7 TuneLab 2.0 宿主要求:VoiceSynthesisSnapshotFactory / VoiceSynthesisContext / live evaluator 需消费 piecewise 轨。
- GetSynthesizedParameterConfigs 按当前 variance_param_mode 生成声明,absolute 模式不再声明已隐藏的 variance 回显轨。

- tension absolute 轨使用模型声学单位,不再错误标注为 dB。

验证:80/80 tests pass;插件 Release 构建 0 warning 0 error。
@KakaruHayate KakaruHayate changed the title feat: 重建 variance absolute 模式并修复合成语义 feat: 为 variance 参数添加绝对值编辑模式 Jul 29, 2026
@KakaruHayate
KakaruHayate marked this pull request as draft July 29, 2026 09:53
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.

2 participants