mcpField
M
midi-generation

midi-generation

github.com/tubone24クリエイティブ・メディア3748 回インストール45 週間前に更新
リポジトリ

midi-generation について

midi-generation は、音楽理論に沿った MIDI ファイル生成を支援する Skill です。独自コードではなく提供スクリプトと作曲 JSON を使い、必要に応じて MIDI を WAV に変換します。

主な機能

  1. 01理論ルールに沿った MIDI 生成
  2. 02スクリプトによる編曲の検証と調整
  3. 03スタイル別の理論資料
  4. 04MIDI から 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. MIDI 生成のために独自の Python/JS コードを書かない
  3. 先に依存関係をインストールする:pip install midiutil
  4. 必要に応じて音楽理論のリソースを参照する(以下を参照)

不協和音を避けるための簡易ルール

耳障りな音を避けるため、必ず次のルールに従ってください。

  1. 半音差の音を同時に鳴らさない(C+C#、E+F、B+C)
  2. ベースはコードのルートまたは5度を演奏する
  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.pyMIDI を生成する(トラックごとにチャンネルを自動割り当て)
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拍)
22分音符(2拍)
d2付点2分音符(3拍)
44分音符(1拍)
d4付点4分音符(1.5拍)
88分音符(0.5拍)
1616分音符(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 が必要です

コメント