Skip to content

メロディ評価システム

このドキュメントでは、メロディ生成における候補選択と評価の仕組みを説明します。

音楽理論が初めての方へ

このページはコードトーン・経過音・モチーフ・フックといった旋律の語彙を前提にしています。馴染みがなければ、コースのメロディ・モチーフ・フックの章が再生できる譜例付きで先に解説します。

概要

MIDI Sketch は複数のメロディ候補を生成し、評価システムを通じて1つを選択します。

メロディ候補選択の 5 段階 左から右への 5 段階の流れです。セクションごとに 20〜100 個の候補を生成し、ペナルティ方式のカリングスコアとスタイルスコアの両方で各候補を評価します。両者を 1 つの数値に合成して並べ替え、下位半分を除外したうえで、残った候補からスコアに比例した確率で 1 本を抽選します。 メロディ候補パイプライン 候補を生成 セクションごとに 20〜100 候補 各候補を評価 カリングスコアと スタイルスコア スコアを合成 スタイル 40% / カリング 40% + 音程バイアス 20% 並べて除外 スコア順に並べ 下位半分を除外 勝者を選ぶ 上位半分から 重み付きランダム 多数の候補から残るのは 1 本ですが、選ばれるのは上位半分からの抽選で、単純な最高得点ではありません。

候補生成

セクション別の候補数

セクションごとに異なる候補数を使用します:

セクション候補数備考
サビ (Chorus)100フックセクション
Bメロ (Pre-chorus)50トランジションセクション
ブリッジ / チャント30コントラストセクション
Aメロ / イントロ / アウトロ20安定セクション。インタールード・MixBreak・Drop もここに含まれます

生成プロセス

各候補について:

  1. リズムパターン - 音符の位置と長さを生成
  2. ピッチ選択 - メロディテンプレート (PlateauTalk, RunUpTarget 等) を適用
  3. 制約適用 - 歌いやすさと音域制限を適用
  4. 装飾 - 経過音、刺繍音を追加

アーティキュレーション・ゲート

ゲート処理は、4分音符未満のフレーズ内部の音符だけを対象にします。フレーズの開始・終了と4分音符以上の音符は短縮しません。順次進行はレガートのまま、跳躍には小さな隙間だけを入れます。最低長は16分音符なので、16分音符未満の入力はこの下限によって長くなる場合があります。

リズムロックがかかったセクション

セクションがロック済みのリズムパターンを再利用する場合は別の経路になります。候補数はセクションによらず常に 20 個で、7 つの品質次元をスタイル別の重みではなく均等に合計し、合成比率も後述の 40/40/20 ではなくスタイル 35% + ペナルティ 40% + グローバルモチーフ 25% になります。順位カットと重み付きランダム選択は同じです。

評価と選択

各候補は段階的にではなく、3 つの軸を同時に計算して一度にスコアリングされます。

  • スタイルスコア(40%) — 後述の 7 つの品質次元を重み付けしたもの。
  • ペナルティスコア(40%) — 1.0 から始め、歌唱難度と音楽的な問題を減点していく。
  • 音程バイアススコア(20%) — 順次進行・跳躍・同音の配分が、そのボーカルスタイルの傾向にどれだけ合うか。

モチーフが設定されている場合は、さらにグローバルモチーフのボーナスが加算されます。重みはセクション別で、サビ 0.35 からブリッジ 0.05 まで変わり、重要なセクションほどモチーフの同一性を保ちます。

その後、候補をソートして下位半分を破棄します。これは絶対的な閾値ではなく順位による固定カットです。勝者は残った半分からスコアに比例した重み付きランダム選択で選ばれるため、高スコアの候補が選ばれやすいものの確定ではありません。これにより、繰り返しのセクションで同じメロディに収束するのを防いでいます。

ペナルティスコア

ペナルティスコアは 1.0 から始まり、9 種類のペナルティを引き、2 種類のボーナスを足して 0.0〜1.0 にクランプされます。ここで候補が捨てられるわけではなく、この値は候補が順位付けへ持ち込む 3 つの数値の 1 つです。

カリングスコアの組み立て方 左から右への計算です。どの候補も基準スコア 1.0 から始まります。高音域・高音後の跳躍・急激な方向転換・孤立音・息継ぎなし・非コードトーン・単調さ・結束の低さ・ギャップ率という 9 種のペナルティを引き、明確なピークとモチーフ反復の 2 つのボーナスを加え、最後に 0.0〜1.0 の範囲へクランプします。 起点 基準スコア 1.0 ペナルティ(減点) 高音域 高音後の跳躍 急激な方向転換 孤立音 息継ぎなし 非コードトーン 単調さ 結束の低さ ギャップ率 ボーナス(加点) 明確なピーク モチーフ反復 カリングスコア 0.0〜1.0 にクランプ 息継ぎペナルティはボカロ系スタイルでは適用されず、結束とギャップの閾値もスタイルごとに変わります。 ここで候補が捨てられるわけではありません。このスコアは候補が順位付けへ持ち込む数値の 1 つです。

ペナルティ

ペナルティ最大値検出対象
高音域0.5D5(74)以上の音が連続、または長く伸びる
高音後の跳躍0.45 度以上の跳躍で D5 以上に着地
急激な方向転換0.38 分音符以下の間隔での方向転換が 3 回を超える
孤立音0.3前後どちらも 5 度以上離れている音
息継ぎなし0.25休符を挟まない短い音が 5 個を超えて連続
強拍の非コードトーン0.2強拍でコードトーンになる音が半分未満
単調さ0.2異なるピッチが全音符数の半分未満
結束の不足約 0.18結束度がスタイル別閾値を下回る(順次進行のまとまり・リズムの一貫性・セルの反復がない)
ギャップ率約 0.375フレーズに対する無音の割合がスタイル別閾値を超える

息継ぎペナルティはボカロ系スタイルでは適用されず、結束とギャップの閾値もボーカルスタイルごとに変わります。

フレーズ結束の基準
  • 順次進行のラン(連続した接続音)
  • 一貫したリズムパターン
  • 3音セルの反復(音程 + 長さのモチーフ)

ボーナス

ボーナス範囲検出対象
明確なピーク0.0-0.15最高音が 1 つだけで、フレーズの 25%〜85% の位置にある
モチーフ反復0.0-0.2AAAB反復パターン

スタイルスコア

各候補は 7 つの次元でスコアリングされ、ボーカルスタイル別の重みが掛けられます:

メロディスコアの 7 次元 歌いやすさ・コードトーン率・輪郭形状・サプライズ要素・AAAB パターン・リズムと音程の相関・キャッチーさという 7 つの箱が横一列に並び、それぞれ 0.0〜1.0 の値を出します。7 つはすべて 1 本のバスに集まり、ボーカルスタイル別の重みを掛けて合計され、1 つの合計メロディスコアになります。 メロディスコア — 7 次元、各 0.0〜1.0 歌いやすさ コードトーン率 輪郭形状 サプライズ要素 AAAB パターン リズムと音程の 相関 キャッチーさ 各次元にボーカルスタイル別の重みを掛ける 合計メロディスコア 7 つの重みは合計 1.0 で、スタイルプリセットごとに変わります。アイドルは AAAB とキャッチーさ、ロックはサプライズ寄りです。 単独の次元でメロディが決まることはなく、候補の順位を決めるのは重み付きの合計です。

歌いやすさスコア

音程分布を測定:

音程タイプ目標範囲
ステップ(1-2半音)40-50%
同音20-30%
小跳躍(3-4半音)15-25%
大跳躍(5+半音)5-10%

コードトーン率

強拍でのコードトーン頻度を測定:

  • 強拍: 4/4拍子の1拍目と3拍目(2拍ごと、tick % 960 == 0)
  • 高い率は和声的により安定したメロディを示す

輪郭形状

メロディの形状を検出:

  • アーチ: 上昇して下降
  • ウェーブ: 振動パターン
  • 下行: 徐々に下降

サプライズ要素

フレーズあたりの大跳躍(5+半音)を測定。目標: 1-2回。

AAABパターン

変化を伴う反復を検出 - 同じフレーズが3回繰り返された後に変化。

リズム-音程相関

音符の長さと音程幅の適合度を測定:

組み合わせスコア理由
長い音符 + 大きな跳躍高い歌手は大きな跳躍に時間が必要
短い音符 + ステップ高い速いパッセージは順次進行が最適
短い音符 + 大きな跳躍低い歌うのが困難

ポップボーカル理論に基づく:歌手は大きなピッチ変化に準備時間が必要です。このスコアリングは自然に歌いやすいメロディを評価します。

キャッチーさ

フックの記憶しやすさを 4 つの要素から測定します。2〜3 音の音程パターンの反復(30%)、音符の長さの一貫性(25%)、長 3 度以内の音程が占める割合(25%)、そして定番のフック輪郭の検出(20%)です。同音の連続は 2〜4 音までがボーナス、5 音以上は単調としてペナルティになります。Idol と K-Pop のプロファイルでは、この項目が単独で最も重い重みを持ちます。

スタイル別の重み

ボーカルスタイルごとに異なる評価重みを使用:

スタイル歌いやすさサプライズプラトーバイアス高音域
Standard0.150.151.00.8
Idol0.180.051.250.85
Rock0.150.200.81.2
Ballad0.300.051.00.5
Anime0.100.151.31.3
Vocaloid0.100.200.91.2
CityPop0.150.150.90.9
KPop0.120.181.41.1

歌いやすさとサプライズは評価時の重みで、7 次元の合計が 1.0 になります。プラトーバイアスと高音域は候補生成時に働く傾向値なので、重みではなく 1.0 前後の倍率です。

パラメータ定義
  • 歌いやすさ: 音程ベースのスコアリング重み
  • サプライズ: 大跳躍検出の重み
  • プラトーバイアス: 同音継続の傾向
  • 高音域: 高い音への傾向

スタイル別コヒージョン閾値

スタイルによって必要なメロディのまとまり度合いが異なります:

スタイルコヒージョン閾値
Ballad, CityPop0.50
Standard その他0.45
Vocaloid, UltraVocaloid, Rock, PowerfulShout0.35

コヒージョン閾値を下回るメロディはペナルティを受けます。

スタイル別ギャップ閾値

スタイルギャップ閾値
Ballad0.50
CityPop0.45
Standard その他0.40
Anime0.35
Idol, BrightKira, CuteAffected, Rock, PowerfulShout0.30
Vocaloid, UltraVocaloid0.25

生成後の分析

不協和音アナライザーは生成後のハーモニー問題をチェックします。

問題タイプ

タイプ説明
同時衝突2つの音が不協和音程ベース E + メロディ F = 短2度
非コードトーン現在のコードにない音Cメジャーコード上のD
コード変化後の持続コード変化後に非コードトーンにFコード上で持続するC
非ダイアトニック音キーのスケールにない音Cメジャーの F#

深刻度レベル

深刻度音程備考
High短2度 (1)、近接した長2度 (2)、短9度 (13)、I と IV 以外のコード上の長7度 (11)強い不協和
Medium近接したトライトーン (6)、I または IV 上の長7度(意図した maj7 の可能性)、強拍の非コードトーン文脈依存
Low弱拍の非コードトーン(経過音)、オクターブを跨いだ短2度・長7度、オクターブを跨いだトライトーン多くの場合許容

セクション冒頭の 1 拍目にかかる問題は、最も露出する位置のため深刻度が 1 段階引き上げられます。

CLI 使用方法

bash
# 生成して分析
./build/bin/midisketch_cli --seed 42 --analyze

# 既存のMIDIを分析
./build/bin/midisketch_cli --input song.mid --analyze

現在のレポート項目と出力例はCLIの不協和音分析リファレンスを参照してください。

パイプラインまとめ

メロディ評価パイプライン全体 — 候補生成から事後レポートまで 5 つの段階を 2 段組みで示します。生成ではセクションごとに 20〜100 個の候補を作ります。カリングスコアは 1.0 から始め、スタイルに応じた 9 種のペナルティを引き、2 つのボーナスを加えます。スコアリングでは 7 次元を評価し、ボーカルスタイル別の重みを掛けます。選択では 2 つのスコアと音程バイアスを合成して並べ替え、下位半分を除外したうえで残りから抽選します。事後分析は任意実行の不協和音レポートで、音そのものは書き換えません。 1 · 生成 候補 20〜100 個 サビ 100 / Bメロ 50 ブリッジ・チャント 30 / その他 20 リズム・音高・音域制限・装飾 2 · カリングスコア 1.0 から開始 − 9 種のペナルティ(スタイル依存) + 明確なピーク・モチーフ反復 = カリングスコア 0.0〜1.0 3 · スコアリング 7 次元 歌いやすさ・コードトーン率・輪郭形状 サプライズ・AAAB・リズム相関・キャッチーさ ボーカルスタイル別に重み付け 4 · 選択 合成 = スタイル 40% + カリング 40% + 音程バイアス 20% さらにセクション別の重みでグローバルモチーフ加点 スコア順に並べ、下位半分を除外 上位半分から重み付きランダムで 1 本 5 · 事後分析 不協和音アナライザーが完成した曲を走査 同時衝突・非コードトーン・コード変化後の持続・ 非ダイアトニック音を High / Medium / Low で判定 --analyze レポートを出すだけで曲は変わりません 候補が実際に消えるのは選択の段階だけで、アナライザーは選ばれ済みのメロディを報告するだけです。

まとめ

  • セクションごとに複数の候補を生成(20-100)
  • 各候補は 1 つの合成スコアを持つ:スタイル 40%・ペナルティ 40%・音程バイアス 20%
  • 下位半分を順位で切り捨て、残りからスコアに比例した重み付きランダムで 1 本を選ぶ
  • スタイル別の重みと閾値で評価基準を調整
  • 生成後の不協和音分析が利用可能