双二次滤波器节点:getFrequencyResponse() 方法
getFrequencyResponse()
方法是 BiquadFilterNode
接口的一部分,它采用当前滤波算法的设置,并计算指定频率数组中所指定频率的频率响应。
两个输出数组 magResponseOutput
和 phaseResponseOutput
必须在调用此方法之前创建;它们的大小必须与输入频率值数组(frequencyArray
)相同。
语法
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)
参数
frequencyArray
-
一个
Float32Array
,包含要过滤的频率数组,以赫兹为单位。 magResponseOutput
-
一个
Float32Array
,用于接收计算出的frequencyArray
中每个频率值的频率响应幅度。对于frequencyArray
中任何超出范围 0.0 到sampleRate
/2 的频率值(其中sampleRate
是AudioContext
的采样率),此数组中的相应值为NaN
。这些是无量纲值。 phaseResponseOutput
-
一个
Float32Array
,用于接收计算出的输入frequencyArray
中每个频率值的相位响应值,以弧度为单位。对于frequencyArray
中任何超出范围 0.0 到sampleRate
/2 的频率值(其中sampleRate
是AudioContext
的采样率),此数组中的相应值为NaN
。
返回值
无(undefined
)。
异常
InvalidAccessError
-
提供的三个数组长度不一致。
示例
在以下示例中,我们对媒体流使用双二次滤波器(有关完整的演示,请查看我们的 stream-source-buffer 演示,或 阅读源代码)。作为此演示的一部分,我们获取了此双二次滤波器的频率响应,用于五个采样频率。我们首先创建了所需的 Float32Array
,一个包含输入频率,另外两个用于接收输出幅度和相位值。
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 中获取对它的引用。
<p>Biquad filter frequency response for:</p>
<ul class="freq-response-output"></ul>
const freqResponseOutput = document.querySelector(".freq-response-output");
最后,在创建我们的双二次滤波器之后,我们使用 getFrequencyResponse()
生成响应数据并将其放入我们的数组中,然后循环遍历每个数据集,并在页面底部以人类可读的列表输出它们。
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 的浏览器中加载。