FX INTRODUCTION / 02
Slicer:鳴り続ける音を刻む
Slicerは、鳴っている音を細かく刻んでリズムを作るエフェクトです。
まず演奏を聴いて、どんな使い方ができるか試してみましょう。
1. まずは、この音を聴いてみる
Runを押してみてください。音の高さが滑らかに動きながら、細かく刻まれたリズムが聞こえます。音を刻んでいるのがSlicerです。この例ではReverbで余韻も加えています。
Runで再生、Stopで停止します。次のサンプルを試す前に、この演奏をStopしてください。
刻み方を変えてみるなら、choose([0.25, 0.125])をchoose([0.5, 0.25])に変えてApplyしてみましょう。刻む間隔が長くなります。
次はシンプルな音で、Slicerの設定を1つずつ試してみます。
2. シンプルな音で設定を試す
音源はGainの章と同じ長いサイン波です。音符を細かく鳴らし直す代わりに、鳴っている音をFXで開閉します。
| 設定 | 意味 |
|---|---|
| phase | 1周期の長さ(拍)。初期位相の指定ではありません。 |
| 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し、波形の変化を見てください。
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に表示されます。
- Runし、FX Monitorで
slicer-labを選びます。入力は続いていても、出力が0になる区間があります。 - contextのdutyを0.2や0.8に変えてApplyし、聞こえる長さを比較します。
- floorを0.2にして、閉じた区間の振幅を見ます。
- 細かい開閉を波形で見るには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を少しずつ変えればクリック音を和らげられます。