Song Craft — 歌词创作与音乐制作
把一首歌从「一个想法」做到「可下载的成品」,分四个环节串行推进。
任何一个环节都必须先确认输入,再动手;做完必须给可调整项清单。
技能信息
| 项 | 值 |
|---|---|
| Slug | song-craft |
| 中文名称 | 音乐制作 · 作词、作曲、编曲 |
| 版本 | 1.0.0 |
| 能力范围 | 作词 → 作曲 → 编曲 → 人声 → 封面/字幕/署名 → 打包交付 |
| 运行方式 | 本地命令行,不联网、不上传 |
| 依赖 | Python 3.9+;numpy、Pillow 必需;imageio-ffmpeg 可选(转 mp3、写 ID3) |
概述(发布用,可直接粘贴)
标准版(187 字)
> 从一句话主题,做到一首能下载的歌。
>
> 按作词、作曲、编曲三个环节依次推进:每个环节先列输入清单与你确认,再动手;交付时给出编号化可调整项(L1/C1/A1),改一处能精确定位,并预警下游影响。
>
> 产出带主副歌标注的歌词、旋律走向与调式节拍、乐器编排与节奏设计、标准 MIDI 工程,渲染成 MP3/WAV,可选混入人声并补齐封面、SRT/LRC 字幕与创作者署名,打包成可下载成品。
一句话版(51 字,用于列表卡片)
> 按作词、作曲、编曲三环节逐段确认,把一句话主题做成含 MIDI 工程、可下载音频与人声混音的完整歌曲。
技术摘要(93 字,用于开发者视角)
> 本地命令行,不联网。song.json 为唯一真源,校验时值/和弦/音节,导出标准 MIDI,numpy 合成渲染 MP3/WAV。需 Python 3.9+、numpy、Pillow。
六段式定义
一、技能名称
| 项 | 值 |
|---|---|
| 技能标识(slug) | song-craft |
| 中文名称 | 音乐制作 · 作词、作曲、编曲 |
| 版本 | 1.0.0 |
| 一句话定义 | 按作词、作曲、编曲三环节逐段确认,把一句话主题做成含 MIDI 工程与可下载音频的完整歌曲 |
二、适用场景
适用
| 场景 | 典型说法 | 本技能做什么 |
|---|---|---|
| 从零写一首歌 | 「给我写首歌,主题是末班车」 | 三环节全流程 |
| 有词无曲 | 「词写好了,帮我谱曲编曲」 | 从作曲接起 |
| 已有作品要改 | 「副歌太冲,柔和一点」 | 定位到编号项重算 |
| 指定风格借鉴 | 「想写成陈奕迅那种语气」 | 按风格坐标拆维度 |
| 要工程文件精修 | 「给我 MIDI,我进 DAW 编」 | 导出标准 MIDI |
| 人声混音 | 「我录了干声,混进伴奏」 | 处理链 + 对齐 + 混音 |
不适用(附替代方案,别硬接)
| 需求 | 为什么不接 | 替代路径 |
|---|---|---|
| 唱片级母带 | 合成器音色有上限 | 导出 MIDI 进 DAW 换音源 |
| 克隆明星声线 | 涉《民法典》1023 条、深度合成规定 | 拆成唱法参数,用本人声音处理 |
| 扒谱 / 听歌识曲 | 不在能力范围 | 用专门的转谱工具 |
| 批量视频配乐 | 单首流程需逐环节确认,不适合流水线 | 走模板脚本或专门批处理 |
三、输入参数
3.1 创作输入(对话中确认,不是命令行参数)
| 环节 | 参数 | 必填 | 说明 |
|---|---|---|---|
| 立项 | 歌曲主题 | ✅ | 一句话,越具体越好(「异地恋第三年」优于「爱情」) |
| 立项 | 情感基调 | ✅ | 遗憾 / 释然 / 热烈 / 自嘲 / 坚定 / 怀念 等 |
| 立项 | 关键词 | ⭕ | 标明处理方式:必须出现 / 只作意象 / 规避 |
| 立项 | 风格参考 | ⭕ | 一位或多位歌手,作风格坐标,不套原句 |
| 立项 | 人声方案 | ⭕ | 本人录音 / 授权音色 / 纯伴奏 |
| 歌词 | 人称、韵脚策略、结构长度、文白比例 | ⭕ | 有默认值,逐项可改 |
| 作曲 | 曲风、调式、节拍、BPM、音域、曲式长度 | ⭕ | 会先给 2–3 个候选说明听感差异 |
| 编曲 | 编制规模、主奏、节奏密度、段落动态、氛围 | ⭕ | 有默认值 |
| 人声 | 人声来源、质感要求 | ⭕ | 可后补,不影响前面的环节 |
3.2 命令行参数
new 创建工程
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
--root |
路径 | ✅ | — | 项目根目录,工程建在 <root>/songs/<slug>/ |
--title |
字符串 | ⭕ | slug | 歌名,用于封面主标题、ID3、文档标题 |
--slug |
字符串 | ⭕ | 由歌名生成 | 目录名与文件前缀 |
--force |
开关 | ⭕ | 关 | 已存在时覆盖重建 |
status / validate / midi / docs
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
--project |
路径 | ✅ | — | 工程目录路径 |
render 渲染音频
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
--project |
路径 | ✅ | — | 工程目录 |
--format |
枚举 | ⭕ | wav |
wav / mp3 |
--bitrate |
字符串 | ⭕ | 192k |
MP3 码率 |
--vocal |
路径 | ⭕ | 空 | 临时指定人声文件,覆盖 song.json 里的设置 |
--stems |
开关 | ⭕ | 关 | 额外导出分轨 WAV |
credits 创作者署名
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
--project |
路径 | ✅ | — | 工程目录 |
--set |
键=值 |
⭕ | — | 可重复,如 --set "作词=张三",中英文键名都认 |
--from-file |
路径 | ⭕ | 空 | 从 JSON 整包导入 |
--export |
开关 | ⭕ | 关 | 导出可编辑副本 credits.json |
cover 生成封面
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
--project |
路径 | ✅ | — | 工程目录 |
--out |
路径 | ⭕ | <project>/cover.jpg |
输出位置,扩展名决定格式 |
--palette |
枚举 | ⭕ | 按曲风自动 | night dawn ember mint ink violet earth slate |
--size |
整数 | ⭕ | 1400 |
像素边长(正方形) |
subtitle 生成字幕
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
--project |
路径 | ✅ | — | 工程目录 |
--out-dir |
路径 | ⭕ | 工程目录 | SRT / LRC 输出位置 |
package 打包交付
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
--project |
路径 | ✅ | — | 工程目录 |
--with-wav |
开关 | ⭕ | 关 | zip 内含全长 WAV(体积大) |
--with-stems |
开关 | ⭕ | 关 | zip 内含 WAV 分轨(体积很大) |
--rebuild-cover |
开关 | ⭕ | 关 | 强制重绘封面 |
--palette |
枚举 | ⭕ | 按曲风自动 | 同 cover |
--no-tags |
开关 | ⭕ | 关 | 不写 MP3 标签与内嵌封面 |
--keep-cover |
开关 | ⭕ | 关 | 保留手改封面,信息变更也不重绘 |
四、执行步骤
| 步 | 环节 | 门禁(进入前必做) | 产出 |
|---|---|---|---|
| 1 | 立项 | 确认主题、基调、关键词、风格参考、人声方案 | 工程目录与 song.json |
| 2 | 作词 | 确认情感弧线、韵脚策略、结构长度、文白比例 | lyrics.md + 编号项 L1–L6 |
| 3 | 作曲 | 确认曲风、调式、节拍、BPM、音域、曲式长度 | score.md + MIDI + 编号项 C1–C6 |
| 4 | 编曲 | 确认编制规模、主奏、节奏密度、动态、氛围 | arrangement.md + 编号项 A1–A7 |
| 5 | 人声(可选) | 确认人声来源与质感要求 | 处理后的 vocal.wav + 编号项 V1–V6 |
| 6 | 包装 | 确认创作者署名 | 封面 / 字幕 / 歌词卡 / MP3 / zip |
每步对应命令见文末「命令速查」。上一环节未确认,不进入下一环节。
五、输出格式
工程目录 <project>/:
<project>/
├── song.json 唯一真源:立项 / 歌词 / 作曲 / 编曲 / 人声 / 署名
├── lyrics.md 歌词(带结构标注与音节数)+ 写作说明
├── score.md 曲式结构表 + 旋律走向统计 + 各段逐音符旋律
├── arrangement.md 乐器编排表 + 节奏设计(鼓组 pattern)+ 氛围 + 段落动态
├── cover.jpg 封面 1400×1400
├── <slug>.srt SRT 字幕
├── <slug>.lrc LRC 歌词(带 ti/ar/by/length 标签)
├── vocals/ 人声素材与处理后文件
├── stems/ full.mid(标准 MIDI)、MP3/WAV、可选分轨
└── deliverables/ 打包产物(11 个文件 + zip)
交付清单:
| 文件 | 格式 | 内容 |
|---|---|---|
<slug>-demo.mp3 |
MP3 | 192 kbps,含 9 项 ID3 标签与内嵌封面 |
<slug>-封面.jpg |
JPEG 1400×1400 | 约 150 KB |
<slug>-字幕.srt |
SRT | 与旋律音符对齐 |
<slug>-歌词.lrc |
LRC | 带时间戳与元信息标签 |
<slug>-歌词卡.html |
HTML | 浅底深字,内嵌封面缩略图,无内联 JS |
<slug>-创作者.json |
JSON | 九字段署名,可编辑后重新打包 |
<slug>-歌词.md 等三份 |
Markdown | 创作文档 |
<slug>-工程.mid |
MIDI | 标准 MIDI,可导入 DAW |
<slug>-pack.zip |
ZIP | 以上全部(默认不含 WAV) |
六、使用限制
| # | 限制 | 说明 |
|---|---|---|
| 1 | 音色为程序合成 | 旋律、和声、层次、动态可听辨;钢琴不像真钢琴。要成品请导出 MIDI 进 DAW 换音源 |
| 2 | 不修音准 | 人声链做了降噪 / EQ / 压缩 / 归一化,跑调仍是跑调 |
| 3 | 不做声纹克隆 | 本人录音与授权音色可用;他人(含明星)声线克隆不做,涉法律风险 |
| 4 | 封面为程序排版 | 渐变 + 几何 + 文字,不是 AI 插画。要插画请自行替换 cover.jpg |
| 5 | 字幕按行对齐 | 不是逐字卡拉 OK,需音素级对齐模型才能做到 |
| 6 | 渲染需算力 | 3 分钟歌曲约 10–20 秒(视 CPU);超长曲目线性增长 |
| 7 | 单首流程 | 逐环节需人工确认,不适合无人值守批量生成 |
| 8 | 依赖外部包 | 需 Python 3.9+ 与 numpy、Pillow;mp3 与 ID3 需 imageio-ffmpeg 或系统 ffmpeg |
0. 铁律(每次执行都要遵守)
- 先确认,后创作。 每环节开头先输出「输入清单」(分「必填 / 选填有默认值」两栏),等用户确认或改完再开始写。不要一边问一边已经写完了。
- 一门一次。 只在当前环节工作。用户没确认上一环节,不许进入下一环节。
- 编号化可调整项。 每环节交付时,末尾给一张「可调整项」表,每项带编号(
L1歌词、C1作曲、A1编曲、V1人声)+当前取值+可选范围。用户说「改 L3」就能精确定位。 - 联动预警。 用户回头改上游(如改歌词字数)时,主动提示哪些下游需要重算(例:
V1第 2 行字数从 9 变 14,副歌旋律需重新配字,预计多占 2 拍)。 - song.json 是唯一真源。 所有阶段结论都写进工程文件,不靠对话记忆。改任何东西都要落盘再重新渲染。
- 不编造音频能力。 本技能渲染的是「编曲 Demo」(合成器音色 + 可选人声轨),不是唱片级成品。涉及真实乐器、专业混音、母带时,明确告知需在 DAW 内完成,我们提供工程与参数。
1. 启动:立项 Gate
用户提出做歌时,先只做一件事——问清立项信息。用一段自然话 + 一张清单,不要一次抛 20 个问题。
| 项 | 必填 | 说明 |
|---|---|---|
| 歌曲主题 | ✅ | 一句话,越具体越好("异地恋第三年"优于"爱情") |
| 情感基调 | ✅ | 如 遗憾/释然/热烈/自嘲/坚定/怀念 |
| 关键词 | ✅ | 3–8 个必须出现或必须规避的词 |
| 语言 | ⭕ | 默认中文 |
| 演唱视角 | ⭕ | 默认第一人称 |
| 风格参考歌手 | ⭕ | 1–3 位,见 references/style-library.md |
| 用途场景 | ⭕ | 短视频/完整单曲/品牌曲/练习,影响时长与结构 |
| 人声方案 | ⭕ | 本人口述录音 / 授权音色 / 暂不做人声(见 §5) |
| 创作者署名 | ⭕ | 作词 / 作曲 / 编曲 / 演唱 / 制作人 / 版权声明。可以先空着,交付前一次性填好 |
确认后建工程:
python "<技能目录>/scripts/song.py" new --root "<工作区>" --slug my-song --title "歌名"
产物目录 workspace/songs/<slug>/:
my-song/
├── song.json # 工程文件(唯一真源)
├── lyrics.md # 带结构标注的歌词
├── score.md # 曲式 / 旋律 / 和声说明
├── arrangement.md # 编曲方案
├── stems/ # MIDI 分轨 + 音频
├── vocals/ # 人声素材与处理结果
└── deliverables/ # 最终打包 zip + 歌词卡 HTML
2. 环节一:歌词
进入前确认(按 references/01-lyrics.md 的清单):主题、情感弧线、关键词处理方式(必须出现 / 只作意象 / 规避)、人称、韵脚策略、结构长度、风格参考。
执行要点
- 结构必须显式标注:[Intro] [Verse 1] [Pre-Chorus] [Chorus] [Verse 2] [Chorus] [Bridge] [Final Chorus] [Outro],用中文标注(主歌 A / 预副歌 / 副歌 / 桥段 / 尾声)。
- 每行歌词标音节数,副歌音节数要与旋律锚点对得上(作曲环节要用)。
- 风格借鉴只借「语言密度、意象偏好、叙事人称、押韵习惯、口语/文语比例」,不套改原句、不拼接他人作品片段。参考歌手仅作风格坐标,成稿不署名他人。
- 输出 lyrics.md + 同步写 song.json 的 lyrics.sections。
交付时给「可调整项」:主题偏移度、副歌钩子强度、韵脚方案、句子长短、口语/文艺比例、段落增删。
3. 环节二:作曲
进入前确认(按 references/02-composition.md):曲风(可多选后定一个)、调式、节拍、速度 BPM、音域(演唱者能唱到哪)、曲式长度、记忆点策略。
执行要点
- 先定调式与速度(给 2–3 个候选并说明听感差异,让用户选)。
- 输出:旋律走向(每段的音高轮廓、动机、重复与变化)、调式、节拍、速度、曲式结构表(段落 / 小节数 / 情绪功能 / 和声进行)。
- 旋律写成 song.json 的紧凑音符串:"E4/1 G4/0.5 R/0.5 A4/1.5"(音名/时值拍,R 为休止),每段总时值必须等于小节数 × 每小节拍数。
- 和声每小节一个和弦:["Am","F","C","G"]。
- 校验并生成 MIDI:
python "<技能目录>/scripts/song.py" validate --project "<...>/songs/my-song"
python "<技能目录>/scripts/song.py" midi --project "<...>/songs/my-song"
交付时给「可调整项」:BPM、调式升降、副歌音区高低、动机变形方式、段落长度、和声替换。
4. 环节三:编曲
进入前确认(按 references/03-arrangement.md):编制规模(小编制/乐队/电子/管弦)、主奏乐器、节奏密度、段落动态设计、整体氛围与参考质感、是否要留人声空间。
执行要点
- 输出四块:乐器编排表(乐器 / 音色 / 角色 / 进入段落 / 声像 / 音量)、节奏设计(鼓组 pattern、律动、加花点)、和声铺底与低音走向、整体氛围设定(空间感、频段留白、情绪曲线)。
- 写进 song.json 的 arrangement,然后渲染:
python "<技能目录>/scripts/song.py" render --project "<...>/songs/my-song" --format wav
- 动态靠两件事拉开:① 乐器
entry/exit控制进出;② 鼓组按段落给不同电平——drums.patterns["C1"]可写成{"pattern": "K.H.S.H.K.H.S.H.", "level": -4},主歌写成-9,对比自然出来。别只靠单一全局音量。 - 渲染失败或音色不足时,如实说明,并给出可在 DAW 复现的等价参数,不要假装听感。
交付时给「可调整项」:乐器增删、音色替换、鼓组密度、段落进出点、声像宽度、混响量、动态对比。
5. 人声(可穿插在任一环节之后)
必须区分三类,处理方式完全不同:
| 类型 | 支持度 | 做法 |
|---|---|---|
| 本人录音 | ✅ 完整支持 | 用户提供干声(建议 wav/m4a,安静环境、靠近麦、无伴奏)。技能做转码、去直流、降噪、归一化、对齐节拍、与编曲混音、导出。 |
| 已授权/免版权音色 | ✅ 支持 | 用户持有授权的音色库或歌声合成工具(ACE Studio、Synthesizer V、DiffSinger 等)导出的人声干声,走同一条处理链。 |
| 他人(含明星)声线克隆 | ❌ 不做 | 未经本人同意克隆他人声音,在国内属侵犯声音权益,且违反深度合成相关规定。不提供克隆方法、不代为生成。 |
遇到「用某明星的声音唱」这类需求,这样回应并给替代方案(不要生硬拒绝整件事):
- 想要那种唱法/音色感觉 → 写进编曲与人声指导(气声比例、颤音、咬字、混声位置),由真人或持牌歌声合成工具去实现;
- 想要现在就听到成品 → 用本人录音或授权音色,我们把它混成完整作品;
- 想要参考曲对照 → 可以做风格分析,不搬运音色。
人声处理:
python "<技能目录>/scripts/vocal.py" prepare --in "我的干声.m4a" --out "<...>/songs/my-song/vocals/vocal.wav"
python "<技能目录>/scripts/song.py" render --project "<...>/songs/my-song" --vocal "<...>/vocals/vocal.wav" --format mp3
6. 封面、字幕与署名
这三样是「作品」和「一堆文件」的区别,每次交付都必须齐全。
6.1 创作者署名
问一次,填全部。九个字段:作词、作曲、编曲、演唱、制作人、录音室、版权声明、联系方式、ISRC。
python "<技能目录>/scripts/song.py" credits --project "<...>/songs/my-song" \
--set "作词=张三" --set "演唱=李四" --set "版权=© 2026 某某 保留所有权利"
三种改法,任选:
1. 命令行:--set "作词=张三",可重复多次;中文键名直接写(也认 lyricist 这类英文键)。
2. 编辑器:--export 导出一份 credits.json,在任意编辑器里改完保存,下次 package 自动以它为准。
3. 整包导入:--from-file 某人.json。
> 重要:改完署名必须重新 package。封面、歌词卡、MP3 标签都在打包时才更新。
6.2 封面
按曲风自动配色,1400×1400,输出 JPEG(约 150 KB)。八套配色:night(抒情/遗憾)、dawn(明亮/轻快)、ember(摇滚/激烈)、mint(爵士/清新)、ink(国风)、violet(电子/说唱)、earth(民谣)、slate(默认)。
python "<技能目录>/scripts/song.py" cover --project "<...>/songs/my-song" # 自动配色
python "<技能目录>/scripts/song.py" cover --project "<...>/songs/my-song" --palette ink
封面内容:曲风标签 / 歌名 / 主题短句 / 创作者署名 / 年份 / 版权。
改封面的两种方式:
- 换配色或布局 → cover --palette xxx 重绘;
- 用外部图片 → 直接替换工程目录下的 cover.png / cover.jpg / cover.webp,下次 package 自动采用(打包时会按内容指纹判断:曲目或署名变了才重绘,没变就保留你换的图;要强制保留用 --keep-cover)。
6.3 字幕
按旋律音符与歌词逐行对齐算出时间轴,同时出两种格式:
*.srt—— 通用视频字幕,可导入剪映 / Premiere / YouTube;*.lrc—— 音乐播放器歌词,带[ti:] [ar:] [by:]标签。
python "<技能目录>/scripts/song.py" subtitle --project "<...>/songs/my-song"
对齐规则:每行歌词按其字数切分该段的旋律音符,取第一个音的起点为行起点、最后一个音的终点为行终点;行间自动留 0.1 秒间隙避免重叠。若某段音符数与字数不符(validate 会提示),按比例映射,字幕仍不会整体错位。
6.4 打包交付
python "<技能目录>/scripts/song.py" package --project "<...>/songs/my-song"
内部顺序:应用 credits.json → 重生成三份文档 → 重生成字幕 → 按指纹决定是否重绘封面 → 给 MP3 写 ID3 标签并嵌入封面 → 生成歌词卡 → 打 zip。
MP3 会带上:title / artist(=演唱)/ album / album_artist(=作词)/ composer / date / genre / comment / copyright,以及内嵌的封面图(attached picture,Front Cover)。拖进任何播放器或手机都能看到封面和署名。
deliverables/ 产出清单:
| 文件 | 说明 |
|---|---|
<slug>-demo.mp3 |
成品音频,带标签与封面 |
<slug>-封面.jpg |
独立封面图 |
<slug>-字幕.srt |
视频字幕 |
<slug>-歌词.lrc |
播放器歌词 |
<slug>-歌词卡.html |
图文歌词卡(内嵌封面,手机可直接看) |
<slug>-歌词.md / -曲式旋律.md / -编曲方案.md |
三份创作文档,均带署名 |
<slug>-创作者.json |
可编辑署名副本 |
<slug>-工程.mid |
MIDI 工程 |
<slug>-pack.zip |
以上全部打包(默认不含 WAV,加 --with-wav / --with-stems 才含) |
最后用 present_files 把 MP3、歌词卡、zip 一起推给用户,并在回复里附「全局可调整项索引」——把各环节的编号项汇总成一张表,告诉用户「想改哪就说编号」。改创作者姓名要单独提一句:改完记得重新打包。
7. 文件索引
| 文件 | 用途 |
|---|---|
references/01-lyrics.md |
歌词输入清单、结构模板、押韵与音节规范、风格借鉴边界 |
references/02-composition.md |
作曲输入清单、曲风参数表、调式/节拍/曲式、旋律写法与校验规则 |
references/03-arrangement.md |
编曲输入清单、编制模板、鼓组 pattern、频段与氛围 |
references/04-vocals.md |
人声录音规范、处理链、合规边界、混音参数 |
references/style-library.md |
曲风与歌手风格坐标(用于歌词借鉴与编曲选型) |
scripts/song.py |
CLI:new / status / validate / midi / render / docs / package |
scripts/synth.py |
合成引擎 + 标准 MIDI 写入(纯 numpy,无第三方 MIDI 依赖) |
scripts/vocal.py |
人声转码 / 降噪 / 均衡 / 压缩 / 归一化 |
scripts/artwork.py |
封面生成(八套配色、自适应排版) |
assets/song.schema.json |
song.json 结构定义 |
8. 命令速查
S="<技能目录>/scripts"
P="<工作区>/songs/<slug>"
python $S/song.py new --root "<工作区>" --slug my-song --title "歌名"
python $S/song.py status --project $P
python $S/song.py validate --project $P # 时值/和弦/音节三重校验
python $S/song.py midi --project $P # full.mid + 各轨 .mid
python $S/song.py render --project $P --format mp3 --stems
python $S/song.py render --project $P --vocal "$P/vocals/vocal.wav"
python $S/song.py docs --project $P # lyrics/score/arrangement 三份 md
python $S/song.py credits --project $P # 查看署名
python $S/song.py credits --project $P --set "作词=张三" --set "演唱=李四" --export
python $S/song.py cover --project $P --palette ink # night/dawn/ember/mint/violet/earth/slate
python $S/song.py subtitle --project $P # 生成 srt + lrc
python $S/song.py package --project $P # 全量打包:封面+字幕+标签+歌词卡+zip
# --keep-cover 保留手改封面 --no-tags 不写标签
python $S/vocal.py info --in "干声.m4a"
python $S/vocal.py prepare --in "干声.m4a" --out "$P/vocals/vocal.wav"
依赖:numpy(必需)、Pillow(生成封面必需)、imageio-ffmpeg(转 mp3 / 处理 m4a / 写 ID3 时需要)。缺哪个就 pip install。
9. 能力边界(对用户要说清楚)
> 完整限制清单见上文「六、使用限制」。本节补充对用户的表述口径与性能实测数据。
能做到:歌词成稿、曲式与旋律设计、编曲方案、可导入 DAW 的 MIDI 工程、带音色与动态的音频 Demo(器乐,约 3 分钟渲染 13 秒)、人声清理与混音、打包下载。
做不到:
- 封面是程序排版生成的(渐变 + 几何 + 文字),不是 AI 绘制的插画。要插画请用 ImageGen 生成后替换 cover.jpg。
- 字幕是全曲统一时间轴,不能逐字卡拉 OK 效果。
- 不是唱片级音色。合成器是程序生成的,能听清旋律、和声、编曲层次和动态,但钢琴不像真钢琴。要成品音色请把 MIDI 导入 DAW 换真采样音源。
- 不修音准和节奏。跑调的人声处理完还是跑调,得用 Melodyne 之类。
- 不做声线克隆。
性能参考:60 小节 / 3 分钟的歌,渲染约 13 秒;分轨导出会额外写若干 WAV(每轨单声道,约 15 MB/轨)。
10. 常见问题
| 现象 | 原因与处理 |
|---|---|
validate 报"旋律总时值不符" |
音符串总拍数 ≠ 小节数 × 每小节拍数。检查是否漏写休止,或 bars 写错 |
| 渲染很慢 | 音符种类越多合成越久;先跑 midi 确认结构无误再渲染,或先用 1 段试渲 |
| 音频听着闷 / 低频糊 | 检查是否给了太多 bass 或 pad 同频段;调 level,或用 drums.patterns 的段落电平拉开对比 |
| 听到的音色不像乐器 | 合成器限制,属预期。换 timbre 试试别的音色,或导出 MIDI 到 DAW |
| 人声和伴奏不齐 | 调 vocals.offset_sec;本工具只做整体偏移,不切分对齐 |
| 打包后 zip 特别大 | 默认已排除 wav;确认没有加 --with-wav / --with-stems |
11. 相关技能
| 技能 | 职责 | 与本技能的关系 |
|---|---|---|
song-release |
成品包装:封面 / 字幕 / 署名 / ID3 / 歌词卡 / zip | 下游。本技能产出 song.json 与音频后,由它补齐发布要素;也可脱离本技能单独使用 |