Web Audio API:划分两个音频节点的输出

WebAudioAPI: Dividing two AudioNodes' outputs

上下文:我正在尝试在 WebAudioAPI 中实现一个 ADSR 包络,其中 Attack、Decay、Sustain 和 Release 都是 AudioParams,而 'note on' 和 'note off' 由一个表示输入值分别为 1 和 0。我使用四个 DynamicCompressor 节点和大量增益操作来实现这一点,因为压缩器在技术上是 Attack-Release 包络。

一切都很好,除了我需要将一个信号的电平除以另一个信号的电平以获得增益量以实现电平偏移并结合产生衰减梯度的 DynamicCompressor .

如果有帮助,公式如下:

decayOffsetY = (1 - sustainLevel) * (attackDur + decayDur) / decayDur

请注意,sustainLevelattackDurdecayDur 都是音频参数。

使用 ConstantSourceNodesGainNodes 可以很容易地实现加法、减法和乘法,但是我该如何进行除法呢?

注意:我考虑过使用另一个 DynamicCompressorNode 来执行除法,因为压缩器在技术上将信号除以一个比率,但这个比率是对数的,我最终得到了一个压缩比率

log(decayDur) / 5

实现 1 / decayDur 的值,它将连接到另一个 GainNode。但是是否有可能仅使用 AudioNodes 来执行 Math.log

使用 WaveShaperNode 计算逆或对数。您必须弄清楚如何处理输入接近零的情况以及制作波形整形器曲线阵列的时间,但这应该可行。