rendered paste body#ifndef TICK_DATA_H_#define TICK_DATA_H_#include "Stk.h"#include "Messager.h"#include "SKINI.msg"#include "VoicerEnv.h"#include "FlexEnv.h"#include "Oscillators.h"class Tick_Data{public: struct Panner { StkFloat panL; StkFloat panR; }; FlexEnv env[]; VoicerEnv voicer; Oscillators *osci[]; Oscillators *osc2[]; int counter; bool done; Messager messager; Skini::Message message; Panner pan; int channels; bool haveMessage; int voices; Tick_Data(); virtual ~Tick_Data(); void processMessage( Tick_Data *data ); };#endif /*TICK_DATA_H_*/#include "Tick_Data.h"Tick_Data::Tick_Data(){ voices = 8; channels = 2; counter = 0; done = false; haveMessage = false; for ( int i=0; i<voices; i++ ) { osci[i] = 0; osc2[i] = 0; } try { for ( int i=0; i<voices; i++ ) { osci[i] = new Oscillators(); osc2[i] = new Oscillators(); } } catch (StkError &) { // goto cleanup; } for ( int i=0; i<voices; i++ ) { voicer.addInstrument( osci[i], 0 ); voicer.addInstrument( osc2[i], 1); } }Tick_Data::~Tick_Data(){ for ( int i=0; i<voices; i++ ) { delete osci[i]; delete osc2[i]; }}void Tick_Data::processMessage( Tick_Data *data ){ register StkFloat value1 = data->message.floatValues[0]; register StkFloat value2 = data->message.floatValues[1]; switch( data->message.type ) { case __SK_Exit_: data->done = true; return; case __SK_NoteOn_: if (value2 == 0.0 ) { // velocity is zero ... really a NoteOff data->voicer.noteOff( value1, 64.0, 0 ); data->voicer.noteOff( value1, 64.0, 1); } else { // a NoteOn data->voicer.noteOn( value1, value2, 0 ); data->voicer.noteOn( value1, value2, 1 ); } break; case __SK_NoteOff_: data->voicer.noteOff( value1, value2, 0 ); data->voicer.noteOff( value1, value2, 1 ); break; case __SK_ControlChange_: data->voicer.controlChange( (int) value1, value2 ); break; //case __SK_AfterTouch_: //data->voicer.controlChange( 128, value1 ); case __SK_PitchChange_: data->voicer.setFrequency( value1 ); break; case __SK_PitchBend_: data->voicer.pitchBend( value1 ); } // end of switch data->haveMessage = false; return;}