FX INTRODUCTION / 02

Slicer:鳴り続ける音を刻む

Slicerは、鳴っている音を細かく刻んでリズムを作るエフェクトです。

まず演奏を聴いて、どんな使い方ができるか試してみましょう。

1. まずは、この音を聴いてみる

Runを押してみてください。音の高さが滑らかに動きながら、細かく刻まれたリズムが聞こえます。音を刻んでいるのがSlicerです。この例ではReverbで余韻も加えています。

Runで再生、Stopで停止します。次のサンプルを試す前に、この演奏をStopしてください。

このコードを別タブのPlaygroundで開く ↗

刻み方を変えてみるなら、choose([0.25, 0.125])をchoose([0.5, 0.25])に変えてApplyしてみましょう。刻む間隔が長くなります。

次はシンプルな音で、Slicerの設定を1つずつ試してみます。

2. シンプルな音で設定を試す

音源はGainの章と同じ長いサイン波です。音符を細かく鳴らし直す代わりに、鳴っている音をFXで開閉します。

設定意味
phase1周期の長さ(拍)。初期位相の指定ではありません。
duty周期のうち開く割合。0.5なら半分。
floor閉じている間のGain。0なら無音。
mix加工音を混ぜる割合。1で加工音のみ。

BPM 120では1拍が0.5秒。phase 0.5なら1周期0.25秒、1秒に4回の開閉になります。

iframe内のRunで再生し、Stopで停止します。再生中に値を編集したらApplyで反映してください。比較する前に、もう一方のPlaygroundをStopしてください。それぞれ独立した音声環境です。

RunしたらFX Monitorでnoneを選ぶと、組み込みFXを通った後の波形が見られます。liveFx("none", …)は観測用の素通し処理です。青とオレンジは同じ波形で重なり、組み込みFXの加工前後の比較ではありません。設定を変更してApplyし、波形の変化を見てください。

このコードを別タブのPlaygroundで開く ↗

phaseを1にするとゆっくり、0.25にすると速く刻みます。dutyを0.2にすると短い音の粒、0.8にすると短い隙間になります。floorを0.2にすると完全な無音を避けられます。

3. 1周期を0〜1の位置で考える

phase = position / period
level = phase < duty ? 1 : floor
output = input × level

duty 0.5なら前半は開き、後半は閉じます。これは音量を動かす処理で、音源のキーオン・キーオフやエンベロープの再始動ではありません。

急に音を切ると波形に不連続ができ、クリック音や追加の周波数成分が生じます。高速にすれば、リズムよりも音色の変化として聞こえる場合があります。

4. サンプルを数えるSlicer

まずは秒やBPMへの変換を分けて、周期をサンプル数で指定します。periodSamples: 12000は48 kHzなら0.25秒、44.1 kHzなら約0.272秒です。この例はBPMへ自動追従しません。

秒から変換するなら periodSamples = 周期の秒数 × 実際の出力サンプルレート。拍から変換するなら周期の秒数を 60 / BPM × 拍数 とします。出力レートはFX Monitorに表示されます。

このコードを別タブのPlaygroundで開く ↗

  1. Runし、FX Monitorでslicer-labを選びます。入力は続いていても、出力が0になる区間があります。
  2. contextのdutyを0.2や0.8に変えてApplyし、聞こえる長さを比較します。
  3. floorを0.2にして、閉じた区間の振幅を見ます。
  4. 細かい開閉を波形で見るにはperiodSamplesを1000にします。Monitorの2048サンプル窓に複数の周期が入ります。

12000サンプル周期では、短い表示窓が開いた部分だけ、または閉じた部分だけを捉える場合があります。1枚の波形だけでなく、変化と音を合わせて確認してください。

5. なぜstateに位置を残すのか

state.position ??= 0;
// サンプルを1つ処理するたびに進める
state.position = (state.position + 1) % period;

processは何度も呼ばれ、毎回iは0へ戻ります。iだけで周期を計算すると、音声ブロックごとに周期も再始動してしまいます。state.positionなら次のブロックへ位置を引き継げます。

左右を処理した後に1回だけ位置を進めるので、左右は同じタイミングで開閉します。同じ名前でApplyするとstateは維持され、Stopで破棄されます。

これは仕組みを学ぶための矩形ゲートです。組み込み版の全動作の再現ではありません。次の実験として、境界のGainを少しずつ変えればクリック音を和らげられます。

← Gainへ戻る · 次の章:Distortionで波形の形を変える →