オンセット検出
オンセットは、音楽的イベントが始まる瞬間です — 弾かれた音、叩かれたドラム、歌われた子音。オンセットを見つけることはリズムファミリー全体の根で、テンポ、ビート、さらにはセクション境界もすべてオンセット情報から育ちます。本ページは MIR の全体像 のタイミングの節を掘り下げます。
オンセット・トランジェント・ビートの違い
この 3 つは混同しやすいです。
- オンセットは、ビートに乗るかどうかに関わらず、あらゆる音イベントの始まりです。
- トランジェントは、音の先頭にある短く高エネルギーの立ち上がり(スティックがドラムに当たる瞬間)です。オンセットはトランジェントやその他のスペクトル変化から検出されます。
- ビートは音楽の知覚される拍です。ビートは通常オンセットと一致しますが、すべてのオンセットがビートではありません(速いドラムフィルは 2 拍の間に多くのオンセットを持ちます)。
つまりパイプラインは、スペクトル変化 → オンセット → テンポ/ビート、です。
実例で考えると、スネアを 1 回叩いた瞬間はオンセットです。その直後の鋭い「パチッ」という立ち上がりがトランジェントです。曲全体で 1、2、3、4 と感じる規則的な拍がビートです。速いフィルではオンセットはたくさん出ますが、ビートはその一部だけです。
オンセット強度エンベロープ
libsonare はオンセット時刻のリストを出すだけではありません。まずオンセット強度エンベロープ、つまりスペクトルが急変するところで立ち上がる連続曲線を計算します。
この曲線は、フレーム間のスペクトルエネルギーの増加を測って作ります。これはスペクトルフラックスの考え方です。新しいエネルギーが現れると曲線が跳ね、持続音の間は低いままです。
このエンベロープのピークが、候補のオンセットです。
エンベロープが重要なのは、ピークのリストだけでなく曲線の形状こそ、テンポやビートのアルゴリズムが解析するものだからです。清潔でピークの立った曲線は自信のあるテンポ推定を与え、にじんだ曲線は与えません。
ピーク拾い(どの山を実際のオンセットとみなすか)はしきい値と最小間隔に依存します。間隔を詰めすぎると 1 つの打撃を二重に数え、緩めすぎると速いフィルを取りこぼします。リズムが密な素材ほど、この調整が結果を左右します。
オンセット検出の結果が多すぎるときは、細かいノイズや余韻までイベントとして拾っている可能性があります。少なすぎるときは、しきい値が高すぎるか、素材の立ち上がりが柔らかく、スペクトル変化が目立たない可能性があります。
なぜこれがテンポとビートを駆動するのか
安定したグルーヴはオンセットエンベロープを周期的にします — ピークがほぼ等間隔で繰り返されます。テンポ推定はその周期を探し、ビート追跡はピークの上に拍の列を置きます。両者は同じエンベロープを読むため、オンセット検出を改善するとテンポとビートの精度が同時に上がります。
libsonare がオンセット強度をどう計算するか
OnsetAnalyzer は STFT 振幅から、フレーム間の正のスペクトル差分を合算し、単一のオンセット強度エンベロープを導きます。必要に応じてメル帯域ごとの差分も使います。
OnsetConfig は差分のラグ(lag = 1 フレーム)、DC 成分を除く detrend、各値をフレーム中央へそろえる center などを公開します。
このエンベロープは BpmAnalyzer のテンポグラムと BeatAnalyzer のビート追跡(動的計画法)に供給され、オンセット駆動の動きを求めるビジュアライザー向けにも公開されます。共有 STFT の上に作られるため、オンセットを他の特徴量と一緒に要求してもスペクトログラムを計算し直しません。
関連: MIR の全体像, テンポと BPM, ビートとダウンビート, スペクトログラムと STFT