Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial


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
8namespace stk {
9
10/***************************************************/
23/***************************************************/
24
25class 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
104inline 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
117inline 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:23
void keyOff(StkFloat target=0.0)
Start ramping to specified target (default = 0).
Definition Envelope.h:39
void setTarget(StkFloat target)
Set the target value.
void keyOn(StkFloat target=1.0)
Start ramping to specified target (default = 1).
Definition Envelope.h:36
StkFloat tick(void)
Compute and return one output sample.
Definition Envelope.h:89
void setRate(StkFloat rate)
Set the rate.
STK file looping / oscillator class.
Definition FileLoop.h:27
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
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:279
unsigned int channels(void) const
Return the number of channels represented by the data.
Definition Stk.h:416
unsigned int frames(void) const
Return the number of sample frames represented by the data.
Definition Stk.h:419
The STK namespace.
Definition ADSR.h:6

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