前回のウブルベース では、LFO(別のつまみを周期的に動かすための低周波発振器)を使ってフィルターのカットオフを上下させました。音色の明るさを外から動かすことで、あの「ウォブウォブ」を作る仕組みです。

今回の Reese Bass は、似たような低音のうねりが聞こえても成り立ちが違います。LFOは一切使いません。わずかに周波数をずらした複数のノコギリ波をただ重ね、その足し算で起きる位相干渉を音色そのものにします。デチューンとは、同じ音程のつもりで鳴らす音を少しだけ高く、または低くずらすことです。

LFOでフィルターを動かすウブルベースと、デチューンした波を重ねて干渉を作るReese Bassの対比

Reese Bassを曲で聴く

Reese Bass という名前は、デトロイト・テクノのプロデューサー Kevin Saunderson が Reese 名義で1988年に発表した「Just Want Another Chance」に由来します。KMS Records / Incognito Records からリリースされたこの曲のベースラインは、後年ドラムンベースやジャングルのプロデューサーたちに再発見され、繰り返し使われるうちに音色の名前として定着しました。

Reese『Just Want Another Chance』のシングルジャケット

Reese / Just Want Another Chance

Just Want Another Chance

Reese Bassという呼び名の出発点になった曲です。ベースを一つの固定した音としてではなく、濁りながら内部で動き続ける塊として聴くと、このあとの位相干渉の話へつながります。

Renegade『Terrorist / Something I Feel』のシングルジャケット

Renegade / Moving Shadow

Terrorist

Ray Keithの別名義Renegadeによる1994年の曲です。DJ Magが「gargantuan Reese」と評し、ジャングルのブループリントになった代表曲として紹介しています。

Alex Reece『Pulp Fiction / Chill Pill』のシングルジャケット

Alex Reece / Metalheadz

Pulp Fiction

1995年に発表され、Reese Basslineを使った曲がドラムンベースのスタンダードになった代表例として語られる曲です。2-stepドラムンベースの先駆けとも言われます。

ジャケット画像はMusicBrainz / Cover Art Archive由来の画像を記事内に同梱して配信しています。

Kevin Saunderson はこのベースラインを、フェイズディストーション方式のシンセサイザー Casio CZ-1000 系で作りました。フェイズディストーションとは、波形を読む位相の進み方を変えて倍音を作る合成方式です。Attack Magazine のインタビューでは、本人がその音色によって曲の方向性そのものが決まったという趣旨を語っています。

2つの近い周波数が作るビート

Reese Bass の出発点は、特別な変調器ではなく単純な足し算です。周波数 $f_1$ と $f_2$ のサイン波を重ねると、加法定理によって次の形に書き換えられます。

$$ \sin(2\pi f_1 t) + \sin(2\pi f_2 t) = 2\cos\left(2\pi\frac{f_1-f_2}{2}t\right) \sin\left(2\pi\frac{f_1+f_2}{2}t\right) $$

右側の $\sin$ は2音のほぼ中間の高さで振動し、$\cos$ はその振幅をゆっくり膨らませたり縮ませたりします。2つの波の山と山がそろうと強め合い、山と谷が重なると打ち消し合う。この相対的な位置関係が位相であり、重ねた結果が周期的に大小する現象をビート、つまり「うなり」と呼びます。

このうなりは、耳で音程を合わせるときの手がかりでもあります。2つの音が近いとうなりはゆっくりになり、高さがぴたりとそろうと消える。この消える点を探して音を合わせるわけです。ついでに自作アプリの紹介を。筆者はこの音感を鍛える Harmonize というトレーニングアプリを個人開発しています。Reese Bass 用のシンセではありませんが、うなりを聴き取る耳は、この記事で見ていく位相干渉と地続きです。

式の $\cos$ 自体の周波数は $|f_1-f_2|/2$ ですが、符号が反転した振幅も耳には大きさとして聞こえるため、包絡線の山は $|f_1-f_2|$ Hz で現れます。たとえば差が0.3Hzなら、約3.3秒ごとに強さの山が戻ります。重要なのは、ここに揺らすための別回路がないことです。2つの音の線形な足し算そのものがうねりを生みます。フィルターのカットオフをLFOで動かすウブルベースとは、同じ「揺れ」でも原因が違います。

ノコギリ波では倍音ごとにビートが走る

サイン波2本なら、聞こえるビートは1組だけです。しかしノコギリ波には、基音の整数倍に並ぶ倍音が豊富に含まれます。倍音とは、音程の中心になる基音に重なり、音色の明るさや硬さを決める高い周波数成分です。ノコギリ波を2本重ねると、基音だけでなく2次、3次、4次……という倍音の各ペアでも同時に干渉が起きます。

シンセサイザーのデチューンは、半音を100等分したセントという単位で指定するのが一般的です。$c$ セントずらしたときの周波数は、次の比率で決まります。

$$ f_2 = f_1 \times 2^{c/1200} $$

この比率は全倍音に共通します。基音の絶対的な周波数差を $\Delta f$ とすると、$n$ 次倍音の差はおよそ $n\Delta f$ です。同じ割合のずれでも、周波数が高い倍音ほどHzで見た差が大きくなるからです。

デチューンした2本のノコギリ波で、倍音の次数が上がるほどビートが速くなる様子

基音が0.3Hzでゆっくりうなっているとき、10次倍音は3Hz、20次倍音は6Hzでうなります。つまり、ひとつの包絡線が音全体をまとめて上下させているのではありません。低い成分はゆっくり、高い成分は速く、それぞれの位相で強め合いと打ち消し合いを続けています。

この倍音ごとに違う速さのビートが同時進行する状態こそ、Reese Bass が単発の「ワーン」といううなりでは終わらない理由です。音量だけでなく、瞬間ごとの倍音バランスが変わり、左右へ振り分ければ定位まで動いて聞こえます。倍音全体がざわざわと蠢き、生き物のような濁りを作るのです。加算合成の記事 で1本ずつ積み上げた倍音が、ここではそれぞれ別の速度で干渉していると考えると見通しがよくなります。

サブベースとミッドベースを分ける理由

デチューンしたノコギリ波を最低域までそのまま鳴らすと、強め合う瞬間だけでなく、打ち消し合う瞬間も生まれます。とくに曲の土台になるサブ帯域でそれが起きると、低音の芯そのものが周期的に痩せ、音程や音圧が不安定になります。

そこで実際の制作では、いちばん低い帯域をデチューンしない1本のサイン波、または素直な単一オシレータで支え、デチューンしたノコギリ波は中域以上へ受け持たせる設計がよく使われます。低い芯をサブベース、倍音を聞かせる層をミッドベースとして分ける考え方です。

ウブルベースでもサブとミッドを分けましたが、狙いを混同してはいけません。ウブルではフィルターで音色を動かしても低域の土台を保つためでした。Reese Bass では、位相干渉によって低域そのものが不安定になるのを避けるために分けます。結果の構成は似ていても、解決している問題が違います。

ステレオ幅とモノ互換性

複数のデチューンしたオシレータを左右へ振り分けると、左右で波形の位相と倍音バランスが少しずつ変わり、広いステレオ感が得られます。中央に固定された低音より大きく包み込むように聞こえるため、Reese Bass と相性のよい手法です。

ただし、左右を足してモノラルへまとめると、片側の山と反対側の谷が重なって一部の周波数が消えることがあります。ステレオでは太かったのに、モノでは低域が痩せる、あるいは瞬間的に消えるのがモノ互換性の問題です。

左右に広げたデチューン音が、モノラルに合算されると位相の打ち消しで低域を失う様子

サブベースを中央のモノラルに保ち、広げるのは主にミッドベースに限定すると、迫力と安定を両立しやすくなります。クラブのサウンドシステムでは低域がモノにまとめられることがあり、スマホスピーカーのように左右の距離がほとんどない環境もあります。制作中はステレオだけで判断せず、定期的にモノラルへ切り替えて低域が残るか確認することが重要です。

歪みとフィルターで中域にキャラクターを出す

ノコギリ波はもともと倍音が多い波形ですが、歪みを加えると中域の密度をさらに増やせます。歪みは、入力と出力が比例しない非線形処理です。たとえば振幅 $x$ を $\tanh(drive \times x)$ に通すと、大きな振幅が丸められ、元の波形にはなかった倍音が加わります。

増えた倍音をそのまま残すと、鋭すぎたり高域が飽和して輪郭を失ったりします。そこでローパスフィルターを使い、設定した周波数より高い成分をなだらかに削って形を整えます。フィルターの働きは音の明るさを作るフィルターの記事 で扱ったものと同じです。

Reese Bass での歪みとフィルターは、LFOで周期的に「動かす」ための主役ではありません。倍音の密度と明るさを決め、位相干渉が聞こえやすい帯域を整える、キャラクターの下ごしらえとして使われることが多い処理です。

触ってみる

デモでは、2本のノコギリ波のデチューン量を変えながら、合成波形と周波数成分の動きを確認できます。まずずれを小さくして基音のゆっくりしたビートを聴き、次にスペクトラムで高い倍音ほど速く明滅する様子を見てください。サブベースの有無、ステレオ幅、歪み、フィルターを切り替えると、それぞれがうねりの核と音の仕上がりのどちらを担当しているか切り分けられます。

うまく表示されないときは、デモを別タブで開く

プログラムではこう組む

最小構成では、同じ基準周波数から少しだけ上下へずらしたノコギリ波を作り、足してから歪みとフィルターへ送ります。低域の芯は別のサイン波で支えます。C風の擬似コードなら、処理の中心は次のように書けます。

/* Reese Bassの最小構成(C風の擬似コード) */
for (n = 0; n < length; n++) {
    double ratio = pow(2.0, detuneCents / 1200.0);
    double sawL = saw(&phaseL, baseHz / ratio, fs);
    double sawR = saw(&phaseR, baseHz * ratio, fs);

    double reese = 0.5 * (sawL + sawR);       /* 足し算だけでビートが生まれる */
    double mid = highpass(reese, 90.0);       /* 不安定な最低域をミッドから除く */
    double dirty = tanh(drive * mid);          /* 倍音を足す */
    double shaped = lowpass(dirty, cutoffHz); /* 高域を整える */
    double sub = 0.35 * sin(2.0 * M_PI * baseHz * t);

    output[n] = sub + shaped;
}

Web Audio API では、OscillatorNode.detune へセント単位の値を設定できます。2本のオシレータを同じ GainNode へつなぐだけで合算され、専用のLFOノードは必要ありません。

const audioCtx = new AudioContext();
const mix = audioCtx.createGain();
mix.gain.value = 0.18;

for (const cents of [-7, 7]) {
  const osc = audioCtx.createOscillator();
  osc.type = 'sawtooth';
  osc.frequency.value = 55;
  osc.detune.value = cents; // OscillatorNode.detuneはセント単位
  osc.connect(mix);
  osc.start();
}

const highpass = audioCtx.createBiquadFilter();
highpass.type = 'highpass';
highpass.frequency.value = 90;

const drive = audioCtx.createWaveShaper();
const curve = new Float32Array(2048);
for (let i = 0; i < curve.length; i++) {
  const x = (i / (curve.length - 1)) * 2 - 1;
  curve[i] = Math.tanh(3 * x);
}
drive.curve = curve;
drive.oversample = '2x';

const lowpass = audioCtx.createBiquadFilter();
lowpass.type = 'lowpass';
lowpass.frequency.value = 1800;

const sub = audioCtx.createOscillator();
sub.type = 'sine';
sub.frequency.value = 55;

const subGain = audioCtx.createGain();
subGain.gain.value = 0.22;

mix.connect(highpass).connect(drive).connect(lowpass).connect(audioCtx.destination);
sub.connect(subGain).connect(audioCtx.destination);
sub.start();

detune の差を広げるほど、基音も倍音もビートが速くなります。ここでも変化を作っているのは detune で固定された2つの周波数の差であり、時間とともに値を動かすLFOではありません。

実際の制作では何を使うのか

デモは仕組みを見せるためにブラウザで組んでいますが、実際の制作ではDAW(録音、打ち込み、ミックスをまとめて行う音楽制作ソフト)とソフトシンセを使うのが一般的です。必要なのは「Reese Bass専用」の機能ではなく、複数オシレータのデチューン、波形の合算、歪み、フィルター、帯域分けを扱える環境です。

  • Native Instruments Massive / Massive X: 複数のオシレータやフィルター、歪み系の処理を組み合わせられるソフトシンセです。デチューンした波形を重ね、音の芯と動く倍音層を設計する用途に使えます。
  • Xfer Serum: 波形やモジュレーションの状態を画面で追いやすいソフトシンセです。ノコギリ波を複数重ねるところから、歪みやフィルターで質感を整えるところまで一つの環境で試せます。Amazon検索では関連書籍やプリセットが表示されることもあります。
  • Ableton Live: MIDIの打ち込み、ソフトシンセの演奏、帯域分割、歪みやフィルターの追加、モノ互換性の確認まで行うDAWです。ほかの一般的なDAWでも同じ信号処理の考え方で作れます。
  • MIDIキーボード / MIDIコントローラー: 音源ではなく、DAWやソフトシンセへ演奏情報を送る入力装置です。鍵盤でフレーズを試し、ノブでデチューン量やフィルターを調整できます。

最初は手持ちのDAWに付属するシンセで、2本のノコギリ波を左右に数セントずつずらすだけでも構いません。音の動きを増やす前にモノラルで低域を確認し、必要になった段階で歪み、フィルター、ステレオ幅を足すと、それぞれの役割を見失いにくくなります。

参考文献

デモで、一本ではなく倍音の束がうなる瞬間を目と耳で確かめてみてください。