fmodex/fmod/lib/vst/AudioEffect.hpp

132 lines
5.9 KiB
C++
Raw Normal View History

//-------------------------------------------------------------------------------------------------------
// 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__
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------