正在使用WebAudio API并尝试添加失真效果!问题是,我不确定如何进入WaveShaper的“curve”参数。
简单来说,'oscidis'是程序先前创建的WaveShaper节点。Oscidisv是我目前静态设置为0的值。
const wsCurve = new Float32Array();
if (oscidisv >= -1 && oscidisv < 1) {
const k = (2 * oscidisv) / (1 - oscidisv);
for (let i = 0; i < 16; i += 1) {
// LINEAR INTERPOLATION:
// x = (c - a) * (z - y) / (b - a) + y
// given
// a = 0, b = 2048, z = 1, y = -1, c = i
const x = ((i - 0) * (1 - -1)) / (16 - 0) + -1;
wsCurve[i] = ((1 + k) * x) / (1 + k * Math.abs(x));
}
}
oscidis.curve.value = wsCurve;
问题是 - 无论我放什么(-=),都听不到声音上的任何区别。即使失真调到最大(1),我也没有注意到任何真正的失真。你们知道有关更明显的失真波形塑造函数的信息吗?或者我在WebAudio API中的操作是否正确?
PI
代替神奇数字3,那么函数将穿过(-1,-1)和(1,1),并且该函数简化为(PI + k) * x / (PI + k * abs(x))
。这个角度实际上只是一个输出缩放因子(也可以是1),而PI实际上只是一个输入缩放因子,这样就可以解决一些函数中的迷惑问题了。 - Grumdrig