- From: D <dilots@gmail.com>
- Date: Fri, 15 Jan 2016 13:12:37 -0800
- To: public-audio@w3.org
- Message-ID: <CAO5aZd0rd2VkbUQ2uDoGMzwSzOq+PxWKyUpYg2wFPty9LaVfzg@mail.gmail.com>
Hello,
I’m trying to implement an Attack-Sustain-Release envelope with WebAudio.
The release part of the envelope does not work properly if the attack
portion of the envelope has not finished yet. I tried using
cancelScheduledValues to stop the attack envelope and snap the gain to its
current position, but it immediately jumps back down to 0 when I do that.
Any idea what I’m missing?
Here’s a snippet of my code:
function ASR_EnvelopeGenerator(context, peak) {
this.attackTime = 0.1;
this.sustainLevel = 0.5;
this.releaseTime = 0.3;
this.peak = peak;
this.gain = 0;
this.trigger = function() {
var now = context.currentTime;
this.gain.cancelScheduledValues(now);
this.gain.setValueAtTime(0, now);
this.gain.linearRampToValueAtTime(this.peak, now + this.attackTime);
};
this.release = function(){
var now = context.currentTime;
var currentValue = this.gain.value;
this.gain.cancelScheduledValues(now);
this.gain.setValueAtTime(currentValue, now);
this.gain.exponentialRampToValueAtTime(0.01, now + this.releaseTime);
}
this.connect = function(gain) {
this.gain = gain;
};
};
I found a similar question from 2 years ago here:
https://lists.w3.org/Archives/Public/public-audio/2013JanMar/0020.html
However, this solution seems to be the same as what I'm doing already.
Cheers,
David
Received on Monday, 18 January 2016 10:01:14 UTC