Sat Oct 29 2016 14:14:35 GMT+0900 (JST)
BiquadFilterNode と IIRFilterNode の getFrequencyResponse を実装した。
計算部分は共通にしてある。式の意味はさっぱり分からない。
function getFilterResponse(b, a, freq, mag, phase, sampleRate) { for (let i = 0, imax = freq.length; i < imax; i++) { const w0 = 2 * Math.PI * (freq[i] / sampleRate); const ca = compute(a, Math.cos, w0); const sa = compute(a, Math.sin, w0); const cb = compute(b, Math.cos, w0); const sb = compute(b, Math.sin, w0); mag[i] = Math.sqrt((cb * cb + sb * sb) / (ca * ca + sa * sa)); phase[i] = Math.atan2(sa, ca) - Math.atan2(sb, cb); } } function compute(values, fn, w0) { let result = 0; for (let i = 0, imax = values.length; i < imax; i++) { result += values[i] * fn(w0 * i); } return result; }