エンベロープとモジュレーション
生のオシレーターは静的です。キーを押せば、1 つの音量と 1 つの音色で延々と鳴り続けます。実際の楽器はそうではなく、ノートは膨らみ、明るくなり、減衰し、消えていきます。モジュレーションは「何かが時間とともに変化すること」を表す総称で、平板なシンセ音を音楽的な音に変えるのはこれです。
このページでは、最もよく出会う 2 種類のモジュレーション源(エンベロープと LFO)、重ねたノートが同じ音に聞こえないようにするボイスごとのゆっくりしたドリフト、モジュレーションとして働く演奏入力(ベロシティとキートラッキング)、そして源と行き先を配線するモッドマトリクスを説明します。中心は概念で、パラメータ名は最後にまとめています。変調される側のブロックは、先に シンセシスの基礎 で押さえてください。
ADSR アンプエンベロープ
エンベロープは、ノートごとに 1 回だけ展開するカーブです。古典的なエンベロープは Attack(アタック)、Decay(ディケイ)、Sustain(サステイン)、Release(リリース)の 4 段階、略して ADSR で構成されます。最も重要なエンベロープは、ノートの始まりから終わりまでの音量を制御するものです。
- レベル
- アタックの目標値
| 段階 | 制御するもの | 長い値の聞こえ方 | 短い値の聞こえ方 |
|---|---|---|---|
| アタック | 無音から最大まで立ち上がる時間 | ゆっくり膨らむ(パッド、ストリングス) | 瞬時の打音(撥弦、ピアノ) |
| ディケイ | ピークからサステインの高さまで下がる時間 | じわじわ落ち着く | 素早く下がる |
| サステイン | キーを押している間に保持される高さ(時間ではない) | 大きく保たれる本体(高い値) | 押していても小さい/消える(低い・ゼロの値) |
| リリース | キーを離した後に消えるまでの時間 | 長い余韻、残響のよう | 唐突に途切れる |
撥弦的な音は、速いアタック・速いディケイ・サステインゼロ・短いリリースです。パッドは、遅いアタック・高いサステイン・長いリリースです。同じオシレーターでも、エンベロープだけでまったく別の楽器になります。
アタック・ディケイ・リリースは時間、サステインは高さ
ADSR の 4 つのうち 3 つは時間(ミリ秒)です。サステインだけが例外で、キーを押し続けている間ずっと保持される音量の高さを表します。だから「サステインゼロ」のパッチは、キーを押したままでも無音になります。
各段の形
各段は直線ではなく曲線です。直線のフェードは機械的に聞こえます。実際の楽器は、単位時間ごとに一定の割合で減衰していくからです。
- アタックは、最初が急で頂上付近で緩やかになる曲線で上がり、アタック時間ちょうどで最大レベルに達します。NativeSynth でアタック 200 ms を測ると、50 ms で −7.4 dB、100 ms で −3.2 dB、200 ms で最大です。
- ディケイとリリースは指数関数的に下がります。レベルをデシベルで描くと直線になる下がり方です。設定した時間は、目標に届く時点ではなく、目標までの道のりの約 95% を下がった時点(時定数 3 つ分)を表します。リリースと、サステイン 0 へのディケイでは目標が無音なので、その時点は約 26 dB 下です。0 より大きいサステインへのディケイは、設定時間でピークからサステインまでの道のりの 95% に達します。サステイン 0.5 なら約 −5.6 dB で、−26 dB ではありません。リリース 600 ms では、200 ms 後に −8.5 dB、400 ms 後に −17.2 dB、600 ms 後に −25.9 dB で、1.2 秒後でもまだ −51.9 dB です。これは
SynthPatchのアンプ/フィルターエンベロープの挙動で、最小構成の内蔵オシレーター楽器の ADSR はリニアなランプで進み、設定時間が 0 から 1 までの全幅に相当します。
つまりリリースは、設定した時間を過ぎても小さく鳴り続けます。決まった時点でテールを終わらせたいときは、設定時間をそのまま終点と見なさず、リリースを短くしてください。
ディレイとホールド: DAHDSR
ADSR の前後に、さらに 2 つの段を加えられます。ディレイは、キーを押してからアタックが始まるまでの一定時間、エンベロープを 0 に保ちます。ホールドは、アタックのあとディケイが始まるまでの一定時間、エンベロープをピークに保ちます。全体の順序はディレイ、アタック、ホールド、ディケイ、サステイン、リリースで、これを DAHDSR と呼びます。どちらも 0(既定値)なら、上の通常の ADSR と同じです。
ディレイはレイヤーをずらすのに使います。同じノートに 2 つのパッチを重ね、一方に 200 ms のディレイを付ければ、2 つ目の声部が 1 つ目より後から入ってきます。ホールドは、打撃音を最大レベルのまま少し保ち、減衰が始まる前に胴鳴りとして聞かせるのに使います。NativeSynth で測ると、ampDelayMs を 200 ms にしたとき最初の 0 でない出力サンプルはちょうど 0.200 秒に来ます。ampHoldMs を 300 ms にすると、0.3 秒までレベルはピークのまま平らで、その後ディケイがサステインのレベルまで下げます。どちらの段も 0〜5000 ms で、フィルターエンベロープにも同じ段があります。
ワンショットのノート
通常は、キーを離した時点でリリースが始まります。ワンショットのボイスはキーを離したことを無視し、エンベロープを自分の時間経過で最後まで進めます。叩かれたドラムが、スティックが打面に触れていた長さを気にしないのと同じです。ノートの長さは関係なくなり、テールの長さはディケイの時間で決まります。
NativeSynth では oneShot: true がこれに当たります。ディケイ 400 ms、サステイン 0、リリース 1500 ms のサイン波パッチを 0.1 秒だけ弾くと、違いがはっきり出ます。oneShot がなければキーを離した時点で 1500 ms のリリースに切り替わり、1.0〜1.5 秒の区間でもまだ約 −52 dB で鳴っています。oneShot を付けると 400 ms のディケイ曲線のまま下がり続け、その頃には無音です。
ワンショットのボイスも、どこかで終わる必要があります。サステインが 0 ならディケイで終わります。サステインが正なら、それ自体で止まるエンジンが必要です。有限の FM エンベロープ、パーカッションの打撃、ループしないサンプルなどです。oneShot を付けてサステインが 0 より大きい減算式パッチは終わらないので、長さ自動のバウンスは拒否されます。明示的な長さを指定してレンダリングしてください。
独立したフィルターエンベロープ
アンプエンベロープは音量を整形します。もう 1 つの独立したエンベロープでフィルターカットオフを整形すると、音色が独自の時間経過で変化します。速いフィルターアタックがすぐに下がれば、シンセベースの明るい「プラック」になります。遅いフィルターアタックなら、パッドがゆっくり開いていきます。2 つのエンベロープは独立しているので、小さくなりながら明るくなるノートのような、どんな組み合わせも作れます。
LFO(ゆっくり繰り返す動き)
LFO(低周波オシレーター)は、ピッチとして聞こえないほど遅いオシレーターで、典型的には 1 Hz 未満から数 Hz 程度で振れます。直接鳴らすのではなく、そのゆるやかな上下の波で何かを変調します。
- LFO → ピッチ = ビブラート(保持したノートの小さな揺れ)。
- LFO → 音量 = トレモロ(脈打つ音量)。
- LFO → フィルターカットオフ = ベースやエレクトロニックな質感のゆっくりした「ワブル」。
LFO の主要なつまみは レート(周期の速さ)と デプス(行き先をどれだけ動かすか)の 2 つです。シェイプは LFO が描く波で、三角波、サイン波、あるいはなめらかなサンプル&ホールドとしてボイスごとに違う動きをするランダム波から選べます。NativeSynth ではパッチの lfoShape です。
ドリフト: ボイスごとにわずかにずれる音程
アコースティック楽器も古いアナログオシレーターも、完全には静止していません。ドリフトは、ボイスごとに別々に与える小さくゆっくりした音程の動きです。3 音の和音が足並みをそろえて動かず、重ねたボイスどうしが穏やかにうなり合います。ビブラートとは逆の性格で、ビブラートが全員共通の聞こえる揺れなのに対し、ドリフトは気付かない程度に収めるボイスごとのふらつきです。
NativeSynth のドリフトの操作子は 2 つです。driftCents は深さで、0(既定値、オフ)から 100 セントまでです。driftRateHz はふらつく速さで、0.01〜20 Hz、既定値は 0.3 です。各ボイスは深さのうち自分の取り分を符号付きで引き当て、速さも driftRateHz の 0.75〜1.25 倍の範囲で自分の値を引き当て、正しい音程から動き始めます。driftCents: 50、1 Hz で 3 つのノートを測ると、±3.2・±10.2・±9.3 セントでした。この引き当てがどこから来るかは retrigger が決めます。ボイスの開始位相やノイズも同じスイッチで決まります。カタログの値である 'free' ではノートごとに新しく引き当て、'note' ではノート番号で固定されるので、同じノートは毎回同じ音になります。
ベロシティとキートラッキング
モジュレーション源のうち 2 つは、シンセ本体ではなく演奏から来ます。
- ベロシティ:キーを叩く強さで、0〜127 の数値で送られます(MIDI の基礎 を参照)。音量へ配線すれば弱く弾いた音は小さく、強く弾いた音は大きくなります。フィルターへ配線すれば強く弾くほど明るくなり、実際の楽器を強く弾いたときの振る舞いに近づきます。
- キートラッキング:どの鍵を弾いたか。弾いたピッチをフィルターカットオフへ配線すると、高音も低音と同じ明るさに保てます(これがないと、高音は倍音が固定カットオフより上に出てしまい、こもって聞こえがちです)。
モッドマトリクス
モッドマトリクスは、ここまでの源と、それが動かす対象をつなぐパッチベイ、つまり「何が何を動かすか」の配線表です。ルーティング 1 本は 3 つの要素で決まります。
| 要素 | 意味 | 例 |
|---|---|---|
| ソース(源) | 動かす側 | LFO 1、LFO 2、アンプエンベロープ、フィルターエンベロープ、ベロシティ、キートラッキング、モッドホイール、ランダム |
| デスティネーション(行き先) | 動かされる側 | ピッチ(セント。100 セントで半音)、フィルターカットオフ(セント)、音量(ゲイン)、パン(位置) |
| デプス(深さ) | どれだけ、どちら向きに。単位は行き先自身の単位で、ソースが最大に振れたときの量です | LFO 1 → ピッチ(セント)でデプス 50 なら ±50 セント揺れます。ベロシティ → カットオフ(セント)でデプス 2400 なら、ベロシティ 127 でフィルターが最大 2 オクターブ開きます。負のデプスは逆向きに動かします |
「LFO 1 → ピッチ、小さなデプス」はビブラート、「ベロシティ → カットオフ、大きなデプス」は弾き方で変わる明るさ、「フィルターエンベロープ → カットオフ」は定番のシンセプラックです。ひと握りの源と行き先を組み替えるだけで、表現の幅は大きく広がります。
libsonare での実装
NativeSynth では、モジュレーションは SynthPatch の中にあります。アンプエンベロープは ampDelayMs・ampAttackMs・ampHoldMs・ampDecayMs・ampSustain・ampReleaseMs、独立したフィルターエンベロープは対応する filterDelayMs / filterAttackMs / filterHoldMs / filterDecayMs / filterSustain / filterReleaseMs の組です。範囲は synthPatchParamInfo() が返し、ディレイとホールドは 0〜5000 ms、アタックとディケイは 0〜20000 ms、リリースは 1〜20000 ms、サステインは 0〜1 です。oneShot はノートオフを無視させる真偽値です。ボイスごとのドリフトは三角波の LFO で、深さは driftCents にシードで決まる [−1, 1] の係数を掛けた値、速さは driftRateHz にシードで決まる [0.75, 1.25] の係数を掛けた値です。2 つの LFO は lfoRateHz と lfo2RateHz で設定します。LFO 1 は lfoToPitchCents で直接ピッチを動かし、LFO 2 はルーティングで使われるまで何もしません。自由なルーティングは modRoutings にあり、最大 8 本の { source, destination, depth } の配列で、空でなければベースプリセットのマトリクスを置き換えます。ソースは 'amp-env'・'filter-env'・'lfo1'・'lfo2'・'velocity'・'key-track'・'mod-wheel'・'random'・'breath'・'aftertouch'・'expression-cc'・'pitch-bend'、デスティネーションは 'pitch-cents'・'cutoff-cents'・'amp-gain'・'pan-units'・'resonance-q'・'vibrato-depth-cents'・'filter-env-depth'・'lfo1-rate-scale' と、物理モデル系エンジン用の 'excitation-force'・'excitation-position'・'excitation-brightness'・'spectrum-morph' です。