Skip to content

第7章 — 概念と設定の対応

このコースのすべての概念は、ひとつの構造体上のつまみです。この総仕上げの章では、コース全体をルックアップ表に集約します。左に概念、右に対応する SongConfig のフィールドを並べます。読み終える頃には、どんな音楽的意図も設定オブジェクトに翻訳でき、その結果をバイト単位で再現できるようになります。

1つのアイデア、多くの設定

このコースの中心的な主張は、曲のアイデアはそれをレンダリングするパラメータから独立している、ということです。メロディの形・コード進行・キーは直交したつまみで、ひとつを変えても他は生き残ります。下の譜例は、同じフックを I–V の動きの上で、まずCで、次にDへ移調してレンダリングしたものです。アイデアは同一で、変わったのは key だけです。

総仕上げ1つのアイデアを2つのキーで:すべては設定
同じI-V上のフックを、Cと(key: 0)とD(key: 2)でレンダリングしたものです。このコースの全概念はSongConfigのフィールドに対応します。キー、進行、構成、エクステンション確率を選び、同じseedを使えば同じ曲が再現されます。
keyseedchordProgressionIdメロディの形・コード・キーは独立したつまみです。曲のアイデアはどれを変えても生き残ります。

ブループリント

ブループリントとは、生成戦略と適切なデフォルト(パラダイム、ドラム方針、フックの挙動、編曲の重み)をひとまとめにした高レベルのレシピです。blueprintId を選ぶことが、まとまりのある楽曲を最短で得る方法で、その後に個々のフィールドを上書きします。MidiSketchには10種類のブループリント(blueprintId 0〜9)があり、255 を指定すると重みに従ってランダムに選びます。

生成パラダイム

パラダイムとは、エンジンが楽曲を組み立てる際の軸です。Traditional はボーカルを最初に生成し、RhythmSync はリズムのモチーフを最初に組み、MelodyDriven はすべてをメロディ中心に据えます。各ブループリントはひとつのパラダイムを採用し、それがどのトラックを主導とし、どのトラックが従うかを決めます。

シード

シードとは、乱数生成器を初期化する整数です。同じ設定と同じ seed は、同じ楽曲をビット単位で再現します。エンジンは決定的です。毎回新しいランダムな楽曲が欲しければ seed: 0 を、残しておきたい結果を固定したければ任意の非ゼロ値を使ってください。

ヒューマナイズ

ヒューマナイズは、タイミングとベロシティに小さく制御された揺れを加え、出力をクオンタイズされたものではなく演奏されたように聞こえさせます。humanizeTiming(デフォルト 0.4)はノートの発音位置をずらし、humanizeVelocity(デフォルト 0.3)は音量を変化させます。どちらも 0.01.0 で、大きいほど緩く、0.0 は機械的に正確です。

章ごとの対応

下の表はコースを章ごとに対応づけたものです。本文を一度読んだ後に立ち返るリファレンスとして扱ってください。

第0章 — 基礎(音高・時間・テンポ)

概念設定フィールド範囲・備考
主音のピッチクラスkey0110 = C、7 = G)
再生テンポbpm402400 = スタイル既定
メロディの最低音vocalLowMIDI番号、既定 60(C4)
メロディの最高音vocalHighMIDI番号、既定 79(G5)

第1章 — スケールとキー

概念設定フィールド範囲・備考
キー / 主音key011
全体のムード(スケールの色を選ぶ)mood023;正確に適用するには moodExplicit: true

第2章 — コードとトライアド

概念設定フィールド範囲・備考
分散和音の質感arpeggioEnabled / arpeggioPattern真偽値;パターン 07(Up 〜 BrokenChord)
スタイルプリセット(コード・メロディの既定値をまとめて設定)stylePresetId016(例:3 = Idol Standard、12 = Background Motif、14 = Anime Opening)

第3章 — コード進行

概念設定フィールド範囲・備考
コード進行のプリセットchordProgressionId021(22種類の進行)

第4章 — ハーモニーと響きの色

概念設定フィールド範囲・備考
susコードchordExtSus / chordExtSusProbフラグ+確率 0.01.0(既定 0.2
7thコードchordExt7th / chordExt7thProbフラグ+確率 0.01.0(既定 0.15
9thコードchordExt9th / chordExt9thProbフラグ+確率 0.01.0(既定 0.25
トライトーン代理chordExtTritoneSub / chordExtTritoneSubProbフラグ+確率 0.01.0(既定 0.5

第5章 — メロディ・モチーフ・フック

概念設定フィールド範囲・備考
フックの強さhookIntensity044 = Maximum、BehavioralLoop で設定)
ボーカルの歌い回しvocalStyle0130 = Auto、13 = KPop)
メロディテンプレートmelodyTemplate0 = Auto、17
コール&レスポンスcallSetting0 = Auto、1 = 有効、2 = 無効

第6章 — 楽曲構成

概念設定フィールド範囲・備考
楽曲フォームのプリセットformId017
フォームをそのまま使うformExplicittrue / false
目標の長さ(自動構築)targetDurationSeconds秒;0 = formId を使用

ブループリント一覧

blueprintId を選ぶと、パラダイム・ドラム方針・編曲の重みが一手に設定されます。重みの列は blueprintId: 255(ランダム)のときの選択確率です。9 は重みが0で、明示的に指定したときだけ到達できます。

IDブループリントパラダイムドラム必須重み
0TraditionalTraditionalいいえ42%
1RhythmLockRhythmSyncはい14%
2StoryPopMelodyDrivenいいえ10%
3BalladMelodyDrivenいいえ4%
4IdolStandardMelodyDrivenいいえ10%
5IdolHyperRhythmSyncはい6%
6IdolKawaiiMelodyDrivenいいえ5%
7IdolCoolPopRhythmSyncはい5%
8IdolEmoMelodyDrivenいいえ4%
9BehavioralLoopTraditionalいいえ0%(明示指定のみ)

ドラム必須のブループリント(157)はドラムトラックを強制します。実行時には getBlueprintDrumsRequired(id) で問い合わせられます。BehavioralLoop(9)はアディクティブモードを強制し、hookIntensity を Maximum にし、リフをロックします。

最小レシピ

つまみを組み合わせれば、完全で再現可能な楽曲が数行で書けます。

javascript
const config = createDefaultConfig(0)
config.key = 7                 // G major (ch1)
config.chordProgressionId = 0  // preset progression (ch3)
config.chordExt7th = true      // mellow color (ch4)
config.hookIntensity = 3       // strong hook (ch5)
config.seed = 42               // reproducible
sketch.generateFromConfig(config)

生成の前に validateConfig(config) を呼び、すべてのフィールドが範囲内かを確認してください。値が範囲外ならエラーコードを返すので、拒否された生成のデバッグを省けます。

生成される9つのトラック(Vocal ch0、Chord ch1、Bass ch2、Motif ch3、Arpeggio ch4、Aux ch5、Guitar ch6、Drums ch9、SE ch15)のうち、ギタートラックは既定で有効です(guitarEnabled: true)。

よくある落とし穴 — いくつかの値は明示フラグがないと効かない

設定した値は、対になるフラグが立っていないと黙って無視されます。mood には moodExplicitchordExt*Prob には chordExtProbExplicitformId を正確に尊重させるには formExplicit、ドラムの状態には drumsEnabledExplicit が必要です。設定が「効かない」ときは、まず対応する *Explicit フラグを確認してください。生成の前に必ず validateConfig(config) を実行してください。範囲外のフィールドはクランプされず、生成全体が拒否されます。

MidiSketchとの対応

概念設定フィールド範囲・備考
生成レシピblueprintId09、または 255 = 重みでランダム
再現性seed整数;0 = ランダム、非ゼロ = 固定
タイミングの緩さhumanizeTiming0.01.0(既定 0.4
ベロシティの緩さhumanizeVelocity0.01.0(既定 0.3
事前チェックvalidateConfig(config)フィールドが範囲外ならエラーコードを返す

フィールドの全一覧と実行時の挙動については、オプションの相互関係プリセットリファレンスを参照してください。

はじめにJavaScript APIで実践に移すか、用語は用語集で調べてください。