74 void setAllTimes( StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime );
86 StkFloat
lastOut(
void )
const {
return lastFrame_[0]; };
89 StkFloat
tick(
void );
103 void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
108 StkFloat attackRate_;
110 StkFloat releaseRate_;
111 StkFloat releaseTime_;
112 StkFloat sustainLevel_;
120 value_ += attackRate_;
121 if ( value_ >= target_ ) {
123 target_ = sustainLevel_;
126 lastFrame_[0] = value_;
130 if ( value_ > sustainLevel_ ) {
131 value_ -= decayRate_;
132 if ( value_ <= sustainLevel_ ) {
133 value_ = sustainLevel_;
138 value_ += decayRate_;
139 if ( value_ >= sustainLevel_ ) {
140 value_ = sustainLevel_;
144 lastFrame_[0] = value_;
148 value_ -= releaseRate_;
149 if ( value_ <= 0.0 ) {
153 lastFrame_[0] = value_;
162 #if defined(_STK_DEBUG_)
163 if ( channel >= frames.
channels() ) {
164 oStream_ <<
"ADSR::tick(): channel and StkFrames arguments are incompatible!";
169 StkFloat *samples = &frames[channel];
170 unsigned int hop = frames.
channels();
171 for (
unsigned int i=0; i<frames.
frames(); i++, samples += hop )