山に向かって「ヤッホー」と叫ぶと、少し遅れて自分の声が返ってきます。返ってきた声は元の声よりも小さく、運が良ければ2回目、3回目と、だんだんかすかになりながら繰り返します。カラオケのエコーも、ギタリストが足元で踏むディレイペダルも、正体はこのやまびこです。音を豊かに響かせているように聞こえますが、やっていることを言葉にすると拍子抜けするほど単純で、いまの音に「少し前の自分の音」を弱めて混ぜているだけなのです。
ディレイの音を曲で聴く ディレイは、ただ音を後ろに足すだけの飾りではありません。遅れて返ってくる音がリズムの隙間を埋めると、演奏していない音符まで鳴っているように聞こえます。本文に入る前に、ディレイがフレーズそのものになっている曲を2つ置いておきます。
U2 / The Joshua Tree
Where the Streets Have No Name
冒頭のギターは、付点8分ディレイが音符の隙間を埋める代表例です。1本のアルペジオに「少し前の自分」が重なり、細かく走るリズムへ広がります。
YouTubeで探す Amazonで探す Pink Floyd / The Wall
Run Like Hell
ミュートしたギターにディレイを重ね、反復音まで含めてリフを作る曲です。本文のフィードバック量を上げたときの「返ってくる列」が、演奏の推進力になります。
YouTubeで探す Amazonで探す ジャケット画像はMusicBrainz / Cover Art Archive由来の画像を記事内に同梱して配信しています。
山びこの場合、この「少し前の自分」を届けてくれるのは山です。声が山まで飛んで戻ってくるのに時間がかかるから遅れる。空気の中で減衰するから弱くなる。ではプログラムの中でこれを再現したいとき、山の代わりは何が務めるのか。音を一定時間だけ「ためておいて」、あとから取り出せる置き場所があればいい。今回の主役はその置き場所、リングバッファです。
少し前の自分を、輪にためておく 前提をひとつだけ確かめておくと、コンピューターにとって音とは1秒あたり44100個流れてくる数の列です。スピーカーの膜をどれだけ押し出すかを表す数が、毎秒4万個あまり届いているだけで、サイン波も人の声もこの数の並びにすぎません。だから「少し前の自分の音」とは、少し前に流れていった数のことです。0.3秒前の自分が欲しければ、直近13230個(44100 × 0.3)の数をためておいて、いちばん古いものから取り出せばいい。
ここで使うのが、固定長の配列を端まで来たら先頭へ戻る「輪」に見立てて使う、リングバッファと呼ばれるデータ構造です。当ブログでは以前、Queue の先頭削除からシフトを消す道具 として仕組みを紹介しました。要素を1つも動かさず、位置を指す目印だけをぐるぐる回すのが持ち味でしたが、今回はそのリングバッファが音響エフェクトの心臓部として働く、いわば実戦編です。
ディレイでの使い方はこうです。輪の上に、針を2本立てます。1本は書き込み針で、いま入ってきた音を毎サンプル、輪のマスに書き込んでは隣へ進む。もう1本は読み出し針で、書き込み針から一定の距離だけ離れた後ろを、同じ速さでついて回ります。
書き込み針がいまマスに置いた音を、読み出し針は自分がそのマスに到着したときに拾います。2本は同じ速さで回っているので、到着するのはきっかり「針の間隔ぶん」あとです。つまり読み出し針が拾う音は、いつでも「間隔ぶん昔の音」。この間隔こそがディレイタイム、やまびこが返ってくるまでの時間です。0.3秒のエコーが欲しければ針を0.3秒ぶん(13230マス)離しておく。エフェクターのつまみを回してディレイタイムを変えるという操作は、輪の上では針の間隔を広げたり狭めたりしているだけなのです。
追いかけっこという言葉を使いましたが、2本の針の間隔は永遠に縮まりません。等間隔を保ったまま輪を回り続ける。この安定した追いかけっこが、「常に一定時間前の音が取り出せる」という保証そのものになっています。
やまびこを連ねる ── フィードバック 読み出し針が拾った「少し前の音」を弱めて、いまの音に足す。これで1回だけのやまびこができます。しかし本物のやまびこは2回、3回と続きますし、ディレイペダルの音の魅力も、あの減衰しながら連なる尾にあります。やまびこを連ねるには、どうすればいいのでしょうか。
素朴に考えると、0.6秒前・1.2秒前・1.8秒前……と読み出し針を何本も立てて、それぞれ弱めて足したくなります。それでも作れるのですが、もっとうまい一手があります。混ぜ終わった出力のほうを輪に書き込むのです。
書き込み針が輪に書くのを「入ってきた生の音」ではなく「やまびこを混ぜたあとの出力」にする。すると出力は0.6秒後に読み出し針に拾われて、また弱められて出力に混ざり、それがまた書き込まれて……と、ぐるぐる回り始めます。1回目のやまびこには2回目が、2回目には3回目が、勝手についてくる。この、出力を入口へ戻す配線をフィードバックと呼びます。針を1本も増やさずに、無限に続くやまびこの列が手に入るわけです。
弱める割合を $g$ とすると、やまびこは1周ごとに $g$ 倍されるので、音量は $g,\ g^2,\ g^3,\ \dots$ と等比数列で減っていきます。$g$ が1より小さい限り、この列は必ずゼロへ向かうので、やまびこは自然に消えてくれます。逆に $g$ を1以上にすると、回るたびに音が減らない、あるいは膨らんでいくことになり、音は永遠に止まらずやがて轟音になります。これが発振です。カラオケでマイクをスピーカーに向けたときの「キーン」というハウリングは、まさに空気の上で起きた $g \geq 1$ のフィードバックです。ディレイを実装するときにフィードバック量へ上限を設けるのは、この事故を防ぐためで、このあとのデモでも85%を上限にしています。
...