使用 WaveShaper 控制 Osc 频率导致无输出
Using a WaveShaper to control Osc frequency results in no output
问题:
如下图所示(效果不佳)创建音频图会导致振荡器不产生任何输出。我不确定振荡器是否产生超低频率,或者什么,但没有创建 audible 输出。
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
frequency
param, and, when enabling the WaveShaperNode's curve
property, the output is silenced.
- The second is connected to a GainNode's
gain
param, and enabling/disabling the WaveShaperNode does not have an impact. 编辑:这实际上不是真的。它确实有影响。请参阅下面的更新。
我想我要么从根本上误解了这里的信号流,要么在较低级别出了问题。求助!
一些背景知识:
我正在尝试在 WebAudio API 中创建一个模拟 AudioParam 对象行为的音频图。原因是我希望能够拥有一个带有自定义曲线的 AudioParam,这样我就可以使用内置节点(而不是 ScriptProcessingNode,它是密集型的)来控制 AudioParam。 IE。具有指数曲线 AudioParam,或等功率 AudioParam。
在上面的音频图中,第一个 GainNode
是 "control" 节点,因此更改为 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
WaveShaper.curve spec 很清楚。输入被限制在 [-1, 1]。您可能需要使用增益节点将您的输入映射到该范围,以最多将振幅降低到统一。
问题:
如下图所示(效果不佳)创建音频图会导致振荡器不产生任何输出。我不确定振荡器是否产生超低频率,或者什么,但没有创建 audible 输出。
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
frequency
param, and, when enabling the WaveShaperNode'scurve
property, the output is silenced. - The second is connected to a GainNode's
gain
param, and enabling/disabling the WaveShaperNode does not have an impact. 编辑:这实际上不是真的。它确实有影响。请参阅下面的更新。
我想我要么从根本上误解了这里的信号流,要么在较低级别出了问题。求助!
一些背景知识:
我正在尝试在 WebAudio API 中创建一个模拟 AudioParam 对象行为的音频图。原因是我希望能够拥有一个带有自定义曲线的 AudioParam,这样我就可以使用内置节点(而不是 ScriptProcessingNode,它是密集型的)来控制 AudioParam。 IE。具有指数曲线 AudioParam,或等功率 AudioParam。
在上面的音频图中,第一个 GainNode
是 "control" 节点,因此更改为 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
WaveShaper.curve spec 很清楚。输入被限制在 [-1, 1]。您可能需要使用增益节点将您的输入映射到该范围,以最多将振幅降低到统一。