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 及其共享库(确认ffmpeg在PATH上)。按模型卡完成平台准备后,从 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.json与transcription_manifest.json,并对导出的旋律 ABC 做无和弦符号校验,失败时以非零退出码结束。
三、第 2 步:转录并审校旋律(CLI 与 Transformers 双路径)
CLI 方式
.venv-sheetsage2/bin/python models/SheetSage2/infer.py source.wav \ --output cover-score --melody-onlycover-score/score.abc会同时保留人声与器乐旋律(对应 YuE2 原生旋律输入的Vocal与Ins双声部),同时省略和弦符号——这正是翻唱所需的旋律乐谱形态。- 转谱后必须检查命令退出状态与转谱告警,再对照源录音逐项审校音符、拍号(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,翻唱请求同样包含style、lyrics、cot、seed四个核心字段:
{ "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 | 目标风格描述 | 放入流派、乐器、人声特质、语言、速度;tags是style的别名,两者同时给出必须一致 |
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/coverexamples/generate.py 的参数行为:--cot可选full/melody/off;--abc-file会把乐谱文本读入请求的abc字段;提供乐谱时cot必须是full或melody(若与--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 原生旋律输入格式的样例:
Vocal与Ins两个声部、无和弦符号,包含M:4/4(拍号)、Q:1/4=88(88 BPM)等元信息,歌词段落用% verse/% chorus注释对齐。 - examples/song.json 提供风格与歌词,其默认
cot为full,此处由命令行覆盖为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.flac、score.abc、plan.json、语义 token、latent.npy、有效配置、计时、权重身份与完整性哈希,并写入result.json的truncated标志——一次翻唱运行即可形成完整可追溯记录。
七、评估边界:零样本翻唱的 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 ↑ |
|---|---|---|---|---|---|
| SongEcho | 0.419 | 48.4% | 0.122 | 0.366 | 3.286 |
| ACE-Step 1.5 | 0.024 | 2.4% | 0.006 | 0.166 | 3.689 |
| YuE2 (full score) | 0.647 | 71.3% | 0.288 | 0.382 | 5.104 |
| YuE2 (without chords) | 0.598 | 67.3% | 0.179 | 0.417 | 5.490 |
| YuE2 (without score) | 0.006 | 0.3% | 0.004 | 0.474 | 5.691 |
结论的准确表述是:
- 完整乐谱(full score)在此对比中最能保留作品身份(CLEWS mAP 0.647、Hit@1 71.3%)。
- 放松提供的乐谱(去掉和弦)反而提升目标风格贴合度与音乐性(MuLan 0.417、SongBench Musicality 5.490)。这是两个不同的结果:固定转谱可能约束对反差风格的改编;产品指引因此推荐翻唱使用 melody-only 乐谱,让伴奏更自由地适应目标风格。
- 这不说明"从当前提示词新生成符号规划会降低质量";也不构成通用指标碾压或人类偏好的结论。
八、实践要点清单
- 环境隔离:SheetSage2 与 YuE2 分属两个虚拟环境,顺序执行以共享 GPU。
- 转谱必审校:检查退出状态、告警、音符/拍号/段落;错误会传导进成品。
- 乐谱形态:翻唱用
melody_only导出(无和弦、双旋律声部);cot必须为melody,且不会自动去除输入中的和弦符号。 - 歌词对齐:段落标签与乐谱顺序一致;翻译时匹配短语划分与音节数。
- 可复现性:固定 seed、锁定模型 revision,
save_artifacts()保留完整运行记录,每次变更请求使用全新输出目录。 - 评估边界: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),仅供参考