f@0: /***************************************************/ f@0: /*! \class Envelope f@0: \brief STK linear line envelope class. f@0: f@0: This class implements a simple linear line envelope generator f@0: which is capable of ramping to an arbitrary target value by a f@0: specified \e rate. It also responds to simple \e keyOn and \e f@0: keyOff messages, ramping to 1.0 on keyOn and to 0.0 on keyOff. f@0: f@0: by Perry R. Cook and Gary P. Scavone, 1995--2014. f@0: */ f@0: /***************************************************/ f@0: f@0: #include "../include/Envelope.h" f@0: f@0: namespace stk { f@0: f@0: Envelope :: Envelope( void ) : Generator() f@0: { f@0: target_ = 0.0; f@0: value_ = 0.0; f@0: rate_ = 0.001; f@0: state_ = 0; f@0: Stk::addSampleRateAlert( this ); f@0: } f@0: f@0: Envelope :: ~Envelope( void ) f@0: { f@0: Stk::removeSampleRateAlert( this ); f@0: } f@0: f@0: Envelope& Envelope :: operator= ( const Envelope& e ) f@0: { f@0: if ( this != &e ) { f@0: target_ = e.target_; f@0: value_ = e.value_; f@0: rate_ = e.rate_; f@0: state_ = e.state_; f@0: } f@0: f@0: return *this; f@0: } f@0: f@0: void Envelope :: sampleRateChanged( StkFloat newRate, StkFloat oldRate ) f@0: { f@0: if ( !ignoreSampleRateChange_ ) f@0: rate_ = oldRate * rate_ / newRate; f@0: } f@0: f@0: void Envelope :: setRate( StkFloat rate ) f@0: { f@0: if ( rate < 0.0 ) { f@0: oStream_ << "Envelope::setRate: argument must be >= 0.0!"; f@0: handleError( StkError::WARNING ); return; f@0: } f@0: f@0: rate_ = rate; f@0: } f@0: f@0: void Envelope :: setTime( StkFloat time ) f@0: { f@0: if ( time <= 0.0 ) { f@0: oStream_ << "Envelope::setTime: argument must be > 0.0!"; f@0: handleError( StkError::WARNING ); return; f@0: } f@0: f@0: rate_ = 1.0 / ( time * Stk::sampleRate() ); f@0: } f@0: f@0: void Envelope :: setTarget( StkFloat target ) f@0: { f@0: target_ = target; f@0: if ( value_ != target_ ) state_ = 1; f@0: } f@0: f@0: void Envelope :: setValue( StkFloat value ) f@0: { f@0: state_ = 0; f@0: target_ = value; f@0: value_ = value; f@0: lastFrame_[0] = value_; f@0: } f@0: f@0: } // stk namespace