LoginSignup
2
2

More than 5 years have passed since last update.

WebAudioAPIでリバーブを製作

Posted at

Convolverリバーブがデフォルトでありますが、コムフィルタを4個(各々にローパスフィルタでハイダンプしたもの)並列接続した擬似リバーブを製作してみました。

これにオールパスフィルタを2個直列接続すれば、シュレイダー式のリバーブ風になりますが、面倒なのでパス。

インスタンスのプロパティやパラメータを最初の宣言でまとめられたら楽なのですが、やり方がわからないので適当です。
配列を作ってXXのゲイン、Qとか書くのすごい面倒ですね。

javascript
var dry = Actx.createGain();
var parallel = Actx.createGain();
var wet = Actx.createGain();

var delay = new Array();
var feedback = new Array();
var LPF = new Array();
//ディレイタイム、フィードバックゲインのリスト化
var delaytimeList = [0.039, 0.0367, 0.0332, 0.0299];
var feedbackList = [0.8356, 0.8445, 0.8582, 0.8321];

//コムフィルタの製作
for (var i = 0; i < 4; i++) {
    delay[i] = Actx.createDelay();
    feedback[i] = Actx.createGain();
    LPF[i] = Actx.createBiquadFilter();
    LPF[i].type = "lowpass";
    LPF[i].frequency.value = 12000;
    LPF[i].Q.value = 0;
    delay[i].delayTime.value = delaytimeList[i];
    feedback[i].gain.value = feedbackList[i];
}

dry.gain.value = 1.0;
wet.gain.value = 0.5;
parallel.gain.value = 0.25;

//ルーティング
source.connect(dry).connect(gain);
//コムフィルタ4個を並列接続
for (var i = 0; i < 4; i++) {
    source.connect(parallel).connect(delay[i]).connect(wet);
    (delay[i]).connect(feedback[i]).connect(LPF[i]).connect(delay[i]);
}

wet.connect(gain).connect(Actx.destination);
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2