我刚注意到,当没有连接振荡器或振荡器时,似乎无法使用方法doc.select("table").forEach((e) ->
{
System.out.println(e.text());
});
或gain.value
更改gainNode
的{{1}}尚未开始。
setValueAtTime()
例如,在这种情况下,setValueCurveAtTime()
将按预期工作:
setValueAtTime
振荡器启动,增益为setValueAtTime
1秒钟。然后var context = new AudioContext();
var gain = context.createGain();
gain.connect(context.destination);
var osc = context.createOscillator();
osc.frequency.value = 300;
osc.connect(gain);
osc.start();
gain.gain.setValueAtTime(0, context.currentTime + 1);
将移至1
。
gain.gain.value
但是,如果我们在振荡器启动之前用0
设置增益
setValueAtTime
setValueAtTime
将保持为1。
var context = new AudioContext();
var gain = context.createGain();
gain.connect(context.destination);
var osc = context.createOscillator();
osc.frequency.value = 300;
osc.connect(gain);
osc.start(context.currentTime + 1);
gain.gain.setValueAtTime(0, context.currentTime);
而不设置gain.gain.value
奇怪的是,如果我们直接设置增益,就不会出现这种行为
gain.gain.value
增益值将始终保持为0.
答案 0 :(得分:1)
如果你正在使用Chrome,那么这可能是bug in Chrome。 Chrome实际上会在getter中返回计算值,但如果某个节点没有输入但仍连接到目标,则不会运行AudioParam自动化。它们应该是,并且可以使用.value
getter检查值。
答案 1 :(得分:0)
AudioParam.value不是一个计算值 - 也就是说,它不会告诉你真正 IS 的增益的当前值,正是AudioParam.value最后设置的值。 (cf https://webaudio.github.io/web-audio-api/#widl-AudioParam-value)。如果您想知道AudioParam的当前值是什么,您需要将其路由到音频节点并收集数据(例如通过脚本处理器)。在你的第一个例子中,我认为gain.gain.value不应该为0。
AudioParam在任何给定时间点的实际值不仅会受到调度程序和.value的影响,还会受到连接()编辑到AudioParam的节点的影响。不断计算这些值并将它们移回AudioParam会很昂贵。