1

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 );
});

なぜそうなのですか?また、イベントによってトリガーできるエンベロープ ジェネレーターを作成する最良の方法は何ですか?

4

2 に答える 2

2

クリック イベント リスナー内で context.currentTime を取得する行を移動するだけです。

trigger.addEventListener('click', function(){
  var now = context.currentTime;
  ...

currentTime プロパティはオーディオ クロックを公開するため、リアルタイムで更新されます。

于 2013-04-08T05:36:33.593 に答える