132 lines
5.9 KiB
C++
132 lines
5.9 KiB
C++
|
|
//-------------------------------------------------------------------------------------------------------
|
|||
|
|
// VST Plug-Ins SDK
|
|||
|
|
// Version 1.0
|
|||
|
|
// <20> 2003, Steinberg Media Technologies, All Rights Reserved
|
|||
|
|
//-------------------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
#ifndef __AudioEffect__
|
|||
|
|
#define __AudioEffect__
|
|||
|
|
|
|||
|
|
#ifndef __AEffect__
|
|||
|
|
#include "AEffect.h" // "c" interface
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
class AEffEditor;
|
|||
|
|
class AudioEffect;
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------
|
|||
|
|
// Needs to be defined by the audio effect and is
|
|||
|
|
// called to create the audio effect object instance.
|
|||
|
|
AudioEffect* createEffectInstance (audioMasterCallback audioMaster);
|
|||
|
|
|
|||
|
|
long dispatchEffectClass (AEffect *e, long opCode, long index, long value, void *ptr, float opt);
|
|||
|
|
float getParameterClass (long index);
|
|||
|
|
void setParameterClass (long index, float value);
|
|||
|
|
void processClass (AEffect *e, float **inputs, float **outputs, long sampleFrames);
|
|||
|
|
void processClassReplacing (AEffect *e, float **inputs, float **outputs, long sampleFrames);
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------
|
|||
|
|
class AudioEffect
|
|||
|
|
{
|
|||
|
|
friend class AEffEditor;
|
|||
|
|
friend long dispatchEffectClass (AEffect *e, long opCode, long index, long value, void *ptr, float opt);
|
|||
|
|
friend float getParameterClass (AEffect *e, long index);
|
|||
|
|
friend void setParameterClass (AEffect *e, long index, float value);
|
|||
|
|
friend void processClass (AEffect *e, float **inputs, float **outputs, long sampleFrames);
|
|||
|
|
friend void processClassReplacing (AEffect *e, float **inputs, float **outputs, long sampleFrames);
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
AudioEffect (audioMasterCallback audioMaster, long numPrograms, long numParams);
|
|||
|
|
virtual ~AudioEffect ();
|
|||
|
|
|
|||
|
|
virtual void setParameter (long index, float value) { index = index; value = value; }
|
|||
|
|
virtual float getParameter (long index) { index = index; return 0; }
|
|||
|
|
virtual void setParameterAutomated (long index, float value);
|
|||
|
|
|
|||
|
|
AEffect *getAeffect () { return &cEffect; } // Returns the AEffect Structure
|
|||
|
|
|
|||
|
|
void setEditor (AEffEditor *editor)
|
|||
|
|
{ this->editor = editor;
|
|||
|
|
if (editor) cEffect.flags |= effFlagsHasEditor;
|
|||
|
|
else cEffect.flags &= ~effFlagsHasEditor; } // Should be called if you want to define your own editor
|
|||
|
|
|
|||
|
|
//---Called from audio master (Host -> Plug)---------------
|
|||
|
|
virtual void process (float **inputs, float **outputs, long sampleFrames) = 0;
|
|||
|
|
virtual void processReplacing (float **inputs, float **outputs, long sampleFrames)
|
|||
|
|
{ inputs = inputs; outputs = outputs; sampleFrames = sampleFrames; }
|
|||
|
|
|
|||
|
|
virtual long dispatcher (long opCode, long index, long value, void *ptr, float opt); // Opcodes dispatcher
|
|||
|
|
|
|||
|
|
virtual void open () {} // Called when Plugin is initialized
|
|||
|
|
virtual void close () {} // Called when Plugin will be released
|
|||
|
|
|
|||
|
|
//---Program----------------------------
|
|||
|
|
virtual long getProgram () { return curProgram; }
|
|||
|
|
virtual void setProgram (long program) { curProgram = program; }// Don't forget to set curProgram
|
|||
|
|
virtual void setProgramName (char *name) { *name = 0; } // All following refer to curProgram
|
|||
|
|
virtual void getProgramName (char *name) { *name = 0; }
|
|||
|
|
|
|||
|
|
virtual void getParameterLabel (long index, char *label) { index = index; *label = 0; } // example: "dB"
|
|||
|
|
virtual void getParameterDisplay (long index, char *text) { index = index; *text = 0; } // example: "6.01"
|
|||
|
|
virtual void getParameterName (long index, char *text) { index = index; *text = 0; } // example: "Volume"
|
|||
|
|
|
|||
|
|
virtual float getVu () { return 0; }
|
|||
|
|
|
|||
|
|
virtual long getChunk (void** data, bool isPreset = false) { return 0; } // Returns the Size in bytes of the chunk (Plugin allocates the data array)
|
|||
|
|
virtual long setChunk (void* data, long byteSize, bool isPreset = false) { return 0; }
|
|||
|
|
|
|||
|
|
virtual void setSampleRate (float sampleRate) { this->sampleRate = sampleRate; }
|
|||
|
|
virtual void setBlockSize (long blockSize) { this->blockSize = blockSize; }
|
|||
|
|
|
|||
|
|
virtual void suspend () {} // Called when Plugin is switched to Off
|
|||
|
|
virtual void resume () {} // Called when Plugin is switched to On
|
|||
|
|
|
|||
|
|
//---Setup---------------------------
|
|||
|
|
virtual void setUniqueID (long iD) { cEffect.uniqueID = iD; } // must call this!
|
|||
|
|
virtual void setNumInputs (long inputs) { cEffect.numInputs = inputs; }
|
|||
|
|
virtual void setNumOutputs (long outputs) { cEffect.numOutputs = outputs; }
|
|||
|
|
|
|||
|
|
virtual void hasVu (bool state = true);
|
|||
|
|
virtual void hasClip (bool state = true);
|
|||
|
|
virtual void canMono (bool state = true);
|
|||
|
|
virtual void canProcessReplacing (bool state = true); // Tells that the processReplacing () could be used
|
|||
|
|
virtual void programsAreChunks (bool state = true);
|
|||
|
|
virtual void setRealtimeQualities (long qualities);
|
|||
|
|
virtual void setOfflineQualities (long qualities);
|
|||
|
|
virtual void setInitialDelay (long delay); // Uses to report the Plugin's latency (Group Delay)
|
|||
|
|
|
|||
|
|
//---Inquiry-------------------------
|
|||
|
|
virtual float getSampleRate () { return sampleRate; }
|
|||
|
|
virtual long getBlockSize () { return blockSize; }
|
|||
|
|
|
|||
|
|
//---Host communication--------------
|
|||
|
|
virtual long getMasterVersion ();
|
|||
|
|
virtual long getCurrentUniqueId ();
|
|||
|
|
virtual void masterIdle ();
|
|||
|
|
virtual bool isInputConnected (long input);
|
|||
|
|
virtual bool isOutputConnected (long output);
|
|||
|
|
|
|||
|
|
//---Tools---------------------------
|
|||
|
|
virtual void dB2string (float value, char *text);
|
|||
|
|
virtual void Hz2string (float samples, char *text);
|
|||
|
|
virtual void ms2string (float samples, char *text);
|
|||
|
|
virtual void float2string (float value, char *string);
|
|||
|
|
virtual void long2string (long value, char *text);
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
//---Members-------------------------
|
|||
|
|
float sampleRate;
|
|||
|
|
AEffEditor *editor;
|
|||
|
|
audioMasterCallback audioMaster;
|
|||
|
|
long numPrograms;
|
|||
|
|
long numParams;
|
|||
|
|
long curProgram;
|
|||
|
|
long blockSize;
|
|||
|
|
AEffect cEffect;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif // __AudioEffect__
|
|||
|
|
//-------------------------------------------------------------------------------------------------------
|
|||
|
|
//-------------------------------------------------------------------------------------------------------
|
|||
|
|
|