|
|
|
@ -3,10 +3,9 @@ |
|
|
|
|
#ifndef __mdaEPiano__ |
|
|
|
|
#define __mdaEPiano__ |
|
|
|
|
|
|
|
|
|
#include <Audio.h> |
|
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
#include "audioeffectx.h" |
|
|
|
|
|
|
|
|
|
#define NPARAMS 12 //number of parameters
|
|
|
|
|
#define NPROGS 8 //number of programs
|
|
|
|
|
#define NOUTS 2 //number of outputs
|
|
|
|
@ -26,11 +25,11 @@ private: |
|
|
|
|
|
|
|
|
|
struct VOICE //voice state
|
|
|
|
|
{ |
|
|
|
|
VstInt32 delta; //sample playback
|
|
|
|
|
VstInt32 frac; |
|
|
|
|
VstInt32 pos; |
|
|
|
|
VstInt32 end; |
|
|
|
|
VstInt32 loop; |
|
|
|
|
int32_t delta; //sample playback
|
|
|
|
|
int32_t frac; |
|
|
|
|
int32_t pos; |
|
|
|
|
int32_t end; |
|
|
|
|
int32_t loop; |
|
|
|
|
|
|
|
|
|
float env; //envelope
|
|
|
|
|
float dec; |
|
|
|
@ -41,17 +40,17 @@ struct VOICE //voice state |
|
|
|
|
|
|
|
|
|
float outl; |
|
|
|
|
float outr; |
|
|
|
|
VstInt32 note; //remember what note triggered this
|
|
|
|
|
int32_t note; //remember what note triggered this
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct KGRP //keygroup
|
|
|
|
|
{ |
|
|
|
|
VstInt32 root; //MIDI root note
|
|
|
|
|
VstInt32 high; //highest note
|
|
|
|
|
VstInt32 pos; |
|
|
|
|
VstInt32 end; |
|
|
|
|
VstInt32 loop; |
|
|
|
|
int32_t root; //MIDI root note
|
|
|
|
|
int32_t high; //highest note
|
|
|
|
|
int32_t pos; |
|
|
|
|
int32_t end; |
|
|
|
|
int32_t loop; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
class mdaEPiano : public AudioEffectX |
|
|
|
@ -60,39 +59,39 @@ public: |
|
|
|
|
mdaEPiano(audioMasterCallback audioMaster); |
|
|
|
|
~mdaEPiano(); |
|
|
|
|
|
|
|
|
|
virtual void process(float **inputs, float **outputs, VstInt32 sampleframes); |
|
|
|
|
virtual void processReplacing(float **inputs, float **outputs, VstInt32 sampleframes); |
|
|
|
|
virtual VstInt32 processEvents(VstEvents* events); |
|
|
|
|
virtual void process(float **inputs, float **outputs, int32_t sampleframes); |
|
|
|
|
virtual void processReplacing(float **inputs, float **outputs, int32_t sampleframes); |
|
|
|
|
virtual int32_t processEvents(VstEvents* events); |
|
|
|
|
|
|
|
|
|
virtual void setProgram(VstInt32 program); |
|
|
|
|
virtual void setProgram(int32_t program); |
|
|
|
|
virtual void setProgramName(char *name); |
|
|
|
|
virtual void getProgramName(char *name); |
|
|
|
|
virtual void setParameter(VstInt32 index, float value); |
|
|
|
|
virtual float getParameter(VstInt32 index); |
|
|
|
|
virtual void getParameterLabel(VstInt32 index, char *label); |
|
|
|
|
virtual void getParameterDisplay(VstInt32 index, char *text); |
|
|
|
|
virtual void getParameterName(VstInt32 index, char *text); |
|
|
|
|
virtual void setBlockSize(VstInt32 blockSize); |
|
|
|
|
virtual void setParameter(int32_t index, float value); |
|
|
|
|
virtual float getParameter(int32_t index); |
|
|
|
|
virtual void getParameterLabel(int32_t index, char *label); |
|
|
|
|
virtual void getParameterDisplay(int32_t index, char *text); |
|
|
|
|
virtual void getParameterName(int32_t index, char *text); |
|
|
|
|
virtual void setBlockSize(int32_t blockSize); |
|
|
|
|
virtual void resume(); |
|
|
|
|
|
|
|
|
|
virtual bool getOutputProperties (VstInt32 index, VstPinProperties* properties); |
|
|
|
|
virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text); |
|
|
|
|
virtual bool copyProgram (VstInt32 destination); |
|
|
|
|
virtual bool getOutputProperties (int32_t index, VstPinProperties* properties); |
|
|
|
|
virtual bool getProgramNameIndexed (int32_t category, int32_t index, char* text); |
|
|
|
|
virtual bool copyProgram (int32_t destination); |
|
|
|
|
virtual bool getEffectName (char* name); |
|
|
|
|
virtual bool getVendorString (char* text); |
|
|
|
|
virtual bool getProductString (char* text); |
|
|
|
|
virtual VstInt32 getVendorVersion () {return 1;} |
|
|
|
|
virtual VstInt32 canDo (char* text); |
|
|
|
|
virtual int32_t getVendorVersion () {return 1;} |
|
|
|
|
virtual int32_t canDo (char* text); |
|
|
|
|
|
|
|
|
|
virtual VstInt32 getNumMidiInputChannels () { return 1; } |
|
|
|
|
virtual int32_t getNumMidiInputChannels () { return 1; } |
|
|
|
|
|
|
|
|
|
VstInt32 guiUpdate; |
|
|
|
|
void guiGetDisplay(VstInt32 index, char *label); |
|
|
|
|
int32_t guiUpdate; |
|
|
|
|
void guiGetDisplay(int32_t index, char *label); |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
void update(); //my parameter update
|
|
|
|
|
void noteOn(VstInt32 note, VstInt32 velocity); |
|
|
|
|
void fillpatch(VstInt32 p, char *name, float p0, float p1, float p2, float p3, float p4, |
|
|
|
|
void noteOn(int32_t note, int32_t velocity); |
|
|
|
|
void fillpatch(int32_t p, char *name, float p0, float p1, float p2, float p3, float p4, |
|
|
|
|
float p5, float p6, float p7, float p8, float p9, float p10,float p11); |
|
|
|
|
|
|
|
|
|
mdaEPianoProgram* programs; |
|
|
|
@ -100,15 +99,15 @@ private: |
|
|
|
|
|
|
|
|
|
#define EVENTBUFFER 120 |
|
|
|
|
#define EVENTS_DONE 99999999 |
|
|
|
|
VstInt32 notes[EVENTBUFFER + 8]; //list of delta|note|velocity for current block
|
|
|
|
|
int32_t notes[EVENTBUFFER + 8]; //list of delta|note|velocity for current block
|
|
|
|
|
|
|
|
|
|
///global internal variables
|
|
|
|
|
KGRP kgrp[34]; |
|
|
|
|
VOICE voice[NVOICES]; |
|
|
|
|
VstInt32 activevoices, poly; |
|
|
|
|
int32_t activevoices, poly; |
|
|
|
|
short *waves; |
|
|
|
|
float width; |
|
|
|
|
VstInt32 size, sustain; |
|
|
|
|
int32_t size, sustain; |
|
|
|
|
float lfo0, lfo1, dlfo, lmod, rmod; |
|
|
|
|
float treb, tfrq, tl, tr; |
|
|
|
|
float tune, fine, random, stretch, overdrive; |
|
|
|
|