Arduino STK  4.6.2
Instrmnt.h
1 #ifndef STK_INSTRMNT_H
2 #define STK_INSTRMNT_H
3 
4 #include "Stk.h"
5 
6 namespace stk {
7 
8 /***************************************************/
17 /***************************************************/
18 
19 class Instrmnt : public Stk
20 {
21  public:
23  Instrmnt( void ) { lastFrame_.resize( 1, 1, 0.0 ); };
24 
26 
29  virtual void clear( void ) {};
30 
32  virtual void noteOn( StkFloat frequency, StkFloat amplitude ) = 0;
33 
35  virtual void noteOff( StkFloat amplitude ) = 0;
36 
38  virtual void setFrequency( StkFloat frequency );
39 
41  virtual void controlChange(int number, StkFloat value);
42 
44  unsigned int channelsOut( void ) const { return lastFrame_.channels(); };
45 
47  const StkFrames& lastFrame( void ) const { return lastFrame_; };
48 
50 
58  StkFloat lastOut( unsigned int channel = 0 );
59 
61 
64  virtual StkFloat tick( unsigned int channel = 0 ) = 0;
65 
67 
74  virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0;
75 
76  protected:
77 
78  StkFrames lastFrame_;
79 
80 };
81 
82 inline void Instrmnt :: setFrequency( StkFloat frequency )
83 {
84  oStream_ << "Instrmnt::setFrequency: virtual setFrequency function call!";
85  handleError( StkError::WARNING );
86 }
87 
88 inline StkFloat Instrmnt :: lastOut( unsigned int channel )
89 {
90 #if defined(_STK_DEBUG_)
91  if ( channel >= lastFrame_.channels() ) {
92  oStream_ << "Instrmnt::lastOut(): channel argument is invalid!";
93  handleError( StkError::FUNCTION_ARGUMENT );
94  }
95 #endif
96 
97  return lastFrame_[channel];
98 }
99 
100 inline void Instrmnt :: controlChange( int number, StkFloat value )
101 {
102  oStream_ << "Instrmnt::controlChange: virtual function call!";
103  handleError( StkError::WARNING );
104 }
105 
106 } // stk namespace
107 
108 #endif
STK instrument abstract base class.
Definition: Instrmnt.h:20
virtual void noteOn(StkFloat frequency, StkFloat amplitude)=0
Start a note with the given frequency and amplitude.
virtual StkFrames & tick(StkFrames &frames, unsigned int channel=0)=0
Fill the StkFrames object with computed sample frames, starting at the specified channel.
virtual void noteOff(StkFloat amplitude)=0
Stop a note with the given amplitude (speed of decay).
virtual void setFrequency(StkFloat frequency)
Set instrument parameters for a particular frequency.
Definition: Instrmnt.h:82
virtual void controlChange(int number, StkFloat value)
Perform the control change specified by number and value (0.0 - 128.0).
Definition: Instrmnt.h:100
virtual void clear(void)
Reset and clear all internal state (for subclasses).
Definition: Instrmnt.h:29
unsigned int channelsOut(void) const
Return the number of output channels for the class.
Definition: Instrmnt.h:44
Instrmnt(void)
Class constructor.
Definition: Instrmnt.h:23
const StkFrames & lastFrame(void) const
Return an StkFrames reference to the last output sample frame.
Definition: Instrmnt.h:47
StkFloat lastOut(unsigned int channel=0)
Return the specified channel value of the last computed frame.
Definition: Instrmnt.h:88
virtual StkFloat tick(unsigned int channel=0)=0
Compute one sample frame and return the specified channel value.
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
void resize(size_t nFrames, unsigned int nChannels=1)
Resize self to represent the specified number of channels and frames.
STK base class.
Definition: Stk.h:144
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