FX INTRODUCTION / 01
Gain:音の波形に掛け算する
まずは、音を大きくしたり小さくしたりする「Gain」を試してみましょう。
この章では、Gainの倍率、波形との関係、そして自分で書くliveFxの基本を扱います。
1. まず聴いてみる
YM2612のサイン波を、2拍鳴らして0.5拍休みます。
ループごとにcycle([0.25, 0.5, 1.0])でGainを順に切り替えます。配列の値を変えて比較します。0は無音、1はこのFXでは振幅を変えない設定です。
iframe内のRunで再生し、Stopで停止します。再生中に値を編集したらApplyで反映してください。比較する前に、もう一方のPlaygroundをStopしてください。それぞれ独立した音声環境です。
RunしたらFX Monitorでnoneを選んでください。音の大きさが切り替わると、波形の高さも変わります。
2. 波形の高さを変える
最初のサンプルでは、Gainを変えると音の大きさが変わりました。FX Monitorでは、波形の高さも変わっていることが分かります。
音のデータには、波形の各時点の値が並んでいます。Gainは、その値を1つずつ同じ倍率で掛け算します。
出力の値 = 入力の値 × Gain
例えばGainが0.5なら、0.2は0.1に、−0.2は−0.1になります。波形の上側も下側も、中心の0に近づきます。
| 入力の値 | Gain | 出力の値 |
|---|---|---|
| 0.2 | 0.5 | 0.1 |
| −0.2 | 0.5 | −0.1 |
| 0.2 | 0 | 0 |
Gainが1ならそのまま、0.5なら波形の高さが半分、0なら無音です。この波形の高さを「振幅」と呼びます。
高さが半分になることと、耳で「半分の大きさに聞こえる」ことは同じではありません。まずはサンプルで0.25、0.5、1.0の波形を見ながら、聞こえ方を比べてみてください。
3. 同じ掛け算をliveFxで書く
音のチャンネルは2つあり、左から聞こえる音と、右から聞こえる音です。このコードでは、左右それぞれの音のデータに同じ掛け算をしています。
output[ch][i] = input[ch][i] * context.gain;
contextは音声処理へ渡す設定、stateは次回へ残す履歴です。Gainは過去の音を使わないため、stateは空のままで構いません。
- Runして、FX Monitorで
gain-labを選びます。 - 青が入力、オレンジが出力です。Gainは0.25 → 0.5 → 1.0と切り替わります。0.5では出力の波形の高さが半分、1.0では入力と重なります。
- Codeへ戻り、ループ内のcycleの配列を[1.0]に変えてApply。Monitorでは波形が重なります。
- 0.25、0も試します。Spectrumのピークの位置は保たれ、強さが変わります。
最初のcontextは初期値です。ループ内のfx.updateContext("gain-lab", …)で音声処理側の設定を更新します。この例も2拍鳴らして0.5拍休みます。
表示は短い区間の切り出しなので、フレームごとに波形が横へ動く場合があります。入力と出力の同じ時刻を比較してください。
組み込みGainはパラメーター変更を滑らかにする処理も持ちます。この最小例は値を即座に変えるので、変更時にクリック音が出る場合があります。liveFxの出力は現在−1〜1に制限されます。
次は、Gainを時間で変える
ずっと0.5倍にする代わりに、1倍と0倍を交互に選ぶと、音を刻めます。
2. Slicerへ →