关于 midi-generation
midi-generation 是用于按乐理规则生成 MIDI 文件的 Skill,面向音乐创作任务。它通过现成脚本、乐理参考资料和组合 JSON 工作流生成 MIDI,并可将 MIDI 转为 WAV。
主要功能
- 01按乐理规则生成 MIDI
- 02使用脚本规范化和调整编曲
- 03提供按风格查阅的乐理资料
- 04支持 MIDI 转 WAV
适用场景
- 01按指定风格编写 MIDI 编曲
- 02检查和规范化组合数据
- 03延长曲目或扩展音轨
- 04将生成的 MIDI 转为 WAV
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tubone24/ midi-agent-skill --skill midi-generation安装后在 Claude Code 中输入/midi-generation确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
requirements.txt.gitignoreREADME.mdLICENSE.txtmidi_types/__init__.pymusic.pygm_instruments.pyoutput/.gitkeepresources/counterpoint.mdchord-progressions.mdorchestration.mdmodes-scales.mdrhythm-patterns.mdvoice-leading.mdmusic-theory.mdskills/convert_to_wav.pygenerate_midi.pynormalize_composition.pyrefine_composition.py__init__.pysoundfonts/.gitkeep详细介绍
MIDI 生成技能
使用正确的乐理知识生成 MIDI 文件。请使用 skills/ 中提供的 Python 脚本。不要编写自定义代码。
重要规则
- 使用
skills/目录中提供的脚本(Python) - 不要编写自定义 Python/JS 来生成 MIDI
- 先安装依赖项:
pip install midiutil - 必要时查阅乐理资源(见下文)
快速避免不和谐音规则
始终遵守以下规则,避免刺耳的声音:
- 不要同时演奏相差 1 个半音的音符(C+C#、E+F、B+C)
- 贝斯演奏和弦的根音或五度
- 让各声部跨八度分布(不要挤在一起)
- 每个音轨使用不同的 MIDI 通道(自动分配)
乐理资源(按需阅读)
只阅读与当前任务相符的资源:
| 需要了解…… | 阅读此文件 |
|---|---|
| 音阶、和弦、音程、终止式 | resources/music-theory.md |
| 不同流派的和弦进行 | resources/chord-progressions.md |
| 避免不和谐、声部间距 | resources/voice-leading.md |
| 古典/巴洛克对位法 | resources/counterpoint.md |
| 调式(多利亚、弗里吉亚等) | resources/modes-scales.md |
| 节奏、拍号、切分音 | resources/rhythm-patterns.md |
| 乐器音域、组合 | resources/orchestration.md |
何时阅读各项资源
- 流行/摇滚歌曲 → chord-progressions.md + voice-leading.md
- 古典乐曲 → counterpoint.md + orchestration.md
- 爵士创作 → modes-scales.md + chord-progressions.md
- 电影配乐 → orchestration.md + modes-scales.md
- 任何创作 → 始终查看 voice-leading.md,避免不和谐
工作流
- 安装依赖项:
pip install midiutil - 确定流派/风格 → 选择相应资源
- 阅读相关乐理内容 → 只阅读需要的文件
- 选择乐器 → 参见 midi_types/gm_instruments.py
- 创建乐曲 JSON
- 使用脚本生成 MIDI
Python 脚本
| 脚本 | 用途 |
|---|---|
skills/generate_midi.py | 生成 MIDI(自动为每个音轨分配通道) |
skills/normalize_composition.py | 验证并规范化输入 |
skills/refine_composition.py | 调整长度、扩展音轨 |
skills/convert_to_wav.py | MIDI → WAV(需要 FluidSynth) |
用法示例
import sys
sys.path.insert(0, '/path/to/midi-skill')
from skills.generate_midi import generate_midi_from_dict
composition = {
"title": "My Song",
"bpm": 120,
"tracks": [
{
"instrument": "acoustic-grand-piano",
"notes": [
{"pitch": "C4", "duration": "4"},
{"pitch": "E4", "duration": "4"},
{"pitch": "G4", "duration": "4"},
{"pitch": "C5", "duration": "2"}
]
},
{
"instrument": "acoustic-bass",
"notes": [
{"pitch": "C2", "duration": "2"},
{"pitch": "G2", "duration": "2"}
]
}
]
}
midi_path = generate_midi_from_dict(composition)
print(f"Generated: {midi_path}")
乐曲格式
{
"title": "My Song",
"bpm": 120,
"tracks": [
{
"instrument": "acoustic-grand-piano",
"notes": [
{ "pitch": "C4", "duration": "4" },
{ "pitch": "E4", "duration": "4" }
]
},
{
"instrument": "acoustic-bass",
"notes": [
{ "pitch": "C2", "duration": "2" }
]
}
]
}
时值记法
| 数值 | 音符 |
|---|---|
1 | 全音符(4 拍) |
2 | 二分音符(2 拍) |
d2 | 附点二分音符(3 拍) |
4 | 四分音符(1 拍) |
d4 | 附点四分音符(1.5 拍) |
8 | 八分音符(0.5 拍) |
16 | 十六分音符(0.25 拍) |
乐器别名
| 别名 | GM 乐器 |
|---|---|
piano | acoustic-grand-piano |
guitar | acoustic-guitar-nylon |
bass | acoustic-bass |
strings | string-ensemble-1 |
brass | brass-section |
sax | alto-sax |
完整列表:midi_types/gm_instruments.py
备注
- 最多 15 条旋律音轨(MIDI 通道 0-8、10-15;ch.9 = 鼓)
- 输出:
output/目录 - WAV 需要:FluidSynth +
soundfonts/中的 A320U.sf2
评论
支持 Markdown