読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

Web Audio APIのモジュラー接続デモを作ってみる(7)

今日はエンベロープ・ジェネレータ(EG)を作ろうと、少し設計を考えて軽く実装し始めたところ。 EGはアナログシンセではほぼ必須の機能である。これがないと楽音のシミュレーションができない。

https://41.media.tumblr.com/5375582dd5e50001a64256b7f129dc64/tumblr_nwzf2gSXsX1s44dwzo1_1280.png

上図は典型的なADSRタイプのEGのパラメータを説明するものである。アンプに対してのEGの動きを説明すると、

  1. キーオンでEG発動。
  2. まずアタックレートの時間で最大音量まで音量を上げる。
  3. 次にディケイレートの時間でサスティンレベルまで音量を下げる。
  4. キーオフまでサスティンレベルの音量で持続。
  5. キーオフでリリースレートの時間で0まで音量を下げる。

である。EGはフィルタにも使うことが多い。

Web Audio APIはEGを持っていないので、ソフトウェアでシミュレーションしなければならない。通常なら揺らぎのあるタイマーしかないブラウザ環境ではタイミングの維持が非常に難しいが、Web Audio APIのパラメータは

  • ある時間にパラメータを設定
  • ある時間に指定したレベルまで線形・指数に増加・減少させる。

とかが可能で、時間管理をAPIに任せることができる。EGを実装するのに非常に有効である。

なのでEGはGainノードのgainパラメータをうまくコントロールすれば比較的簡単に実装できるのである。

EGのキーオン・キーオフのコントロールはシーケンサーで行うつもりなので、そのあたりの設計もある程度考えておかないといけない。やはり普通のオーディオ・ルーティングに含めるのは無理があるので、別系統でルーティングするようにしないといけないなと思っている。

詳細は実装しながら考えることにする。