YuE2 零样本翻唱完整指南:录音转旋律谱,换风格重制一首歌
【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuE
YuE2 的零样本翻唱工作流解决一个问题:你手上有一段源录音,想让它变成另一种风格,但不想重录、也不想训练任何模型。链路是先用 SheetSage2 把录音转成无和弦的旋律 ABC 谱,人工审校后,再交给 YuE2 按目标风格与新歌词重制出完整歌曲。全程只使用通用歌曲生成检查点,不需要翻唱专属微调。
什么时候用它 🎵
- 适用:手里有源录音,想换成爵士、电子等新风格翻唱;或已有一份旋律谱,想重新编排配器与人声。
- 不适用:想让 YuE2"直接听"参考音频——请求协议里没有
reference_audio参数,也没有参考歌手字段。 - 边界:源分离、转谱、歌词识别、乐谱条件生成是四个互相独立的操作(见 generation-and-covers.md),YuE2 的 VAE 编码器不能替代旋律转谱。
环境如何隔离
两个模型必须分装两个虚拟环境,依赖版本互相冲突:
- SheetSage2 侧固定 torch 2.8.0 / torchaudio 2.8.0,要求 Python 3.10/3.11 与 FFmpeg 6.1(确认
ffmpeg在PATH上); - YuE2 运行时固定另一套 PyTorch/Transformers 版本,基线是 24GB 显存、支持 BF16 的 NVIDIA GPU。
两边只通过文件交换音频与 ABC,在同一块 GPU 上顺序执行——先转谱释放显存,再加载 YuE2。YuE2 侧按 models-and-setup.md 准备.venv即可。SheetSage2 环境在仓库根目录执行:
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 并把它记录进产物。
旋律谱怎么导出、怎么跑通
转谱用仓库自带脚本最省事:
.venv-sheetsage2/bin/python skills/yue2-music/scripts/transcribe.py \ source.wav --task melody-full --output cover-score--task melody-full即melody_only=True,导出无和弦旋律谱,同时保留人声与器乐两条旋律线。脚本自动写入input.json(源音频哈希、模型、revision)、model_provenance.json、abc_check.json与transcription_manifest.json,并对导出的 ABC 做无和弦校验,失败以非零退出码结束。你转谱后必须检查退出状态与告警,再对照源录音逐项核对音高、拍号与段落顺序——错误会原样带进翻唱成品。
把谱作为外部输入,按 examples/song.json 的形态准备请求(cot写melody):
{ "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 }切回 YuE2 环境生成:
.venv/bin/python examples/generate.py --request cover-request.json \ --abc-file cover-score/score.abc --cot melody --output outputs/covergenerate.py 默认模型m-a-p/YuE2-3B、VAEm-a-p/YuE2-Vae。歌词来源优先用你已有的源歌词,或自行转录后修正;翻译时短语划分与音节数要贴合旋律,英文改词即使音节数相同,重音与元音时值通常也要再调(编辑指导见 generation-and-covers.md)。
只想先验证乐谱条件接口,不必碰转谱:
.venv/bin/python examples/generate.py --request examples/song.json \ --abc-file examples/melody.abc --cot melody --output outputs/original-melodymelody.abc 是 YuE2 原生旋律输入格式的样例:Vocal与Ins两个声部、无和弦符号、M:4/4拍号、Q:1/4=88速度。注意这是原创素材的接口测试,不是转谱演示,也不是 benchmark 结果;如果你的 ABC 来自其他记谱方言,先对照 abc-editing.md 支持的记号范围做转换。
关键参数怎么配
| 字段 | 控制什么 | 约束与默认 |
|---|---|---|
id | 请求标识 | 文件名安全,1–180 位字母数字开头,默认song |
style | 目标风格:流派、乐器、人声特质、语言、速度 | 必填字符串;tags是其别名,两者同时给出必须一致 |
lyrics | 演唱歌词 | [Verse]/[Chorus]段落标签顺序须与谱对齐 |
cot | 符号规划模式 | full(默认)/melody/off |
abc | 外部乐谱文本 | 由--abc-file或 Python 参数注入;非空时cot只能是melody或full |
seed | 随机种子 | 默认 831001,固定便于对比 |
cfg_scale | 语义 CFG 强度 | 默认 1.0(full/melody)或 1.01(off),取值 0–20 |
请求里没有reference_audio、bpm、negative_prompt等字段:速度与拍号写进 ABC 的M:/Q:行,再在style里用一致的说法描述。
cot三个取值的取舍,对照表来自 generation-and-covers.md:
melody:只规划旋律,和声与配器交给模型自由发挥——换风格翻唱选它,让目标风格真正"接管"编配;full:旋律加和弦一起规划,和声骨架被锁定——保留原曲和声的编辑、重和声场景选它;off:完全跳过谱面直接出音频,此时abc必须为空。
两点容易被忽略:外部 ABC 会绕过符号规划器,不会调第二个规划器去修复乐谱;cot="melody"也不会自动删掉输入谱里的和弦符号。所以和弦要在转谱或编辑阶段就去掉,而不是指望生成时兜底。
内部链路怎么走 🔍
源码入口在 pipeline.py,一条请求走三级:
plan():request.abc非空时直接tokenizer.encode()得到abc_ids,拼上指令前缀构造精确前缀,返回SymbolicPlan,计时里记external_prefix_tokens——不调用符号规划器、不做二次规划。cot="off"直接返回空谱计划,这就是外部谱与 off 模式互斥的原因。generate_semantic():重算前缀并与 plan 中保存的前缀比对,不一致就抛ValueError;带谱时 CFG 负分支保留同一指令与精确 ABC、去掉风格与歌词,语义 CFG 默认如上表。save_artifacts():落盘 48kHz 音频(audio.flac,24-bit)、score.abc(如有谱)、语义 token、latent.npy、请求、有效配置与result.json(status、truncated截断标志、时长、权重身份、产物哈希)。解码器默认YuE2-Vae,复现 benchmark 时用YuE2-Vae-legacy,两者音频要分开存(见 generation-and-covers.md)。
效果到底如何
benchmarks.md 的零样本翻唱评估覆盖 948 首 SHS100K 作品,每作品 2 种目标风格 × 2 个种子,即每方法 3,792 个输出,无候选挑选;全部条件使用通用歌曲生成检查点与 benchmark 解码器,生成器未接受任何"原曲–翻唱"配对监督,评估作品确认未进入生成器训练集。
| 谱面条件 | CLEWS mAP ↑ | CLEWS Hit@1 ↑ | Discogs-VINet mAP ↑ | MuLan 风格贴合 ↑ | SongBench 音乐性 ↑ |
|---|---|---|---|---|---|
| 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 |
| 完整谱(旋律+和弦) | 0.647 | 71.3% | 0.288 | 0.382 | 5.104 |
| 去和弦旋律谱 | 0.598 | 67.3% | 0.179 | 0.417 | 5.490 |
| 无谱(仅文字提示) | 0.006 | 0.3% | 0.004 | 0.474 | 5.691 |
指标分工:CLEWS 与 Discogs-VINet 在排除源作品的 10,545 条检索画廊上衡量作品身份保留度,MuLan 衡量对目标风格的贴合度,SongBench Musicality 衡量音乐性。
怎么读这张表:完整谱身份保留最高;去掉和弦后身份略降,但风格贴合与音乐性反而更好。这是两个独立结果——固定的源录音转谱可能约束对反差风格的改编,所以文档的产品指引推荐翻唱使用旋律谱,让伴奏更自由。这些数字能证明:在该评估协议下谱条件如何影响身份与风格。不能证明:人类偏好优势、通用指标碾压,或"从当前提示词新生成符号规划会降低质量"——单次本地生成也不等于复现聚合结论。
常见问题速查
| 症状 | 原因 | 处理 |
|---|---|---|
--cot off与--abc-file组合直接报错 | off 模式下plan()返回空谱计划,外部谱无处安放 | 带谱时cot用full或melody |
--output指向已存在目录报错 | generate.py 刻意要求全新目录以保留每个版本 | 每次运行换新目录 |
| melody 谱里还带着和弦符号 | cot="melody"不自动删和弦,外部谱也不做二次修复 | 转谱用 melody-only,或在编辑阶段去掉和弦再验证 |
| 转录错误原样进成品 | 转谱输出未经人工核对 | 对照源录音逐项核对音高、拍号、段落顺序 |
| SheetSage2 与 YuE2 装进同一虚拟环境失败 | 两边 PyTorch/Transformers 依赖版本冲突 | 各自独立 venv,顺序执行共享 GPU |
| 生成"完成"但音频不完整 | result.json的truncated会分别记录 abc / semantic 截断 | 检查时长与结尾,重跑前先换新目录 |
上线前对照
- 转谱产物通过无和弦校验,并已完成逐项人工审校
- 外部 ABC 无和弦符号,
Vocal/Ins声部完整 - 请求中
cot为melody(换风格)或full(留和声),style与谱内速度描述一致 lyrics段落标签顺序与谱的段落一致,翻译已对齐音节数- 每次运行使用全新输出目录,seed 与模型 revision 已固定记录
- 运行后读取
result.json,确认truncated全为 false 且哈希清单完整
【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuE
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考