SPIKE-02:采用 ModelsLab/omnivoice-singing 作为现有引擎的歌唱变体
归档说明(2026-07-12): 已在根目录清理中从
.planning/移到这里。 下方内部.planning//specs/路径均为历史遗留——这些目录树已被移除;请参阅 git 历史。
SPIKE-02:采用 ModelsLab/omnivoice-singing 作为现有引擎的歌唱变体¶
许可证更正(2026-10-03): 原先关于商业兼容性的 结论已撤回。请参阅 源码审查 以了解代码、权重和下游条款的单独规定。本工程决策 并不表示该模型已获准用于 Pro。
状态: ⚠️ 已被取代(2026-06-14) 由 specs/006-dubbing-singing-mode/(规范树已于 2026-07-12 移除——功能已发布;请参阅 git 历史)
日期: 2026-05-18(于 2026-06-14 被取代)
决策者: [维护者]
相关: ROADMAP 阶段 4;REQUIREMENTS SING-01..05;.planning/phases/04-adaptive-specialty-engines-spike-first/04-RESEARCH.md
已被取代: 该方案曾选择
ModelsLab/omnivoice-singing用于歌唱,但该模型 没有旋律(F0/MIDI)条件控制——它会自行生成旋律, 无法跟随配音必须保留的源歌曲。SoulX-Singer(arXiv 2602.07803,发表于本决策之后)提供 F0/MIDI 条件控制,并已在 plan-06 中被选中。本 ADR 仅在重新定义为 表达性 TTS 风格开关(而非旋律匹配配音)时仍然有效。
背景¶
ModelsLab/omnivoice-singing(HuggingFace,每月 1,053 次下载,2026-05-18 验证)是 k2-fsa/OmniVoice 的微调版本——商业权利问题尚未解决,使用相同的 Qwen3-0.6B 主干、相同的 Higgs Audio v2 编解码器(24 kHz 单声道)、相同且已随 VoiceStudio v0.2.7 发布的 omnivoice PyPI 库(0.1.5,2026-04-28)。该模型使用额外的歌唱 + 情感标注数据训练,并在生成时通过 [singing] 文本控制标签激活。
VoiceStudio 现有的 dub_pipeline.py 使用 Demucs 将源音频分离为人声分轨和乐器分轨,并将人声分轨路由到默认 TTS 引擎。目前,即使输入素材是歌唱内容,输出仍类似语音,这是配音音乐相关内容时用户抱怨最强烈的问题之一。
本决策讨论是否将该歌唱微调模型集成为人声段的路由替代引擎,并配备自动检测 + 逐段覆盖。
决策¶
同意,但缩小范围 —— 按 SING-01..05 集成。
集成形态为 VoiceStudioSingingBackend(VoiceStudioBackend) —— 一个不超过 30 行的子类,重写 id、display_name、from_pretrained 模型 ID,并在 generate() 中自动注入 [singing] 控制标签,除非提示词已经以 [ 开头的标签起始。配音管线新增“歌唱模式”开关和分段路由路径(人声分轨 → 歌唱引擎用于歌唱段,人声分轨 → 默认引擎用于说话段,乐器分轨保持不变)。分段检测使用基于 Demucs 人声分轨的音高稳定性 + 能量启发式方法,并可在配音 UI 中按段由用户覆盖。
SING-02 要求的完整逐段路由深度将在对 dub_pipeline.py 进行 Wave 2 代码阅读后决定:如果现有管线能以不超过 50 行实现逐段路由,则发布;如果需要超过 500 行的重构,则将范围缩减为 v0.3 的“歌唱模式应用于整个配音任务”,并将逐段支持推迟到 v0.4。
影响¶
积极影响:
- 配音内容中的歌唱段现在会输出歌唱效果(当前输出是不合适的类语音效果)。
- 零新增 Python 依赖——仍使用已随产品发布的同一 omnivoice 库。
- 后端子类不超过 30 行;无需新的引擎架构。
- 硬件占用与现有 VoiceStudioBackend 相同;默认引擎能运行的地方它都能运行。
负面 / 风险:
- 启发式分段(音高稳定性 + 能量)较为单一,会误分类歌剧式 / 持续元音的说话内容,以及颤音较重的说话内容。
- 模型卡承认跨语言歌唱质量为“外推,质量参差”。
- 如果缺少 [singing] 标签,omnivoice-singing 会返回乱码输出——自动注入是至关重要的依赖。
缓解措施:
- 在任意片段提交渲染之前,用户可在配音 UI 中按段覆盖(最终路由由用户掌控——SING-03 已要求这一点)。
- SING-05 验收范围限定为母语歌唱场景;跨语言标记为尽力而为,并在引擎卡片 UI 中展示模型卡免责声明。
- VoiceStudioSingingBackend.generate() 始终在提示词前加上 [singing],除非提示词已经以 [ 开头,从而允许高级用户手动编写 [singing] [happy] 等组合。
- 基于模型的歌唱/语音分类器根据 REQUIREMENTS.md 的 Out of Scope(超出范围)部分明确推迟到 v2。
- 在引擎卡片 UI 中展示许可证 + 模型卡链接;首次使用时需确认接受后方可下载(SING-04)。
来源¶
.planning/phases/04-adaptive-specialty-engines-spike-first/04-RESEARCH.md(本里程碑的研究)- https://huggingface.co/ModelsLab/omnivoice-singing(2026-05-18 验证)
- https://huggingface.co/k2-fsa/OmniVoice(上游)
- https://pypi.org/project/omnivoice/(0.1.5,2026-04-28)
backend/services/tts_backend.py(现有VoiceStudioBackend参考实现)backend/services/dub_pipeline.py(现有配音管线——Wave 2 代码阅读目标)
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 om/VoiceStudio