音频小样技能
三种子模式。当前项目的 audioKind 决定运行哪种模式:
audioKind | 路由到的模型 | 计划重点 |
|---|---|---|
music | Suno V5(默认)、Udio、Lyria 2 | 曲风 + 速度 + 配器 |
speech | MiniMax TTS(默认)、Fish、ElevenLabs V3 | 脚本 + 音色 + 语速 |
sfx | ElevenLabs SFX(默认)、AudioCraft | 质感 + 冲击力 + 时长 |
资源映射
audio-jingle/
├── SKILL.md
└── example.html
工作流
第 0 步 — 读取项目元数据
audioKind、audioModel、audioDuration(秒),以及(语音模式下)voice。根据已知值进行分支判断并原样使用。缺失的元数据并不意味着要提问:尽可能推断一个安全默认值,仅当缺失的信息会显著改变请求的输出或导致无法生成时,才发出一个澄清表单。
重要提示:voice 是特定于提供商的。对于 minimax-tts,--voice 必须是一个有效的 MiniMax voice_id(例如 male-qn-qingse),而不是自然语言描述。如果你只有一句散文式的语音说明(例如“温暖的女声旁白”、“中性普通话”),请在计划中保留这些描述,但省略 --voice 参数,让守护进程使用默认语音 ID,或者请用户选择一个具体的 ID。
第 1 步 — 制定计划
音乐
- 曲风 + 参考艺术家(1-2 个)
- 速度(BPM)+ 调性
- 配器(最多 3-5 种乐器)
- 人声:是 / 否 / 哼唱 / 合唱
- 情绪弧线(前奏 → 主歌 → 尾奏)
语音
- 脚本(最终版本,不是草稿——TTS 会逐字朗读)
- 音色目标 + 语速
对于 MiniMax,这需要提供真实的
voice_id,而不是在--voice中写散文 - 专有名词/缩写的发音提示
音效
- 质感(撞击音 / 呼啸声 / 环境音 / 拟音)
- 时长 + 包络(尖锐起音 vs. 柔和渐强)
- 叠加说明(单次击打 vs. 多层叠加)
在调度之前,用 2-3 句话陈述计划。
第 2 步 — 编写提示词
使用上游模型偏好的格式。将 audioDuration 直接绑定到 API 参数中;切勿在提示词散文中写入“让它持续 30 秒”。
第 3 步 — 通过媒体合约调度
使用统一调度器——不要手动调用提供商 API:
"$OD_NODE_BIN" "$OD_BIN" media generate \
--project "$OD_PROJECT_ID" \
--surface audio \
--audio-kind "<music|speech|sfx>" \
--model "<audioModel from metadata>" \
--duration <audioDuration seconds> \
[--voice "<provider voice id (speech only)>"] \
--output "<short-slug>-<duration>s.mp3" \
--prompt "<assembled prompt from Step 2 — for speech, the literal script>"
该命令打印一行 JSON:{"file": {"name": "...", ...}}。音频字节数据存入项目;文件查看器自动渲染音频播放控件。
第 4 步 — 移交
回复内容应包括:计划摘要、调度器返回的文件名,以及一句关于如果用户想要变体可以尝试什么的建议(例如“将速度从 92 BPM 改为 108 BPM”,而不是“让它不一样”)。
硬性规则
- TTS 逐字朗读你的脚本。在调度前务必校对——即使多一个逗号都会改变节奏。
- MiniMax TTS 拒绝在
--voice中使用自由形式的语音描述。请使用真实的 MiniMaxvoice_id(例如male-qn-qingse),或者省略该标志,让守护进程使用默认语音。 - 音乐:少于 30 秒 = 单段落;30-90 秒 = 前奏 + 主体;90 秒以上 = 完整起承转合。不要试图在 15 秒内塞入三幕结构。
- 音效:优先使用一个描述清晰的层级,而不是一段“让它酷一点”的散文——生成器会奖励具体的质感词汇。
- 每次交互都保存文件。音频文件一经落地,音频查看器立即显示播放控件。