Web Audio API-正在删除筛选器

Web Audio API - Removing filter

本文关键字:删除 筛选 Audio API- Web      更新时间:2023-09-26

我正在构建一个具有多种图形模式的可视化器。对于其中的一些,我需要计算正在播放的曲目的节拍,据我所知,我需要应用如下低通滤波器,以增强最有可能保持鼓声的频率:

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

但是如果我想关闭过滤器怎么办?每次需要删除筛选器时,是否都必须重新连接源?这会对性能产生负面影响吗?

相关问题:如果我有两个来自同一音频源的两个源,并对其中一个应用滤波器,我会经历多大的性能损失?

如果我有两个来自同一音频源的两个源,并将滤波器应用于其中一个,我会经历多少性能损失

您可以将单个音频节点连接到多个目的地,因此您永远不需要重复的源来分散连接。如果您同时需要过滤和原始音频,您可以相应地设置连接:

var filter = context.createBiquadFilter();
source.connect(filter);
source.connect(context.destination);
filter.connect(context.destination);
filter.type = "lowpass";

无论如何,将FilterNode的类型属性设置为"allpass"将有效地禁用所有过滤,而无需重新连接:

filter.type = "allpass"

根据文章WebAudio intro|html5rocks,我必须通过断开源和本身来打开和关闭过滤器,如下所示:

  this.source.disconnect(0);
  this.filter.disconnect(0);
  // Check if we want to enable the filter.
  if (filterShouldBeEnabled) {
    // Connect through the filter.
    this.source.connect(this.filter);
    this.filter.connect(context.destination);
  } else {
    // Otherwise, connect directly.
    this.source.connect(context.destination);
  }