Skip to content

セクションと構成

セクション解析は、曲を intro、verse、chorus、bridge、instrumental、outro などの長い音楽的なまとまりへ分割します。これは構成の推定であり、ナビゲーションや可視化に便利ですが、制作者のアレンジメモそのものではありません。

曲の中を移動したり、サビの前後にループ点を置いたり、構成の可視化を駆動したりと、曲の大きな形のおおよその地図が必要な場面で使えます。

初学者向けに言うと、セクション解析は「曲の地図」を作る処理です。BPM やコードのように短い単位を見るのではなく、イントロ、A メロ、サビ、間奏のような大きなまとまりを推定します。

自己類似度行列を読む

中心的な道具は自己類似度行列(SSM)です。特徴量列のあらゆる時点を、あらゆる他の時点と比較します。

「曲のどことどこが似ているか」を見る表だと考えると読みやすくなります。

SSM 上の見え方意味
明るいセルこの 2 時点は似た響き
対角線上のブロックその区間の内部が一貫していて、1 つのセクションらしい
対角線から外れた縞離れた 2 つの時点が似ていて、繰り返しのサビや A メロらしい

特に重要なのは次の 2 つです。

  • novelty は、SSM が急に変わることです。境界を見つける手がかりになります。
  • 繰り返し は、離れた場所に似た素材が現れることです。再登場するセクションをまとめる手がかりになります。

novelty だけでは分割しすぎ、繰り返しだけでは一度きりのパートを見落とすため、libsonare は両者を組み合わせます。

まず境界

libsonare はフレーム単位の特徴量を作り、自己類似度行列を計算し、novelty のピークを探してセクション境界を検出します。既定の特徴量ミックスは MFCC とクロマなので、音色変化、ハーモニー変化、またはその両方から境界が出ます。

minSectionSec は、検出されたセクションがどれだけ短くてよいかを制御します。ごく短い編集、ドロップ、ピックアップ小節は隣接する区間へ統合されることがあります。

長尺入力では、自己類似度行列がネイティブの整数インデックス上限を超えそうな場合に、境界検出器が特徴量列を平均プーリングします。境界の time は元音声のタイムライン上の秒数を保ちます。一方、非常に長いファイルでは frame フィールドがプーリング後の解析グリッドを指すため、UI のマーカー配置には frame ではなく time を使ってください。

次にラベル

境界が決まると、実装は正規化したエネルギー、他セクションとのクロマ類似度、ボーカル帯域のスペクトルエネルギーと tonal さから作るボーカルらしさを使って各区間を分類します。反復する高エネルギーのボーカル区間は chorus になりやすく、反復する低めの区間は verse になりやすいです。低エネルギーの先頭/末尾は intro/outro、内側の低ボーカル区間は instrumental や bridge として扱われます。

これらのラベルは意図的にヒューリスティックです。曲の正式な構成名を断定するものではなく、見通しを与えるための推定です。

最も信頼しづらい理由

構成は部分的に主観的です。コーラスが正確に「どこで始まるか」は人によって意見が分かれ、ジャンルによって手がかりも大きく違います(テクノとバラードでは別物です)。そのためセクション出力は、ナビゲーション・ループ・可視化のための強いヒントとして扱い、明確に繰り返すセクションを持つ音楽で最もよく効くと考えてください。通作形式やアンビエントでは弱くなります。境界が数秒ずれることは珍しくないので、自動結果は手直しの出発点として使うのが安全です。

libsonare がどう計算するか

BoundaryDetector は MFCC とクロマ特徴量を組み合わせ、L2 正規化し、必要に応じて長尺入力を平均プーリングし、cosine 自己類似度行列を作り、checkerboard novelty curve から境界ピークを選びます。SectionAnalyzer は境界を区間へ変換し、RMS エネルギー、クロマ記述子、スペクトル平坦度、ボーカル帯域エネルギーを計算したうえで、IntroVersePre-ChorusChorusBridgeInstrumentalOutroUnknown のラベルと信頼度を割り当てます。

関連: メル・MFCC・音色, クロマ特徴量, MIR の全体像