#ifndef __permute__ #define __permute__ #ifndef __audioeffectx__ #include "audioeffectx.h" #endif #include typedef struct { unsigned char index; float value; } pchange; typedef struct { unsigned char index; long value; } ndata; struct slice_data { long active_at; long start; long len; double vel; double cpos; double advance_rate; void *extra; }; struct slice_list; struct slice_list { struct slice_list *prev; struct slice_data *data; struct slice_list *next; }; enum { // Parameters Tags WETDRY, // ISACTIVE, ISRECORD, // NBOFFSET, NBLENGTH, //VARBUFSIZE, ISQUANT, NUMPARAMS }; class permute : public AudioEffectX { public: permute (audioMasterCallback audioMaster); ~permute (); virtual void process (float **inputs, float **outputs, long sampleframes); virtual void processReplacing (float **inputs, float **outputs, long sampleFrames); virtual void setProgramName (char *name); virtual void getProgramName (char *name); virtual void suspend (); virtual void resume (); virtual void setParameter (long index, float value); virtual float getParameter (long index); virtual void getParameterLabel (long index, char *label); virtual void getParameterDisplay (long index, char *text); virtual void getParameterName (long index, char *text); virtual long processEvents (VstEvents* events); virtual bool getEffectName (char* name); virtual bool getVendorString (char* text); virtual bool getProductString (char* text); virtual long getVendorVersion () { return vendversion; }; virtual VstPlugCategory getPlugCategory () { return kPlugCategEffect; } virtual void checkbuffers (); protected: long vendversion; void noteon (long note, long velocity, long delta); void noteoff (long note, long delta); void fnote (char *str); int prevactive; int isquant; int isrecord; float fwetdry, rwetdry; float fnblength; float rnblength; float fvarbufsize; float *lbuffer, *rbuffer; float *tlbuf, *trbuf; long tbegin; long rnblength_sam; long wcursor_init; long old_bufsize; long bufsize; long rvarbufsize_sam; long tbsize; long tbcursor; long windsize; long beatsinbuf; long wcursor, iwcursor; char programName[32]; char strbuf[256]; double sampb; struct VstTimeInfo *vti; // pchange *actionlist; struct slice_list *active_slices; struct slice_data *new_slices; int *slice_change; int num_new_slices; int max_new_slices; int block_size; // ndata *notelist; int _isnoteon; long _rpos; long _ipos; int first_slice_nval; int num_slices; }; #endif