【发布时间】:2015-04-14 07:17:16
【问题描述】:
问题:
如下图所示(差)创建音频图会导致振荡器不产生输出。我不确定振荡器是在产生超低频还是什么,但没有创建可听输出。
GainNode -> WaveShaper [-1, 1] -> GainNode -> OscillatorNode.frequency
但是,将上图中的最后一个 GainNode 连接到另一个 GainNode 的 gain 参数确实不会导致相同的问题(假设该图中的最终 GainNode 有一个振荡器,或某种生成器连接到它)。
编辑:这实际上是不正确的。它确实有影响。请参阅下面的更新。
GainNode -> WaveShaper [-1, 1] -> GainNode -> GainNode.gain
例子:
我创建了两个 JSFiddle 来展示这一点。
- The first is connected to an OscillatorNode's
frequencyparam, and, when enabling the WaveShaperNode'scurveproperty, the output is silenced. -
The second is connected to a GainNode's
gainparam, and enabling/disabling the WaveShaperNode does not have an impact. 编辑:这实际上不是真的。它确实有影响。请参阅下面的更新。
我认为我要么从根本上误解了这里的信号流,要么在较低级别出现了问题。救命!
一点背景:
我正在尝试在 WebAudio API 中创建一个模拟 AudioParam 对象行为的音频图。原因是我希望能够拥有带有自定义曲线的 AudioParam,因此我可以使用内置节点(而不是密集的 ScriptProcessingNode)来控制 AudioParam。 IE。具有指数弯曲的 AudioParam,或等功率的 AudioParam。
在上面的音频图中,第一个GainNode 是“控制”节点,因此更改它的gain.value 属性将控制AudioParam 模拟。
更新 (13/04)
我在图表中添加了一个 AnalyserNode 以可视化输出,我想我找到了问题...
WaveShaperNode(使用值为 [-1, 1] 的线性曲线)将输入值限制在 -1 到 1 的范围内,而不管输入的值如何。因此,当启用 WaveShaperNode 时,来自 paramInput GainNode 的输入被限制为 -1, 1。我需要查看规范以查看这是否是正确的行为,但我认为它可能是; WaveShaperNode 的主要用途之一是用于失真,因此如果它没有将输入信号钳制为 -1、1,则不会产生失真,只是整形。需要检查一下。
And here's an updated JSFiddle showing the same behaviour when controlling a GainNode's gain param
【问题讨论】: