Skip to content

キー検出

キー検出は、C major や A minor のような曲の調性中心、つまりルートのピッチクラスとモードを推定します。libsonare ではクロマに基づく推定なので、人間の楽理判断そのものではなく「どのピッチクラス分布が音声をもっともよく説明するか」と読むのが安全です。

主音と旋法

キーには 2 つの要素があります。

要素意味
主音ホームと感じるピッチクラス。イ短調なら「イ」
旋法主音の上に作られる音程パターン。一般的には長調/短調

長調は明るく解決した響き、短調は暗い響きとして感じられやすいです。

主音 12 種 × 一般的な旋法 2 種で、24 の候補キーになります。キーを命名するとは、曲が強調する音に最もよく合う主音と旋法の組を選ぶことです。

ハ長調とイ短調のような平行調は同じ 7 音を共有するため、旋法のほうが取り違えやすくなります。

クロマからキーへ

キー検出は平均クロマベクトルから始まります。12 個のピッチクラスビンを素材全体で平均し、必要に応じて HPSS(打撃成分を抑えて和声が読みやすくなります)、ラウドネス重み付け、ハイパス処理などを使います。libsonare はそのベクトルを、各ルートとモードへ回転したキープロファイルと比較します。

キープロファイルとは、あるキーで各ピッチクラスがどれだけ強く現れると期待されるかを表す 12 個の数値テンプレートです。互換性のある既定プロファイルは Krumhansl-Schmuckler で、これは知覚実験から得られたキーごとの基準ピッチクラス重みの古典的なセットです。実装には Shaath、Faraldo EDM 系、Bellman-Budge、Temperley など、それぞれ異なる素材に合わせたプロファイルもあり、genreHint で選択を誘導できます。auto は、別プロファイルの根拠が明確に強い場合を除き、従来の挙動を保ちます。

CHROMA · PITCH CLASSIDLE
クロマグラム — ハーモニーを12ビンに畳む

すべての周波数を12のピッチクラスのどれかへ畳み込むため、オクターブは忘れられ、ハーモニーだけが残ります。このクリップは C–Am–F–G を循環します。コードが変わるたびに点灯する行が移るのを見て、再生して進行を追ってください。

信頼度は相対値

信頼度は、最良候補が他候補にどれだけ勝っているかを表します。曲が 1 つの明確なキーだけを持つ証明ではありません。モーダルな混在、転調、疎なアレンジ、強い打楽器、チューニングのずれは、信頼度を下げたり近いキーを有力にしたりします。

次点候補が重要な場合は detectKeyCandidates を使います。UI では、キーを固定ラベルとして扱うより、最上位候補と信頼度を一緒に見せるほうが実態に合います。また、転調する曲には単一の答えがないため、区間ごとに見たい場合は短い窓で複数回推定し、平行調の取り違えに注意して候補を比べる運用が有効です。

libsonare がどう計算するか

KeyAnalyzer は既定で n_fft = 4096hop_length = 512 のクロマを計算し、プロファイル相関でルート/モード候補を採点します。オプションでは harmonic HPSS 入力、RMS ラウドネス重み付け、ハイパス cutoff、候補モード、ジャンル/プロファイルヒントを指定できます。ネイティブ層には estimate_key_from_chordsrefine_key_with_chords もありますが、JS/Python の検出ヘルパーはクロマプロファイルによるキー推定と候補リストを公開します。

関連: クロマ特徴量, コード認識, MIR の全体像