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