Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial
STK sinusoid oscillator class. More...
#include <SineWave.h>
Public Member Functions | |
SineWave (void) | |
Default constructor. | |
~SineWave (void) | |
Class destructor. | |
void | reset (void) |
Clear output and reset time pointer to zero. | |
void | setRate (StkFloat rate) |
Set the data read rate in samples. The rate can be negative. | |
void | setFrequency (StkFloat frequency) |
Set the data interpolation rate based on a looping frequency. | |
void | addTime (StkFloat time) |
Increment the read pointer by time in samples, modulo the table size. | |
void | addPhase (StkFloat phase) |
Increment the read pointer by a normalized phase value. | |
void | addPhaseOffset (StkFloat phaseOffset) |
Add a normalized phase offset to the read pointer. | |
StkFloat | lastOut (void) const |
Return the last computed output value. | |
StkFloat | tick (void) |
Compute and return one output sample. | |
StkFrames & | tick (StkFrames &frames, unsigned int channel=0) |
Fill a channel of the StkFrames object with computed outputs. |
STK sinusoid oscillator class.
This class computes and saves a static sine "table" that can be shared by multiple instances. It has an interface similar to the WaveLoop class but inherits from the Generator class. Output values are computed using linear interpolation.
The "table" length, set in SineWave.h, is 2048 samples by default.
by Perry R. Cook and Gary P. Scavone, 1995-2012.
void stk::SineWave::setRate | ( | StkFloat | rate | ) | [inline] |
void stk::SineWave::setFrequency | ( | StkFloat | frequency | ) |
Set the data interpolation rate based on a looping frequency.
This function determines the interpolation rate based on the file size and the current Stk::sampleRate. The frequency value corresponds to file cycles per second. The frequency can be negative, in which case the loop is read in reverse order.
void stk::SineWave::addPhase | ( | StkFloat | phase | ) |
Increment the read pointer by a normalized phase value.
This function increments the read pointer by a normalized phase value, such that phase = 1.0 corresponds to a 360 degree phase shift. Positive or negative values are possible.
void stk::SineWave::addPhaseOffset | ( | StkFloat | phaseOffset | ) |
Add a normalized phase offset to the read pointer.
A phaseOffset = 1.0 corresponds to a 360 degree phase offset. Positive or negative values are possible.
Fill a channel of the StkFrames object with computed outputs.
The channel
argument must be less than the number of channels in the StkFrames argument (the first channel is specified by 0). However, range checking is only performed if _STK_DEBUG_ is defined during compilation, in which case an out-of-range value will trigger an StkError exception.
Implements stk::Generator.
00121 { 00122 #if defined(_STK_DEBUG_) 00123 if ( channel >= frames.channels() ) { 00124 oStream_ << "SineWave::tick(): channel and StkFrames arguments are incompatible!"; 00125 handleError( StkError::FUNCTION_ARGUMENT ); 00126 } 00127 #endif 00128 00129 StkFloat *samples = &frames[channel]; 00130 StkFloat tmp = 0.0; 00131 00132 unsigned int hop = frames.channels(); 00133 for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) { 00134 00135 // Check limits of time address ... if necessary, recalculate modulo 00136 // TABLE_SIZE. 00137 while ( time_ < 0.0 ) 00138 time_ += TABLE_SIZE; 00139 while ( time_ >= TABLE_SIZE ) 00140 time_ -= TABLE_SIZE; 00141 00142 iIndex_ = (unsigned int) time_; 00143 alpha_ = time_ - iIndex_; 00144 tmp = table_[ iIndex_ ]; 00145 tmp += ( alpha_ * ( table_[ iIndex_ + 1 ] - tmp ) ); 00146 *samples = tmp; 00147 00148 // Increment time, which can be negative. 00149 time_ += rate_; 00150 } 00151 00152 lastFrame_[0] = tmp; 00153 return frames; 00154 }
The Synthesis ToolKit in C++ (STK) |
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved. |