mcpField
M
midi-generation

midi-generation

github.com/tubone24创意与媒体3748 次安装45 周前更新
代码仓库

关于 midi-generation

midi-generation 是用于按乐理规则生成 MIDI 文件的 Skill,面向音乐创作任务。它通过现成脚本、乐理参考资料和组合 JSON 工作流生成 MIDI,并可将 MIDI 转为 WAV。

主要功能

  1. 01按乐理规则生成 MIDI
  2. 02使用脚本规范化和调整编曲
  3. 03提供按风格查阅的乐理资料
  4. 04支持 MIDI 转 WAV

适用场景

  1. 01按指定风格编写 MIDI 编曲
  2. 02检查和规范化组合数据
  3. 03延长曲目或扩展音轨
  4. 04将生成的 MIDI 转为 WAV

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tubone24/midi-agent-skill --skill midi-generation

安装后在 Claude Code 中输入/midi-generation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

requirements.txt
.gitignore
README.md
LICENSE.txt
midi_types/
__init__.py
music.py
gm_instruments.py
output/
.gitkeep
resources/
counterpoint.md
chord-progressions.md
orchestration.md
modes-scales.md
rhythm-patterns.md
voice-leading.md
music-theory.md
skills/
convert_to_wav.py
generate_midi.py
normalize_composition.py
refine_composition.py
__init__.py
soundfonts/
.gitkeep

详细介绍

MIDI 生成技能

使用正确的乐理知识生成 MIDI 文件。请使用 skills/ 中提供的 Python 脚本。不要编写自定义代码。

重要规则

  1. 使用 skills/ 目录中提供的脚本(Python)
  2. 不要编写自定义 Python/JS 来生成 MIDI
  3. 先安装依赖项:pip install midiutil
  4. 必要时查阅乐理资源(见下文)

快速避免不和谐音规则

始终遵守以下规则,避免刺耳的声音:

  1. 不要同时演奏相差 1 个半音的音符(C+C#、E+F、B+C)
  2. 贝斯演奏和弦的根音或五度
  3. 让各声部跨八度分布(不要挤在一起)
  4. 每个音轨使用不同的 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,避免不和谐

工作流

  1. 安装依赖项:pip install midiutil
  2. 确定流派/风格 → 选择相应资源
  3. 阅读相关乐理内容 → 只阅读需要的文件
  4. 选择乐器 → 参见 midi_types/gm_instruments.py
  5. 创建乐曲 JSON
  6. 使用脚本生成 MIDI

Python 脚本

脚本用途
skills/generate_midi.py生成 MIDI(自动为每个音轨分配通道)
skills/normalize_composition.py验证并规范化输入
skills/refine_composition.py调整长度、扩展音轨
skills/convert_to_wav.pyMIDI → 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 乐器
pianoacoustic-grand-piano
guitaracoustic-guitar-nylon
bassacoustic-bass
stringsstring-ensemble-1
brassbrass-section
saxalto-sax

完整列表:midi_types/gm_instruments.py

备注

  • 最多 15 条旋律音轨(MIDI 通道 0-8、10-15;ch.9 = 鼓)
  • 输出:output/ 目录
  • WAV 需要:FluidSynth + soundfonts/ 中的 A320U.sf2

评论

支持 Markdown