Arduino STK  4.6.2
Simple.h
1 #ifndef STK_SIMPLE_H
2 #define STK_SIMPLE_H
3 
4 #include "Instrmnt.h"
5 #include "ADSR.h"
6 #include "FileLoop.h"
7 #include "OnePole.h"
8 #include "BiQuad.h"
9 #include "Noise.h"
10 
11 namespace stk {
12 
13 /***************************************************/
30 /***************************************************/
31 
32 class Simple : public Instrmnt
33 {
34  public:
36 
39  Simple( void );
40 
42  ~Simple( void );
43 
45  void setFrequency( StkFloat frequency );
46 
48  void keyOn( void );
49 
51  void keyOff( void );
52 
54  void noteOn( StkFloat frequency, StkFloat amplitude );
55 
57  void noteOff( StkFloat amplitude );
58 
60  void controlChange( int number, StkFloat value );
61 
63  StkFloat tick( unsigned int channel = 0 );
64 
66 
73  StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
74 
75  protected:
76 
77  ADSR adsr_;
78  FileLoop *loop_;
79  OnePole filter_;
80  BiQuad biquad_;
81  Noise noise_;
82  StkFloat baseFrequency_;
83  StkFloat loopGain_;
84 
85 };
86 
87 inline StkFloat Simple :: tick( unsigned int )
88 {
89  lastFrame_[0] = loopGain_ * loop_->tick();
90  biquad_.tick( noise_.tick() );
91  lastFrame_[0] += (1.0 - loopGain_) * biquad_.lastOut();
92  lastFrame_[0] = filter_.tick( lastFrame_[0] );
93  lastFrame_[0] *= adsr_.tick();
94  return lastFrame_[0];
95 }
96 
97 inline StkFrames& Simple :: tick( StkFrames& frames, unsigned int channel )
98 {
99  unsigned int nChannels = lastFrame_.channels();
100 #if defined(_STK_DEBUG_)
101  if ( channel > frames.channels() - nChannels ) {
102  oStream_ << "Simple::tick(): channel and StkFrames arguments are incompatible!";
103  handleError( StkError::FUNCTION_ARGUMENT );
104  }
105 #endif
106 
107  StkFloat *samples = &frames[channel];
108  unsigned int j, hop = frames.channels() - nChannels;
109  if ( nChannels == 1 ) {
110  for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
111  *samples++ = tick();
112  }
113  else {
114  for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
115  *samples++ = tick();
116  for ( j=1; j<nChannels; j++ )
117  *samples++ = lastFrame_[j];
118  }
119  }
120 
121  return frames;
122 }
123 
124 } // stk namespace
125 
126 #endif
STK ADSR envelope class.
Definition: ADSR.h:27
StkFloat tick(void)
Compute and return one output sample.
Definition: ADSR.h:117
STK biquad (two-pole, two-zero) filter class.
Definition: BiQuad.h:21
StkFloat tick(StkFloat input)
Input one sample to the filter and return a reference to one output.
Definition: BiQuad.h:119
StkFloat lastOut(void) const
Return the last computed output value.
Definition: BiQuad.h:87
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.
STK instrument abstract base class.
Definition: Instrmnt.h:20
STK noise generator.
Definition: Noise.h:22
StkFloat tick(void)
Compute and return one output sample.
Definition: Noise.h:59
STK one-pole filter class.
Definition: OnePole.h:21
StkFloat tick(StkFloat input)
Input one sample to the filter and return one output.
Definition: OnePole.h:80
STK wavetable/noise instrument.
Definition: Simple.h:33
void keyOff(void)
Start envelope toward "off" target.
void keyOn(void)
Start envelope toward "on" target.
void noteOff(StkFloat amplitude)
Stop a note with the given amplitude (speed of decay).
Simple(void)
Class constructor.
~Simple(void)
Class destructor.
void setFrequency(StkFloat frequency)
Set instrument parameters for a particular frequency.
StkFloat tick(unsigned int channel=0)
Compute and return one output sample.
Definition: Simple.h:87
void controlChange(int number, StkFloat value)
Perform the control change specified by number and value (0.0 - 128.0).
void noteOn(StkFloat frequency, StkFloat amplitude)
Start a note with the given frequency and amplitude.
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