Skip to content

クロマ特徴量

クロマは、ハーモニー解析を可能にする表現です。スペクトル全体を 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 音名、と考えると読みやすくなります。

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

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

クロマがハーモニーに適し、メロディに不向きな理由

問いクロマを使う?理由
キーは何か?はい全体のピッチクラス分布が調性の中心を示します
今鳴っているコードは?はいフレームのクロマがコードテンプレートと一致します
ベースのオクターブは?いいえオクターブは畳み込まれています
リードメロディの音は?いいえピッチ追跡を使います。クロマは旋律線を分離できません
どの楽器か?いいえ音色はスペクトル形状が必要なので MFCC を使います

表現を問いに合わせるのが MIR で繰り返し問われる技能です。クロマはハーモニーを明確にするため、オクターブと音色の詳細をあえて手放します。

libsonare がクロマをどう構築するか

Chroma クラスは STFT 振幅から、各周波数ビンをそのピッチクラスへ対応づけ、12 ビンへエネルギーを累積してクロマを導きます。

項目内容
基本設定n_chroma = 12n_octaves = 7fmin = 0(0 は C1 ≈ 32.7 Hz)
解析窓n_fft = 2048hop_length = 512、Hann 窓
チューニングtuning で A440 からのずれをビン分数として補正
算出方式STFT ベース、CQT ベース(ChromaCqtConfig)、CENS(ChromaCensConfig
コード向け変種NnlsChromaConfig(非負最小二乗)で倍音の影響を抑える

クロマは KeyAnalyzer(Krumhansl-Schmuckler 系)と ChordAnalyzer(テンプレートマッチング)に供給されるため、クロマ段を改善すると下流の 2 機能が同時に良くなります。

関連: MIR の全体像, キー検出, コード認識, スペクトログラムと STFT