セクションと構成
セクション解析は、曲をイントロ、A メロ、サビ、ブリッジ、間奏、アウトロなどの長い音楽的なまとまりへ分割します。これは構成の推定であり、ナビゲーションや可視化に便利ですが、制作者のアレンジメモそのものではありません。
曲の中を移動したり、サビの前後にループ点を置いたり、構成の可視化を作ったりと、曲の大きな形のおおよその地図が必要な場面で使えます。
初学者向けに言うと、セクション解析は「曲の地図」を作る処理です。BPM やコードのように短い単位を見るのではなく、イントロ、A メロ、サビ、間奏のような大きなまとまりを推定します。
自己類似度行列を読む
中心的な道具は自己類似度行列(SSM)です。特徴量列のあらゆる時点を、あらゆる他の時点と比較します。
「曲のどことどこが似ているか」を見る表だと考えると読みやすくなります。
| SSM 上の見え方 | 意味 |
|---|---|
| 明るいセル | この 2 時点は似た響き |
| 対角線上のブロック | その区間の内部が一貫していて、1 つのセクションらしい |
| 対角線から外れた縞 | 離れた 2 つの時点が似ていて、繰り返しのサビや A メロらしい |
- 似た響きのフレーム
- novelty
- 境界
特に重要なのは次の 2 つです。
- novelty は、SSM が急に変わることです。境界を見つける手がかりになります。
- 繰り返し は、離れた場所に似た素材が現れることです。再登場するセクションをまとめる手がかりになります。
novelty だけでは分割しすぎ、繰り返しだけでは一度きりのパートを見落とすため、libsonare は両者を組み合わせます。
まず境界
libsonare はフレーム単位の特徴量を作り、自己類似度行列を計算し、novelty のピークを探してセクション境界を検出します。既定の特徴量ミックスは MFCC とクロマなので、音色変化、ハーモニー変化、またはその両方から境界が出ます。
minSectionSec(既定 4 秒)は、セクション長の厳密な下限ではありません。この値は novelty ピーク同士の最小間隔として使われ、その後のマージ処理が取り除くのは、この値の半分より短い区間だけです。つまり返ってくるセクションの実効的な最短長は minSectionSec の 0.5 倍で、先頭と末尾の区間はピークではなくファイルの端で区切られます。ごく短い編集、ドロップ、ピックアップ小節は隣接する区間へ統合されることがあります。
長尺入力では、自己類似度行列がネイティブの整数インデックス上限を超えそうな場合に、境界検出器が特徴量列を平均プーリングします。境界の time は元音声のタイムライン上の秒数を保ちます。一方、非常に長いファイルでは frame フィールドがプーリング後の解析グリッドを指すため、UI のマーカー配置には frame ではなく time を使ってください。
次にラベル
境界が決まると、実装は正規化したエネルギー、他セクションとのクロマ類似度、ボーカル帯域のスペクトルエネルギーと tonal さから作るボーカルらしさを使って各区間を分類します。反復する高エネルギーのボーカル区間はサビになりやすく、反復する低めの区間は A メロになりやすいです。低エネルギーの先頭/末尾はイントロ/アウトロになります。反復しない内側の区間は、ボーカルらしさが低ければ間奏、ボーカルらしさが残っていればブリッジです。つまり、ボーカルらしさの低さはブリッジの根拠ではなく、むしろブリッジを外す根拠になります。
これらのラベルは意図的にヒューリスティックです。曲の正式な構成名を断定するものではなく、見通しを与えるための推定です。
結果が推定にとどまる理由
構成は部分的に主観的です。サビが正確に「どこで始まるか」は人によって意見が分かれ、ジャンルによって手がかりも大きく違います(テクノとバラードでは別物です)。そのためセクション出力は、ナビゲーション・ループ・可視化のための強いヒントとして扱い、明確に繰り返すセクションを持つ音楽で最もよく効くと考えてください。通作形式(セクションを繰り返さずに展開し続ける構成)やアンビエントでは弱くなります。境界が数秒ずれることは珍しくないので、自動結果は手直しの出発点として使うのが安全です。
libsonare がどう計算するか
BoundaryDetector は MFCC とクロマ特徴量を組み合わせ、L2 正規化し、必要に応じて長尺入力を平均プーリングし、cosine 自己類似度行列を作り、checkerboard novelty curve から境界ピークを選びます。SectionAnalyzer は境界を区間へ変換し、RMS エネルギー、クロマ記述子、スペクトル平坦度、ボーカル帯域エネルギーを計算したうえで、Intro、Verse、Chorus、Bridge、Instrumental、Outro のラベルと信頼度を割り当てます。SectionType には PreChorus と Unknown も定義されていますが、分類器のどの分岐もこれらを出力しません。この 2 つの switch 分岐は到達しないコードになるため、プリコーラスの検出も期待できません。
関連: メル・MFCC・音色、クロマ特徴量、MIR の全体像