Skip to content

CLI リファレンス

MIDI Sketch には、生成、MIDI 分析、検証、再生成を行うコマンドラインツールが含まれています。

インストール

midi-sketch のソースツリーから CLI をビルドします。

bash
cd midi-sketch
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target midisketch_cli

バイナリは build/bin/midisketch_cli に生成されます。

基本的な使い方

bash
# デフォルト設定で生成します。output.mid と output.json を作成します。
./build/bin/midisketch_cli

# スタイル、ムード、テンポを指定して生成します。
./build/bin/midisketch_cli --style 5 --mood 3 --bpm 128 -o song.mid

# 生成して不協和音レポートを書き出します。
./build/bin/midisketch_cli --style 5 --analyze

# 既存の SMF1 MIDI ファイルを分析します。
./build/bin/midisketch_cli --input existing.mid --analyze

# MIDI ファイルを検証します。
./build/bin/midisketch_cli --validate existing.mid

コマンドリファレンス

生成パラメータ

フラグ説明デフォルト
--seed Nランダムシード(0 はランダムに選択)0
--style Nスタイルプリセット ID(0-160
--blueprint N|NAMEProduction Blueprint(0-9255 はランダム、または名前)0
--mood N|NAMEムード ID(0-23)または名前。明示したムードはスタイルのマッピングを上書きしますスタイルのマッピング
--chord N|NAMEコード進行(0-21)または名前自動選択
--vocal-style Nボーカルスタイル(0-13。下の一覧を参照)0(Auto)
--bpm NBPM(0 または 40-240スタイルとムードから自動選択
--duration N目標再生時間(秒)。0 は選択したフォームを使用します0
--form N|NAMEフォーム/構成パターン(0-17)または名前スタイルに対応するフォーム
--key Nキー(0-11: C, C#, D, Eb, E, F, F#, G, Ab, A, Bb, B)0(C)
--config FILEsnake_case のフィールド名を持つ SongConfig JSON から生成します
-o, --output FILE主出力ファイルのパスを指定しますoutput.mid
--format FMTMIDI 出力形式(smf1 または smf2、MIDI 2.0 コンテナ)smf1
--skip-vocalBGM 先行ワークフローのためボーカル生成をスキップします無効
--vocal-attitude Nボーカルの態度(0-2: Clean、Expressive、Raw)0
--vocal-low Nボーカル音域の下限(MIDI ノート、36-9660
--vocal-high Nボーカル音域の上限(MIDI ノート、36-9679

--duration は 12〜144 小節の曲構成を対象にします。フォームが生成できる長さは解決されたテンポで決まります。生成できない目標値は拒否されるか、生成可能な値に調整され、その結果が表示されます。

モーラリズムとメロディのシンコペーション確率などの設定は、SongConfig JSON の mora_rhythm_modemelody_syncopation_prob フィールドで指定します。ギターはデフォルトで有効です。無効にする場合は --no-guitar を使います。

ボーカルパラメータ

ボーカルだけの再生成は CLI では行えません。--regenerate FILE は入力ファイルに埋め込まれた完全な設定を復元し、生成オプションとの併用を拒否します。新しい SongConfig--config で渡すか、ボーカルだけを再生成する場合は native API を使います。

ボーカルスタイル ID は次のとおりです。

IDスタイル
0Auto
1Standard
2Vocaloid
3UltraVocaloid
4Idol
5Ballad
6Rock
7CityPop
8Anime
9BrightKira
10CoolSynth
11CuteAffected
12PowerfulShout
13KPop

メロディオーバーライド

フラグ説明デフォルト
--melody-max-leap Nメロディの最大跳躍(半音、0 はプリセット、1-12 は上書き)プリセット
--melody-phrase-length Nフレーズ長(小節、0 はプリセット、1-8 は上書き)プリセット
--melody-long-note-ratio N長音比率(0-100)。省略するとプリセットを使いますプリセット
--melody-chorus-register-shift Nサビの音域シフト(-1212)。省略するとプリセットを使いますプリセット
--melody-hook-repetition Nフックの繰り返し(0 はプリセット、1 はオフ、2 はオン)プリセット
--melody-use-leading-tone N導音(0 はプリセット、1 はオフ、2 はオン)プリセット

melody_syncopation_probSongConfig JSON で 0-100 または 255(プリセット)に設定できます。CLI オプションではありません。

モチーフオーバーライド

フラグ説明デフォルト
--motif-length Nモチーフ長(小節、0 は自動、1240(自動)
--motif-note-count Nモチーフ音数(0 は自動、3-80(自動)
--motif-motion Nモチーフの動き(255 はプリセット、0 Stepwise、1 GentleLeap、2 WideLeap、3 NarrowStep、4 Disjunct、5 Ostinato)プリセット
--motif-register-high Nモチーフ音域(0 は自動、1 は低音域、2 は高音域)0(自動)
--motif-rhythm-density Nモチーフのリズム密度(255 はプリセット、0 Sparse、1 Medium、2 Driving)プリセット

追加の生成コントロール

フラグ説明
--addictiveBehavioral Loop モードを有効にします
--arpeggioアルペジオトラックを有効にします
--modulation N転調タイミング(0 None、1 LastChorus、2 AfterBridge、3 EachChorus、4 Random)
--composition N作曲スタイル(0 MelodyLead、1 BackgroundMotif、2 SynthDriven)
--enable-sussus2/sus4 コード置換を有効にします
--enable-9th9th コード拡張を有効にします
--syncopationメロディリズムのシンコペーションを有効にします
--drive Nドライブ感(0 レイドバック、50 ニュートラル、100 アグレッシブ)
--no-drumsドラムトラックを無効にします
--no-guitarギタートラックを無効にします
--vocal-groove Nボーカルグルーヴ(0 Straight、1 OffBeat、2 Swing、3 Syncopated、4 Driving16th、5 Bouncy8th)
--melodic-complexity Nメロディの複雑さ(0 Simple、1 Standard、2 Complex)
--hook-intensity Nフックの強さ(0 Off、1 Light、2 Normal、3 Strong、4 Maximum)
--melody-template Nメロディテンプレート(0 Auto、1-7
--arrangement Nアレンジの成長方法(0 LayerAdd、1 RegisterAdd)
--motif-repeat-scope Nモチーフの繰り返し範囲(0 FullSong、1 PerSection)
--energy-curve Nエネルギーカーブ(0 GradualBuild、1 FrontLoaded、2 WavePattern、3 SteadyState)

ヒューマナイズ

フラグ説明
--humanizeタイミングとベロシティのヒューマナイズを有効にします
--humanize-timing Nタイミングの変動量(0-100)。ヒューマナイズも有効になります
--humanize-velocity Nベロシティの変動量(0-100)。ヒューマナイズも有効になります

アルペジオ

これらのオプションは --arpeggio と組み合わせます。パターンまたは速度を指定すると、アルペジオトラックも有効になります。

フラグ説明
--arpeggio-pattern Nパターン(0 Up、1 Down、2 UpDown、3 Random、4 Pinwheel、5 PedalRoot、6 Alberti、7 BrokenChord)
--arpeggio-speed N速度(0 Eighth、1 Sixteenth、2 Triplet)
--arpeggio-octave Nオクターブ範囲(1-3
--arpeggio-gate Nゲート量(0-100

SE、コール、MIX

フラグ説明
--no-seSE トラックを無効にします
--call Nコール設定(0 Auto、1 Enabled、2 Disabled)
--no-call-notesコールノートの出力を無効にします
--intro-chant Nイントロチャント(0 None、1 Gachikoi、2 Shouting)
--mix-pattern NMIX パターン(0 None、1 Standard、2 Tiger)
--call-density Nコール密度(0 None、1 Minimal、2 Standard、3 Intense)

コード拡張と転調

フラグ説明
--enable-7th7th コード拡張を有効にします
--enable-tritone-subトライトーン代理を有効にします
--modulation-semitones N転調量(1-4 半音)

ファイル操作

フラグ説明
--input FILE既存の MIDI ファイルを分析します。--analyze も有効になります
--validate FILEMIDI ファイルの構造を検証します
--regenerate FILE埋め込みの midi-sketch メタデータから再生成します
--new-seed N--regenerate で新しいシードを使います(0 も有効です)
--format FMTsmf1 または smf2(MIDI 2.0 コンテナ)を選びます。再生成時に省略すると入力形式を保持します
-o, --output FILE生成または再生成する MIDI のパスを指定します

--regenerate で入力パスと組み合わせられるのは --new-seed--format--output--analyze--json--bar--dump-collisions-at だけです。生成オプションを指定すると拒否されます。SMF1、SMF2 Clip、対応している SMF2 コンテナ形式を検出し、埋め込み設定を復元します。

デフォルトの出力形式は SMF1 です。--input の不協和音分析は現在 SMF1 に対応しています。SMF2 の入力は認識され、メタデータを表示できますが、不協和音分析とノート検査には対応していません。--validate は SMF1、SMF2 Clip、対応している ktmidi コンテナに対応しています。SMF2CON1 の検証には対応していません。

分析とデバッグ

フラグ説明
--analyze生成または入力 MIDI の不協和音を分析します
--json検証または分析の JSON を stdout に出力します
--bar Nバー N(1 始まり)のノートを検査します。ノート検査は SMF1 で利用できます
--dump-collisions-at Nティック N のノートと衝突状態を出力します
--help, -hバイナリが表示するコマンドリファレンスを表示します

--analyze --json を指定すると、stdout には分析ドキュメントだけが出力されます。生成された MIDI とイベントのサイドカーは通常どおり書き出されます。--validate --json または --input --json では、対応する JSON レポートだけが stdout に出力されます。--analyze--validate なしの --json は、通常の生成出力を JSON に切り替えません。

SongConfig JSON

--configSongConfig JSON オブジェクトを読み込みます。フィールド名は snake_case で、arpeggiochord_extension のネストしたオブジェクトも native の設定型と同じ名前を使います。CLI オプションがない設定項目はこの JSON で指定します。

json
{
  "style_preset_id": 3,
  "seed": 12345,
  "bpm": 120,
  "guitar_enabled": false,
  "enable_syncopation": true,
  "mora_rhythm_mode": 1,
  "melody_syncopation_prob": 60,
  "arpeggio_enabled": true,
  "arpeggio": {
    "pattern": 0,
    "speed": 1,
    "octave_range": 2,
    "gate": 0.8
  }
}
bash
./build/bin/midisketch_cli --config song-config.json -o configured.mid

不協和音分析

--analyze は次の 4 種類の問題を報告します。

タイプ説明通常の重大度
SimultaneousClash短 2 度や長 7 度など、不協和音程のノートが同時に鳴ります
NonChordTone現在のコードに含まれないノートです低〜中
SustainedOverChordChangeコードチェンジをまたいでノートが保持されます
NonDiatonicNoteキーのスケール外のノートです

テキストレポートは検出結果を CRITICALWARNINGINFO に分類します。高い重大度の同時衝突とノンダイアトニックノートは Critical に分類されます。経過音や刺繍音は情報レベルのテンションとして表示される場合があります。

出力例

=== Dissonance Analysis ===

Action Summary:
  INFO:     47 normal musical tensions (no action needed)

Technical Breakdown:
  Simultaneous clashes:      0
  Non-chord tones:           47 (usually acceptable)
  Sustained over chord:      0
  Non-diatonic notes:        0

JSON 出力

機械可読な出力には --json を使用します。

bash
./build/bin/midisketch_cli --input song.mid --json > analysis.json

レポートには summary オブジェクトと issues 配列が含まれます。summary には問題数、キー、転調情報が含まれます。各問題には typeseveritytickbarbeat が含まれ、衝突の場合は音程とノートの情報も含まれます。次の例は固定シードで実行した結果の抜粋で、問題は先頭の 1 件だけを示しています。

json
{
  "summary": {
    "total_issues": 47,
    "simultaneous_clashes": 0,
    "non_chord_tones": 47,
    "sustained_over_chord_change": 0,
    "non_diatonic_notes": 0,
    "high_severity": 0,
    "medium_severity": 2,
    "low_severity": 45,
    "key": 0,
    "key_name": "C major",
    "modulation_tick": 0,
    "modulation_amount": 0,
    "pre_modulation_issues": 47,
    "post_modulation_issues": 0
  },
  "issues": [
    {
      "type": "non_chord_tone",
      "severity": "low",
      "tick": 6720,
      "bar": 4,
      "beat": 3.00,
      "track": "motif",
      "pitch": 62,
      "pitch_name": "D4",
      "chord_degree": 2,
      "chord_name": "Em",
      "chord_tones": ["E", "G", "B"],
      "provenance": {
        "generation_chord_degree": 2,
        "generation_lookup_tick": 6720,
        "generation_source": "motif",
        "original_pitch": 60
      }
    }
  ]
}

バー検査

--bar N は、バー内のノートをトラックごとに表示します。SMF1 の入力と SMF1 で生成した出力で利用できます。

bash
./build/bin/midisketch_cli --input song.mid --bar 4

出力形式(固定シードのSMF1実行からの抜粋。値は入力に依存します):

=== Bar 4 (tick 5760-7680) ===

Chord:
  beat 1.0: G3 (240 tick)
  beat 1.0: B3 (240 tick)
  beat 1.0: E4 (240 tick)
  beat 1.5: G3 (240 tick)
  beat 2.0: G3 (240 tick)
  beat 2.5: G3 (240 tick)
  beat 3.0: E3 (240 tick)
  beat 3.0: G3 (240 tick)
  beat 3.0: B3 (240 tick)
  beat 3.5: G3 (240 tick)
  beat 4.0: G3 (240 tick)
  beat 4.5: G3 (240 tick)

Motif:
  beat 1.0: G4 (1 beat)
  beat 3.0: D4 (1 beat)

Aux:
  beat 1.0: B4 (1 beat)
  beat 3.0: B4 (1 beat)

Drums:
  beat 1.0: G#2 (240 tick)
  beat 1.0: D#3 (240 tick)
  beat 2.0: C#2 (240 tick)
  beat 2.0: G#2 (240 tick)
  beat 3.0: G#2 (240 tick)
  beat 4.0: C#2 (240 tick)
  beat 4.0: G#2 (240 tick)

前のバーで発音を開始したノートは、ビート番号なしで (sustained) と表示されます。

Vocal:
  → A4 (sustained)
  beat 2.5: G4 (1 beat)

MIDI 再生成

MIDI ファイルに埋め込まれた midi-sketch メタデータから再生成します。

bash
# 埋め込みシードを使い、regenerated.mid に書き出します。
./build/bin/midisketch_cli --regenerate song.mid

# 新しいシードと出力パスを指定します。
./build/bin/midisketch_cli --regenerate song.mid --new-seed 54321 -o variant.mid

CLI は SMF1 と対応する SMF2 形式を検出し、埋め込み SongConfig を復元して MIDI を書き出します。--format を省略すると、入力の SMF1 または SMF2 系の形式を保持します。出力形式を明示する場合は --format smf1 または --format smf2 を指定します。

Blueprint パラメータ

IDBlueprint
0Traditional
1RhythmLock
2StoryPop
3Ballad
4IdolStandard
5IdolHyper
6IdolKawaii
7IdolCoolPop
8IdolEmo
9BehavioralLoop
255ランダム選択

Blueprint は名前または ID で指定できます。

bash
./build/bin/midisketch_cli --blueprint rhythmlock
./build/bin/midisketch_cli --blueprint ballad

ワークフロー例

BGM のみの生成

ボーカルトラックをスキップして伴奏を生成します。後からボーカルトラックを追加または修正する場合は、ライブラリAPI、たとえばJavaScriptの regenerateVocal メソッドを使います。CLI の --regenerate は埋め込み設定を再現するだけで、ボーカルを追加しません。

bash
# BGM だけを生成します。
./build/bin/midisketch_cli --style 5 --skip-vocal -o bgm.mid

# 埋め込み設定を別のファイルに再生成します。
./build/bin/midisketch_cli --regenerate bgm.mid -o bgm-regenerated.mid

高度な生成

bash
# ギターはデフォルトで有効です。ドライブ感とエネルギーを指定します。
./build/bin/midisketch_cli --style 6 --drive 80 --energy-curve 1

# K-Pop ボーカル、シンコペーション、Behavioral Loop モードで生成します。
./build/bin/midisketch_cli --style 0 --vocal-style 13 --syncopation --addictive

# メロディとモチーフを上書きします。
./build/bin/midisketch_cli --style 3 --melody-max-leap 7 --melody-chorus-register-shift 4 \
  --motif-motion 2 --motif-rhythm-density 2

# ギターとドラムを無効にし、タイミングとベロシティをヒューマナイズします。
./build/bin/midisketch_cli --style 0 --no-guitar --no-drums --humanize-timing 25 \
  --humanize-velocity 20

品質イテレーション

bash
# 生成して分析します。
./build/bin/midisketch_cli --seed 12345 --analyze

# レポートを改善する場合は別のシードを試します。
./build/bin/midisketch_cli --seed 12346 --analyze

# 対応している生成パラメータを調整します。
./build/bin/midisketch_cli --seed 12345 --vocal-attitude 0 --analyze

バッチ分析

bash
for f in *.mid; do
  echo "=== $f ==="
  ./build/bin/midisketch_cli --input "$f" --json | jq '.summary'
done

出力ファイル

生成では MIDI ファイルとイベント JSON のサイドカーを作成します。

実行方法ファイル
--output なしoutput.midoutput.json
--output song.midsong.midsong.mid.json
生成時に --analyze を指定し、--json を指定しない場合analysis.json を追加。出力を指定した場合は song.mid.analysis.json

再生成ではデフォルトで regenerated.mid を作成し、イベントサイドカーは作成しません。--analyze--json なしを指定すると、レポートは analysis.json に書き出されます。出力を指定した場合は <output>.analysis.json になります。--json --analyze では、分析レポートをサイドカーの代わりに stdout へ出力します。

--input では、--json なしで --output report.json を指定すると分析レポートのパスになります。--validate はテキストまたは JSON のレポートを stdout に出力します。

音程リファレンス

分析では、評価対象のノートとコードの関係を考慮し、実際の半音距離で音程を分類します。コードボイシング、準備されたサスペンション、経過音の長さ、メトリック位置によって検出や重大度が変わります。24 半音を超える距離は通常スキップされますが、低音域のベースと長 7 度の組み合わせは例外です。次の表は一般的な音程名を示します。音程名だけで検出結果が決まるわけではありません。

半音数名称通常の扱い
1短 2 度 (minor 2nd)高リスクの衝突候補
2長 2 度 (major 2nd)文脈に依存。近接した音程は高い重大度になる場合があります
3短 3 度 (minor 3rd)通常は協和音程
4長 3 度 (major 3rd)通常は協和音程
5完全 4 度 (perfect 4th)文脈に依存
6トライトーン (tritone)文脈に依存。近接した音程は中程度の重大度です
7完全 5 度 (perfect 5th)通常は協和音程
8短 6 度 (minor 6th)通常は協和音程
9長 6 度 (major 6th)通常は協和音程
10短 7 度 (minor 7th)カラートーンとして許容される場合があります
11長 7 度 (major 7th)文脈に依存。近接した音程は中〜高の重大度になる場合があります

複音程は実際の距離で評価されます。たとえば 13 半音は短 9 度、18 または 30 半音はトライトーン、23 または 35 半音は長 7 度です。複音程の長 7 度は、近接した長 7 度より重大度が低くなる場合があります。