双二次滤波器节点:getFrequencyResponse() 方法

基线 广泛可用

此功能已建立良好,并在许多设备和浏览器版本上运行。它已在浏览器中可用,自 2021 年 4 月.

getFrequencyResponse() 方法是 BiquadFilterNode 接口的一部分,它采用当前滤波算法的设置,并计算指定频率数组中所指定频率的频率响应。

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

语法

js
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)

参数

frequencyArray

一个 Float32Array,包含要过滤的频率数组,以赫兹为单位。

magResponseOutput

一个 Float32Array,用于接收计算出的 frequencyArray 中每个频率值的频率响应幅度。对于 frequencyArray 中任何超出范围 0.0 到 sampleRate/2 的频率值(其中 sampleRateAudioContext 的采样率),此数组中的相应值为 NaN。这些是无量纲值。

phaseResponseOutput

一个 Float32Array,用于接收计算出的输入 frequencyArray 中每个频率值的相位响应值,以弧度为单位。对于 frequencyArray 中任何超出范围 0.0 到 sampleRate/2 的频率值(其中 sampleRateAudioContext 的采样率),此数组中的相应值为 NaN

返回值

无(undefined)。

异常

InvalidAccessError

提供的三个数组长度不一致。

示例

在以下示例中,我们对媒体流使用双二次滤波器(有关完整的演示,请查看我们的 stream-source-buffer 演示,或 阅读源代码)。作为此演示的一部分,我们获取了此双二次滤波器的频率响应,用于五个采样频率。我们首先创建了所需的 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>Biquad filter frequency response for:</p>
<ul class="freq-response-output"></ul>
js
const freqResponseOutput = document.querySelector(".freq-response-output");

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

js
const biquadFilter = audioCtx.createBiquadFilter();
biquadFilter.type = "lowshelf";
biquadFilter.frequency.value = 1000;
biquadFilter.gain.value = range.value;

// …

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

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

calcFrequencyResponse();

规范

规范
Web Audio API
# dom-biquadfilternode-getfrequencyresponse

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅