音色を変えるデジタルフィルター入門。ローパスとハイパスのカットオフを考える
サウンドプログラミングで音色を変えるとき、いちばん基本になる道具がフィルターです。フィルターは、音を「加工する魔法の箱」ではありません。波形の中から、速く変化する部分を弱めたり、ゆっくり変化する部分を弱めたりする計算です。 この記事では、ローパスとハイパスに絞ります。まずは「ローパスのカットオフ周波数を、デジタルの1サンプルごとの計算へどう変換するのか」をはっきりさせます。 フィルターの音を曲で聴く フィルターは、単体で主役になるというより、音の明るさを開いたり閉じたりして曲の呼吸を作る道具です。特にサンプルを反復するダンスミュージックでは、同じループでも高域を削ると遠く、開くと一気に前へ出てきます。ここでは、その「明るさを動かす」感覚で聴きやすい曲を2つ挙げます。 Daft Punk / Discovery One More Time French house のフィルター感をつかむ入口として分かりやすい曲です。ループの明るさが前へ出たり奥へ引いたりする聴こえ方を、ローパスの「高域を削る」と結びつけて聴けます。 YouTubeで探す Amazonで探す Stardust / Single Music Sounds Better With You 短いサンプルを反復しながら、明るさと密度でグルーヴを育てる French house の代表例です。同じ素材でも、高域の残し方で近さや抜けが変わることを聴き取りやすいです。 YouTubeで探す Amazonで探す ジャケット画像はMusicBrainz / Cover Art Archive由来の画像を記事内に同梱して配信しています。 ローパスは波形をならす ローパスフィルターは、低い周波数を通し、高い周波数を落とすフィルターです。言い換えると、波形の急な変化をならします。矩形波やノコギリ波の角が丸くなり、音は明るさを失って、こもった方向へ変わります。 いちばん直感的なローパスは、移動平均です。いまの値だけでなく、少し前の値もまとめて平均します。たとえば4個の値を平均するなら、次のようになります。 $$ y[n] = \frac{x[n]+x[n-1]+x[n-2]+x[n-3]}{4} $$ $x[n]$ は入力、$y[n]$ は出力です。$n$ は「何番目の値か」を表す番号です。最後に4で割っているのは、4個の値を足して平均しているからです。3個を平均するなら3で割りますし、8個を平均するなら8で割ります。 この式は、波形の細かいギザギザをならします。細かいギザギザは高い周波数成分なので、高域が落ちます。まずはこれがローパスの出発点です。 実際のサウンドプログラミングでは、次のような形もよく使います。 $$ y[n] = ax[n] + (1-a)y[n-1] $$ これは、いまの入力 $x[n]$ と、ひとつ前の出力 $y[n-1]$ を混ぜる式です。$a$ が大きいほど入力に素早く追従し、$a$ が小さいほど前の出力を強く引きずります。前の値を引きずるほど、急な変化には追いつけません。だから高域が落ちます。 コードにすると、1サンプルごとの処理は次の形です。 let y = 0; function lowpass(x, a) { y = a * x + (1 - a) * y; return y; } ここではまだ、カットオフ周波数をどう計算するかは置いておきます。まず大事なのは、ローパスが「前後の値を混ぜて、急な変化をならす」処理だということです。 ...




