【问题标题】:WebAudioAPI: Dividing two AudioNodes' outputsWebAudioAPI:划分两个 AudioNodes 的输出
【发布时间】: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

请注意,sustainLevelattackDurdecayDur 都是 AudioParams。

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

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

log(decayDur) / 5

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

【问题讨论】:

    标签: javascript math signal-processing web-audio-api


    【解决方案1】:

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

    【讨论】:

    • 哇,我完全忽略了波形整形器只是一个失真工具。我了解WaveShaperNode 输入限制在 -1 到 1 的范围内,但是这个限制是否也适用于输出?
    • 好问题。输出不限于同一范围;它应该是任意的,或多或少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多