今日はエンベロープ・ジェネレータ(EG)を作ろうと、少し設計を考えて軽く実装し始めたところ。 EGはアナログシンセではほぼ必須の機能である。これがないと楽音のシミュレーションができない。
上図は典型的なADSRタイプのEGのパラメータを説明するものである。アンプに対してのEGの動きを説明すると、
- キーオンでEG発動。
- まずアタックレートの時間で最大音量まで音量を上げる。
- 次にディケイレートの時間でサスティンレベルまで音量を下げる。
- キーオフまでサスティンレベルの音量で持続。
- キーオフでリリースレートの時間で0まで音量を下げる。
である。EGはフィルタにも使うことが多い。
Web Audio APIはEGを持っていないので、ソフトウェアでシミュレーションしなければならない。通常なら揺らぎのあるタイマーしかないブラウザ環境ではタイミングの維持が非常に難しいが、Web Audio APIのパラメータは
- ある時間にパラメータを設定
- ある時間に指定したレベルまで線形・指数に増加・減少させる。
とかが可能で、時間管理をAPIに任せることができる。EGを実装するのに非常に有効である。
なのでEGはGainノードのgainパラメータをうまくコントロールすれば比較的簡単に実装できるのである。
EGのキーオン・キーオフのコントロールはシーケンサーで行うつもりなので、そのあたりの設計もある程度考えておかないといけない。やはり普通のオーディオ・ルーティングに含めるのは無理があるので、別系統でルーティングするようにしないといけないなと思っている。
詳細は実装しながら考えることにする。