Hi Herman,

These functions (attackRate, decayRate, releaseRate) are the inverse of the
time ones (attackTime, decayTime and releaseTime).
Looking at the source code you'll find the methods at row 4911 of
ugen_stk.cpp.
You can try the following script to see them in action:

Step step => ADSR a1 => blackhole;
step => ADSR a2 => blackhole;
step.next(1);

second / samp => float SR;
250::ms => dur attack;
750::ms => dur decay;
0.34 => float sustain;
890::ms => dur release;

a1.set(attack, decay, sustain, release);
a2.attackRate(1::ms / (attack*SR*0.001));
a2.decayRate( (1 - sustain) / ((decay/ms)*SR*0.001) );
a2.sustainLevel(sustain);
a2.releaseRate(sustain / ((release/ms)*SR*0.001));

// trigger the ADSRs and print their current value every 100 msec
a1.keyOn(1);
a2.keyOn(1);
for(0 => int c; c < 20; c++)
{
    <<< a1.last(), a2.last() >>>;
    100::ms => now;
}

// release the ADSRs and print their current value every 100 msec
a1.keyOff(1);
a2.keyOff(1);
for(0 => int c; c < 20; c++)
{
    <<< a1.last(), a2.last() >>>;
    100::ms => now;
}

Cheers,
Mario

On Mon, 17 Feb 2020 at 10:56, herman verbaeten <hver...@hotmail.com> wrote:

> Hi,
>
> I was wondering what the function is of AttackRate,  decayRate,
> sustainRate in ADSR.
> Normally when using an ADSR,  attack only uses time. Same for decay and
> sustain.
>
> Also the declaration at the end of de memeber description is not very
> clear to me:
>
> The \e state = ADSR::DONE after the
>     envelope value reaches 0.0 in the
>     ADSR::RELEASE state.
>
>
> Thanks in advance for your assistance.
>
> Kind regards,
>
> Herman
> _______________________________________________
> chuck-users mailing list
> chuck-users@lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>
_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users

Reply via email to