日期:2026-09-16 源曲:羽泉《深呼吸》(用户提供的 MP3,4:59 / 44.1kHz) 声线参考:金莎《星月神话》(用户提供的 MP3,4:09)—— 只作音色/音区参考 管线:SheetSage2 提取旋律 → 整谱移调 → YuE2 cot=melody 重渲染(人声+伴奏全新生成)
| 文件 | 时长 | 格式 | 说明 |
|---|---|---|---|
01-深呼吸-女声翻唱-金莎音区.flac / .mp3 | 4:56 | 48kHz 立体声 | 主推:旋律升 5 半音,落在金莎的声线区间 |
02-深呼吸-女声翻唱-原调版.flac / .mp3 | 5:01 | 48kHz 立体声 | 备选:保持原调,仅换音色 |
脚本/ | — | — | 本次用到的全部脚本(可复现) |
歌词文件是流水线输入,未随交付发布。
YuE2 不做音色克隆。 官方 README 明确写:
Reference audio is used to extract a symbolic score; it does not clone the original singer. This is not voice cloning and does not preserve the original waveform.
所以"借金莎的少女声线"我落实为两件可验证的事,而不是克隆:
不能保证的是"听起来就是金莎本人"——那需要专门的音色克隆/转换模型(如 RVC、so-vits 之类),YuE2 链路做不到。
源曲 MP3
└─ ffmpeg 去 ID3 转 FLAC ← 见"坑 1"
└─ SheetSage2 转谱(melody_only=true)
└─ 得到纯旋律 ABC(无人声、无和弦,只有 Vocal 声部 + Ins 休止)
├─ ABCModifier 整谱移调 +5 半音(调号 Ab→Db 同步)
├─ MelodyCleanup light(清理过短/离群音符)
└─ YuE2 Sampler(cot=melody + abc + 新歌词段落 + 新风格提示词)
└─ 48kHz 立体声翻唱
关键点:cot=melody 且只喂旋律 ABC(不给和弦)→ 伴奏由模型按新风格自由生成,所以移调不会与伴奏打架。
| 轨道 | 中位 F0 | 5–95% 音域 | 判定 |
|---|---|---|---|
| 原唱·羽泉(男) | 223 Hz (A3) | A2 – G#4 | 高音男声 |
| 参考·金莎(女) | 299 Hz (D4) | A3 – A#4 | 甜美女声 |
| 翻唱 v2·金莎音区 | 312 Hz (D#4) | G3 – A#4 | 与参考中位差 0.7 半音,上限完全一致 |
| (对照)翻唱 v1·原调 | 236 Hz (A#3) | D#3 – F4 | 比参考低 4.1 半音 |
→ v2 把翻唱搬进了金莎的音区,这是"借鉴声线"里唯一能客观验证的部分。
对翻唱重新转谱后与原曲旋律对比:
| 指标 | 值 | 含义 |
|---|---|---|
| 旋律音程分布余弦相似度 | 0.988 | 接近 1.0 → 旋律走向与原曲一致(移调不变量) |
| 转谱音符数 | 原 613 / 翻唱 550 | 同一量级 |
| 中位音高差(ABC 口径) | +3 半音 | 与移调设定同向(口径不同于 F0 帧加权) |
| 版本 | 端到端 | semantic tokens | 峰值显存 |
|---|---|---|---|
| v1(原调) | 6.2 min | 7520 | 11.38 GiB |
| v2(+5 半音, cfg=1.2) | 9.2 min | ~7500 | — |
cfg 从官方默认 1.0 提到 1.2 会算两遍前向,耗时明显增加(这也是 v2 慢 3 分钟的原因)。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc9 in position 0: invalid continuation byte
at comfyui nodes_audio.py LoadAudio.execute -> load(audio_path)
你上传的两首 MP3 都带 GBK 编码的中文 ID3 标签,ComfyUI 读元数据时按 UTF-8 解码 → 炸。 绕过办法(已验证):
ffmpeg -y -i input.mp3 -map_metadata -1 -c:a flac input.flac
即"先去掉元数据转成 FLAC"。以后凡是中文歌的 MP3 走 ComfyUI,都建议先过这一步。
YuE2SaveABCFile 的参数叫 filename 不是 filename_prefix写错会得到 HTTP 400(/prompt 的报错体不打印出来,只看得到 400)。已在脚本里补上错误体打印。 另:ABC 工具的产物不出现在 /history,要落盘在 output/YuE2_ABC/<时间戳>/ 里手动取。
先用"自相关取全局峰"测,金莎被测成 167 Hz(比男声还低)——强二次谐波导致降八度错误。 改用 YIN(累积均值归一化差值 + 第一谷值 + 抛物线插值)后数值才合理。做男女声判定必须用 YIN 类算法。
--cfg 当时还没实现,脚本直接报 unrecognized arguments,白等 1 分钟(已给脚本补上 --cfg)。
# 1) 源曲转谱(去掉 ID3 的 FLAC)
ffmpeg -y -i 源曲.mp3 -map_metadata -1 -c:a flac 源曲.flac # 放进 ComfyUI/input/
python3 yue2-sheetsage.py --audio 源曲.flac --melody-only --tag cover-src
# 2) 整谱移调 + 清理(+5 半音,调号同步)
python3 yue2-abc-shift.py --abc melody-source.abc --semitones 5 --scope whole_score --out melody-p5.abc
# 3) 重渲染(cot=melody + 旋律 ABC + 目标音色提示词)
python3 yue2-run.py --cot melody --abc-file melody-p5.abc --lyrics-file 歌词.txt \
--sem-mx 8500 --attn sdpa --cfg 1.2 --seed 999999 \
--style "Mandarin pop, sweet youthful girl lead vocal with the delicate timbre of Jin Sha, ..." \
--tag cover-female-p5 --outdir <输出目录>
# 4) 验收:分离人声 + YIN 测基频
venv/bin/python -m demucs --two-stems=vocals -n htdemucs -o /home/zyw/demucs-out <成品.flac>
python3 yin-f0.py /home/zyw/demucs-out/htdemucs/<名>/vocals.wav 标签
seed 扫 3–5 版试听挑选(我无法试听,只能保证音区/旋律指标)。sem_mx 提到 9000 不解决问题;更有效的是再升 2 个半音(+7)或风格词加 teenage girl, light head voice, pure and bright。cfg 扫描:1.0 / 1.2 / 1.4 三档对比风格的"贴不贴"。