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);