【问题标题】:Using a WaveShaper to control Osc frequency results in no output使用 WaveShaper 控制 Osc 频率导致无输出
【发布时间】: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 来展示这一点。

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


一点背景:

我正在尝试在 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,则不会产生失真,只是整形。需要检查一下。

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

【问题讨论】:

    标签: javascript web-audio-api


    【解决方案1】:

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

    【讨论】:

    • 是的,我现在问这个问题有点傻。在我的脑海里,我知道这一点,但出于某种原因,我只是没有想到!我想删除这个问题,但也许我应该保留它以防其他人发现它有用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    相关资源
    最近更新 更多