W3C home > Mailing lists > Public > public-audio@w3.org > July to September 2014

Re: Having some problems with envelopes

From: Chris Wilson <cwilso@google.com>
Date: Thu, 24 Jul 2014 08:34:17 -0700
Message-ID: <CAJK2wqXdOog-TmYKmGmfUA-F1-MkRrVkEoEc-W3dA8TGWuvjTw@mail.gmail.com>
To: Ray Bellis <ray@bellis.me.uk>
Cc: "public-audio@w3.org" <public-audio@w3.org>
I think these are related.  You would currently need to keep track of the
calculations yourself to determine the current value, but if we exposed the
computedValue at the last time, you could use that.  You will of course
need to calculate the attack time yourself (i.e. the attack segment of the
second note starts from non-zero, but you want to keep the slope of the
ramp the same, IIUC).

Can you tell me, in your experience do "typical ADSR" envelopes use Linear
ramps or exponential?  My understanding has been that attacks are typically
linear, but decays are exponential, but I've not found very definitive
information.

setValueCurve does not interpolate, by definition, so I don't know that it
would be a good model.


On Thu, Jul 24, 2014 at 6:39 AM, Ray Bellis <ray@bellis.me.uk> wrote:

> On 23/07/2014 16:57, Chris Wilson wrote:
> > I'd been toying with the idea of suggesting the idea that
> > "cancelScheduledValues should explicitly set a "previously scheduled
> > parameter value" of the current value, at that time.  WDYT?
>
> I'm not sure how it would help.
>
> The fundamental difficulty in correctly emulating an ADSR EG is that the
> separate phases are triggered by a combination of the note on/off "gate"
> and the current level of the EG itself.
>
> Take this, for example, representing a key being pressed twice without
> the first note completing.
>
>     /\     /\
>    /  \___/  \_____
>   /                \
>  /                  \
>
>  X       OX       O
>
> The first attack phase lasts 4 units, but because the second note is
> starting with the EG already above zero its attack phase only lasts 2
> units, and its decay phase (and subsequent sustain phase) start
> commensurately sooner relative to the second "note on" event.
>
> This may not fit with the "WebAudio way" of creating a new chain of
> modules for each note (with the EG implicitly starting at zero for each
> note) but it's what's needed to emulate a typical monosynth - probably
> even more so for the filter EG than for the volume EG.
>
> I didn't try it yet, but the only API call I can see that might help is
> to exclusively use setValueCurveAtTime() and manually calculate every
> single step of the envelope manually.
>
> kind regards,
>
> Ray
>
>
Received on Thursday, 24 July 2014 15:34:47 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:50:14 UTC