クロマ特徴量
クロマは、ハーモニー解析を可能にする表現です。スペクトル全体を 12 のピッチクラスビン — C、C♯、D、… B — へ畳み込み、各フレームが「C のエネルギーはどれだけ、C♯ はどれだけ…」をオクターブによらず示します。キー検出もコード認識もここから読み取ります。本ページは MIR の全体像 のハーモニーの節を掘り下げます。
ピッチクラス: オクターブを忘れる
ピッチクラスは、ある音名のすべてのオクターブをひとまとめにします。C2、C3、C4 は別々の音高ですが、同じピッチクラス「C」です。西洋音楽には半音ごとに 12 のピッチクラスがあります。クロマは STFT フレーム内の全周波数に広がるエネルギーを、その 12 ビンへ合算します — どのオクターブで弾かれた C も同じビンに入ります。
この意図的な「忘却」が要点です。ハーモニーはどのオクターブではなくどの音の話です。C メジャーコードは、低く配置されても高く配置されても C メジャーコードです。オクターブを畳み込むことで、各時点のハーモニーを表す 12 次元のすっきりした指紋が得られます。
たとえば低い C、中央の C、高い C が同時に鳴っていても、クロマでは全部 C のビンに足されます。一方で、C と E と G が強ければ C メジャーらしい、A と C と E が強ければ A マイナーらしい、という判断に使えます。つまりクロマは「音名の分布」を見る道具です。
クロマグラム: 時間軸上のクロマ
各フレームのクロマベクトルを積み重ねるとクロマグラムになります — ピッチクラスのエネルギーが曲の中をどう動くかを示す 12 行の画像です。持続するコードは安定した水平の帯として現れ、キーの変化は点灯し続けるビンを移します。ビジュアライザーはこれを直接描き、アナライザーはここからパターンを読み出します。
フレームは「音声を短く切った 1 コマ」です。動画が静止画の連続でできているように、クロマグラムは短い時間ごとのクロマを横に並べたものです。横方向が時間、縦方向が 12 音名、と考えると読みやすくなります。
クロマがハーモニーに適し、メロディに不向きな理由
| 問い | クロマを使う? | 理由 |
|---|---|---|
| キーは何か? | はい | 全体のピッチクラス分布が調性の中心を示します |
| 今鳴っているコードは? | はい | フレームのクロマがコードテンプレートと一致します |
| ベースのオクターブは? | いいえ | オクターブは畳み込まれています |
| リードメロディの音は? | いいえ | ピッチ追跡を使います。クロマは旋律線を分離できません |
| どの楽器か? | いいえ | 音色はスペクトル形状が必要なので MFCC を使います |
表現を問いに合わせるのが MIR で繰り返し問われる技能です。クロマはハーモニーを明確にするため、オクターブと音色の詳細をあえて手放します。
libsonare がクロマをどう構築するか
Chroma クラスは STFT 振幅から、各周波数ビンをそのピッチクラスへ対応づけ、12 ビンへエネルギーを累積してクロマを導きます。
| 項目 | 内容 |
|---|---|
| 基本設定 | n_chroma = 12、n_octaves = 7、fmin = 0(0 は C1 ≈ 32.7 Hz) |
| 解析窓 | n_fft = 2048/hop_length = 512、Hann 窓 |
| チューニング | tuning で A440 からのずれをビン分数として補正 |
| 算出方式 | STFT ベース、CQT ベース(ChromaCqtConfig)、CENS(ChromaCensConfig) |
| コード向け変種 | NnlsChromaConfig(非負最小二乗)で倍音の影響を抑える |
クロマは KeyAnalyzer(Krumhansl-Schmuckler 系)と ChordAnalyzer(テンプレートマッチング)に供給されるため、クロマ段を改善すると下流の 2 機能が同時に良くなります。
関連: MIR の全体像, キー検出, コード認識, スペクトログラムと STFT