我无法通过GainNode的exponentialRampToValueAtTime对音量进行滑动更改。
以下是一个例子:
var context = new AudioContext(),
osc = context.createOscillator(),
gain = context.createGain();
osc.frequency.value = 440; // A note
osc.start( 0 );
osc.connect( gain );
gain.gain.value = 0;
gain.connect( context.destination );
gain.gain.cancelScheduledValues( 0 );
gain.gain.setValueAtTime( 0, context.currentTime );
gain.gain.exponentialRampToValueAtTime( 1, context.currentTime + 2 );
根据我的理解,这应该逐渐增加音量,直到达到1(100%),整个过程应该花费2秒。这个假设是否正确?
如果是,为什么保持0为2秒,然后突然切换到满音量?
提前感谢您的时间和精力。
答案 0 :(得分:9)
似乎这个函数不喜欢0值。 FF抛出"语法错误:指定了无效或非法字符串"。下面的代码将正确斜坡。见Plnkr。
var context = new AudioContext(),
osc = context.createOscillator(),
gain = context.createGain();
osc.frequency.value = 440.0; // A note
osc.start( 0 );
osc.connect( gain );
gain.connect( context.destination );
gain.gain.setValueAtTime(0.0001, context.currentTime); // <-- line of interest
gain.gain.exponentialRampToValueAtTime(1, context.currentTime + 10 );
UPDATE:&#34;如果此值小于或等于0,或者上一个事件发生时的值小于或等于0,则必须抛出NotSupportedError异常0&#34;根据{{3}}。正如@cwilso所说(见评论)。
答案 1 :(得分:0)
The docs at Mozilla说价值必须是正值。