我试图使用 gainNode 上的自动化为我的振荡器制作一个包络发生器,并且我希望能够在事件发生时触发包络(在这种情况下是单击按钮)。
但它似乎只在我第一次点击时才起作用。 http://jsfiddle.net/ehsanziya/T9mV2/
var context = new webkitAudioContext();
var osc = context.createOscillator();
var gain = context.createGainNode();
var now = context.currentTime;
osc.frequency.value = 100;
osc.type = "sine";
osc.connect(gain);
osc.noteOn(0);
gain.connect(context.destination);
gain.gain.value = 0;
var trigger = document.getElementById('play');
trigger.addEventListener('click', function(){
gain.gain.setValueAtTime(gain.gain.value, now);
gain.gain.linearRampToValueAtTime( 1.0, now + 2.0 );
gain.gain.linearRampToValueAtTime ( 0.0, now + 4.0 );
});
为什么会这样?创建可由事件触发的包络生成器的最佳方法是什么?