我试图破译SoundBox的未注释源代码,它是一个用 javascript 编写的小音乐跟踪器。
有一个包含的合成器,它对输出样本应用过滤器。我很难理解它是如何工作的。您可以在此处(第 251 行)的源代码中找到应用过滤器的位置。然而,它没有被评论。
这是我对其定义的解释。一、过滤器参数:
a = cutoff/samplerate
f = 1.5 * sin(PI * a)
q = 1.0 - resonance
cutoff以赫兹为单位。samplerate固定为 44100 。
然后是过滤过程
low[i] += f * band[i-1]
high[i] = q * (x[i] - band[i-1]) - low[i]
band[i] += f * high[i]
y[i] = low[i]
x输入样本数组、y输出和//low其他一些我还没有完全理解其用途的变量在哪里。highband
对我来说,这看起来像是某种 IIR 滤波器。你认得吗?你能帮我分解一下吗?给我解释?
这是低通滤波器版本。一个应该能够通过将输出更改为y[i] = high[i](或)来获得高通滤波器(或带通band[i])。
我做了一些实验,效果很好,但是实际的截止值有点偏移,并不完全等于cutoff. 我已经能够通过更改 to 的定义来纠正f问题f = sin(2.0 * PI * a)。现在截止点正是它应该在的位置,但我不知道为什么。如果你想看到漂亮的图片,你可以看到我在 GitHub 上打开的问题,但还没有回复。
谢谢。