尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

YuE2 官方可运行示例实战:从 City Lights 歌词到可编辑 ABC 谱的生成、和声改编与符号校验

YuE2 官方可运行示例实战:从 City Lights 歌词到可编辑 ABC 谱的生成、和声改编与符号校验 YuE2 官方可运行示例实战从 City Lights 歌词到可编辑 ABC 谱的生成、和声改编与符号校验【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuEexamples/目录是 YuE2 仓库自带的可运行输入样例集song.json提供了一首原创歌曲《City Lights》的歌词与风格请求melody.abc、score.abc、score-jazz.abc则分别给出了同一段旋律的纯旋律谱、带和声谱与仅更换和弦符号的改编谱。本文以 examples/README.md 为主体结合 examples/generate.py、skills/yue2-music/scripts/abc_tools.py 与对应测试完整讲解如何用这些样例在本地生成歌曲、对比两次和声改编并在无需 GPU 的情况下完成 ABC 谱的结构校验。读完本文你将掌握 YuE2 三种 conditioning 模式full/melody/off的脚本化用法、原生双声部 ABC 方言的结构规范以及改谱必校验的符号级不变量检查方法。一、样例定位可运行的输入而非评测结果需要首先明确的是examples/README.md明确声明这些文件是可运行输入runnable inputs不是已记录的 benchmark 或质量结果。也就是说仓库提供它们的目的是让你能在pip install .之后立刻跑通生成、改编、校验的完整链路并以此为模板编写自己的请求而不是把它当作某种得分或成品的展示。四个样例文件的分工如下文件内容用途examples/song.json《City Lights》的歌词与风格请求纯文本驱动的歌曲生成入口examples/melody.abc八小节原创旋律无和弦符号演示--cot melody自由伴奏模式examples/score.abc同一旋律 三和弦和声标注演示--cot full带谱生成examples/score-jazz.abc仅更换和弦符号的改编谱用于与score.abc做符号级对比其中melody.abc是一个为歌词量身定制的八小节旋律每行歌词恰好 7 个音节每个小节恰好 7 个音符起奏note onset歌词与旋律一一对应。这一每小节七音的结构在song.json的歌词中可以直观对照——每个乐句恰好 7 个词。二、请求文件 song.json歌词、风格与种子examples/song.json 是一个完整的 YuE2 歌曲请求字段包括{ id: city_lights, style: English, warm piano pop, expressive female voice, acoustic piano, rounded bass and light drums, lyrical memorable melody, unhurried phrasing, 88 BPM, lyrics: [Verse]\nNeon fades along the lane\nFootsteps keep the time of rain\nFold the night and leave it here\nMorning has a sky to clear\n\n[Chorus]\nLet the day come into view\nEvery road begins with you\nHold a little room for light\nWe will sing beyond the night, cot: full, seed: 831001 }各字段含义与 skills/yue2-music/references/generation-and-covers.md 中的请求字段说明一致id请求唯一标识也用作输出目录名。style风格描述需覆盖语言、流派、嗓音特征、乐器、速度等例如这里同时写了English、warm piano pop、88 BPM。从源码 examples/generate.py 可以看到脚本会把abc与cot字段合并进该请求后整体传给 pipeline。lyrics带[Verse]/[Chorus]分节标签的完整歌词。cotconditioning 模式取值为full/melody/off。seed固定为831001。README 特别提醒种子有助于对比但并不能保证跨设备、跨软件版本输出完全一致。YuE2 的请求还接受abc、cfg_scale等字段tags是style的别名若同时提供两者必须一致。请求中没有reference_audio、phonemes、bpm、negative_prompt等字段速度和拍号应当写进 ABC 谱并在style中保持一致描述。三、三份 ABC 谱同一旋律的三种和声形态三份 ABC 文件共享同一骨架——这正是它们适合做对比实验的原因。以 examples/score.abc 为例X:1 T: M:4/4 L:1/16 Q:1/488 V: Vocal cleftreble nameVocal Melody snmVocal V: Ins cleftreble nameIns Melody snmInst. K:C % verse V: Vocal CE2G2A2G2E2D2C4|GD2E2G2E2D2C2D4|AmE2G2A2c2B2A2G4|FF2E2D2E2G2E2C4| V: Ins Z4| % chorus V: Vocal CG2A2c2B2A2G2E4|FF2A2G2E2D2E2G4|GA2c2B2A2G2E2D4|CE2G2A2G2E2D2C4| V: Ins Z4|关键结构解读头部HeaderM:4/4为拍号L:1/16为默认音符长度单位十六分音符Q:1/488为四分音符 88 BPM。这部分是 YuE2 原生谱的固定格式。双声部Two voicesV: Vocal与V: Ins两个声部。Vocal 承载主旋律和声符号也写在 Vocal 声部Ins 声部在本例中全是整小节休止Z4|即 4 个整小节休止的压缩写法。和弦符号用引号包裹的小节首和弦标记如C、G、Am、F。三份谱的差异仅在和声层examples/melody.abc完全没有和弦符号Vocal 声部只有音高序列E2G2A2G2E2D2C4|...用于--cot melody自由伴奏。examples/score.abc在每小节起始处加入三和弦verse 为C → G → Am → Fchorus 为C → F → G → C是典型的流行和声进行。examples/score-jazz.abc只更换和弦符号旋律音符、节奏、小节完全不动改为Cmaj7 → G7 → Am7 → Fmaj7chorus 为Cmaj7 → Fmaj7 → G7 → Cmaj7演示了仅改和声色彩的改编方式。注意YuE2 使用的并非通用 ABC 方言而是受限的双声部 ABC 子集。从 abc_tools.py 可以看到其约束声部名必须是Vocal和Ins音长单位分母必须是 2 的幂支持的音长取值集合为{1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48}和弦质量quality被白名单限定为m, dim, aug, 7, maj7, m7, dim7, m7b5, sus4, sus2, 6, m6, 7sus4, m(maj7)等不支持连音符triplet、重复小节线等通用 ABC 特性——超出即报错fail closed。四、用 generate.py 生成歌曲与两次和声对比按 examples/README.md 的指引在仓库根目录执行pip install .后即可运行。三个核心命令如下# 从歌词和风格创建一首歌及其谱面。 python examples/generate.py --output outputs/create # 用仓库自带的旋律做自由伴奏实现无和弦约束。 python examples/generate.py --abc-file examples/melody.abc \ --cot melody --output outputs/melody # 用同一旋律、歌词、风格和种子对比两种和声编配。 python examples/generate.py --abc-file examples/score.abc \ --cot full --output outputs/harmony-original python examples/generate.py --abc-file examples/score-jazz.abc \ --cot full --output outputs/harmony-edited第一条命令不传--abc-filepipeline 将完全依赖song.json中的cot: full让 YuE2 的符号规划器symbolic planner自行规划旋律与和弦后两条命令则把外部 ABC 谱注入请求此时外部 ABC 会绕过符号规划器不会再有第二个规划器去修复你的谱子——改了什么就按什么生成。4.1 参数说明来自 generate.py 源码从 examples/generate.py 的 argparse 定义可以看到完整参数参数默认值说明--request脚本同目录下的song.json请求 JSON 路径可替换为自己的请求文件--abc-file无注入请求的 ABC 谱路径读为文本后写入request[abc]--cot无沿用请求文件中的值full/melody/off三选一--output必填输出目录--modelm-a-p/YuE2-3B主模型名称或本地快照目录--vaem-a-p/YuE2-VaeVAE 解码器名称或本地快照目录--revision无主模型版本锁定Hub 快照时使用--vae-revision无VAE 版本锁定脚本内的两条硬性校验值得注意拒绝已存在的输出目录args.output.exists()时直接parser.error(Choose a fresh output directory...)保证每次运行不会覆盖旧结果。ABC 与cotoff互斥如果提供了--abc-file而--cot off会报错A supplied score requires full or melody mode.——带谱生成必须处于full保留和声或melody只用旋律、自由伴奏模式。4.2 运行行为与退出码脚本随后构造YuE2Pipeline并执行from yue2 import YuE2Pipeline with YuE2Pipeline.from_pretrained( args.model, vaeargs.vae, revisionargs.revision, vae_revisionargs.vae_revision, devicecuda, ) as pipe: song pipe(**request) song.save_artifacts(args.output) print(json.dumps({audio: str(args.output / audio.flac), truncated: song.truncated})) return 1 if any(song.truncated.values()) else 0保留全部原生产物save_artifacts会写出audio.flac、score.abc、语义 token、latent.npy、请求、配置、时间信息、解码器标识与哈希等。截断即非零退出song.truncated中任何一项为真包括 ABC 截断与语义截断进程就返回退出码 1。README 明确指出statuscomplete并不代表未截断因此脚本用退出码强制暴露截断问题方便在 CI 或批处理中拦截。五、无 GPU 的符号校验inspect 与 compare生成音频需要 GPU但校验谱面结构不需要。skills/yue2-music/scripts/abc_tools.py 是纯标准库实现的解析器README 给出的无 GPU 校验命令为python skills/yue2-music/scripts/abc_tools.py inspect examples/score.abc python skills/yue2-music/scripts/abc_tools.py compare \ examples/score.abc examples/score-jazz.abcinspect解析并校验谱面输出 JSON 报告包含 BPM、单位音长、总时长以四分音符计、名义时长秒以及每个声部的实际发音音符onset、MIDI 音高、时值、和弦事件、调号时间线与小节网格。compare对两份谱做符号级对比验证音符音高、节奏、拍号、速度是否一致只报告差异。命令的退出码也有语义match为 False 时返回 1语法/结构错误返回 2。5.1 对比的判定维度从 abc_tools.py 的 compare 实现 可以看出一致的判定基于三个不变量声部的小节拍号/时间网格bars必须逐条相等声部的实际发音音符序列notes即 onset、音高、时值三元组必须逐条相等默认情况下四分音符速度BPM必须相等可用--allow-tempo-change放行。这个判定是按实际发音事件而非按字符串的例如C32|与C16-C16|连音线跨小节连接在 compare 看来是同一首歌测试test_equal_sound_different_ties而C16z16|与z16C16|因起奏位置不同会被判定为不同测试test_onset_changes。换句话说compare 回答的是乐谱层面的音高、节奏、拍号、速度是否保留而不是生成音频是否好听。这也是 README 最后一句提醒的核心compare能验证score.abc与score-jazz.abc的旋律完全一致、只有和声不同但要评估实际音响效果仍需要聆听或音频转写ASR/转录作为独立证据——符号检查与音频质量是两回事。5.2 源码与测试佐证abc_tools.py还提供第三个子命令strip-chords移除和弦符号并保留头部引号用于翻唱流程中将转录谱转为纯旋律谱compare额外支持--voices对比单个声部与--allow-tempo-change。这些行为由 tests/test_skill_abc_tools.py 覆盖例如test_octave_accidental_propagation变音记号按字母名跨八度传播test_bar_accidental_reset小节结束变音自动还原test_crossbar_tie跨小节连音线正确合并时值test_bad_input_cases包括Z1|、Z5|、C/2连音符、C32||双小节线、非法和弦C13、非法调K:Cmix等在内的 30 余种非法输入均被判定为AbcError。如果你要自行改编谱面例如把score-jazz.abc的和弦再换成 sus4 或 m7b5建议沿用同一条校验链路inspect确认语法与结构 →compare --voices Vocal或both确认旋律不变量 → 再进入生成这样能把谱面错误与生成质量问题在归因上彻底分开。六、注意事项与最佳实践总结固定版本以便复现使用--revision与--vae-revision锁定模型版本并在每次运行时记录包版本、模型 revision 与权重哈希generation-and-covers.md亦如此要求。种子只辅助对比不保证逐位一致song.json中seed: 831001固定是为了让harmony-original与harmony-edited两次运行的差异尽可能只来自和声不同设备、驱动或软件版本下音频仍可能有差异。每次生成使用全新输出目录generate.py会主动拒绝已存在的目录这是为了防止无意覆盖上一版原生产物。退出码即截断信号return 1 if any(song.truncated.values()) else 0意味着只要发生截断命令就以非零状态结束——批处理脚本应把它视为失败而非忽略。改谱必校验、校验不替代聆听compare只能证明乐谱层面的不变量实际音乐的完整性需要结合音频时长、结尾听感和转写结果共同判断。以examples/为起点你可以把song.json替换成自己的歌词与风格把score.abc替换成自己编辑过的谱面用同样的四步走完 YuE2 的完整工作流文本生成full/melody/off→ 谱面导出与编辑 → 符号校验inspect/compare→ 有条件地再生成。这也正是仓库中 skills/yue2-music/SKILL.md 所描述的可复现歌曲与可听对比工作流的简化落地版。【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuE创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表