jtydhr88/music-composition-skills

mc-workflow

Entry point and router for the music composition library (作曲编曲工作流与路由).

Voir la source

Mode d’emploi

  1. Copiez la commande et examinez le paquet avant de l’installer dans votre environnement agent.
  2. Consultez le document original pour les outils, identifiants et environnements requis.
  3. Décrivez les entrées et le livrable souhaité ; comparez la sortie aux sources.
npx skills add https://github.com/jtydhr88/music-composition-skills --skill mc-workflow

Avant de commencer

  • L’installation n’inclut ni abonnement au modèle, ni quota API, ni accès aux fichiers.
  • Étoiles et installations reflètent l’activité, pas un test indépendant de qualité ou de sécurité.
Document Skill original

Rendu depuis le dépôt source en conservant titres, exemples, code, tableaux, liens et images.

作曲编曲工作流与路由(Workflow & Routing)

任何作曲/编曲请求先读这个 skill,再决定读哪个别的。

这个库的产出不是音频,是一份 ARR-SPEC(编曲规格单)。 音频由后端生成,规格单决定它长什么样、以及怎么验收它。

本库的根本立场:AI 味不是音色问题,是没有人做过选择。 整套流程就是一台强迫做选择的机器。

0. 三十秒定位:我该去哪

你现在要做的事去
从零开始一首歌§1 阶段表,从 S0 走。★ S2a 必须先读 mc-development 再填 material 与 form[].development,只照 schema 的字段说明填会把每段写成一个新画面
已有 brief,要出规格单§1 的 S1–S4(S2 现分 S2a 材料与发展、S2b 和声)
规格单写完了,要生成§1 的 S5 + mc-render-compile
生成回来了,不对劲§4 诊断路径
不知道某个问题归哪个 skill§2 全库边界表
lint 不过§3.2
要交给作词、混音、剪辑等别的部门 / 别的人§5 对外接口
要检验:选的 skill 对不对、两版哪个好、后端照做没有§6 三个检验办法
要混合两种风格(rap + 中国风、city pop + EDM…)★ §2.4

1. 阶段表 S0–S7

每个阶段有明确的产出物和门禁。门禁不过不许进下一阶段。

阶段做什么产出门禁主用 skill
S0 立意把 brief 变成"只干一件事"intent 四项四项齐全,borrow 不许只写歌名本 skill §3.1
S1 骨架定调、拍、速度、曲式表meta + form段落首尾相接;不许全是 8 的倍数mc-form、mc-harmony、mc-arrangement-arch
S2a 材料与发展定主题动机、原始陈述在哪段、每段拿它做什么material + form[].development先读 `mc-development` 再填;motif 与 stated_in 非空;每段 development 都填;填 new 的段不过半mc-development、mc-melody
S2b 旋律与和声写主旋律、和声进行、必要的对位form[].harmony + harmony_letters双记号都要有;至少一段有调外和弦mc-melody、mc-harmony、mc-progressions、mc-modulation、mc-counterpoint
S3 编制谁在场、什么时候进退、占什么频段arrangement 全段能量曲线必须有下降;至少一件乐器提前退场;至少一个减法事件mc-arrangement-arch、mc-orchestration、mc-texture-layering、mc-rhythm-section、mc-sound-design
S4 演唱与混音意图怎么唱、声场怎么摆vocal + mix_intent力度逐段不同;副歌逐遍有变化;宽度至少两种取值mc-vocal-direction、mc-mix-intent
S5 编译规格单 → 各后端输入render.*按 §3.0 的 20 条自查一遍;不过的条目改掉或写明理由mc-render-compile、mc-symbolic-score
S6 生成跑后端,取多版音频按 backends.yaml 的 honors 决定哪些字段可指望mc-render-compile
S7 验收先算再听照做率 + AI 味旗标先分开看两件事:后端照做了没有、成品有没有机器指纹;耳朵在这之后介入mc-ai-tell-audit

1.1 ★ 三条不许跳的顺序

  1. `intent` 不齐不许写 `form` —— 这是整套流程唯一的硬门禁
  2. 17 条不过不许编译 —— 不过说明规格没写完,不是挑刺。★ 按 §3.0 逐条自查,不要为此写 lint 脚本
  3. 照做率不过不许用耳朵返工 —— 先改规格重生成,耳朵是最后一小步
第 3 条最容易破。"我听着不对,我调一下混音"—— 那一刻你就从规格驱动掉回手感驱动了, 而手感驱动的产物无法复现、无法 AB、无法积累。

1.2 耳朵怎么介入(S7 之后)

照做率过关后才听,而且要:A/B 打乱 → 成对比较 → 同一对听两遍看结论稳不稳。 两遍不是多余的谨慎:听觉系统会在重复暴露里改变自己的处理策略,同一段声音第二次听可能得到不同的结论,这类判断天然容易不可重复(p0251-p0252)。结论两遍不一致 = 这个差异不存在,别改。

如果两次听中间隔的时间较长,还要防一种相反的偏差:耳朵会对持续暴露的音色变化逐渐适应,越听越觉得两版差不多,容易把真实存在的差异误判成"不存在"(p0342)。两次判断之间留出间断,别来回连着切,能同时防住这两头。


2. 全库边界表

每一个决策只有一个 owner。 拿不准就查这张表。

2.1 按问题查

问题Owner
这首歌要干什么本 skill S0
用什么曲式、段落多长mc-form(乐理) + mc-arrangement-arch(非对称与能量)
旋律怎么写、可唱性mc-melody
和弦怎么选、怎么配mc-harmony
查一个现成进行mc-progressions
怎么转调mc-modulation
节奏型是什么mc-rhythm-groove
声部怎么独立、怎么避免平行mc-counterpoint
一个动机怎么长成一段、一段怎么长成一首mc-development(L1);旋律本身在 mc-melody,段落功能在 mc-form
乐器什么时候进、什么时候退、能量曲线mc-arrangement-arch
用哪件乐器、混合音色mc-orchestration
频段怎么分、谁和谁抢、前中后景mc-texture-layering
打得像不像人、贝司和底鼓怎么配mc-rhythm-section
合成器音色怎么做mc-sound-design
人声怎么唱、和声怎么加mc-vocal-direction
声场怎么摆、谁给谁让路mc-mix-intent
这个风格该怎么做mc-style-*(L3)
规格单怎么变成 promptmc-render-compile
要出 ABC / MIDI / MusicXMLmc-symbolic-score
生成的东西哪里像 AImc-ai-tell-audit
找一个真实作品的拆解mc-case-studies

2.2 六组最容易混的分界(★ 逐条记住)

A ⇄ B分界线
mc-form ⇄ mc-arrangement-archform 管曲式是什么(乐理),arrangement-arch 管这首歌为什么这么切(决策)
mc-rhythm-groove ⇄ mc-rhythm-sectiongroove 管节奏本身是什么,rhythm-section 管怎么把它打出来像人
mc-texture-layering ⇄ mc-mix-intenttexture 的解法是"改写"(换音区/减音符/交替),mix-intent 的解法是"改混"(让频/侧链/动态)。能改写解决的不许留给混音
mc-orchestration ⇄ mc-sound-designorchestration 管真实乐器与混合,sound-design 管合成音色的设计
mc-sound-design ⇄ 声音(音效、拟音)本库的 sound-design 是乐音音色;影视意义的"声音设计"(音效/拟音/空间)是声音这一职能的事,同名不同事
本库 ⇄ 作词词的一切是作词的事,包括词曲对齐(符割り、字余り、倒字、协音)——那是词的工序;本库读同一首歌的歌词(meta.upstream.lyrics),共享六字段谁定谁读见 §5.1

2.4 ★ 风格混合:不是调匀,是分维度签字

★ 边界是分工,不是禁令。 隔离的目的是让每个选择都有人签字,不是把风格锁死。写 J-Pop 规格时顺手借一个 city pop 的裏和弦、写中国风时低音走了 hip-hop 的 808——只要在 style_layers / fusion_note 里写一句为什么,就是合法的混合;轻微的串音完全可以接受,真正要防的是「没人选、默认长成那样」。

污染隔离 ≠ 禁止混合。 两者的区别只有一条:

混合是写下来的选择;污染是没人选。 一首 rap + 中国风的歌(如汪苏泷《桃花扇》)完全成立——前提是规格单说得出哪个维度归谁。

做法:meta.style_layers 填一张分工表(schema §1.1.1),一个 base + 若干 overlay, 每层写明它 owns 哪些维度:

维度《桃花扇》式的分法(示意)
harmony、melody、color_instruments中国风(五声旋律、民乐采样做色彩层)
(完整分工见 mc-style-hiphop §8.1)
groove、low_end、vocal_delivery_versehip-hop(律动、808、主歌 flow)
vocal_delivery_chorus、form中国风副歌唱、结构仍是主副歌

★ owns 是封闭集合,只能从这十四个里选: harmony melody groove low_end fill_policy instrumentation color_instruments timbre arrangement_hook vocal_delivery(可拆成 vocal_delivery_verse / vocal_delivery_chorus) form mix。 要分配的东西不在表里,归到最接近的那个,并在 fusion_note 里写一句说明,不要自造名字。

三条规则(第 18 条自查):

  1. 每个维度只有一个 owner——两层都声称 groove = 两种默认值叠在一起,谁也没选
  2. 每层至少拥有一个维度——否则它只是被读了,没起作用
  3. `fusion_note` 一句话说这个组合为什么成立——说不出就是硬凑

怎么用各 L3 的移植表:overlay 搬进来的,正是它移植表里标"不可搬/会被认出来"的项—— 那就是你要的辨识度。但每搬一项都要在 owns 里签字,并看 base 风格的移植表是否允许让出那个维度 (例如 city pop 的移植表说"抢拍贝司可搬",那 base 是 city pop 时 groove 让给别人就要三思)。

路由上:混合 brief 应读全部被点名的 L3 skill,这不算污染; 读了没被点名的风格才是。

2.3 不归本包的东西

内容归哪个职能
EQ 频点、压缩比、混响参数、总线链、母带声音(混音、母带);本包只给 mix_intent 这份意图
影视音效、Foley、环境声、空间设计声音(录音、音效)
跟画面走的配乐结构、cue sheet、spotting配乐(为画面写音乐)
歌词写作、押韵、意象、叙事人称作词。★ 词的三种情况:用户没提词 → 可出可不出,出了就在 checks.exemptions 记一条"词未经作词工序";用户明确要纯音乐 / 轻音乐 / 器乐 → 一个字都不加,vocal 留空;用户明确要词 → 必须出词,有同一首歌的歌词(meta.upstream.lyrics)就照它,没有就按本库的 mc-vocal-direction 写并记豁免。只示意人声节奏(rap 的 flow、副歌字数)时用占位音节(da-da / 拉拉)或 X 标记
商业流程(compe、仮歌、版权、分成)不做

3. ARR-SPEC:本库唯一的交接物

完整规范在本 skill 目录下的 [ARR-SPEC.schema.md](ARR-SPEC.schema.md)(v1.0),空模板 [ARR-SPEC.template.yaml](ARR-SPEC.template.yaml),后端能力档案 [backends.yaml](backends.yaml)。 ★ 写规格单前先 Read 模板,照它的字段名填——实测不看模板的话 agent 会自己发明字段(intent.scene/borrow、push_pull 写成字符串)。 (这三个文件就是本库随包交付的全部"格式"——除了 Read 它们,不需要任何工具。)

3.1 一物四用

用途怎么用
对外交接给混音师、乐手、作词和别的部门看的,是这一份(§5)
AB 测试对象改一个字段 → 重生成 → 比对。变量可控
编译源mc-render-compile 把它编译成 Suno prompt / YuE 输入 / MIDI
验收基准生成回来的东西逐字段对照它,看后端照做了多少

★ 第二和第四条是关键:没有规格单就没有可控实验,没有可控实验就只能靠感觉。

3.0 ★ 写完的 20 条自查

本库不需要用户机器上有任何工具——没有 lint、没有脚本、不预设 Python 或 Node。 写完规格单,自己把下面 20 条逐条过一遍,结果写进 checks.self_audit。 ★ 这是判据,不是铁律:某条不过,要么改,要么一句话写明为什么这首歌就该这样。 写了理由的偏离就是合法的选择;没有任何一条会"卡住"后面的编译。 ★ 不要为了检查去写脚本(实测有 agent 这么干过,白费很多轮)——20 条全部用眼睛就能判。

#自查问法对照字段
1intent 四项都填了?reference_pair 恰好 2 项且每项写了"借哪一点"?intent
2各段 start_bar 首尾相接?(上一段 start + bars = 下一段 start)form
3至少一段的 bars 不是 8 的倍数?form[].bars
4energy_curve 的 key 集合 == form 的 id 集合?(不多不少)energy_curve
5能量曲线至少下降一次?energy_curve
6subtraction_events ≥ 1?subtraction_events
7每件乐器有 entry;至少一件 exit 不是 end?roster
8arrangement_hook.what 非空?hooks
9至少一个非 Intro/Outro 段有调外和弦或转调标记?form[].harmony
10fill_policy.bars 不是公差 4 的等差数列?groove
11push_pull 至少一项 offset_ms ≠ 0,且每项是 {part, offset_ms, note} 字典?groove
12width_map 至少两种取值?mix_intent
13style_prompt 非空且无 epic/emotional/beautiful;section_tags 若手填则与 form 段数、顺序一致(由 form[].name 派生,可不填)?render.suno
14Σbars × 每小节拍数 ÷ tempo × 60 与 target_duration 偏差 ≤ 10%?meta
15有人声时 dynamics_by_section 至少两种取值?(器乐作品跳过)vocal
16有人声时 chorus_variation 非空?(器乐作品跳过)vocal
17多风格时:恰好一个 base;每个维度只有一个 owner;每层至少一个维度;fusion_note 非空?meta.style_layers
18material.motif 与 stated_in 非空;每段 development 填了;new 不过半;至少一段 repeat 或 recap;副歌各遍不全是 new?material form[].development
19和弦拼写全 ASCII,后缀在封闭集合里(maj7 m7b5 dim,不写 △ ø ° ♭ ♯ ×)?form[].harmony_letters harmony
20key 是"主音 major/minor";mode 在枚举内;段名在封闭集合内;subtraction_events[].at 是 {section, bar_offset} 这样的结构不是句子?meta form[].name subtraction_events

YAML 本身的自查(agent 最常写坏的地方):

  • 列表字段(roster / sound_stage / push_pull / emotional_arc …)的 - {…} 条目下面不能挂 `note:` 键——要注释用同级 xxx_note: 或 #
  • 冒号后有空格;值里有冒号的加引号;缩进统一两格

3.2 自查不过怎么办

不过的条目通常指向一个没读的 skill,而不是需要硬填:

不过的条目多半是哪个 skill 没读
1(intent 不齐)本 skill §1 的 S0——回去想清楚,不要硬填
2、3、14(段落与时长)mc-arrangement-arch §4
4、5(能量曲线)mc-arrangement-arch §2
6(减法事件)mc-arrangement-arch §3
7(编制进退场)mc-arrangement-arch §5
8(arrangement_hook)mc-arrangement-arch §7
9(和声单调)mc-harmony、mc-modulation
10、11(fill 与律动)mc-rhythm-section §3、§8
12(宽度恒定)mc-mix-intent §2
13(编译不完整)mc-render-compile
15、16(人声)mc-vocal-direction §1、§4

豁免的规矩:写进 checks.exemptions,必须带理由。 静默跳过 = 没写完。

3.3 ★ 生成后端的默认值对照表

后端在无指令时会滑向左列。ARR-SPEC 的对应字段就是为了把它拉回来。

后端默认倾向对抗字段lint
段落等长、都是 8 的倍数form[].bars#3
能量单调上升到底energy_curve#5
开场就把乐器铺满roster[].entry—
所有乐器从头响到尾roster[].exit#7
只加不减subtraction_events#6
每 4 小节一个过门fill_policy.bars#10
全声部严格对齐网格groove.push_pull#11
人声全程一个力度vocal.dynamics_by_section#15
副歌逐遍原样复制vocal.chorus_variation#16
人声音准全中vocal.pitch_policy人工项
立体声宽度全曲不变mix_intent.width_map#12
动态被压平mix_intent.dynamics人工项
没有非人声记忆点hooks.arrangement_hook#8
时长永远 3:30meta.target_duration#14

4. 诊断路径:生成回来不对劲

按这个顺序查,不要凭直觉跳。

听着"像 AI"
 └─ 先分开两个问题:后端照做了没有(照做率)、成品有没有机器指纹(AI 味旗标)
     ├─ 照做率低  → 后端没照做
     │   ├─ 查 backends.yaml:这个字段该后端 honors 是 none 吗?
     │   │   └─ 是 → 不是它的错。换后端(YuE2 控制力最强)或接受
     │   └─ 否 → 编译问题,查 mc-render-compile
     └─ 照做率高但仍像 AI → 规格本身不够
         └─ 走 mc-ai-tell-audit 的清单

4.1 具体症状 → skill

症状先查
平、没起伏mc-arrangement-arch §2 能量曲线
糊、浑mc-texture-layering §4 → 先查持续音,不是先怪鼓
主角不突出mc-texture-layering §3 四条深度线索
机械、太准mc-rhythm-section §2 + mc-vocal-direction §4
听着还行但记不住mc-arrangement-arch §7 —— arrangement_hook 是不是空的
第二遍副歌和第一遍一样mc-arrangement-arch §6 + mc-vocal-direction §1④
人声埋在伴奏里先查音准(mc-vocal-direction §4.1),再查频段
贝斯在手机上消失mc-sound-design §6 差音
结尾很突兀 / 淡出了事mc-arrangement-arch §8 三种结尾
技术上干净但情绪不对mc-mix-intent §3.1 —— mood 是不是没写

4.2 ★ 两个数不许混为一谈

问什么怎么算
照做率后端照着规格做了多少逐字段对照规格听/看;0–100 的参考线见 §6.3
AI 味旗标成品有没有机器指纹mc-ai-tell-audit 的清单,独立计数

照做率 100 的东西完全可能满是 AI 味——那说明规格写得像 AI。 反过来,照做率 40 但好听,说明后端自己干得不错,但你不可复现。


5. 对外接口

本库管一首歌的作曲与编曲决定(调、速度、段落、和声、主题材料、谁什么时候进退、能量曲线、怎么唱、混音要达到什么),产出是 ARR-SPEC。不假设下游是谁、用什么工具;对外只经规格单:交出去的字段、有就读的上游字段(§5.2)、messages(§5.3)。字段怎么理解:ARR-SPEC.schema.md §5。

职能不归本库的交出去
作词词怎么写:押韵、意象、叙事人称;字怎么安到音上(符割り、字余り、倒字、协音)共享六字段(§5.1);vocal.phrasing/breath_points、hooks.vocal_hook、intent.emotional_arc、form[].melody_register
声音(混音、母带)EQ 频点、压缩比、混响参数、总线链、母带;录音;影视意义的音效与拟音mix_intent(只写意图)、roster、depth_map、spectrum_budget、subtraction_events、vocal.pitch_policy/stacking;deliverable 含 stems 时交分轨
配乐(为画面写音乐)跟画面走的结构:spotting、cue sheet、从哪一帧进meta.tempo/tempo_map/target_duration、form[].start_bar/bars、material、hooks.arrangement_hook、energy_curve
剪辑环节把音乐放到画面上:切在哪、剪短、接缝同上的时间字段、subtraction_events、stems

镜头设计按放音拍时读速度与段落时间,交出去以后再改要先写消息;商用前的许可看 backends.yaml 的 license(制片与现场)。小节换算成秒的约定见 schema §5.1。

5.1 与歌曲另一侧共享的六个字段

form[].id / form[].bars / form[].name / meta.tempo / meta.key / vocal.persona。两边用同一套段落 id。

  • 谁先做谁定。 先曲后词:本库定,写进自己的字段。先词后曲:从 meta.upstream.lyrics.shared 原样读进来,当锁死项用;词的字数和句式反过来约束 form[].bars。
  • 后做时不改这六项。 词放不进这几小节、调或速度唱不下来,就写一条 messages(to: lyrics),说清改哪一项、为什么;对方接受并改了它自己的规格单,本库再重新读。
  • 只有曲、没有歌词那一侧时,这六项由本库自己定。

完整规则与原文:schema §5.4。

5.2 上游:有就读

meta.upstream.brief/lyrics/picture 来自谁不重要:有就读(先词后曲时的共享六项是锁死项),没有就按本库自己的分析走——S0 从 brief 起,没有歌词就按 §2.3 的三种情况,没有画面时长就自己定时长。已填的上游字段不改写;冲突时照实写本库的字段,再写消息给来源的职能。

5.3 messages:怎么收发

  • 收:S0 开工与每次改规格前读 to: music 的,交给 about 所指字段的 owner(§2.1);改了标 accepted、不改标 rejected,reply 写改了什么或理由。
  • 发:如 {from: music, to: sound, about: "mix_intent.dynamics", says: "D 段比 C2 低 6 dB 是唯一的大落差,母带请留住", status: open};to 取 lyrics sound editing shot-design writing production。
  • 不等待:读不到回话就当没有;open 不挡自查、不停阶段,交付时原样交出去。

6. 三个检验办法

6.1 选 skill 时对照边界表

开工前把这首歌要读的 skill 列出来,对照 §2 和各 skill 的边界表看两件事:

  1. 该读的读了没有:brief 里每个要做的决定,都有一个 owner 被选中
  2. 不该读的混进来没有

—— 尤其是 L3 风格层,多读一个没被点名的风格 skill,最容易把它的默认值带进这首歌(被点名的混合不算,见 §2.4)

这就是为什么每个 skill 都必须有「边界:什么不归这个 skill 管」表—— 那张表是给选 skill 时看的,不只是给人看的。

6.2 文本层 AB

评判表在看结果之前定稿。 改一个字段 → 重生成 → 盲比。 定稿之后再看结果,否则你会不自觉地把评判标准调向你已经看到的那个。

比响度前先对齐电平,再比内容:声音只要更响,耳朵就倾向觉得它更好,这条偏差会把"哪个字段起了作用"的判断,悄悄换成"哪个版本更响"(p0299-p0300)。两版生成结果如果响度或整体密度对不齐,先拉平这两项再做成对比较,不然字段本身的效果会被响度差盖过去。

6.3 先算再听(照做率)

见 §1 的 S7 与 §4.2。

★ 零点校准(参考值,供理解量级,不是交付门槛):拿一份 City Pop 规格(112 BPM、10 段、114 小节)去比三首与它无关、制作精良的华语成品,按字段加权打分得 63–66, 所以我们把 82 / 70 当"照做得好 / 勉强"的参考线,不是 60。 逐字段对照时,照做率就是对照后的一个判断,不必算成数。


7. 目录地图

随包发布(用户拿到的就是这些,全是文本):
  skills/<27 个 skill>/SKILL.md, reference.md
  skills/mc-workflow/ARR-SPEC.schema.md      ★ 规格单定义(v1.0)
  skills/mc-workflow/ARR-SPEC.template.yaml  空模板
  skills/mc-workflow/backends.yaml           ★ 各后端的 honors 声明
  skills/mc-workflow/example-*.yaml          填好的示例(citypop / 混合 / 反面样本)

8. 写完一首歌的自检

  • [ ] intent 四项是想出来的,不是为了过 lint 填的
  • [ ] §3.0 的 20 条逐条过了,不过的都写了理由
  • [ ] 每个字段都能说出是哪个 skill 的哪一节决定的
  • [ ] 逐字段对照过生成结果,且知道哪些项因 honors: none 本来就不指望
  • [ ] 跑过 mc-ai-tell-audit
  • [ ] 耳朵是最后介入的,且 A/B 结论两遍一致

附:这个库为什么这样分层

分库/分 skill 的判据是四件事全不同:交接物、裁判、语料、评判方法。 按工序切,不按知识领域切。

所以:

  • "和声"是知识领域,但它被切进 mc-harmony(写的时候)和 mc-progressions(查的时候)——

因为这是两道工序

  • "city pop"是风格,它的鼓型不进 mc-rhythm-section,进 mc-style-citypop-rnb——

因为"打得像人"和"打得像 city pop"是两道工序

  • "混音"横跨三层:意图在 mc-mix-intent,改写型解法在 mc-texture-layering,

参数是混音的事——因为它们的裁判不同(作曲判断 / 编曲判断 / 工程判断)

附:来源

  • Howard & Angus《音乐声学与心理声学》(Acoustics and Psychoacoustics)——§1.2 两遍复听的两条心理声学依据:重复听音会改变听觉系统的处理策略、以及持续暴露带来的听觉适应。页码为中译本页。
  • Roey Izhaki《Mixing Audio》(混音指南)——§6.2 提醒的响度偏差:更响的版本容易被判定"更好",与内容本身的差异无关。页码为该书页。

本库其余各 skill 引用的书目见各自的「附:来源」。

Tâches connexes

du même dépôt

Autres Skills

Tous les Skills