Arduino STK  4.6.2
SingWave.h
1 #ifndef STK_SINGWAVE_H
2 #define STK_SINGWAVE_H
3 
4 #include "FileLoop.h"
5 #include "Modulate.h"
6 #include "Envelope.h"
7 
8 namespace stk {
9 
10 /***************************************************/
23 /***************************************************/
24 
25 class SingWave : public Generator
26 {
27  public:
29 
36  SingWave( std::string fileName, bool raw = false );
37 
39  ~SingWave( void );
40 
42  void reset( void ) { wave_.reset(); lastFrame_[0] = 0.0; };
43 
45  void normalize( void ) { wave_.normalize(); };
46 
48  void normalize( StkFloat peak ) { wave_.normalize( peak ); };
49 
51  void setFrequency( StkFloat frequency );
52 
54  void setVibratoRate( StkFloat rate ) { modulator_.setVibratoRate( rate ); };
55 
57  void setVibratoGain( StkFloat gain ) { modulator_.setVibratoGain( gain ); };
58 
60  void setRandomGain( StkFloat gain ) { modulator_.setRandomGain( gain ); };
61 
63  void setSweepRate( StkFloat rate ) { sweepRate_ = rate; };
64 
66  void setGainRate( StkFloat rate ) { envelope_.setRate( rate ); };
67 
69  void setGainTarget( StkFloat target ) { envelope_.setTarget( target ); };
70 
72  void noteOn( void ) { envelope_.keyOn(); };
73 
75  void noteOff( void ) { envelope_.keyOff(); };
76 
78  StkFloat lastOut( void ) const { return lastFrame_[0]; };
79 
81  StkFloat tick( void );
82 
84 
91  StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
92 
93  protected:
94 
95  FileLoop wave_;
96  Modulate modulator_;
97  Envelope envelope_;
98  Envelope pitchEnvelope_;
99  StkFloat rate_;
100  StkFloat sweepRate_;
101 
102 };
103 
104 inline StkFloat SingWave :: tick( void )
105 {
106  // Set the wave rate.
107  StkFloat newRate = pitchEnvelope_.tick();
108  newRate += newRate * modulator_.tick();
109  wave_.setRate( newRate );
110 
111  lastFrame_[0] = wave_.tick();
112  lastFrame_[0] *= envelope_.tick();
113 
114  return lastFrame_[0];
115 }
116 
117 inline StkFrames& SingWave :: tick( StkFrames& frames, unsigned int channel )
118 {
119 #if defined(_STK_DEBUG_)
120  if ( channel >= frames.channels() ) {
121  oStream_ << "SingWave::tick(): channel and StkFrames arguments are incompatible!";
122  handleError( StkError::FUNCTION_ARGUMENT );
123  }
124 #endif
125 
126  StkFloat *samples = &frames[channel];
127  unsigned int hop = frames.channels();
128  for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
129  *samples = SingWave::tick();
130 
131  return frames;
132 }
133 
134 } // stk namespace
135 
136 #endif
STK linear line envelope class.
Definition: Envelope.h:22
void keyOn(void)
Set target = 1.
Definition: Envelope.h:35
void setTarget(StkFloat target)
Set the target value.
StkFloat tick(void)
Compute and return one output sample.
Definition: Envelope.h:88
void keyOff(void)
Set target = 0.
Definition: Envelope.h:38
void setRate(StkFloat rate)
Set the rate.
STK file looping / oscillator class.
Definition: FileLoop.h:27
StkFloat tick(unsigned int channel=0)
Compute a sample frame and return the specified channel value.
void setRate(StkFloat rate)
Set the data read rate in samples. The rate can be negative.
virtual void reset(void)
Clear outputs and reset time (file) pointer to zero.
Definition: FileLoop.h:57
void normalize(void)
Normalize data to a maximum of +-1.0.
Definition: FileLoop.h:67
STK abstract unit generator parent class.
Definition: Generator.h:21
STK periodic/random modulator.
Definition: Modulate.h:24
void setVibratoGain(StkFloat gain)
Set the periodic (vibrato) gain.
Definition: Modulate.h:42
StkFloat tick(void)
Compute and return one output sample.
Definition: Modulate.h:80
void setVibratoRate(StkFloat rate)
Set the periodic (vibrato) rate or frequency in Hz.
Definition: Modulate.h:39
void setRandomGain(StkFloat gain)
Set the random modulation gain.
STK "singing" looped soundfile class.
Definition: SingWave.h:26
~SingWave(void)
Class destructor.
void setRandomGain(StkFloat gain)
Set the random-ness amount.
Definition: SingWave.h:60
StkFloat tick(void)
Compute and return one output sample.
Definition: SingWave.h:104
void setVibratoGain(StkFloat gain)
Set the vibrato gain.
Definition: SingWave.h:57
SingWave(std::string fileName, bool raw=false)
Class constructor taking filename argument.
void setGainRate(StkFloat rate)
Set the gain rate.
Definition: SingWave.h:66
void reset(void)
Reset file to beginning.
Definition: SingWave.h:42
void setVibratoRate(StkFloat rate)
Set the vibrato frequency in Hz.
Definition: SingWave.h:54
void noteOn(void)
Start a note.
Definition: SingWave.h:72
void setSweepRate(StkFloat rate)
Set the sweep rate.
Definition: SingWave.h:63
StkFloat lastOut(void) const
Return the last computed output value.
Definition: SingWave.h:78
void setGainTarget(StkFloat target)
Set the gain target value.
Definition: SingWave.h:69
void noteOff(void)
Stop a note.
Definition: SingWave.h:75
void setFrequency(StkFloat frequency)
Set looping parameters for a particular frequency.
void normalize(void)
Normalize the file to a maximum of +-1.0.
Definition: SingWave.h:45
void normalize(StkFloat peak)
Normalize the file to a maximum of +- peak.
Definition: SingWave.h:48
An STK class to handle vectorized audio data.
Definition: Stk.h:287
unsigned int channels(void) const
Return the number of channels represented by the data.
Definition: Stk.h:415
unsigned int frames(void) const
Return the number of sample frames represented by the data.
Definition: Stk.h:418
static void handleError(const char *message, StkError::Type type)
Static function for error reporting and handling using c-strings.
The STK namespace.
Definition: ADSR.h:8