Skip to content

オプション関係 ​

MIDI Sketch Bach の設定オプションは特定の方法で相互に作用します。これらの関係を理解することで、望む結果を生む設定を作成する助けになります。

オプションには二つの層があります

form、isMinor、character は内部の作曲結果に影響します。character は完成した出力の音符のアーティキュレーションと MIDI CC プロファイルにも影響します。key はその結果を出力時に移調し、instrument、bpm、seed はレンダリングや再現性に関わります。このページで使う音楽用語はエンジニアのための音楽用語入門で説明しています。

依存関係の概要 ​

どのオプションが何を決めるか設定は 2 つの帯に分かれます。上の帯の form・character・isMinor・seed は、作曲される音そのものを変えます。あわせて、形式によっては特定の性格が拒否されることも示しています。下の帯では key が出力の移調とメタデータを決めます。instrument と bpm は後段の実現処理にも入り、instrument は装飾密度・出力音域・音色番号に、bpm はトリルの刻み方とテンポイベントに影響します。音そのものを変える作曲の前と作曲中に読まれるform声部数・拍子・自然な長さ、そして形式レイアウト全体を決めるcharacter主題素材・アーティキュレーション・MIDI レベルに影響する — 音程・勢い・線の形isMinor内部の C 長調/C 短調どちらの和声プランを使うかを選ぶseed乱数を初期化する。0 なら非ゼロの値が抽かれ、getInfo().seedUsed に入る形式が性格を拒むことがある。chorale_prelude は playful と restless を、toccata_and_fugue は noble を受け付けない装飾・演奏・出力後段の処理で解決されるkeyMIDI と getEvents() の音高を移調し、出力調のメタデータを与えるinstrument装飾密度と音域上限を決め、後段で GM 音色番号と出力音域を設定するbpmトリルの刻み方とテンポイベントを決める。0 は既定の 100 を意味する2 つのオプションが協力して決めるのは長さだけ。scale と targetBars はそれ専用の解決の流れを持つ。

声部数は形式が決定 ​

form は最も影響力のあるオプションです。声部数・拍子・基準長を固定し、既定の instrument を選択します。

形式を選ぶことが、テクスチャを選ぶこと3 つの形式を声部レーンとして並べています。フーガは 3 レーンで、主題提示がずれて並び、その合間にエピソードが入ります。チェロ前奏曲は 1 本の連続した線だけです。シャコンヌは V0 変奏・V1 冒頭で休み、音域をきれいに配置できない小節や周期でも休む中声・V2 グラウンドの 3 レーンを宣言します。各カードには声部数・拍子・長さと、その形式が受け付ける楽器も示しています。form: 'fugue'3 声、主題提示をずらして重ねる3 声 · 4/4基準 42 小節 → 出力 44 小節オルガン — 受け付ける唯一の楽器form: 'cello_prelude'途切れない 1 本の線1 声 · 4/48 小節、丸めは不要チェロ — 受け付ける唯一の楽器form: 'chaconne'V0 変奏・V1 中声・V2 グラウンド3 声 · 3/4、V1 は小節で休むことがある16 小節、3 拍子ヴァイオリン — 受け付ける唯一の楽器声部数のオプションはない。numVoices と num_voices は互換のために受け付けるだけで、無視される。

numVoices は廃止されました

声部数オプションは存在しません — テクスチュアを選ぶには形式を選びます(楽曲形式の表を参照)。後方互換のため num_voices/numVoices の指定は受理されますが無視されます。エラーにはならず、効果もありません。

既定の連鎖 ​

形式を指定すると、エンジンが未指定フィールドを補完します。

js
// 指定内容:
generator.generate({ form: 'fugue', key: 2, isMinor: true })

// エンジンが解決する値:
// {
//   form: 'fugue',
//   key: 2,
//   isMinor: true,
//   instrument: 'organ',  ← 形式既定
//   bpm: 100,             ← 既定
//   seed: 0,              ← ランダム(解決済みシードは getInfo().seedUsed)
//   character: 'severe',  ← 既定
//   scale: 'short',       ← 既定(≒ 基準長)
// }
// 声部数(3)、拍子(4/4)、基準長(42小節)は形式から決まります。
// 4小節刻みにスナップされ、既定の出力は44小節になります。

明示的に設定したフィールドは既定を上書きします。

js
// BPMと長さを上書き
generator.generate({
  form: 'fugue',
  bpm: 72,          // 既定の100を上書き
  scale: 'medium'   // 既定の'short'を上書き
})

形式ごとの声部数は楽曲形式の表を、完全な既定テーブルはプリセット一覧をご覧ください。

楽器は形式が決める ​

各形式は特定の楽器のために書かれており、エンジンはその形式が想定する楽器しか受け付けません。

形式既定楽器他に選べる楽器
fugue、prelude_and_fugue、trio_sonata、chorale_prelude、toccata_and_fugue、passacaglia、fantasia_and_fugueオルガン--
cello_preludeチェロ--
chaconneヴァイオリン--
goldberg_variationsチェンバロピアノ

instrument の選択は、General MIDI プログラム、完成した出力を収める演奏可能音域、装飾処理の装飾密度に影響します。各形式には互換楽器が明示的に定義されています。その範囲外の楽器を指定すると例外になり、不明な楽器文字列も同様です。

TIP

実際に選択肢があるのはゴルトベルク変奏曲だけです。harpsichord は歯切れのよい発音で変奏のテクスチュアを見通しよく保ち、piano は同じ素材をより暖かく持続的に響かせます。

楽譜全体のオクターブ移動によって出力は楽器の音域内に収められます。音域から外れた音を個別に丸め込むのではなく、曲全体をオクターブ単位でずらすため、内部の声部進行はそのまま保たれます。

scale と targetBars ​

scale と targetBars はどちらも出力の長さを設定します。scale は形式の基準長に対する倍率です。targetBars: 0 は scale を使い、正の targetBars は明示的な上書きです。targetBars の指定値は 0〜128 を推奨します。API は 65535 までの整数を受け付けますが、上限付近の大きな値は小節数を揃える計算で桁あふれし、形式の最小長に戻ることがあります。

出力の長さが決まるまで4 つの値の連なりです。形式の自然な長さに scale を掛けて素の目標値を出し、それを形式固有の小節グリッドに丸め、丸めた値を形式の最小値と 128 の範囲に収めます。targetBars が 0 なら scale を使い、正の値なら scale を上書きして素の目標値の段階に入ります。そのあとの丸めと範囲制限は同じように通ります。ゴルトベルクの full で正の targetBars を指定しない場合だけは、自然長 20 小節の単純な 4 倍ではなく完全な 128 小節レイアウトを選びます。下段はフーガでの実例です。自然な長さ形式が持つ基準の小節数。フーガなら 42 小節× scale素の目標値short 約 1 倍、medium 約 2 倍、long 約 3 倍、full 約 4 倍*丸め丸めた値形式固有の小節グリッドに合わせる(低音主題の周期など)収める出力の小節数形式の最小値と 128 の範囲に収める。128 を超える形式はないtargetBars正の値が優先、0 は scale を使うフーガでの実例自然な長さ 42 小節、グリッドの刻みは 4 · * ゴルトベルクの full(正の targetBars なし)→ 128 小節指定素の値丸め後出力scale: 'short'42 × 1 = 424444scale: 'long'42 × 3 = 126128128targetBars: 48484848ゴルトベルクの full を除き、どちらの経路も同じ丸めと範囲制限を通る。だから targetBars は長さの「要求」であって、「保証」ではない。
設定動作
scale のみ長さ = 形式の基準長 × スケール倍率
targetBars: 0scale を使う(0 は明示的な上書きなしを示す)
正の targetBarsその小節数を目標とし、scale を無視
両方指定targetBars が正なら優先;scale は無視
どちらも未指定既定: scale: "short"(≒ 基準長)

スケール倍率はおおよそ short ≒ 1倍、medium ≒ 2倍、long ≒ 3倍、full ≒ 4倍です。ゴルトベルク変奏曲だけは例外で、scale: "full" で正の targetBars を指定しない場合は、20 × 4 = 80 小節ではなく、完全な圧縮レイアウトである 128 小節を選びます。

TIP

正の値は形式の刻み(グラウンドバスの周期など)にスナップされ、[形式の最小値, 128] に丸め込まれます。すべての形式は128小節で上限となります。一般的なサイズカテゴリには scale、特定の長さには targetBars を使用してください。

js
// 形式の基準長の倍率で長さを指定
generator.generate({ form: 'fugue', scale: 'long' })   // 42 × 3 = 126、128小節へスナップ

// 特定の長さ(スナップ・丸め込みあり)
generator.generate({ form: 'fugue', targetBars: 48 })

// 両方指定時はtargetBarsが優先
generator.generate({
  form: 'fugue',
  scale: 'short',      // 無視される
  targetBars: 48        // これが使用される
})

シードの動作 ​

seed パラメータは決定論的出力を制御します。

シード値動作
0(既定)非ゼロのランダムシードが選ばれ、解決値は getInfo().seedUsed で報告
正の整数決定論的 — 同じ設定 + 同じシード = バイト単位で同一の出力

ランダム実行の再現

seed: 0 の実行後に getInfo().seedUsed を読み取り、それを seed として渡し直すと、まったく同じ楽曲を再生成できます。

再現性

決定論的再現には同じバージョンのMIDI Sketch Bachが必要です。内部アルゴリズムはバージョン間で変更される可能性があるため、アップグレード後に同じシードが異なる出力を生成する場合があります。特定の出力を保存する必要がある場合は、バージョン間のシード再現性に頼るのではなく、生成されたMIDI ファイルを保存してください。

js
// 毎回ランダム
generator.generate({ form: 'fugue', seed: 0 })

// 常に同じ結果
generator.generate({ form: 'fugue', key: 2, isMinor: true, seed: 42 })

// key を変えると MIDI/getEvents は移調されるが、内部の generated.v1 は同じ
generator.generate({ form: 'fugue', key: 0, isMinor: true, seed: 42 })

調と旋法 ​

エンジンは内部で C を基準に作曲します。isMinor は内部の C 長調または C 短調の和声プランを選びますが、key はそのプランを変更しません。key は完成した MIDI と getEvents() のノートピッチを移調し、出力調のメタデータを設定します。

調中心

調中心は、出力を聴いたときに「帰る場所」のように聞こえる音です。key がそのピッチクラスを選び、isMinor が内部の作曲プランと出力調の表記を長調にするか短調にするかを選びます。

js
// ニ長調
generator.generate({ key: 2, isMinor: false })

// ニ短調 — ピッチクラスでも正式名でも指定できる
generator.generate({ key: 2, isMinor: true })
generator.generate({ key: 'D', isMinor: true })
パラメータ範囲既定
key0--11(ピッチクラス)または正式名("C"、"C#"、"D"、"Eb"、"E"、"F"、"F#"、"G"、"Ab"、"A"、"Bb"、"B")0(C)
isMinortrue / falsefalse(長調)

名前は完全一致で照合されるため、"g" と "Db" はどちらも例外になります。受け付ける綴りは getKeys() で列挙できます。

key だけを変えると、出力の移調と調のメタデータが変わります。和声語彙や転調プランは変わらないため、形式・旋法・性格・シードが同じなら、getGenerated() は同じ内部 C のピッチを返します。getEvents() は移調後の出力調のピッチを返します。

性格と形式 ​

character パラメータ(severe、playful、noble、restless)は主要な主題素材を形作ります。影響は形式により異なり、一部の組み合わせは禁止されています。

character はジャンルではありません

character は、主題や主要素材の旋律傾向を変えます。音程の大きさ、リズムの活発さ、半音階的な傾向、旋律の輪郭などです。さらに、すべての形式で音符のアーティキュレーションと MIDI CC プロファイルも変わります。cello_prelude では、小節ごとに使う音型パレットの順序も変わります。楽器ごとの表現出力は楽器を参照してください。形式そのものを切り替える設定ではありません。restless なフーガも、形式としてはフーガです。

形式タイプ性格の影響
フーガ系形式(fugue、prelude_and_fugue、toccata_and_fugue、fantasia_and_fugue)強い — フーガ主題を直接形作り、楽曲全体を定義
変奏形式(passacaglia、chaconne、goldberg_variations)中程度 — 固定バス上の変奏に色付け
コラール前奏曲中程度 — 対位法声部に影響、定旋律は固定
トリオ・ソナタ中程度 — 上声部の動機素材を形作る
チェロ前奏曲中程度 — 音型パターンに影響

禁止された性格と形式の組み合わせ(例外を投げます)

  • chorale_prelude は playful と restless を拒否します。
  • toccata_and_fugue は noble を拒否します。

禁止された組み合わせを要求すると、暗黙的に性格を差し替えるのではなく例外を投げます。

TIP

severe はほとんどの状況で堅実な既定です。トッカータとフーガには restless を、コラール前奏曲には noble を試してみてください。

検証ルール ​

すべての設定フィールドの完全な検証制約。いくつかのフィールドは丸め込みではなく無効入力で例外を投げるようになりました。

config 検証と音楽上の検証

この表は API 設定の検証、つまりオプション値が受理されるかを扱います。対位法や形式構造の失敗は別の音楽上の検証器ルールです。検証器ルール一覧を参照してください。

フィールド型範囲既定検証
formnumber または string0--9 / 名前"fugue"不明な名前・範囲外の番号では例外
keynumber または string0--11 / 正式名0範囲外の番号・不明な名前では例外
isMinorbooleantrue/falsefalseboolean 以外では例外
bpmnumber0 または 40--2001000 は既定値 100を使用;それ以外の範囲外では例外
seednumber0+00 = ランダム;解決値は getInfo().seedUsed
characterstring または number名前 / 0--3"severe"不明な値では例外;禁止された形式の組み合わせでは例外
instrumentstring または number名前 / 0--5形式既定不明な値では例外;その形式が受け付けない楽器でも例外
scalestring または number名前 / 0--3"short"不明な値では例外
targetBarsinteger0--6553500 は scale を使用;正の値は上書き後に形式の刻みへスナップし [最小, 128] に丸め込み
numVoicesnumber----受理されるが無視(声部数は形式が決定)

エラーメッセージは失敗ごとに異なり(Invalid BPM (must be 0 or 40-200)、Incompatible instrument for this form など)、どのフィールドが原因かを判別できます。

Dual-licensed: AGPL-3.0 · commercial licensing available. Generated MIDI is yours to use freely.