The Synthesis ToolKit in C++ (STK)

Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial

# stk::SineWave Class Reference

STK sinusoid oscillator class. More...

`#include <SineWave.h>`

Inheritance diagram for stk::SineWave:

List of all members.

## 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.

## Detailed Description

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.

## Member Function Documentation

void stk::SineWave::setRate | ( | StkFloat | rate | ) | `[inline]`

Set the data read rate in samples. The rate can be negative.

If the rate value is negative, the data is read in reverse order.

    00041 { rate_ = rate; };

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.

StkFrames & stk::SineWave::tick | ( | StkFrames & | frames,
|  | unsigned int | channel = `0` |
| ) |  |  | `[inline, virtual]`

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 documentation for this class was generated from the following file:

- SineWave.h

The Synthesis ToolKit in C++ (STK)
©1995-2012 Perry R. Cook and Gary P. Scavone. All Rights Reserved.