YuE2 零样本翻唱(Zero-Shot Cover)完整工作流:录音转谱、旋律审校与风格化重制实战指南
2026/9/18 21:56:16 网站建设 项目流程

YuE2 零样本翻唱(Zero-Shot Cover)完整工作流:录音转谱、旋律审校与风格化重制实战指南

【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuE

导读:本文基于仓库 docs/covers.md 展开,系统讲解 YuE2 的翻唱(Cover)工作流——从源录音出发,先用 SheetSage2 转录出可读的旋律乐谱(melody-only ABC),人工审校后交给 YuE2 以cot="melody"的符号规划模式在全新风格与歌词下重新生成完整歌曲。全程无需翻唱专属微调,通用 YuE2 检查点即可完成。读完本文,你将掌握环境隔离配置、转谱接口调用、请求 JSON 编写、生成命令执行,以及翻唱在 benchmark 中的评估边界。

一、翻唱的本质:从"可读的作曲"开始

docs/covers.md开篇给出了一个关键论断:翻唱始于一份可读的作曲(a readable composition)。完整链路是:

源录音 source.wav → SheetSage2 转谱(melody_only=True,自动加载 MERT-v2-FullSong 编码器) → 审校旋律 ABC(无和弦符号,保留 Vocal / Ins 双声部) → YuE2-3B:cot="melody" + 目标风格 style + 目标歌词 lyrics → 语义 token → 声学 latent → YuE2-Vae 解码 → 48kHz 立体声音频

链条中的每一步都是独立的:源分离、转谱、歌词识别、乐谱条件生成是四个不同操作,YuE2 的接口中不存在reference_audio之类的"直接上传音频"参数(见 skills/yue2-music/references/generation-and-covers.md)。其 VAE 编码器也不是旋律转谱的替代品。

该工作流不需要翻唱专属微调:docs/benchmarks.md 的零样本翻唱评估明确指出,所有 YuE2 条件均使用通用歌曲生成检查点与 benchmark 解码器,生成器未接受任何"原曲–翻唱"配对监督或翻唱专属微调(且作者确认了评估作品未进入生成器训练集)。

二、第 1 步:单独搭建 SheetSage2 转谱环境

为什么必须隔离环境

SheetSage2 与 YuE2 的依赖版本互不兼容。SheetSage2 侧固定 Transformers 4.45.2 与 NumPy 1.24.3,YuE2 运行时固定的是另一套 PyTorch/Transformers 版本(详见 skills/yue2-music/references/models-and-setup.md)。因此规范做法是:各自独立虚拟环境,仅通过文件交换 ABC 与音频;转录与生成顺序执行,共享同一块 GPU(先转谱释放显存,再加载 YuE2)。

SheetSage2 需要Python 3.10 或 3.11,且要求FFmpeg 6.1 及其共享库(确认ffmpegPATH上)。按模型卡完成平台准备后,从 YuE 仓库根目录执行:

python3.11 -m venv .venv-sheetsage2 .venv-sheetsage2/bin/python -m pip install huggingface-hub==0.36.0 .venv-sheetsage2/bin/huggingface-cli download m-a-p/SheetSage2 \ --local-dir models/SheetSage2 .venv-sheetsage2/bin/python -m pip install \ torch==2.8.0 torchaudio==2.8.0 \ --index-url https://download.pytorch.org/whl/cu126 .venv-sheetsage2/bin/python -m pip install -r models/SheetSage2/requirements.txt

要点:

  • 加载 SheetSage2 时会自动加载其配置选定的 MERT-v2-FullSong 编码器父模型,无需单独再做一次 MERT2 特征提取;不要把 MERT 的连续特征当 YuE2 的离散语义 token 使用。
  • trust_remote_code=True会执行模型仓库自带的 Python 实现,因此应选用经过审校的模型版本(revision),并随产物记录该版本。
  • 共享 Hugging Face 缓存没有问题,环境隔离指的是 Python 依赖环境。

仓库还提供了一个可复现性更强的转谱辅助脚本 skills/yue2-music/scripts/transcribe.py:--task melody-full即启用melody_only=True--task melody-vocal则只保留人声旋律任务。它会自动写入input.json(记录源音频哈希、模型、revision、任务提示词)、model_provenance.json(包版本与快照哈希)、abc_check.jsontranscription_manifest.json,并对导出的旋律 ABC 做无和弦符号校验,失败时以非零退出码结束。

三、第 2 步:转录并审校旋律(CLI 与 Transformers 双路径)

CLI 方式

.venv-sheetsage2/bin/python models/SheetSage2/infer.py source.wav \ --output cover-score --melody-only
  • cover-score/score.abc同时保留人声与器乐旋律(对应 YuE2 原生旋律输入的VocalIns双声部),同时省略和弦符号——这正是翻唱所需的旋律乐谱形态。
  • 转谱后必须检查命令退出状态与转谱告警,再对照源录音逐项审校音符、拍号(meter)与段落顺序。转谱错误会原样带进翻唱成品,这一步的质量直接决定最终结果。

Transformers 接口(同操作等价实现)

from transformers import AutoModel model = AutoModel.from_pretrained( "models/SheetSage2", trust_remote_code=True, ).eval().to("cuda") result = model.transcribe( "source.wav", output_dir="cover-score", melody_only=True, ) if not result.get("abc") or result.get("abc_error"): raise RuntimeError("Transcription did not produce a usable melody score") print(result.get("warnings", []))
  • melody_only=True只改变导出物(ABC 无和弦、MIDI 无和弦伴奏),不改变推理:若任务列表含和弦预测,原始预测事件与 LAB 标注仍会保留。
  • 若该版本无法构建无和弦旋律 ABC,Python 会抛出RuntimeError并附带已完成转录结果(error.result),CLI 则以非零状态退出。不要把孤立的标注文件当作成功的翻唱乐谱。
  • 追求可复现时应锁定已审校的模型 revision并保留下载的配置;模型的 Python 实现由trust_remote_code=True执行,因此 revision 锁定同时约束模型代码。

四、第 3 步:准备歌词与目标风格

编写 cover-request.json

参考仓库示例 examples/song.json,翻唱请求同样包含stylelyricscotseed四个核心字段:

{ "id": "my_cover", "style": "English, jazz swing, intimate female vocal, acoustic piano, upright bass, brushed drums, 92 BPM", "lyrics": "[Verse]\n...\n[Chorus]\n...", "cot": "melody", "seed": 831001 }

字段语义(可对照 examples/song.json 与 src/yue2/pipeline.py 的SongRequest):

字段作用说明
style目标风格描述放入流派、乐器、人声特质、语言、速度;tagsstyle的别名,两者同时给出必须一致
lyrics演唱歌词[Verse][Chorus]等段落标签组织;段落标签与歌词顺序需与乐谱对齐
cot符号规划模式melody(仅旋律规划)或full(旋律+和弦)
seed随机种子固定种子便于追踪对比
abc外部乐谱--abc-file或 Python 参数注入,无需写入 JSON

cot 模式的选择依据

  • cot="melody"(推荐用于换风格翻唱):只规划旋律,给伴奏更多自由,让目标风格真正"接管"和声与配器。
  • cot="full":提供完整乐谱并固定和声,适用于保留原曲和声骨架的场景。

从 skills/yue2-music/references/generation-and-covers.md 的对照表看:翻唱已有旋律 →melody+ 无和弦旋律 ABC;重和声/乐谱编辑 →full+ 带和弦的编辑后 ABC。注意:外部 ABC 输入会绕过符号规划器,不会调用第二个规划器去修复乐谱;cot="melody"不会自动从输入文件里删除和弦符号——所以转谱时就应使用--melody-only导出。

歌词来源方面:优先使用你已有的源歌词,或者自行转录并修正歌词文字。翻译歌词时,短语划分与音节数必须贴合旋律(英文歌词改词后即使音节数相同,往往还需要调整重音与元音时值,见 skills/yue2-music/references/generation-and-covers.md 的编辑指导)。

切回 YuE2 环境并生成

.venv/bin/python examples/generate.py --request cover-request.json \ --abc-file cover-score/score.abc --cot melody --output outputs/cover

examples/generate.py 的参数行为:--cot可选full/melody/off--abc-file会把乐谱文本读入请求的abc字段;提供乐谱时cot必须是fullmelody(若与--cot off组合会直接报错),对应 src/yue2/pipeline.py 中plan()的"外部 ABC 直接 tokenize、跳过规划"逻辑。--output要求全新目录,避免覆盖已有版本。

等价地,也可以使用安装后的 CLI(见 src/yue2/cli.py 的generate入口与 skills/yue2-music/references/generation-and-covers.md 的 CLI 对照表):

yue2 generate --request requests/cover.json --cot melody \ --abc-file edits/source_melody.abc --output outputs/cover

五、试跑仓库自带的原创旋律示例

该示例只需 YuE2,用于验证乐谱条件生成接口:

.venv/bin/python examples/generate.py --request examples/song.json \ --abc-file examples/melody.abc --cot melody --output outputs/original-melody
  • examples/melody.abc 是 YuE2 原生旋律输入格式的样例:VocalIns两个声部、无和弦符号,包含M:4/4(拍号)、Q:1/4=88(88 BPM)等元信息,歌词段落用% verse/% chorus注释对齐。
  • examples/song.json 提供风格与歌词,其默认cotfull,此处由命令行覆盖为melody
  • 注意:这是用原创素材测试"乐谱条件生成"接口,不是转谱演示,也不是 benchmark 结果。若你的 ABC 来自其他方言,可能需先做格式转换——skills/yue2-music/references/abc-editing.md 描述了 YuE2 支持的记号范围。

六、源码级原理:外部乐谱如何进入生成链路

从 src/yue2/pipeline.py 可以看到乐谱条件生成的精确实现:

  • YuE2Pipeline.plan():当request.abc非空时,直接self.tokenizer.encode(request.abc)得到abc_ids,再以"指令前缀 + 精确 ABC 词元"构造prefix,返回SymbolicPlan,计时中记录external_prefix_tokens——不调用符号规划器、不做二次规划
  • cot="off"时返回无 ABC 的SymbolicPlan,因此--abc-file--cot off冲突是必然的。
  • 之后的generate_semantic(plan)会校验plan.prefix与"请求/精确 ABC token"是否一致,CFG 负分支在带乐谱时保持"同一指令 + 精确 ABC"而去掉风格与歌词(见effective_config输出的cfg_negative: same_instruction_and_exact_abc);语义 CFG 在full/melody下默认 1.0。
  • 完整产物通过save_artifacts()落盘:audio.flacscore.abcplan.json、语义 token、latent.npy、有效配置、计时、权重身份与完整性哈希,并写入result.jsontruncated标志——一次翻唱运行即可形成完整可追溯记录。

七、评估边界:零样本翻唱的 benchmark 结论

docs/benchmarks.md 的"Zero-shot cover generation"小节给出了这项能力的量化证据:评估覆盖948 首 SHS100K 作品 × 2 种目标风格 × 2 个种子 = 每方法 3,792 个输出,无候选挑选,全部使用通用检查点与 benchmark 解码器。CLEWS 与 Discogs-VINet 在排除源作品的 10,545 条检索画廊上衡量作品身份保留度,MuLan 衡量对目标风格的贴合度,SongBench Musicality 衡量音乐性:

方法CLEWS mAP ↑CLEWS Hit@1 ↑Discogs-VINet mAP ↑MuLan ↑SongBench Musicality ↑
SongEcho0.41948.4%0.1220.3663.286
ACE-Step 1.50.0242.4%0.0060.1663.689
YuE2 (full score)0.64771.3%0.2880.3825.104
YuE2 (without chords)0.59867.3%0.1790.4175.490
YuE2 (without score)0.0060.3%0.0040.4745.691

结论的准确表述是:

  • 完整乐谱(full score)在此对比中最能保留作品身份(CLEWS mAP 0.647、Hit@1 71.3%)。
  • 放松提供的乐谱(去掉和弦)反而提升目标风格贴合度与音乐性(MuLan 0.417、SongBench Musicality 5.490)。这是两个不同的结果:固定转谱可能约束对反差风格的改编;产品指引因此推荐翻唱使用 melody-only 乐谱,让伴奏更自由地适应目标风格。
  • 这不说明"从当前提示词新生成符号规划会降低质量";也不构成通用指标碾压或人类偏好的结论。

八、实践要点清单

  1. 环境隔离:SheetSage2 与 YuE2 分属两个虚拟环境,顺序执行以共享 GPU。
  2. 转谱必审校:检查退出状态、告警、音符/拍号/段落;错误会传导进成品。
  3. 乐谱形态:翻唱用melody_only导出(无和弦、双旋律声部);cot必须为melody,且不会自动去除输入中的和弦符号。
  4. 歌词对齐:段落标签与乐谱顺序一致;翻译时匹配短语划分与音节数。
  5. 可复现性:固定 seed、锁定模型 revision,save_artifacts()保留完整运行记录,每次变更请求使用全新输出目录。
  6. 评估边界:benchmark 数据描述的是该协议下的观测结果(身份保留 vs 风格贴合),单次本地生成不等于复现聚合结论。

【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuE

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询