IIRFilterNode: getFrequencyResponse() 方法

Baseline 已广泛支持

此特性已得到良好支持,可在多种设备和浏览器版本上使用。自 2021 年 4 月起,所有浏览器均已支持此特性。

IIRFilterNode 接口的 getFrequencyResponse() 方法会获取当前的滤波算法设置,并计算指定频率数组中频率的频率响应。

在调用此方法之前,必须创建两个输出数组 magResponseOutputphaseResponseOutput;它们的大小必须与输入频率值数组(frequencyArray)相同。

语法

js
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)

参数

frequencyArray

一个包含频率数组的 Float32Array,频率单位为赫兹 (Hertz),表示您想要过滤的频率。

magResponseOutput

一个用于接收 frequencyArray 中每个频率值的频率响应计算幅度的 Float32Array

phaseResponseOutput

一个用于接收输入 frequencyArray 中每个频率值的相位响应计算值(弧度)的 Float32Array

返回值

无(undefined)。

异常

NotSupportedError DOMException

如果提供的三个数组长度不全相同,则会抛出异常。

示例

在下面的示例中,我们正在对媒体流使用 IIR 滤波器(有关完整的演示,请参阅我们的 stream-source-buffer 演示),或 查看其源代码)。作为此演示的一部分,我们获取此 IIR 滤波器的频率响应,针对五个采样频率。我们首先创建所需的 Float32Array 对象,其中一个包含输入频率,另外两个用于接收输出幅度和相位值。

js
const myFrequencyArray = new Float32Array(5);
myFrequencyArray[0] = 1000;
myFrequencyArray[1] = 2000;
myFrequencyArray[2] = 3000;
myFrequencyArray[3] = 4000;
myFrequencyArray[4] = 5000;

const magResponseOutput = new Float32Array(5);
const phaseResponseOutput = new Float32Array(5);

接下来,我们在 HTML 中创建一个 <ul> 元素来包含我们的结果,并在 JavaScript 中获取其引用。

html
<p>IIR filter frequency response for:</p>
<ul class="freq-response-output"></ul>
js
const freqResponseOutput = document.querySelector(".freq-response-output");

最后,在创建过滤器后,我们使用 getFrequencyResponse() 生成响应数据并将其放入我们的数组中,然后遍历每个数据集,并在页面底部的可读列表中输出它们。

js
const feedforwardCoefficients = [0.1, 0.2, 0.3, 0.4, 0.5];
const feedbackCoefficients = [0.5, 0.4, 0.3, 0.2, 0.1];

const iirFilter = audioCtx.createIIRFilter(
  feedforwardCoefficients,
  feedbackCoefficients,
);

// …

function calcFrequencyResponse() {
  iirFilter.getFrequencyResponse(
    myFrequencyArray,
    magResponseOutput,
    phaseResponseOutput,
  );

  for (let i = 0; i < myFrequencyArray.length; i++) {
    const listItem = document.createElement("li");
    listItem.textContent = `${myFrequencyArray[i]}Hz: Magnitude ${magResponseOutput[i]}, Phase ${phaseResponseOutput[i]} radians.`;
    freqResponseOutput.appendChild(listItem);
  }
}

calcFrequencyResponse();

规范

规范
Web Audio API
# dom-iirfilternode-getfrequencyresponse

浏览器兼容性

另见