IIRFilterNode:getFrequencyResponse() 方法
IIRFilterNode
接口的 getFrequencyResponse()
方法采用当前滤波算法的设置,并计算指定频率数组中指定频率的频率响应。
在调用此方法之前,必须创建两个输出数组 magResponseOutput
和 phaseResponseOutput
;它们必须与输入频率值(frequencyArray
)数组的大小相同。
语法
js
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)
参数
frequencyArray
-
一个
Float32Array
,包含以赫兹为单位指定的频率数组,您希望过滤这些频率。 magResponseOutput
-
一个
Float32Array
,用于接收为frequencyArray
中的每个频率值计算的频率响应幅度。 phaseResponseOutput
-
一个
Float32Array
,用于接收输入frequencyArray
中每个频率值的以弧度为单位的计算相位响应值。
返回值
无(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 |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。