キー検出
キー検出は、C major や A minor のような曲の調性中心、つまりルートのピッチクラスとモードを推定します。libsonare ではクロマに基づく推定なので、人間の楽理判断そのものではなく「どのピッチクラス分布が音声をもっともよく説明するか」と読むのが安全です。
主音と旋法
キーには 2 つの要素があります。
| 要素 | 意味 |
|---|---|
| 主音 | ホームと感じるピッチクラス。イ短調なら「イ」 |
| 旋法 | 主音の上に作られる音程パターン。一般的には長調/短調 |
長調は明るく解決した響き、短調は暗い響きとして感じられやすいです。
主音 12 種 × 一般的な旋法 2 種で、24 の候補キーになります。キーを命名するとは、曲が強調する音に最もよく合う主音と旋法の組を選ぶことです。
ハ長調とイ短調のような平行調は同じ 7 音を共有するため、旋法のほうが取り違えやすくなります。
クロマからキーへ
キー検出は平均クロマベクトルから始まります。12 個のピッチクラスビンを素材全体で平均し、必要に応じて HPSS(打撃成分を抑えて和声が読みやすくなります)、ラウドネス重み付け、ハイパス処理などを使います。libsonare はそのベクトルを、各ルートとモードへ回転したキープロファイルと比較します。
キープロファイルとは、あるキーで各ピッチクラスがどれだけ強く現れると期待されるかを表す 12 個の数値テンプレートです。互換性のある既定プロファイルは Krumhansl-Schmuckler で、これは知覚実験から得られたキーごとの基準ピッチクラス重みの古典的なセットです。実装には Shaath、Faraldo EDM 系、Bellman-Budge、Temperley など、それぞれ異なる素材に合わせたプロファイルもあり、genreHint で選択を誘導できます。auto は、別プロファイルの根拠が明確に強い場合を除き、従来の挙動を保ちます。
信頼度は相対値
信頼度は、最良候補が他候補にどれだけ勝っているかを表します。曲が 1 つの明確なキーだけを持つ証明ではありません。モーダルな混在、転調、疎なアレンジ、強い打楽器、チューニングのずれは、信頼度を下げたり近いキーを有力にしたりします。
次点候補が重要な場合は detectKeyCandidates を使います。UI では、キーを固定ラベルとして扱うより、最上位候補と信頼度を一緒に見せるほうが実態に合います。また、転調する曲には単一の答えがないため、区間ごとに見たい場合は短い窓で複数回推定し、平行調の取り違えに注意して候補を比べる運用が有効です。
libsonare がどう計算するか
KeyAnalyzer は既定で n_fft = 4096、hop_length = 512 のクロマを計算し、プロファイル相関でルート/モード候補を採点します。オプションでは harmonic HPSS 入力、RMS ラウドネス重み付け、ハイパス cutoff、候補モード、ジャンル/プロファイルヒントを指定できます。ネイティブ層には estimate_key_from_chords と refine_key_with_chords もありますが、JS/Python の検出ヘルパーはクロマプロファイルによるキー推定と候補リストを公開します。