十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

YuE2 智能体音乐编辑实战:用 ABC 乐谱作为白盒接口完成和声重配、歌词与曲式改编

YuE2 智能体音乐编辑实战:用 ABC 乐谱作为白盒接口完成和声重配、歌词与曲式改编 YuE2 智能体音乐编辑实战用 ABC 乐谱作为白盒接口完成和声重配、歌词与曲式改编【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuEYuE2 的核心理念是白盒音乐生成white-box music generation模型先把一首歌的创作意图写成可供阅读和修改的 ABC 乐谱再由同一个生成器把修订后的乐谱渲染成完整歌曲。本文基于仓库中的 docs/editing.md 与配套的 ABC 记谱参考完整讲解如何用 abc_tools.py 检查乐谱、校验音乐不变量并把编辑任务委托给支持SKILL.md的 Agent。读完本文你将掌握一套可复现的导出乐谱 → 修改音符/和弦/速度/曲式 → 校验 → 重新渲染 → 对比试听的完整编辑工作流。白盒音乐生成为什么乐谱就是编辑接口YuE2 的生成流程是分阶段的plan()→generate_semantic()→synthesize()→decode()。其中plan()阶段会输出一个SymbolicPlan——包含可读的 ABC 乐谱score.abc、token 序列与前缀等原生产物。在 src/yue2/pipeline.py 的plan()实现中可以看到三种路径无 ABC 输入时模型自回归生成一段旋律加和声的乐谱计划cotfull或仅旋律计划cotmelody请求中带abc字段时直接对输入乐谱做 token 编码作为条件生成语义 tokencotoff时不产生可编辑计划。编辑功能的本质就是把plan()产出的score.abc复制出来修改再把修改后的乐谱作为新的abc输入交给同一个生成器。创建、翻唱、编辑三者唯一区别就是乐谱从哪来分别来自 YuE2 自生成、SheetSage2 转录、或人工/Agent 修订。需要特别强调编辑渲染的是一首全新的完整录音YuE2 不提供波形局部 inpainting也不保证编辑区域之外的声音、音色或波形与原始版本一致见 docs/editing.md。一个完整可复现的和声编辑示例仓库的 examples/score.abc 与 examples/score-jazz.abc 是一对精心构造的 fixture两者保持完全相同的旋律、歌词顺序、节拍、速度、风格和种子唯一差异是后者把前者的和弦符号C、G、Am、F改写为七和弦Cmaj7、G7、Am7、Fmaj7。这是验证和声编辑不破坏旋律的最小实验台。依次执行python skills/yue2-music/scripts/abc_tools.py inspect examples/score.abc python skills/yue2-music/scripts/abc_tools.py inspect examples/score-jazz.abc python skills/yue2-music/scripts/abc_tools.py compare \ examples/score.abc examples/score-jazz.abc python examples/generate.py --abc-file examples/score.abc \ --cot full --output outputs/harmony-before python examples/generate.py --abc-file examples/score-jazz.abc \ --cot full --output outputs/harmony-aftercompare命令应报告match: true音符、时值、节拍与速度完全未变而这一检查有意不比较和声。随后分别试听两个输出目录中的audio.flac判断新和声是否被真实实现、以及你是否更喜欢修改后的版本。examples/generate.py 的参数值得展开说明--request默认读取同目录的song.json--abc-file会把文件内容写入请求的abc字段--cot限定为full/melody/off三选一且提供乐谱时不允许off模式off没有乐谱条件通道--model与--vae默认分别是m-a-p/YuE2-3B与m-a-p/YuE2-Vae可用--revision/--vae-revision固定快照。脚本拒绝写入已存在的输出目录从机制上强制每个版本保留独立的产物目录。从一段生成结果开始你的编辑如果从零开始生成一首歌并保留它的乐谱可以使用技能脚本的plan子命令它等价于pipe.plan()并保存完整产物python skills/yue2-music/scripts/run_yue2.py plan \ --request examples/song.json --output outputs/plan cp outputs/plan/score.abc edited.abc也可以使用 examples/song.json 这样的请求文件包含style、lyrics、cot、seed字段在 Python 中调用pipe.plan(**request)后用plan.save(outputs/plan)落盘。之后把乐谱交给 Agent并给它 ABC、歌词、风格以及一份有边界的编辑简报bounded brief。原文档给出的示例指令是Reharmonize this song with jazz-influenced chords. Preserve every vocal and instrumental melody note, note duration, bar boundary, section order, and tempo. Keep the lyrics and style unchanged for this comparison. Save a new ABC file and explain the chord changes.用爵士风格和弦为这首歌重新配和声。保留所有人声与器乐旋律音符、音符时值、小节边界、段落顺序与速度。歌词和风格保持不变以便对比。保存新的 ABC 文件并说明和弦改动。随后检查修改结果并渲染python skills/yue2-music/scripts/abc_tools.py inspect edited.abc python skills/yue2-music/scripts/abc_tools.py compare outputs/plan/score.abc edited.abc python examples/generate.py --request examples/song.json \ --abc-file edited.abc --cot full --output outputs/edited需要牢记的边界abc_tools.py只检查一个有界的原生 ABC 方言。一份被拒绝的乐谱可能是记谱方式需要转换或修正不能把该工具不支持某写法当作音乐错误。完整约束见 skills/yue2-music/references/abc-editing.md。编辑前必须掌握的原生 ABC 方言abc_tools.py是纯 Python 标准库实现的有界解析器见 skills/yue2-music/scripts/abc_tools.py它不是通用 ABC 解析器。原生格式要求固定的X:1、空T:、M:节拍、L:1/2 的幂允许到 1/1024、整数四分音符速度Q:1/4BPM、以及Vocal/Ins两个声部定义且和弦符号只能出现在Vocal声部。典型头部如下X:1 T: M:4/4 L:1/32 Q:1/488 V: Vocal cleftreble nameVocal Melody snmVocal V: Ins cleftreble nameIns Melody snmInst. K:G % verse V: Vocal Gmaj7B8d8Am7c8A8|D7F16GG16| V: Ins Z2|两个声部都是单旋律线Ins承载器乐主题或独奏不是钢琴和弦织体谱。和声以引号内的和弦符号写在Vocal声部即使该声部正在休止。原生导出器按 14 小节为一组输出V: Vocal块后跟V: Ins块% verse、% chorus、% bridge、% interlude等注释标记结构拍号或调号变化会开启新组两个声部必须同时携带匹配的M:/K:字段。L:1/32是常见而非必然值——原生导出器会根据节奏网格选择分母编辑时保留导出的L:值。以L:1/32为例的记谱含义表记谱含义C/C2/C8C4 的三十二分 / 十六分 / 四分音符c、c、C,C5、C6、C3z8四分休止符Z、Z2、Z3、Z4当前节拍下休止 1/2/3/4 个完整小节C8-C8一个二分音符 C第二个 token 不产生新起音Am7z16A 小七和弦从这里开始旋律休止半个二分音符^F、_B、F、^^F、__B升、降、还原、重升、重降原生方言还规定支持的时长倍数为1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 4810 个单位的时值要写作C8-C2或休止写作z8z24/4 小节共 32 个 L 单位、3/4 与 6/8 各 24、3/8 为 12休止符不可连音连音必须连接等音高乐谱不能以未解决的连音结尾Z整小节休止按小节计数而非 L 单位跨和声或调号变化处不要用压缩休止。原生的引号和弦词表是major (no suffix), m, dim, aug, 7, maj7, m7, dim7, m7b5, sus4, sus2, 6, m6, 7sus4, m(maj7)根音与可选斜杠低音使用音名如Dbaug、F#m7/C#、Gm6/Bb、A7/E。C:maj、数字斜杠音级、C13、A7alt、Cmaj9等不是原生和弦符号——不要发明语法请求高级和声超出词表的织体要求应写进style提示词提示词中的丰富织体是生成请求不是保证。升降号与连音需要音乐性理解音高相对于活动调号K:D中未标记的F发 F♯、C发 C♯临时记号在当小节有效、小节边界或调号变化处重置。原生导出/渲染约定按字母跨八度传播临时记号——^F之后该小节的F和f都是升的这与某些通用 ABC 实现不同不要悄悄换成语义不同的解析器。跨小节连音的未标记延续保留前音音高其后的未连音符使用新小节的临时记号状态例如 C 大调中^F32-|F8F24|表示一个五四分音符的 F♯ 接一个三四分音符的 F 还原。计算发出声响的音符要以合并连音后的结果为准而不是原始 token 数纯和弦编辑可以增加连音 token 而不增加旋律音符反之把C8-C8改成C8C8虽然音高序列看似相近却改变了断奏articulation。用 abc_tools.py 校验不变量实现原理与命令行从源码看abc_tools.py 暴露三个核心命令以及一个可被 API 直接导入的parse_abc(text)返回的Score暴露.voices[Vocal].chords与.voices[Ins].chords全程不加载任何模型inspect score [--output FILE]校验结构并导出精确事件。报告 JSON 包含 SHA-256、BPM、unit_length、四分音符总时长、名义时长秒数以及每个声部的音符事件onset_quarters/midi_pitch/duration_quarters均为精确分数、和弦 onset、调号变化、逐小节拍号网格。源码中的 report() 还给出sounding_notes合并连音后的发声音符数与measures计数供你核对84 个合并音符事件这类不变量。compare before after [--voices Vocal|Ins|both] [--allow-tempo-change] [--output FILE]比较精确的发声音符与拍号/时间网格。源码 compare() 的逻辑是默认要求四分音符速度一致除非加--allow-tempo-change、各声部小节网格一致、[onset, midi_pitch, duration]事件序列逐项相等否则报告从第几个音符起出现差异。返回的match: true只声明精确旋律与节拍不变不声明生成音频、也不比较和声——正如 tests/test_skill_abc_tools.py 所示C32|与C16-C16|判定一致连音合并后等音高等时值而C32|与C16C16|判定不一致速度不同时默认失败、加allow_tempo_changeTrue后通过。strip-chords source output [--keep-voice both|Vocal|Ins]仅移除乐谱行中的引号和弦符号头部引号内的声部名保留并验证所有发声音符、onset、时值、节拍与速度不变。默认保留两条旋律含器乐主题与独奏--keep-voice Vocal时未选中的声部在同一时间网格上替换为休止符两声部格式保持不变。源码会拒绝覆盖已存在的输出文件open(x, ...)独占创建且从不变换校验失败则报错。翻唱场景请配合cotmelody使用去和弦乐谱——注意cotmelody不会自动移除和弦符号run_yue2.py 的预检会直接拒绝melody 输入仍含和弦的请求。解析器对不支持的内容采取fail-closed拒绝而非猜测时值策略连音线、装饰音、多声部叠置、反复记号、替代结尾、滑音、破碎节奏、装饰、歌词w:字段、自定义声部/指令、不支持的调式或和弦质量都会抛错。inspect失败时进程退出码为 2compare不一致时退出码为 1。编辑歌词、风格、速度与曲式复刻请求 JSON如 examples/song.json只修改目标字段改歌词让修订后的歌词贴合旋律的分句与音节数不要逐字翻译删除、复制或重排段落时乐谱与对应的歌词段落要同步更新。若改用另一种语言要按可唱性适配音节、重音、长音元音与呼吸点并在旁车sidecarJSON/Markdown 中记录音节 → 音符索引的对齐约定——YuE2 的生成 API 接受歌词和 ABC不存在强制的音素对齐通道不要向 ABC 中插入非原生音素标注或w:字段。改风格更新请求的style字段乐器、人声特征、语言、目标 BPM同时修改乐谱中的Q:1/4BPM。改速度保留音符、相对时值与节拍仅改速度时使用compare的--allow-tempo-change选项试听确认实际响应。改曲式段落的增删与重排需要同步维护两个声部的乐谱与歌词段落注意%结构注释与小节分组的对应关系。每个编辑都会渲染出一首新的完整录音。匹配的乐谱并不保证编辑区域外的演唱、音色或波形一致。因此务必保留原始产物目录、每个版本使用全新的输出目录generate.py与run_yue2.py都会拒绝已存在的输出、检查截断song.truncated并对比完整输出而不是只挑符合预期效果的例子。把编辑委托给 Agentyue2-music 技能工作流在支持SKILL.md包的 Agent 中加载 skills/yue2-music/SKILL.md 即可获得完整编辑工作流。技能助手覆盖生成、转录、ABC 检查、缓存解码与试听对比它只是在既有 API 之间做编排不需要单独的智能体编辑专用检查点。标准的委托流程是先用完整计划渲染一个基线版本baseline冻结其原始目录定义不变量invariant精确音高、音高节奏、仅旋律轮廓、或边界内的旋律改编并明确哪些声部/段落、歌词、乐器、速度、节拍与结构不可变。参考 editing-workflows.md 中的契约表格契约必须保持固定精确旋律与节奏指定声部/段落中发声音符的音高、onset 与时值相同音高、修订节奏有序发声音高记录允许的节奏与断奏改动可辨识主题完整乐句序列与指定重复列出允许的装饰边界内自由改编约定的乐句、音域、轮廓、终止式或动机报告实际改动的音符把原始 ABC、提示词、歌词、请求的改动以及 编辑简报模板 交给编辑 Agent要求它返回新的 ABC 文件、修订后的请求、编辑清单edit manifest与简要音乐理由并给出逐小节的和弦/音符/节奏变更说明与不变量检查结果——不要只丢一句make this jazzy用inspect与compare--voices可按声部比较做结构性检查再渲染并对比试听如果契约允许节奏或旋律变化精确比较的失败是预期行为——此时应审计compare报告中的差异而不是把失败的结果标成旋律已保留独立的评审者应先看未编辑的 before/after 产物独立指出违规与音乐问题再与编辑者的变更记录对账。和声重配reharmonization的实操建议先标出两个声部中的持续音、强拍音、终止式与乐句边界对每个候选改动检查该音符持续期间的活动和弦、低音走向、相邻旋律音与张力的解决方式。持续两拍的冲突音需要与短促的半音经过音区别对待。文中给出三个可迁移的修复思路Db7上持续 A 与降 A 五音冲突时Dbaug可保留半音低音同时包含 AEb7上持续 F♯ 与大三度 G 冲突时Ebm7可保留 E♭ 低音并直接支撑该旋律音三全音替代适合作为短暂经过但要在下一个强旋律音到达前更早解决——必要时移动和弦边界比整小节换和弦保留更多色彩。这些都是音乐选项而非无条件替换规则改完一个和弦的三音/五音后要复查周边进行也不要套用所有旋律音都必须是和弦音的教条爵士乐中尤其如此。三重复核与交付物每次编辑完成前请做三种不同的检查源自 abc-editing.md 的收尾清单原生方言结构、预期的符号音乐不变量、以及实际生成的声音重点听改动小节及其过渡。保存原始与编辑后的 ABC、提示词、歌词、解码器身份、种子、校验记录与音频用 SheetSage2 转录结果可作进一步诊断但转录错误不能当作生成器错误的定论。运行前提与限制请以仓库为准Linux、Python 3.12、支持 BF16 的 NVIDIA GPU 且显存 24 GB产出 48 kHz 立体声见 README.md 的 Quick start音频质量、截断与生成是否成功都需要人工试听/检查abc_check.json只声明原生 ABC 结构通过。交付时可用 skills/yue2-music/scripts/listen.py 生成本地 HTML 对比播放器——它只复制固定的一组原生产物音频、请求、乐谱等自定义旁车文件需要随报告另行交付符号检查、ASR 结果、试听结论与质量分数要区分陈述不要仅凭 ABC 检查或榜单分数宣称精确实现了某个音符。至此你已掌握从导出一份可编辑计划到Agent 完成和声/歌词/曲式修订并重新渲染的完整闭环plan导出 →abc_tools.py的inspect/compare校验 →generate --abc-file渲染 → 试听对比。这套流程既可以在命令行手工执行也可以原样嵌入你的 Agent 工作流中。【免费下载链接】YuEYuE2: frontier music generation with symbolic planning, zero-shot covers, and agentic music editing.项目地址: https://gitcode.com/GitHub_Trending/yue/YuE创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表