BiquadFilterNode:getFrequencyResponse() 方法
BiquadFilterNode 接口的 getFrequencyResponse() 方法接收当前的滤波算法设置,并计算指定频率数组中频率的频率响应。
在调用此方法之前,必须创建两个输出数组 magResponseOutput 和 phaseResponseOutput;它们的大小必须与输入频率值数组(frequencyArray)相同。
语法
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)
参数
frequencyArray-
一个包含频率数组的
Float32Array,频率以赫兹(Hertz)为单位指定,您希望对其进行滤波。 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 |
浏览器兼容性
加载中…