【发布时间】:2017-04-27 01:32:47
【问题描述】:
上下文:我正在尝试在 WebAudioAPI 中实现 ADSR 信封,其中 Attack、Decay、Sustain 和 Release 都是 AudioParams,并且“note on”和“note off”由输入值 1 和 0 表示分别。我使用了四个DynamicCompressor 节点和大量增益操作来实现这一点,因为压缩器在技术上是攻击释放包络。
一切都很好,除了我需要将一个信号的电平除以另一个信号的电平以获得增益量,以实现电平偏移,并结合产生衰减梯度的 DynamicCompressor。
如果有帮助,公式如下:
decayOffsetY = (1 - sustainLevel) * (attackDur + decayDur) / decayDur
请注意,sustainLevel、attackDur 和 decayDur 都是 AudioParams。
使用ConstantSourceNodes 和GainNodes 可以很容易地实现加法、减法和乘法,但是我该如何进行除法呢?
注意:我考虑过使用另一个 DynamicCompressorNode 来执行除法,因为压缩器在技术上将信号除以一个比率,但这个比率是对数刻度,我最终得到一个压缩比
log(decayDur) / 5
实现1 / decayDur 的值,它将连接到另一个GainNode。但是是否可以仅使用 AudioNodes 来执行Math.log?
【问题讨论】:
标签: javascript math signal-processing web-audio-api