Skip to content

ビートとダウンビート

ビートは音楽の中で知覚される拍の位置です。ダウンビートは小節の最初の拍、つまり拍子を支える強い「1」です。libsonare はビート検出とダウンビート検出の両方を時刻配列として公開します。

ビート・ダウンビート・小節

ビートは単一の拍です。足で刻むもの、と考えると分かりやすいです。

小節は決まった数の拍をまとめたものです。拍子がその数を表します。4/4 なら 1 小節は 4 拍です。

ダウンビートは各小節の最初の拍で、サイクルの始まりとして感じるアクセントです。ビート追跡はグリッドを与え、ダウンビート検出はグリッドがどこで繰り返し始まるかを教えます。ループ・歌詞・セクションをそろえる先はこのダウンビートです。

DETECTOR · BEAT / DOWNBEATIDLE
ビートとダウンビート — 小節の頭を見つける

ビートは一定の拍、ダウンビートは各小節の頭にあたる強い「1」です。表示を切り替えると、すべての拍から小節の頭だけへと絞り込まれ、マーカーがぐっと減って1小節ごとの間隔になります。再生すると、カウントがリセットされる位置が体感できます。

検出

ビートが「テンポ÷拍子」では済まない理由

テンポが分かればビートは自明 — タイムラインを等分するだけ、と思うかもしれません。実際の音楽はそれを打ち破ります。テンポは揺れ、奏者は前後に押し引きし、イントロはルバートで、オンセットはノイジーです。素朴な等間隔は演奏とすぐ位相がずれるため、ビート追跡は最適化を解きます。強いオンセットにそろい、かつテンポ付近でほぼ一定の間隔を保つビート時刻を見つけるのです。動的計画法は、最も近いオンセットへ貪欲に吸着して誤差をためるのではなく、全体最適なトレードオフを見つけます。

ビート追跡

ビート追跡は、オンセット強度エンベロープとテンポ推定から始まります。トラッカーはオンセット根拠の強いフレームを評価し、期待される拍周期に近い間隔を保つ列を動的計画法で選びます。

ネイティブ設定で adaptive tempo が有効な場合は、急なジャンプにペナルティを与えつつ、局所的な周期変化にも追従できます。ただしこれは拍の推定であり、スコアレベルの採譜ではありません。

イメージとしては、メトロノームの目盛りを曲の上に重ね、目盛りができるだけ強いオンセットに当たるよう、全体を少しずつ伸縮・平行移動させる作業です。1 か所だけ近い音に合わせると後ろがずれるので、曲全体を見渡して最も整合する置き方を選びます。

ダウンビート追跡

ダウンビートは、ビートを置いた後で推定されます。libsonare は拍子位相を推定し、ビート強度、低域エネルギー、コード変化の根拠、位相の事前情報を使って各拍位置を採点します。そのためダウンビート結果は、通常のビート追跡よりもアレンジ上の手がかりに左右されます。

疎なイントロ、アウフタクト、弱いベース、曖昧な拍子では、知覚される「1」がずれることがあります。UI では絶対的な答えではなく、補助的なオーバーレイとして見せるのが適切です。

言い換えると、ビート追跡が「拍がどこか」を答えるのに対し、ダウンビート追跡は「どの拍が小節の頭か」を答えます。前者は規則的な目盛りだけで決まりますが、後者は低音やコードチェンジといった音楽的なアクセントに頼るため、判断が難しく外れやすい一段上の推定です。

libsonare がどう計算するか

BeatAnalyzer はメル由来のオンセット強度を計算し、BpmAnalyzer で BPM を推定して、候補フレーム上の動的計画法でビートを追跡します。その後、オンセット強度、低域エネルギー、コード変化、拍子位相を含む DownbeatObservations でダウンビートを補正します。detectBeatsdetectDownbeats などの公開ヘルパーは、秒単位の Float32Array / float 配列を返します。

関連: オンセット検出, テンポと BPM, コード認識