使用WaveShaper控制Osc频率不会产生输出

时间:2015-04-12 23:03:48

标签: javascript web-audio

问题:

如下所示(差)如下所示创建音频图表会导致振荡器无法输出。我不确定振荡器是产生超低频,还是什么,但没有创建可听输出。

GainNode - > WaveShaper [-1, 1] - > GainNode - > OscillatorNode.frequency

但是,将上图中的最后一个GainNode连接到另一个GainNode的gain参数导致同样的问题(假设此图中的最终GainNode有振荡器或某种类型发电机连接到它)。 编辑:事实并非如此。它确实有影响力。请参阅下面的更新。

GainNode - > WaveShaper [-1, 1] - > GainNode - > GainNode.gain


示例:

我创建了两个JSFiddle来显示这个。

我认为我要么从根本上误解了这里的信号流,要么在较低的层面上出现问题。救命啊!


一些背景知识:

我正在尝试在WebAudio API中创建一个模拟AudioParam对象行为的音频图形。原因是我希望能够使用自定义曲线的AudioParam,因此我可以使用内置节点(而不是密集的ScriptProcessingNode)来控制AudioParam。即有一个指数曲线的AudioParam,或一个等功率的AudioParam。

在上面的音频图中,第一个GainNode是“控制”节点,因此更改它的gain.value属性将控制AudioParam仿真。


更新(13/04)

我在图表中添加了一个AnalyserNode来显示输出,我想我发现了问题......

WaveShaperNode(使用值为[-1,1]的线性曲线)将输入值钳制到-1到1的范围,无论进入它的值如何。因此,当启用WaveShaperNode时,来自paramInput GainNode的输入被限制为-1,1。我需要查看规范以查看这是否是正确的行为,但我认为它可能是; WaveShaperNode的一个主要用途是用于失真,所以如果它没有将输入信号钳位到-1,1那么就不会产生失真,只是整形。需要检查一下。

Here's an updated JSFiddle showing the osc's frequency using an analyser node. Apologies for the rough code.

And here's an updated JSFiddle showing the same behaviour when controlling a GainNode's gain param

1 个答案:

答案 0 :(得分:1)

WaveShaper.curve spec非常清楚。输入被钳位到[-1,1]。您可能需要使用增益节点将输入映射到该范围,以将幅度最多降低到1。