Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial


Mesh2D.h
1#ifndef STK_MESH2D_H
2#define STK_MESH2D_H
3
4#include "Instrmnt.h"
5#include "OnePole.h"
6
7namespace stk {
8
9/***************************************************/
33/***************************************************/
34
35const unsigned short NXMAX = 12;
36const unsigned short NYMAX = 12;
37
38class Mesh2D : public Instrmnt
39{
40 public:
42 Mesh2D( unsigned short nX, unsigned short nY );
43
45 ~Mesh2D( void );
46
48 void clear( void );
49
51 void setNX( unsigned short lenX );
52
54 void setNY( unsigned short lenY );
55
57 void setInputPosition( StkFloat xFactor, StkFloat yFactor );
58
60 void setDecay( StkFloat decayFactor );
61
63 void noteOn( StkFloat frequency, StkFloat amplitude );
64
66 void noteOff( StkFloat amplitude );
67
69 StkFloat energy( void );
70
72 StkFloat inputTick( StkFloat input );
73
75 void controlChange( int number, StkFloat value );
76
78 StkFloat tick( unsigned int channel = 0 );
79
81
88 StkFrames& tick( StkFrames& frames, unsigned int channel = 0 );
89
90 protected:
91
92 StkFloat tick0();
93 StkFloat tick1();
94 void clearMesh();
95
96 unsigned short NX_, NY_;
97 unsigned short xInput_, yInput_;
98 OnePole filterX_[NXMAX];
99 OnePole filterY_[NYMAX];
100 StkFloat v_[NXMAX-1][NYMAX-1]; // junction velocities
101 StkFloat vxp_[NXMAX][NYMAX]; // positive-x velocity wave
102 StkFloat vxm_[NXMAX][NYMAX]; // negative-x velocity wave
103 StkFloat vyp_[NXMAX][NYMAX]; // positive-y velocity wave
104 StkFloat vym_[NXMAX][NYMAX]; // negative-y velocity wave
105
106 // Alternate buffers
107 StkFloat vxp1_[NXMAX][NYMAX]; // positive-x velocity wave
108 StkFloat vxm1_[NXMAX][NYMAX]; // negative-x velocity wave
109 StkFloat vyp1_[NXMAX][NYMAX]; // positive-y velocity wave
110 StkFloat vym1_[NXMAX][NYMAX]; // negative-y velocity wave
111
112 int counter_; // time in samples
113};
114
115inline StkFrames& Mesh2D :: tick( StkFrames& frames, unsigned int channel )
116{
117 unsigned int nChannels = lastFrame_.channels();
118#if defined(_STK_DEBUG_)
119 if ( channel > frames.channels() - nChannels ) {
120 oStream_ << "Mesh2D::tick(): channel and StkFrames arguments are incompatible!";
121 handleError( StkError::FUNCTION_ARGUMENT );
122 }
123#endif
124
125 StkFloat *samples = &frames[channel];
126 unsigned int j, hop = frames.channels() - nChannels;
127 if ( nChannels == 1 ) {
128 for ( unsigned int i=0; i<frames.frames(); i++, samples += hop )
129 *samples++ = tick();
130 }
131 else {
132 for ( unsigned int i=0; i<frames.frames(); i++, samples += hop ) {
133 *samples++ = tick();
134 for ( j=1; j<nChannels; j++ )
135 *samples++ = lastFrame_[j];
136 }
137 }
138
139 return frames;
140}
141
142} // stk namespace
143
144#endif
STK instrument abstract base class.
Definition Instrmnt.h:20
Two-dimensional rectilinear waveguide mesh class.
Definition Mesh2D.h:39
void noteOff(StkFloat amplitude)
Stop a note with the given amplitude (speed of decay) ... currently ignored.
void setNY(unsigned short lenY)
Set the y dimension size in samples.
void clear(void)
Reset and clear all internal state.
StkFloat energy(void)
Calculate and return the signal energy stored in the mesh.
void setNX(unsigned short lenX)
Set the x dimension size in samples.
StkFloat inputTick(StkFloat input)
Input a sample to the mesh and compute one output sample.
void noteOn(StkFloat frequency, StkFloat amplitude)
Impulse the mesh with the given amplitude (frequency ignored).
void setInputPosition(StkFloat xFactor, StkFloat yFactor)
Set the x, y input position on a 0.0 - 1.0 scale.
void setDecay(StkFloat decayFactor)
Set the loss filters gains (0.0 - 1.0).
~Mesh2D(void)
Class destructor.
void controlChange(int number, StkFloat value)
Perform the control change specified by number and value (0.0 - 128.0).
StkFloat tick(unsigned int channel=0)
Compute and return one output sample.
Mesh2D(unsigned short nX, unsigned short nY)
Class constructor, taking the x and y dimensions in samples.
STK one-pole filter class.
Definition OnePole.h:21
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.