midi-generation について
midi-generation は、音楽理論に沿った MIDI ファイル生成を支援する Skill です。独自コードではなく提供スクリプトと作曲 JSON を使い、必要に応じて MIDI を WAV に変換します。
主な機能
- 01理論ルールに沿った MIDI 生成
- 02スクリプトによる編曲の検証と調整
- 03スタイル別の理論資料
- 04MIDI から 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)を使用する- MIDI 生成のために独自の Python/JS コードを書かない
- 先に依存関係をインストールする:
pip install midiutil - 必要に応じて音楽理論のリソースを参照する(以下を参照)
不協和音を避けるための簡易ルール
耳障りな音を避けるため、必ず次のルールに従ってください。
- 半音差の音を同時に鳴らさない(C+C#、E+F、B+C)
- ベースはコードのルートまたは5度を演奏する
- 各声部を異なるオクターブに分散させる(密集させない)
- 各トラックには異なる 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分音符(2拍) |
d2 | 付点2分音符(3拍) |
4 | 4分音符(1拍) |
d4 | 付点4分音符(1.5拍) |
8 | 8分音符(0.5拍) |
16 | 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 対応