YuE2 零样本翻唱实战:把一段录音做成爵士版
【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuE
手里有一段 source.wav,是一首老情歌,想把它翻唱成亲密爵士版——从哪下手?答案写在 docs/covers.md 开头:YuE2 的零样本翻唱始于一份"可读的作曲"。先用 SheetSage2 把源录音转成只含旋律的 ABC 乐谱,人工审校一遍,再交给 YuE2 配上目标风格和新歌词,生成语义 token、解码声学 latent,最终输出 48kHz 立体声音频。整条链路四个环节,通用歌曲生成检查点就够用,不碰任何翻唱专属微调。
源录音能直接丢给 YuE2 吗?先拆掉三个误解
动手前先拆三个假设,不然跑到最后也不知道哪一步出的问题。
误解一:音频直接喂给 YuE2 就行?不行。YuE2 的请求接口里压根没有reference_audio、phonemes、bpm、negative_prompt这类参数。源分离、转谱、歌词识别、乐谱条件生成,是四个互不依赖的操作,得一个个来。顺带说清一个容易混淆的点:模型里的 VAE 编码器只负责声学 latent 和音频之间的双向解码,它不是旋律转谱工具;同理,别把 MERT 的连续特征当 YuE2 的离散语义 token 用,两者不是一个 token 空间。
误解二:转谱错了,YuE2 会帮忙修乐谱?不会。看 src/yue2/pipeline.py 里的YuE2Pipeline.plan():只要request.abc非空,就直接tokenizer.encode得到abc_ids,用"指令前缀 + 精确 ABC 词元"拼出 prefix,返回SymbolicPlan,计时里记一条external_prefix_tokens。全程不调用符号规划器,更谈不上二次修复。说白了,转谱里的错会原样带进翻唱成品。
误解三:cot="melody"会自动去掉输入文件里的和弦?也不会。它只改变规划模式,输入文件里有什么就原样带什么进去。所以转谱时就要用 melody-only 导出——这是该在源头做的事,不是事后补救。
SheetSage2 转谱环境怎么独立搭
做什么:给 SheetSage2 建一个独立 venv,和 YuE2 的.venv分开。为什么:两套依赖版本互相冲突——SheetSage2 侧固定 Transformers 4.45.2 与 NumPy 1.24.3,YuE2 用的是另一套 PyTorch/Transformers 组合(细节见 skills/yue2-music/references/models-and-setup.md)。因此规范做法是两个环境顺序执行、共享一块 GPU:先转谱、释放显存,再加载 YuE2,期间只靠文件交换 ABC 和音频。
🔑 环境要求: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 特征提取。
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 做无和弦符号校验,失败时以非零退出码结束。
源录音怎么转谱、旋律怎么审校
要敲的命令就这一条:
.venv-sheetsage2/bin/python models/SheetSage2/infer.py source.wav \ --output cover-score --melody-only产出的cover-score/score.abc会同时保留人声与器乐两条旋律(对应 YuE2 原生输入格式的Vocal与Ins双声部),并省略和弦符号——这正是翻唱需要的旋律乐谱形态。
想走 Transformers 接口也完全等价:AutoModel.from_pretrained("models/SheetSage2", trust_remote_code=True).eval().to("cuda")加载后,调用model.transcribe("source.wav", output_dir="cover-score", melody_only=True),再检查返回的result["abc"]与result["abc_error"],不可用时直接抛RuntimeError(错误对象会附带error.result,即已完成的转录结果)。切记别把孤立的标注文件当成成功乐谱。另外一个细节:melody_only=True只改变导出物(ABC 无和弦、MIDI 无和弦伴奏),不改变推理——任务列表里若含和弦预测,原始预测事件与 LAB 标注照样保留。
⚠️ 转谱完必须做三件事:看命令退出状态、读转谱告警、对照源录音逐项核对音符、拍号与段落顺序。这一步的质量直接决定最终成品。
翻唱请求怎么写、YuE2 怎么跑
请求 JSON 只需要四个核心字段(完整示例见 examples/song.json):
- style:目标风格描述,流派、乐器、人声特质、语言、速度都写进这一句;
tags是它的别名,两者同时给出必须一致。 - lyrics:演唱歌词,用
[Verse]、[Chorus]这类段落标签组织;段落顺序要与乐谱对齐。翻译歌词时,短语划分与音节数必须贴合旋律——英文改词哪怕音节数不变,重音与元音时值往往还得再调。 - cot:符号规划模式,
melody(只规划旋律)或full(旋律加和弦)。 - seed:随机种子,固定它便于追踪对比。
abc字段不用写进 JSON,由--abc-file或 Python 参数注入。
🔑 cot 的一句话决策:换风格选melody——只锁旋律,让伴奏接管和声与配器,目标风格才真正"接管";要保原曲和声选full——提供完整乐谱,把和声骨架固定住。examples/song.json 的默认cot是full,这里由命令行覆盖。
切回 YuE2 环境:
.venv/bin/python examples/generate.py --request cover-request.json \ --abc-file cover-score/score.abc --cot melody --output outputs/cover用安装后的 CLI 等价于yue2 generate --request requests/cover.json --cot melody --abc-file edits/source_melody.abc --output outputs/cover,完整对照见 skills/yue2-music/references/generation-and-covers.md。几个参数行为值得留意:--cot可选full/melody/off;提供了乐谱时cot必须是full或melody,与--cot off组合会直接报错——这不是 bug,cot="off"时plan()返回的SymbolicPlan里根本没有 ABC,两者天然冲突。--output要求全新目录,避免覆盖已有版本。
还有一档"冒烟测试"场景,只装 YuE2 就能跑:examples/melody.abc 是 YuE2 原生旋律输入格式的样例(Vocal与Ins双声部、无和弦、M:4/4、Q:1/4=88,段落用% verse/% chorus注释对齐),配上 examples/song.json 就能验证乐谱条件生成接口。注意它的定位:这是用原创素材测试接口,不是转谱演示,也不是 benchmark 结果。
生成链路在 YuE2 内部长这样——外部 ABC 以精确前缀进入语义 token 链路,再经 flow-velocity 预测得到声学 latent,最后由 VAE decoder 解出 48kHz 音频:
生成跑完看什么:产物与 benchmark
产物侧,save_artifacts()一次落盘全部记录:audio.flac、score.abc、plan.json、语义 token、latent.npy、有效配置、计时、权重身份与完整性哈希,result.json里还带truncated标志——一次翻唱运行就是一份完整可追溯档案。可复现性上记住四件事:固定 seed、锁定模型 revision、保留save_artifacts全量记录、每次变更请求都用全新输出目录。
benchmark 侧,docs/benchmarks.md 的"Zero-shot cover generation"小节给出量化证据:948 首 SHS100K 作品 × 2 种目标风格 × 2 个种子,每方法 3,792 个输出,无候选挑选。所有 YuE2 条件都使用通用歌曲生成检查点与 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 乐谱,让伴奏更自由地适应。同时别把这份数据读过头——它既不说明"从当前提示词新生成符号规划会降低质量",也不构成通用指标碾压或人类偏好结论。
踩坑速查:六个高频问题
- Q:要换风格,结果还是原曲和声的影子?A:先查传入的是不是带和弦的乐谱——换风格就用 melody-only 乐谱加
cot="melody";真要保留原曲和声才是full的活。 - Q:
--abc-file和--cot off组合报错?A:必然报错。cot="off"时plan()不产出 ABC,外部乐谱又是绕过规划器直入的,不存在二次规划兜底。 - Q:转谱退出码 0 但有告警?A:照样逐项核对音符、拍号与段落顺序,转谱错误会原样传导进成品。
- Q:
--resume能续跑中断的生成吗?A:不能。它只校验并复用已完成且匹配的结果(含哈希);请求、模型或配置一变,就用全新目录重跑。 - Q:seed 相同,产出音频就一定一致?A:seed 只是方便追踪对比;风格、歌词、ABC 条件不同,音频自然不同。
- Q:能拿 YuE2 的 VAE 编码器直接"转"录音吗?A:不能,它只负责声学 latent 与音频之间的解码,转谱这活儿归 SheetSage2。
从一条转谱命令到save_artifacts()落盘,整条翻唱链路是四个互相独立、各自可追溯的环节——转谱、审校、请求、生成,任何一环的产物错了,后面的功夫都白费。所以产品指引其实很朴素:先把乐谱做到可读,再谈风格。
【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuE
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考