1

フィルター周波数が底を打ったときに LFO でフィルター ノードの周波数を変調すると、ポップノイズが発生します。

これは、振幅がカットオフの時点にないためだと思われます。ゲインも変調する必要がありますか?私はそうする必要がないことを望んでいましたが、とにかくどうしたらいいのかよくわかりません。

編集:サンプルコードへのリンクを忘れましたhttp://jsfiddle.net/hyf5N/

var context = new webkitAudioContext();

var lfo = context.createOscillator();

lfo.frequency.value = 10;

var saw = context.createOscillator();
saw.type = 'sawtooth';

var filter = context.createBiquadFilter();
filter.type = 'lowpass';

var gain = context.createGainNode();
gain.gain.value = 500;

saw.connect(filter);
lfo.connect(gain);
gain.connect(filter.frequency);

filter.connect(context.destination);

lfo.start(0);
saw.start(0)
4

2 に答える 2

0

私は 0 で lfo 信号をボトムアウトしたくなかったので、ウェーブシェイパーを機能させる方法を理解できませんでしたが、モジュレーションがフィルター周波数を 0 より下にプッシュしないようにしました。 scriptProcessorNode のように

modulationProcessor = this.context.createScriptProcessor(4096);
modulationProcessor.onaudioprocess = function(e) {
  // bottom out frequency modulation at filter.frequency == 0 to avoid popping
  var input = e.inputBuffer.getChannelData(0);
  var output = e.outputBuffer.getChannelData(0);
  var frequency = filter.frequency.value;
  for (var i = 0; i < input.length; i++) {
    output[i] = (input[i] + frequency) > 0 ? input[i] : input[i] - (input[i] + frequency);
  }
}

フィルターの周波数を頻繁に調整していると、時々ポップ音が発生する可能性があるため、完全ではありません。バッファが書き込まれている間にフィルタ値が古くなる可能性があるためだと思います。ただし、フィルター周波数をライブ編集していない場合は問題なく動作するようです。

于 2013-06-06T08:37:21.547 に答える