我无法理解 Web Audio API 中 WaveShaperNode 的传递函数是如何工作的。据我了解,传递函数是一个波形整形器,它接收信号输入x并产生一个新信号y。所以,
y = f(x)
我知道如果x等于零,那么y也应该如此。因此,0 = f(0)
。为了适应适当的范围,y应该在 [-1, 1] 之间,所以这个函数:y = x / (1 + |x|)
将输出范围限制为 [-1, 1]。并且切比雪夫多项式对于用于“扭曲”音乐输入信号的传递函数很有用。
但是对于传递函数,您需要输入信号x才能对其进行操作并创建输出y。但是,使用 Web 音频 API 中的 WaveShaperNode,您无法访问原始输入x(或者是吗?)。我经常看到这样的算法:
for(var i = 0; i < sampleRate; i++){
var x = i * 2 / sampleRate - 1;
this.curve[i] = (3 + distortionAmount) * x * 20 * (Math.PI / 180) / (Math.PI + distortionAmount * Math.abs(x));
}
其中,在上面的代码中,this.curve
是一个 Float32Array,表示每个样本帧的图形。我假设x
这里应该代表输入音频信号。然而,它实际上并不代表确切的输入音频信号。这是因为它只代表一个平均正弦曲线而实际输入无关紧要吗?WaveShaperNode 是否采用原始输入x并使用(相乘?)我们创建的一般曲线来计算输出y?