Skip to content

ハーモニーとコード進行

MIDI Sketchの和声システムを解説します。

用語が初めての方へ

度数・カデンツ・セカンダリードミナント・トライトーン代理などは、コースのコード進行ハーモニーと色付けの章で、再生できる譜例付きで一から解説しています。

注記

このページでは音楽理論の専門用語を使用しています。これらの概念はシステムが自動的に処理しますが、理解することでより適切なパラメータ選択が可能になります。

音楽理論が初めての方へ

コードやコード進行に馴染みがなければ、まずコースをご覧ください。再生できる譜例つきで基礎から積み上げて解説しています。読んだ後にこのリファレンスへ戻ってくると理解が深まります。

コード進行

MIDI Sketchには一般的なポップミュージックパターンをカバーする22の内蔵コード進行があります。

コード進行とは?

コード進行とは、楽曲の和声的な骨格を形成するコードの連続です。音楽に動きと感情を与えるものです。同じメロディでも、異なるコード進行の上では全く違う印象になります。

4コード進行(ID 0〜19)

内蔵 4 コード進行のうち 3 つ 1 行 1 進行で 3 行並べ、それぞれ 4 つのディグリーを左から右へ矢印でつないでいます。1 行目は id 0 の FourChordPop(I - V - vi - IV、C メジャーでは C - G - Am - F)、2 行目は id 2 の Axis(vi - IV - I - V)、3 行目は id 8 の Minor2(vi - IV - V - I)です。進行表はピッチではなくディグリー番号を保持するため、同じパターンがどのキーにもそのまま移調されます。 C メジャーでの実音 id 0 · FourChordPop I V vi IV C - G - Am - F 最も素直な 4 コードループ。既定値です id 2 · Axis vi IV I V Am - F - C - G 平行短調から始まるため暗く響きます id 8 · Minor2 vi IV V I Am - F - G - C 同じ 4 和音を回して V→I で終わります 進行表はピッチではなくディグリー番号で持つため、同じパターンがどのキーにもそのまま移調されます。4 コードが 20 種、5 コードが 2 種収録されています。

ID は chordProgressionId に指定します。

ID名前ディグリー特徴
0FourChordPopI-V-vi-IV最も素直な4コードループ。デフォルト
1Pop1I-vi-IV-V50年代型ターンアラウンド。V が冒頭へ戻す
2Axisvi-IV-I-V平行短調から始まるため暗く響く
3Pop2IV-I-V-viサブドミナント始まりで、偽終止の V-vi で閉じる
4ClassicI-IV-V-I教科書的な I-IV-V を正格終止で締める
5Pop3I-IV-vi-V明るく始まり vi へ沈み、V を残したまま終わる
6OudouIV-V-iii-vi王道進行。J-POP の定番
7Minor1vi-V-IV-V短調のトニックを軸に IV と V を往復し、解決しない
8Minor2vi-IV-V-IAxis と同じ4和音を回転させ、V-I で終わらせた形
9Pop4I-V-iii-IVFourChordPop の vi を iii に置き換えた、軽く落ち着かない形
10Pop5I-iii-IV-Vスケールを1段ずつ上り、V が I へ押し戻す
11Rock1I-bVII-IV-Iミクソリディアンの bVII。ロックとブルースの響き
12Rock2I-IV-bVII-I同じ bVII の色を IV 経由で出す形
13Extended4I-V-vi-iiiパッヘルベル型の出だしを iii で止めた形
14Minor3vi-I-V-IV短調で始まり、以降はメジャーコードが3つ下降して続く
15AeolianPopvi-bVI-bVII-I借用した bVI と bVII が上行してトニックへ入る
16AnimeHighEnergy1vi-iii-IV-I短調で始まり明るい I へ駆け上がる
17JazzPopii-V-I-viii-V-I のターンアラウンドを vi で開き直す
18AnimeHighEnergy2vi-ii-V-I五度圏をそのまま下ってトニックへ着地
19CityPopI-vi-ii-Vポップループの中に ii-V を折り込んだシティポップのグルーヴ
これらの進行を理解する
  • FourChordPop (I-V-vi-IV): 現代のポップスで最も多用されるループです。馴染みが強く、ほとんどのメロディが無理なく乗ります。
  • Axis (vi-IV-I-V): 同じ和音の集合をマイナーから始めるため、ループ全体がメランコリックに色付きます。エモーショナルなバラードでよく使われます。
  • Minor2 (vi-IV-V-I): 最後の V→I が正格終止なので、短調寄りに始まったループが明るい場所へ着地します。
  • Oudou (IV-V-iii-vi): 王道進行です。トニック以外から始まり vi で終わるため、常に解決しきらない浮遊感が続きます。
  • Rock1 (I-bVII-IV-I): bVII は同主短調からの借用で、ミクソリディアン的なロック/ブルースの風味を加えます。
  • AeolianPop (vi-bVI-bVII-I): 借用和音が2つ続けて上行しトニックへ入る、この中で最もモーダルインターチェンジの効いた進行です。

5コード進行(ID 20〜21)

ID名前ディグリー特徴
20Extended5I-V-vi-iii-IVパッヘルベル由来の拡張形
21NeapolitanPopvi-iv-bII-V-I借用の iv とナポリの bII を経て正格終止へ

全進行リスト

上記の22進行がすべてです。内訳は4コードが20種類、5コードが2種類で、以下をカバーします。

  • 明るい/暗いダイアトニックなポップループ
  • モーダルインターチェンジによる色付け(bVI、bVII、iv、bII)
  • bVII を核にしたロック系のパターン
  • ii-V を含むジャズ寄りのターンアラウンド

ディグリーシステム

ディグリー(度数)とは?

コードディグリー(I, ii, iii, IV, V, vi, vii)は、キー内でのコードの位置を示します。大文字 = メジャーコード、小文字 = マイナーコード。例:Cメジャーでは I = Cメジャー、ii = Dマイナー、V = Gメジャー。

コードディグリーは名前付きの enum ではなく素の整数で表現されるため、進行は単なるディグリー番号の配列です。

ディグリー役割C メジャーでの例
0IトニックC
1ii上主音(スープラトニック)Dm
2iiiメディアントEm
3IVサブドミナントF
4VドミナントG
5viサブメディアントAm
6vii°リーディングトーンBdim
8bVI同主短調からの借用Ab
10bVII同主短調からの借用Bb
11bIII同主短調からの借用Eb
12iv借用した短調のサブドミナントFm
13bIIナポリの和音Db
14#IVdim半音階的な経過和音F#dim

7 と 9 は使用しません。bII はナポリの和音、iv は短調の変格終止 iv-I を作ります。これらは飾りではなく、AeolianPop(15)は bVI と bVII を、NeapolitanPop(21)は iv と bII を実際に出力するため、ディグリーを解釈する側は 6 より大きい値を扱う必要があります。

コードクオリティ

メジャーとマイナー

  • メジャーコードは明るく、ハッピーで安定した響き(C, F, G)
  • マイナーコードは暗く、切なく、感情的な響き(Dm, Em, Am)
  • ディミニッシュコードは緊張感があり不安定(ポップでは稀に使用)

クオリティはディグリーだけで決まります。キーやモードは参照されず、オーギュメントのクオリティは存在しません。

ディグリー番号からコードクオリティが決まるまで 左の getChordQuality はディグリー番号ひとつだけを受け取り、キーもモードも渡されません。右の 3 つのパネルが結果です。メジャーは I・IV・V と借用の bIII・bVI・bVII・bII、マイナーは ii・iii・vi と借用の iv、ディミニッシュは vii と借用の増 4 度上のディミニッシュです。クオリティは 3 種類しかなく、オーギュメントは存在しません。 ダイアトニック 同主短調からの借用 getChordQuality 引数はディグリー 番号ひとつだけです。 キーもモードも参照 しないため、クオリ ティはディグリーだ けで決まります。 クオリティは 3 種類 のみで、オーギュメ ントはありません。 メジャートライアド I · 0 IV · 3 V · 4 bIII · 11 bVI · 8 bVII · 10 bII · 13 マイナートライアド ii · 1 iii · 2 vi · 5 iv · 12 ディミニッシュトライアド vii · 6 #IV° · 14 借用ディグリーのうち収録済みの進行表に実際に現れるのは bVI・bVII・iv・bII だけで、Rock1、Rock2、AeolianPop、NeapolitanPop の 4 つが使います。
cpp
ChordQuality getChordQuality(int8_t degree) {
    // 6 = vii, 14 = #IVdim
    if (degree == 6 || degree == 14) return ChordQuality::Diminished;
    // 1 = ii, 2 = iii, 5 = vi, 12 = 借用の iv
    if (degree == 1 || degree == 2 || degree == 5 || degree == 12) return ChordQuality::Minor;
    // I, IV, V と借用の bVI, bVII, bIII, bII
    return ChordQuality::Major;
}

借用した iv はマイナーです。短3度を持つことこそが借用する理由です。一方 bVI、bVII、bIII、bII はいずれもメジャートライアドになります。

コードエクステンション

エクステンションは基本トライアドに彩りを加える:

エクステンションの使いどころ

  • Susコード: 解決前の緊張感を生み出す。期待感を演出する場面に最適。
  • 7thコード: 洗練さとジャズ感を加える。シティポップやR&Bで一般的。
  • 9thコード: 豊かで複雑なサウンド。最大限の効果のために控えめに使用。

エクステンション確率を高くすると、シティポップ、ジャズ、R&Bスタイルに適しています。シンプルなポップやロックには低めに設定しましょう。

エクステンションタイプ

タイプ追加音例(C)
Triadルート、3度、5度C-E-G
Sus2ルート、2度、5度C-D-G
Sus4ルート、4度、5度C-F-G
7th+ 7度C-E-G-B/Bb
add9+ 9度(7度なし)C-E-G-D
9th+ 7度 + 9度C-E-G-B-D(maj9)/C-E-G-Bb-D(dom9)/C-Eb-G-Bb-D(min9)

エクステンション適用ルール

3 つのエクステンション判定と、その実行順 条件・抽選・結果からなる 3 つのレーンを縦に並べています。sus はコードの度数ではなく小節位置で決まり、セクションの最初か最後から 2 番目の小節、かつ短調以外のコードが対象で、通れば 70% が Sus4、30% が Sus2 です。7th は B かサビのセクション、または V のときに対象となり、V では閾値が 2 倍になります。9th はサビならどのコードでも、B セクションでは V のみが対象です。最初に通った判定がその場で返り、どれも通らなければ三和音のままです。サビのコードは事前に書き換えられる点にも注記があります。 3 つの判定はこの順に走り、最初に通ったものが採用されます。ひとつのコードに 2 つの拡張が付くことはありません 1 · sus セクションの最初、または 最後から 2 番目の小節で、短調以外 roll < susProb 1 コードに 1 回 Sus4 — 70% の確率 Sus2 — 残りの 30% 2 · 7th セクションが B かサビ、 またはコードが V roll < 7thProb V は閾値が 2 倍 V → Dom7 · 短調 → Min7 それ以外 → Maj7 3 · 9th サビならどのコードでも、 または B セクションの V roll < 9thProb 独立した抽選 V → Dom9 · I → Maj9 · ii/vi → Min9 iii → Min7 · それ以外 → Add9 どれも通らなければ三和音のままです 3 つのフラグがすべて off なら判定自体が走りません reharmonizeForSection がサビのコードを先に確定させるため、この表はそれ以外に効きます 適用される拡張はつねに 1 つだけです。最初に通った判定がその場で返り、下の判定には進みません。

3つのファミリーは sus → 7th → 9th の順に判定され、最初に通ったものを返して終了します。したがって1つのコードに2つのエクステンションが付くことはありません。判定は各ファミリーが個別に乱数を振るため、片方の確率を上げても他方が痩せることはありません。

  • sus は小節位置のルールです。セクションの最初の小節か最後から2番目の小節で、かつマイナーコードでないことが条件です。70% で Sus4、残りが Sus2 になります。
  • 7th は B メロまたはサビ、あるいは位置を問わず V のときに適用されます。V では確率が2倍になります。
  • 9th はサビ内のどのコードにも、または B メロ内の V に適用されます。iii はダイアトニックな9度がルートから見て b9 になるため、Min7 にフォールバックします。

サビのコードは先に確定する

7th が有効な場合、サビは上記の判定より前にリハーモナイズされます。V は Dom7、マイナーコードは Min7、I は Maj7、それ以外は add9 が確定的に割り当てられます。そのため上記のルールがサビで効くのは、7th を無効にしているときだけです。同じ処理は A メロで IV を ii に置き換えることもあります(その IV が V や I へ解決する場合、および ii が隣接している場合は置き換えません)。

設定

cpp
struct ChordExtensionParams {
    bool enable_sus = false;
    bool enable_7th = false;
    bool enable_9th = false;
    bool tritone_sub = false;              // トライトーン代理 (V7 -> bII7)
    float sus_probability = 0.2f;          // 0.0-1.0 (20%)
    float seventh_probability = 0.15f;     // 0.0-1.0 (15%)
    float ninth_probability = 0.25f;       // 0.0-1.0 (25%)
    float tritone_sub_probability = 0.5f;  // 0.0-1.0 (有効時 50%)
};

JS の SongConfig では chordExtSus / chordExt7th / chordExt9th / chordExtTritoneSubchordExtSusProb / chordExt7thProb / chordExt9thProb / chordExtTritoneSubProb(確率はすべて 0.0-1.0)に対応します。

ムード依存の確率自動調整

chordExtProbExplicit=false(デフォルト)の場合、ムードがスタイルに合わせてコードエクステンション確率を自動調整します。chordExtProbExplicit=trueに設定すると全てのエクステンション確率を手動制御できます。

ボイスリーディング

ボイスリーディングとは?

ボイスリーディングとは、個々の音が一つのコードから次のコードへどのように動くかということです。良いボイスリーディングは滑らかで繋がりのあるコード遷移を生み出します。悪いボイスリーディングはぎこちなく不自然に聞こえます。MIDI Sketchは生成される全てのコード進行に最適化されたボイスリーディングを自動適用します。

原則

  1. 動きを最小化: 各声部は最小の音程で移動
  2. 共通音: コード間で共有される音を保持
  3. 平行5度/8度: 禁止ではなくペナルティ。強さはムード依存で、バラードやドラマチック系では重く、平行進行が定石のダンス/アイドル系では軽く働きます。
  4. 滑らかなベース: 順次進行または小さな跳躍を優先

アルゴリズム

cpp
VoicedChord selectVoicing(const VoicedChord& prev, const Chord& next, Mood mood) {
    auto candidates = generateVoicings(next);

    // スコアが高いほど良い。共通音の寄与が支配的で、距離はバスとソプラノを
    // 2倍に重み付けする。平行5度/8度は禁止ではなく、ムード依存のペナルティ。
    int score = typeBonus(candidate)
              + countCommonTones(prev, candidate) * 100
              + (hasParallelFifthsOrOctaves(prev, candidate) ? parallelPenalty(mood) : 0)
              - weightedVoicingDistance(prev, candidate)
              + repetitionPenalty(candidate, prev);

    // 同点はランダムに選ぶため、同じ小節でボイシングが固定されない。
    return pickRandomlyAmongBest(candidates, score);
}

声部ごとの跳躍量を見る項はありません。weightedVoicingDistance は声部ごとの重み付き和で、バスとソプラノが2倍、内声が1倍です。共通音は1つで 100 点あり、数半音ぶんの移動量を上回るため、共有音の保持が最も強く働く要素になります。同じボイシングが3回以上続くと、超過1回につき 50 点のペナルティが付きます。

ボイシングタイプ

音高軸の上に並べた 3 つのボイシングタイプ C3 から C5 までの共通の水平音高軸の下に 3 行を並べています。クローズは C4・E4・G4・B4 を 1 オクターブ内に収めます。オープン(ドロップ 2)は最上声部のひとつ下を 1 オクターブ下げ、G3・C4・E4・B4 になります。ルートレスはルートを省き、E3・G3・B3・D4 を鳴らしてルートはベースに任せます。下部の注記は、エンジンがルートレスを選ぶために必要な条件を挙げています。 C3 C4 C5 Close 1 オクターブ内に収まる C4 E4 G4 B4 4 音すべてが 1 オクターブ内 コンパクトで直接的な響き Open · Drop2 上から 2 番目を下げる G3 C4 E4 B4 最上声部のひとつ下を 1 オクターブ下げた形 Rootless ルートを省く E3 G3 B3 D4 ルートはベースに任せ、 低域が濁りません 大半の小節は Close か Open です。Rootless にはさらに、ベースが 1 拍目でルートを鳴らしていること、 セクションが B・サビ・ブリッジであること、ムードが CityPop / Nostalgic / Dramatic / ModernPop のいずれかであること、 そのうえでもう一度の抽選に通ることが必要で、バラードでは使われません。
ボイシングの解説
  • クローズポジション: 全ての音が1オクターブ内。コンパクトで直接的なサウンド。ポップで一般的。
  • オープンポジション: 音が複数オクターブに広がる。広がりのあるフルなサウンド。バラードに最適。
  • ルートレス: ルート音を省略(ベースが弾く)。クリアで濁りのないサウンドを生む。一般的なアレンジテクニック。

ベース-コード協調

コードトラックはベース分析を使用して重複を回避:

cpp
struct BassAnalysis {
    bool hasRootOnBeat1;   // ダウンビートでルート
    bool hasRootOnBeat3;   // 3拍目でルート
    bool hasFifth;         // 5度あり
    Tick accentTicks[];    // 強拍位置
};

// ベースがルートを持つとルートレスが「候補になる」だけで、実際の採用は
// ムードとセクションで絞られ、確率で決まる(B/サビ/ブリッジで20〜30%)。
if (bassAnalysis.hasRootOnBeat1 && moodSupportsRootless(mood) && rollProbability(sectionRate)) {
    voicing = generateRootlessVoicing(chord);
}

ルートレスボイシングはジャズ寄りのムード(CityPop、Nostalgic、Dramatic、ModernPop)かつ B・サビ・ブリッジに限られます。Aメロ、イントロ、アウトロ、バラードでは常にルートを保持します。

セカンダリードミナント

セカンダリードミナントは、トニック以外のダイアトニックコードに解決するドミナントコード(V7)です。より強い和声的引力を生み出し、和声的な多様性を加えます。

セカンダリードミナントとは?

IVからVに直接進む代わりに、V/V(Vに解決するドミナントコード)を挿入するとより強い動きの感覚が生まれます。例えばCメジャーでは、F → D7 → G は F → G より説得力があります。D7(V/V)がGに「解決したがっている」からです。

一般的なセカンダリードミナント

記号解決先Cでの例
V/VV(ドミナント)D7 → G
V/vivi(平行短調)E7 → Am
V/iiii(上主音)A7 → Dm
V/IVIV(下属音)C7 → F

自動挿入

セカンダリードミナントは2つのルールで挿入されます。

  • サビへ入る箇所(確定的): サビの最初のコードが ii・IV・V・vi のいずれかなら、その属和音を直前セクションの最後の半小節に置きます。
  • セクション内(確率的): 1小節あたりの確率はセクションの緊張度 × 0.25。緊張度 0.5 の閾値を超えるのはサビ(0.75)・Bメロ(0.65)・ブリッジ(0.60)・MixBreak(0.55)だけで、Aメロ・イントロ・アウトロには挿入されません。

ポップスとして過密にならないよう、挿入間隔は最低2小節、1セクションあたり最大 小節数 / 8 個(8小節につき1個)に制限されます。ターゲットになるのは ii・IV・V・vi のみで、挿入される和音は常にドミナント7thです。

cpp
// 例: V前にV/Vを挿入
// オリジナル: IV → V → I
// 強化後: IV → V/V → V → I

トライトーン代理

トライトーン代理はV7コードをbII7コード(トライトーン離れたドミナント7th)で置き換えます。これにより半音進行のベースモーションが生まれ、和声的な洗練さが加わります。

設定

トライトーン代理は以下から利用可能:

  • SongConfig (JS): chordExtTritoneSub(有効化、デフォルト false)とchordExtTritoneSubProb(確率 0.0-1.0、デフォルト 0.5
  • AccompanimentConfig (JS): chordExtTritoneSub(有効化)とchordExtTritoneSubProb(確率 0.0-1.0、デフォルト 0.5
  • C++ SongConfig: chord_extension.tritone_subchord_extension.tritone_sub_probability(0.0-1.0)

ムード依存のコードエクステンション確率

chordExtProbExplicit=falseの場合、ムードがスタイルに合わせてコードエクステンション確率を自動調整します:

ムード7th確率9th確率Sus確率備考
CityPop40%25%-ジャズ影響のボイシング
RnBNeoSoul50%35%-リッチな拡張ハーモニー
Ballad/Sentimental30%-25%表現力豊かなsus解決
Nostalgic/Chill25%--穏やかなエクステンション
Lofi40%30%-暖かいローファイキャラクター

明示的 vs 自動

chordExtProbExplicit=trueに設定すると全てのエクステンション確率を手動制御でき、falseのままにするとムードシステムが自動的に適切な値を選択します。

EventDataにおけるChordEvent

EventData の JSON 出力には、セクションごとの詳細なコード情報を含む chords 配列があり、セカンダリードミナントのアノテーションも含まれます。これにより外部ツールで和声構造を可視化・分析できます。

キー転調

なぜ転調するのか?

キー転調(曲の途中でキーを変える)は、興奮と感情的な高揚を加える強力なテクニックです。最後のサビで1-2半音上げる転調は「次のレベルに引き上げる」感覚を生み出します。これは数え切れないほどのヒット曲で使われる定番テクニックです。

転調パラメータ

パラメータ範囲説明
modulationTiming0-4転調タイミング(0=無効)
modulationSemitones1-4転調量(timingが0でない場合は必須)

WARNING

modulationTimingが0以外の場合、modulationSemitonesは1-4に設定する必要があります。ボーカルの高音域は、転調後に最終セクションが音域を超えないよう自動的に調整されます。

転調ポイント

転調量は常に modulationSemitones(1〜4、C++ 側の未設定時のデフォルトは 2)から決まり、楽曲構造によって変わることはありません。位置は modulationTiming が決めます。

modulationTiming位置
1 LastChorus最後のサビの頭(最も一般的)
2 AfterBridgeブリッジ直後のサビ。無ければ最後のサビにフォールバック
3 EachChorus最後のサビ1箇所にフォールバックし、警告を出します
4 Randomシードで決まるランダムなサビ

DirectChorusShortForm の構造では転調ポイントが取れないため、転調は行われません。

実装

cpp
struct Modulation {
    Tick tick;           // 転調タイミング
    int8_t semitones;    // 量(1-4半音)
};

// MIDI出力時に適用
void MidiWriter::writeTrack(MidiTrack& track, Modulation mod) {
    for (auto& note : track.notes) {
        if (note.tick >= mod.tick) {
            note.pitch += mod.semitones;
        }
    }
}

コードトーン分析

メロディ生成で音の協和度を判定するために使用:

cpp
bool isChordTone(uint8_t pitch, Chord chord) {
    uint8_t pitchClass = pitch % 12;

    // コードのピッチクラスと照合
    for (auto& chordPitch : chord.pitchClasses()) {
        if (pitchClass == chordPitch) return true;
    }
    return false;
}

uint8_t nearestChordTone(uint8_t pitch, Chord chord) {
    // 半音距離で最寄りのコードトーンを検索
    int minDist = 12;
    uint8_t nearest = pitch;

    for (auto& target : chord.pitches()) {
        int dist = abs(pitch - target);
        if (dist < minDist) {
            minDist = dist;
            nearest = target;
        }
    }
    return nearest;
}

テンションノート

テンションノートとは?

テンションノートは現在のコードに属さないが、意図的に音楽的興味を生み出すために使用される音です。「解決したい」という感覚を生み出します。答えを待つ音楽的な問いかけのようなものです。上手く使うと、メロディはより表現力豊かで感情的に魅力的になります。

テンションの可否はコードのディグリーごとに決まります。3度とぶつかるもの、b9 になるものは除外されます。

ディグリー使用可能なテンション
I9th, 13th(11th は長3度に対する #4 になるため除外)
ii9th, 11th, 13th
iii11th, b13th(9th は b9 になるため除外)
IV9th, #11th, 13th
V9th, 13th(11th は sus4 のときのみ)
vi9th, 11th(13th は b13 になるため除外)
vii°11th のみ
テンションルートからの音程典型的な解決
9th長2度ルートへ下降
11th完全4度3度へ下降
#11増4度5度へ上行
13th長6度5度へ下降
b13短6度5度へ下降

ボーカルアティチュードによる使用

アティチュードピッチの候補音楽的効果
Cleanコードトーンのみ安全、協和、歌いやすい
Expressiveコードトーンに加えてルートから見た 7th・9th・11th(キー内に収まるもののみ)。長い音符にだけ付与され、8分音符より短い音符はコードトーンに戻ります。どのくらい長ければ付与するかは tensionUsage が決めますカラフル、感情的、表現力豊か
Rawダイアトニックスケール7音すべて(コードトーンかどうかを問わない)エッジー、予測不能、強烈

拍の位置ではなく音符の長さで決まる

テンションの可否は小節内の位置ではなく音符の長さで決まります。短い音符はアティチュードにかかわらずコードトーンへ戻されます。すぐ通り過ぎる不協和は安全でも、伸ばした不協和はそうではないためです。

拍の位置が効いてくる場面

拍の位置が効くのは別の処理です。MelodicEmbellisher は1拍目と3拍目をStrong、2拍目と4拍目をMedium、8分音符の裏拍をWeak、16分音符の細分をVeryWeakに分類します。経過音と刺繍音はStrong以外に置かれ、倚音と掛留音は強拍で下行解決するアクセント付きの音として扱われます。

ボーカルアティチュードの選び方

  • Clean: シンプルなポップ、子供向け、歌いやすさが重要な場合に最適
  • Expressive: バラード、R&B、シティポップに最適 - 感情的な深みを加える
  • Raw: ロック、オルタナティブ、実験的に最適 - 緊張感とエッジを生み出す

ハーモニーとメロディの統合

ボーカル生成システムは、メロディ候補の形を整えるためにハーモニー情報を使います。

HarmonyContext

HarmonyContextシステムは生成されたトラックを追跡し、衝突を避けるためのピッチ候補を絞り込みます:

提案されたメロディのピッチを鳴っている和声と照合する流れ メロディ側がピッチと長さを提案します。HarmonyContext は 2 つの部品で答えます。その tick で鳴っているコードを知るコードトラッカーと、すでに鳴っているノートを知る衝突検出器です。登録される7つのピッチ役割は Vocal・ベース・コード・モチーフ・Aux・Arpeggio・ギターで、候補自身の役割は除外します。ドラムと SE は除外します。生成側は実際の半音数で判定します。短 2 度は 1 または 13、長 2 度は 2、長 7 度は 11・23・35、トライトーンは 6・18・30 半音です。鳴っているコードに属する長 2 度、正規化度数 I/IV(0/3)の Maj7/Maj9 に登録されたルート–長 7 度、V・vii またはセカンダリードミナントのトライトーンは文脈上の例外です。短いメロディの1・2半音の重なりは、持続するコード/ギター音以外で、1半音は最大 120 tick、2半音は最大 240 tick(1・3拍目では半分)かつ少なくとも一方が C4 以上なら通過することがあります。C3 未満のベースでは11半音の長7度をブロックし、登録された I/IV のルート–長7度も23半音以上でのみ例外になります。アナライザーは24半音超を基本カットオフとしたうえで、低音域の例外を適用します。返るのは最終出力の無衝突を保証しない候補フィルターの真偽値です。 MelodyDesigner ピッチと長さを 提案します HarmonyContext ChordProgressionTracker この tick で鳴っているコード TrackCollisionDetector すでに鳴っているノート 7つのピッチ役割。自身の役割を除外 ドラムと SE は対象外 衝突とみなす音程 短 2 度: 1 / 13 半音 ブロック* 長 2 度: 2 半音 ブロック* 長 7 度: 11 / 23 / 35 ブロック* トライトーン: 6 / 18 / 30 文脈* 短 7 度: 10; 長 9 度: 14; >=36 基本: 可 返るのは候補フィルターの真偽値ひとつで、順位付けや最終保証はありません * 短 2 度は ≤120、長 2 度は ≤240 tick(1・3拍目は半分)。少なくとも一方が C4 以上。 V/vii/セカンダリーのトライトーンは文脈上可。低音 C3 未満では11半音をブロックし、登録長7度も23半音以上だけ可。アナライザーの>24は基本カットオフで低音域の例外があります。

HarmonyContextが重要な理由

HarmonyContextがなければ、メロディが伴奏と衝突する可能性があります。例えば、ベースが E を弾いているときにメロディが F を同時に鳴らすと、厳しい短2度の不協和音になります。HarmonyContextはメロディピッチを提案する前にアクティブなノートをチェックし、このような衝突を多く除きます。後続の処理や意図的な音の例外は、和声の文脈に従います。

何が衝突とみなされるか

HarmonyContext が答えるのは Yes/No の1問だけです。提案されたピッチが既に鳴っている音とぶつかるかどうかを TrackCollisionDetector に問い合わせ、順位付けのない真偽値を1つ受け取ります。登録される7つのピッチ役割は Vocal・ベース・コード・モチーフ・Aux・Arpeggio・ギターです。候補自身の役割は除外し、ドラムと SE はピッチ衝突検出の対象外です。生成側は実際の半音数で判定するため、同じピッチクラスの音程でも離れ方によって結果が変わります。

音程生成側の規則
短2度1 または 13 半音。不協和。ただし短いメロディの1半音の重なりは通過することがあります
長2度2 半音。不協和。ただし14半音の長9度は対象外で、鳴っているコードに属する2音は許容されます
長7度11、23、35 半音。3オクターブ未満では不協和。正規化度数 I/IV(0/3)の Maj7/Maj9 に登録されたルート–長7度は例外です
トライトーン6、18、30 半音。不協和。ただしコードが V、vii°、または有効なセカンダリードミナントなら許容されます
その他の音程短7度、長9度、36 半音以上の距離は基本規則で許容されます

短いメロディの1半音(短2度)と2半音(長2度)の重なりは、持続するコード/ギター音が関係せず、少なくとも一方のピッチが C4 以上の場合に限り許容されます。重なりの上限は1半音が 120 tick、2半音が 240 tick で、1拍目と3拍目では半分になります。C3 未満のベースを含む長7度は11半音でブロックされ、正規化度数 I/IV(0/3)の Maj7/Maj9 に登録されたルート–長7度も、23 半音以上離れた場合だけ例外になります。生成後アナライザーは24半音超を基本カットオフとしたうえで、低音域の長7度と登録済みエクステンションを別に処理します。そのため、生成側が拒否する35半音の長7度や30半音のトライトーンがレポートに出ない場合があります。返る真偽値は候補を絞るためのもので、最終出力に不協和音がないことを保証しません。

軽度重大 という段階付けは別のモジュールのものです。後述する読み取り専用の PianoRollSafety API が持つもので、生成を制御するのではなく表示用に深刻度を返します。

コード認識メロディ生成

メロディ生成は生成→評価→リファインの3段階ではなく、単一パスです。generateSection がフレーズプランを立て、そのtickで鳴っているコードに対して1音ずつピッチを選び、装飾を加え、最後にダウンビートの窓にある不正な音だけをコードトーンへスナップします。下行解決するアクセント付きの不協和音は許可されたまま残ります。generateSectionWithEvaluation はこのパスをラップし、1セクションあたり最大100回走らせて結果の中から選びます。

メロディ生成のどこでコード情報が効いてくるか 左側では 1 つの候補メロディが 4 段階で書かれます。フレーズ計画、1 音ごとのピッチ選択(コードトーンに +16、ルートまたは 5 度にさらに +4、スケールトーンに +12)、装飾、そしてダウンビートの不正な音だけをコードトーンへ寄せ、下行解決するアクセント付きの不協和音を残す制約です。この一連の処理がセクションごとに最大 100 回走ります。右側では各候補をスコア化し、下位半分を捨て、残りから重み付き抽選で 1 つを選びます。 1 候補 — セクションごとに最大 100 回書き直します 1 · フレーズ計画 フレーズの開始と終わりを決める 2 · 1 音ごと コードトーン +16、ルート/5 度 +4、スケールトーン +12 3 · 装飾 経過音と刺繍音 4 · ダウンビート確認 適法なアクセントを残し、他の音を寄せます 候補の選び方 各候補をスコア化 スタイル 0.4 + カリング 0.4 + バイアス 0.2 下位半分を捨てる 重み付き抽選で 1 つ 残った候補から コードトーン適合を測るのは 1 拍目と 3 拍目だけで、そのうち何割がコードトーンかがスコアになります。 独立した仕上げ工程はありません。ダウンビート制約と候補の間引きでハーモニーを適用します。

音のスコアリング: 候補を書いている最中、コードトーンは 16 点、さらにルートか5度なら 4 点、スケールトーンは 12 点です。スケール外の音はハーモニーからは何も得られず、旋律面やリズム面の項が支えたときだけ残ります。

ダウンビート規則: コードトーン適合度を測るのは1拍目と3拍目だけです。ダウンビートの窓では classifyVocalTone がコードトーンと、下行解決する倚音・掛留音のようなアクセント付きの不協和音を残し、それ以外の不正な音だけをコードトーンへ寄せます。メロディに方向性のある緊張感を残しながら、和声の足場を保ちます。

VocalStyleProfileとハーモニー

VocalStyleProfileは、メロディがハーモニーとどう相互作用するかを設定します:

プロファイルコードトーン優先度テンション使用アプローチ
Standard強拍で高い時々9th安全、歌いやすい
Idol非常に高い最小限キャッチー、シンプル
CityPop中程度頻繁な9th、13th洗練
Vocaloid低いアグレッシブ意外性
Ballad高い表現力豊かな倚音エモーショナル

スタイルとハーモニーのマッチング

最良の結果を得るには、コードエクステンションをボーカルスタイルに合わせましょう:

  • Idol/Standard: エクステンションを低めに(sus、時々7th)
  • CityPop/Jazz: 高いエクステンション確率(7th、9th)
  • Vocaloid: エクステンションはあまり重要でない(メロディがより自由)

メロディ評価:ハーモニー要素

ハーモニーがメロディ評価に入ってくるのは、1つの比率としてです。calcChordToneRatio は1拍目または3拍目に始まる音だけを見て、そのtickで鳴っているコードと照合し、コードトーンだった割合を返します。音ごとの段階的な加点・減点はなく、弱拍の音は数えられません。強拍の音が1つもないフレーズは中立の 0.5 になります。

より細かい重み付けは、完成した候補を採点する段階ではなく、音を書いている段階で行われます。前述の 16 / 4 / 12 点のスケールがそれです。ハーモニーは、生成時のバイアスとして1回、選択時の単純な比率として1回、合わせて2度メロディを形づくります。

フックシステムとハーモニー

フックシステム(サビセクションで使用)は、記憶に残るパターンを作成しながらハーモニーを尊重します:

フックスケルトン旋律の形
Repeat単一のピッチを保持
Ascendingスケール上を3音連続で上行
AscendDropトライアドをアルペジオで上行し、1度分下へ戻る
LeapReturn5度上のコードトーンへ跳躍し、アンカーの2度上へ下降

スケルトンのオフセットはフレーズのアンカーからの音度で表されるため、鳴っているコードに合わせて同じ形が適応します。エンジンには25種類のスケルトンがあり、上記はその中で頻出のものです。

フック + コード同期

フックはコード変化と整合するときに最も効果的です。hookIntensityパラメータは、フックがコードトーンを強調するか、テンションでメロディの興味を生み出すかを制御します。

ピアノロールセーフティAPI

外部ツール(ピアノロールエディタなど)向けに、JavaScript PianoRollSafety API は各MIDIピッチの表示用安全度、理由フラグ、衝突情報を提供します。スケッチを生成した後に呼び出します:

javascript
const info = sketch.getPianoRollSafetyAt(0)
const safety = info.safety[60]
const reasons = info.reason[60]

色はこの表示API独自の安全度を表します。緑は安全、黄は警告、赤は不協和音または音域外です。深刻度の規則はHarmonyContextの生成側フィルターとは別で、生成側のコード例外を引き継ぎません。


実践ガイド

推奨の組み合わせ

スタイル進行エクステンションアティチュード
シンプルポップFourChordPop (0)低 (10-20%)Clean
エモーショナルバラードAxis (2)中 (30%)Expressive
J-PopOudou (6)中 (30%)Expressive
シティポップCityPop (19)高 (50%+)Expressive
ロックRock1 (11)低 (10%)Raw

クイックスタート推奨設定

初心者向け

以下の安全なデフォルト設定から始めましょう:

  • 進行: FourChordPop (ID 0) - ほぼ何にでも合う
  • エクステンション: 全確率を30%以下に
  • アティチュード: Clean - 最も作業しやすいメロディ
  • 転調: なし、またはLastChorusで+1半音

慣れてきたら、より複雑な進行や高いエクステンション確率を試してみましょう。