Re: Creating ADSR Envelopes

On 11/01/2013 17:29, Chris Wilson wrote:
> Well, that could of course give you a value for a future time based on
> what's currently known in the scheduler; if other calls are scheduled,
> or the .value is set, that might not reflect reality, though.  I think
> it would be easier (and actually clarify the normal case, too) to have
> something that schedules taking the current result of scheduling and
> setting it as the currently scheduled value (at that point in time), and
> cancels any currently pending or in-progress scheduling events.

Isn't there a further problem in that to correctly emulate an ADSR 
generator that hasn't started from 0 you must both shorten the attack 
phase and reschedule the decay and sustain phases accordingly.

AIUI, on analogue synths the A and D values typically affected the 
_slope_ of the attack and delay, which then only indirectly affects the 
_timing_ of those phases.  This would have been done by tuning the 1/RC
time constant of a charging capacitor, where the R component was the 
knob on the panel.

If the EG is at 0.5 when triggered, you need to have roughly half as 
long an attack phase, not one of the same duration with half the slope.

The decay (and sustain) have to start sooner, because the decay phase is 
triggered by the EG reaching its peak value.  Again, timing is a 
consequence of the slope, not the other way around.

If you follow the WebAudio mantra of dynamically creating nodes as 
they're needed there's less of a problem, because a dynamically created 
EG node would always start at zero.  However, doing so would make it 
difficult to emulate the ADSR effects you get when an EG is repeatedly 
retriggered without ever reaching its zero point.

Ray

Received on Friday, 11 January 2013 20:42:22 UTC