Part 4.5: 期待される結果
原文: Onset Detection Part 4.5: What to expect
このシリーズのパート 1 で言った通り、音というものは、たとえばある曲の中の全体的な音に参加しているさまざまな周波数に分割することができる。次回の記事ではこのトピックについて詳細を説明していくが、この記事では周波数について最初に知っておく必要のあることについて説明する。それぞれの楽器には周波数の範囲というものを持っており、ボーカルについてもそれが当てはまる。調律された楽器/声ということだ。ドラムや他の打楽器はだいたい調律を持っておらず、周波数のスペクトラムに広くまたがっている。これは Wikipedia から抜粋した非常に興味深い表だ:
フーリエ変換とその周辺について学ぶ前に、ここで開発する音の立ち上がり検出器がどんな効果をあげるのかのイメージをつかんでほしい。そのために、音の立ち上がり検出器で出力する異なるジャンルの音楽の動画を用意した。あまり詳細には説明しないが、それぞれの動画では 3 つのプロットを見ることができる。最初のものは低い周波数、次のものは中間の周波数、そして一番下の最後のものはとても高い周波数のプロットだ。赤いラインが音の立ち上がりが存在すると思われる場所を教えてくれている。緑のラインを越えた赤いラインの頂点はどれも潜在的な音の立ち上がり/ビートだ。ここまで説明したから、検出器がさまざまな音楽のジャンルでどのように機能するのか見てみよう。まずはポップス:
とても有名な曲だと思う (うーん…)。3 つすべての範囲で音の立ち上がりが明瞭に可視化されている。なぜなら、この曲がだいたいシンセサイザーで作曲されているからだ。特にベースとドラムが影響を残し、検出器はこのジャンルではとてもうまく機能している。次のジャンルはロックだ:
オールスターバンド “A perfect circle” の “weak and powerless” という曲だ。ここでも音の立ち上がり/ビートの風景の中ではドラムの影響力がかなり強い。検出器はこの場合でもかなりいい仕事をしている。ロックは雑音が多く含まれるので音の立ち上がり検出のスキーマにとっては少し難しいジャンルだ。ディストーションのかかったギターやベースはすべての周波数をかなり強く汚染し、検出を少し難しくする。しかし、最終的な曲のミックスを担当したサウンドエンジニアがちゃんと仕事をしていれば、リズムを指示する楽器の周波数が目立ち、私たちのアルゴリズムで検出が可能となる。次にアコースティックロックを見てみよう:
“Tenacious D” の Explosivo という曲で、アコースティックギターからはじまり、より重厚なパートに入って行く。検出器は最初のギターのストロークをかなりよく選別している。重厚なパートに入ると、ギターが背景に周りドラムが最も影響力の高いリズムセクションとなる。一番上のプロットではドラマーがかなり速くキックを打っていることが分かるが、これはプロットなしの普通の状態ではこんなに明瞭に聴き取るができない。また、重厚なパートが開始するときに一番下のプロットでハイハットがフェードインしてくることにも注目してほしい。ハイハット、シンバル等のドラムパートのすべてがプロットの中で認識できるだろう。
yours truely の演奏による、純粋なアコースティックの曲。検出器はギターを非常によく見分けている。3 つのプロットすべてで 3/4 のリズムを容易に確認することができる。声は検出器にあまり大きな影響を与えない。
ジャズは音の立ち上がり検出器にとって非常に難しい対象だと言われている。非常にたくさんの音をプレイヤーが同時またはほぼ同時に演奏するからだ。また、たくさんの周波数帯が使い尽くされている。この例ではリズムを支配している楽器は再びドラムと少しのベースで、これは検出器にも見分けられている。しかし、曲のはじまりでリズムセクションの役割を果たしているのはピアノだ。再び検出器はかなりうまく機能している。曲のはじまりの拍手が検出器を少し狂わせているのにも注目してほしい。拍手は基本的には検出器にとっては単なるランダムなノイズに過ぎないのだが、ベストを尽くしてリズムパターンと思われるものを選別しようとしているのだ。
クラシックは音の立ち上がり検出器にとっては悪夢だ。このモーツァルトの演奏のように楽曲が弦楽器だけで構成されている場合は特にそう。ビート検出器は重厚な TODO
最後に In-Flames によるメタル。興味深いのはスネアが一番エネルギーを持っていることだ。バスドラムにはそこまでエネルギーはなく、実際曲のその他の部分に比べるとかなり静かだ。この曲の完全な周波数スペクトラムを見てみると、1 つのおおきな混沌としたヒートマップのようだということが分かるだろう。 (少なくとも私は周波数スペクトラムのためにヒートマップを使う。) 検出器はハイハットをあまりうまく選別できていない。というのはハイハットがオープンの状態で打たれるとあまり大きなエネルギーを出さず、静かでノイズの混じった音を出すからである。
次の動画は上記すべての抜粋した形式を 1 つの mp3 にミックスダウンして Audiosurf でプレイした様子だ。それぞれの抜粋を別々に Audiosurf に与えたら違った結果になったかもしれないが、面倒くさいのでやらなかった :)
“Hit me baby one more time” では Audiosurf はスネアと時々はキックに対してもブロックを生成する。”Weak and Powerless” でもほとんどすべてのハイハット/シンバル/ライドに対してブロックが生成される。”Explosivo” は少し変だ。一見すると原曲には全然似ていない。しかし詳しく観てみれば、ブロックが歌に基づいて生成されていることが分かるだろう! Audiosurf は一番音の大きいピークを選んでおり、”Explosivo” の場合には演奏時間のほとんどでそれが歌だったのではないかと推測する。次の曲では歌とギターのストロークが混ざっている。ジャズの曲では冒頭のピアノは選別されていないように見えるが、拍手は選別されている。残りはライドの影響だ。クラシックの曲では最初のほうは完全に失敗しているが曲の終わりに近づくにつれて良くなっている。これはバイオリンの音量が上がっていくのと対応しているように見える。最後の曲では演奏時間のうちほとんどでクラッシュが選別され、そこにいくつかスネアの音も混ざっている。すべての場合において言えるのは、Audiosurf がさまざまな周波数帯に対して周波数帯分析を行い、一番大きな音を持つ周波数帯を選んでブロックを生成しているように見えるということだ。この方法はポップミュージックでは非常にうまく機能するが、クラシック音楽ではあまりうまく機能しないようだ。興味深いのは “cloud connected” でクラッシュが選別されたということで、この曲に audacity のハイパスフィルターを多めにかけていじってみてもピークを見つけることはできなかった。本当におかしいな :)
この記事シリーズで開発する音の立ち上がり検出器は audiosurf が検出するすべての音の立ち上がりを見分けることができるように見える。 (やりたければ歌向けにちょっと調整するのもそんなに難しくない。) おそらく Audiosurf より少しうまくクラシックの曲も扱える、頑強な検出器を作り出すことができるだろう。