- From: Yotam Mann <matoyotambien@gmail.com>
- Date: Thu, 10 Jan 2013 12:15:05 -0800
- To: Chris Rogers <crogers@google.com>
- Cc: Chris Wilson <cwilso@google.com>, "public-audio@w3.org" <public-audio@w3.org>
- Message-ID: <CAFxcA2+eE-Xy2z5K3nzmTby_=6k_XjSSfmJ5AxpFV3O7zGArPQ@mail.gmail.com>
but since the value is scheduled for the future, reading it's .value would not be the same by the time i actually want to ramp to the attack. param.cancelScheduledValues(time) param.setValueAtTime(param.value, time); this only works if the time=currentTime, not any point in the future. if i triggerAttack(context.currentTime + .2), my triggerAttack function sets the value at the current value which might be different (assuming the release is still going on) by the time i actually want to schedule my ramp. On Thu, Jan 10, 2013 at 11:58 AM, Chris Rogers <crogers@google.com> wrote: > > > On Thu, Jan 10, 2013 at 11:54 AM, Yotam Mann <matoyotambien@gmail.com>wrote: > >> yes! it does work on Canary. that's a relief. >> >> the first part of my question is mostly pertaining to envelope >> retriggers. If i schedule an envelope with a very long release, and then at >> some later point while that release is still going on, i get a callback to >> schedule another envelope 0.02s in the future, i would like next envelope's >> attack starting value to begin where the current release has left off (even >> if it never makes it to 0). >> >> maybe this question comes out of ignorance for how the AudioParam's >> values are calculated when there are multiple values scheduled. >> >> here is an simplified example of what i'm talking about: >> >> function triggerAttack (time) { >> param.linearRampToValue(1, time+attackTime); >> param.linearRampToValue(sustainValue, time+attackTime+decayTime); >> } >> >> function triggerRelease (time){ >> param.linearRampToValue(0, time+releaseTime); >> } >> >> if i retrigger the attack while the release is still going on, how is the >> attack duration and value calculated? my understanding was that i needed to >> schedule a value at the start of the attack so that the attack will be >> correctly ramped, so i usually write something like this: >> >> function triggerAttack (time) { >> param.setValueAtTime(*SOME VALUE?*, time); >> param.linearRampToValue(1, time+attackTime); >> param.linearRampToValue(sustainValue, time+attackTime+decayTime); >> } >> >> but, i don't know what the value at the param time of the attack is since >> the release is still going on. >> > > You should be able to cancel all scheduled values with: > param.cancelScheduledValues(0); > > Then simply read the .value attribute to get its current value. > > >> >> does that make sense? >> >> >> >> On Thu, Jan 10, 2013 at 11:08 AM, Chris Wilson <cwilso@google.com> wrote: >> >>> Hey Yotam, >>> >>> I'm not sure I understand the first half of your statement - if you know >>> when in the future you will be scheduling another envelope, can't you use >>> ramps to that time? This seems like "I want the release to start 0.02s >>> after I receive this JS event", or something like that - is this correct? >>> >>> That aside, the filter frequency should work as you surmise; however, >>> there was a bug in that for a while. Are you using Chrome Canary (i.e. >>> version 26.xx?) >>> >>> -Chris >>> >>> >>> On Thu, Jan 10, 2013 at 11:00 AM, Yotam Mann <matoyotambien@gmail.com>wrote: >>> >>>> Hi group, >>>> >>>> I'm working on a synthesizer in Web Audio and i'm stuck on the filter >>>> envelope part. >>>> >>>> One issue that i'm having is that the pattern that I see often for >>>> avoiding clicks when scheduling AudioParam's envelopes doesn't work when >>>> scheduling the envelope in the future where the AudioParam's current value >>>> is no longer the same: >>>> >>>> i.e. AudioParam.setValueAtTime(AudioParam.value, context.currentTime); >>>> >>>> If i want to schedule the next envelope in the future, but don't know >>>> if the previous envelope's release has finished, i can't have the future >>>> attack start where the previous envelope's release left off since there is >>>> not getValueAtTime function for AudioParams. >>>> >>>> For this reason, i decided to make my own envelope generator with a >>>> ScriptNode. This works well when I connect this signal to an oscillator's >>>> gain, but I also want to apply the envelope to a filter's frequency >>>> AudioParam. I scale the ADSR values to be between 0 and 500 for example and >>>> connect it to the filter.frequency, but it doesn't not seem to be making >>>> any difference. does this filter's frequency AudioParam not behave the same >>>> as the gain's gain param? >>>> >>>> Insight on these issues would be greatly appreciated. >>>> >>>> thanks. >>>> >>>> Yotam >>>> >>> >>> >> >
Received on Thursday, 10 January 2013 20:15:32 UTC