Hi Mario,

Thanks a lot for your answer. Your script is not so easy to read for me and to 
imagine what is supposed to happen. I run it and it did exactely the same.
Is it correct to say that when i use only attackRate, decayRate, releaseRate it 
will create a negative envelope. I mean that instead of rising from 0 to the 
maximum volume attackRate  descents from 0 to a negative volume?


Kind regards,

herman

________________________________
Van: chuck-users-boun...@lists.cs.princeton.edu 
<chuck-users-boun...@lists.cs.princeton.edu> namens Mario Buoninfante 
<mario.buoninfa...@gmail.com>
Verzonden: dinsdag 18 februari 2020 9:18
Aan: ChucK Users Mailing List <chuck-users@lists.cs.princeton.edu>
Onderwerp: Re: [chuck-users] ADSR AttackRate, decayRate, sustainRate

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<mailto: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<mailto: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