mirror of
https://github.com/vsariola/sointu.git
synced 2025-06-04 01:28:45 -04:00
186 lines
11 KiB
C++
186 lines
11 KiB
C++
#ifndef __audioeffectx__
|
|
#define __audioeffectx__
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
// VST Plug-Ins SDK
|
|
// version 2.0 extension
|
|
// (c)1999 Steinberg Soft+Hardware GmbH
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
|
|
#ifndef __AudioEffect__
|
|
#include "AudioEffect.hpp" // version 1.0 base class AudioEffect
|
|
#endif
|
|
|
|
#ifndef __aeffectx__
|
|
#include "aeffectx.h" // version 2.0 'C' extensions and structures
|
|
#endif
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
// AudioEffectX extends AudioEffect with the new features. so you should derive
|
|
// your plug from AudioEffectX
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
|
|
class AudioEffectX : public AudioEffect
|
|
{
|
|
public:
|
|
AudioEffectX (audioMasterCallback audioMaster, long numPrograms, long numParams);
|
|
virtual ~AudioEffectX ();
|
|
|
|
virtual long dispatcher (long opCode, long index, long value, void *ptr, float opt);
|
|
|
|
// 'host' are methods which go from plug to host, and are usually not overridden
|
|
// 'plug' are methods which you may override to implement the according functionality (to host)
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
// events + time
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// host
|
|
virtual void wantEvents (long filter = 1); // filter is currently ignored, midi channel data only (default)
|
|
virtual VstTimeInfo* getTimeInfo (long filter);
|
|
// returns const VstTimeInfo* (or 0 if not supported)
|
|
// filter should contain a mask indicating which fields are requested
|
|
// (see valid masks in aeffectx.h), as some items may require extensive
|
|
// conversions
|
|
virtual long tempoAt (long pos); // returns tempo (in bpm * 10000) at sample frame location <pos>
|
|
bool sendVstEventsToHost (VstEvents* events); // true:success
|
|
|
|
// plug
|
|
virtual long processEvents (VstEvents* events) {return 0;} // wants no more...else return 1!
|
|
// VstEvents and VstMidiEvents are declared in aeffectx.h
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
// parameters and programs
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// host
|
|
virtual long getNumAutomatableParameters ();
|
|
virtual long getParameterQuantization (); // returns the integer value for +1.0 representation,
|
|
// or 1 if full single float precision is maintained
|
|
// in automation. parameter index in <value> (-1: all, any)
|
|
// plug
|
|
virtual bool canParameterBeAutomated (long index) { return true; }
|
|
virtual bool string2parameter (long index, char* text) {return false;} // note: implies setParameter. text==0 is to be
|
|
// expected to check the capability (returns true).
|
|
virtual float getChannelParameter (long channel, long index) {return 0;}
|
|
virtual long getNumCategories () {return 1L;}
|
|
virtual bool getProgramNameIndexed (long category, long index, char* text) {return false;}
|
|
virtual bool copyProgram (long destination) {return false;}
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
// connections, configuration
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// host
|
|
virtual bool ioChanged (); // tell host numInputs and/or numOutputs and/or numParameters has changed
|
|
virtual bool needIdle (); // plug needs idle calls (outside its editor window)
|
|
virtual bool sizeWindow (long width, long height);
|
|
virtual double updateSampleRate (); // gets and returns sample rate from host (may issue setSampleRate() )
|
|
virtual long updateBlockSize (); // same for block size
|
|
virtual long getInputLatency ();
|
|
virtual long getOutputLatency ();
|
|
virtual AEffect* getPreviousPlug (long input); // input can be -1 in which case the first found is returned
|
|
virtual AEffect* getNextPlug (long output); // output can be -1 in which case the first found is returned
|
|
|
|
// plug
|
|
virtual void inputConnected (long index, bool state) {} // input at <index> has been (dis-)connected,
|
|
virtual void outputConnected (long index, bool state) {} // same as input; state == true: connected
|
|
virtual bool getInputProperties (long index, VstPinProperties* properties) {return false;}
|
|
virtual bool getOutputProperties (long index, VstPinProperties* properties) {return false;}
|
|
virtual VstPlugCategory getPlugCategory()
|
|
{ if (cEffect.flags & effFlagsIsSynth) return kPlugCategSynth; return kPlugCategUnknown; }
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
// realtime
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// host
|
|
virtual long willProcessReplacing (); // returns 0: not implemented, 1: replacing, 2: accumulating
|
|
virtual long getCurrentProcessLevel (); // returns: 0: not supported,
|
|
// 1: currently in user thread (gui)
|
|
// 2: currently in audio thread or irq (where process is called)
|
|
// 3: currently in 'sequencer' thread or irq (midi, timer etc)
|
|
// 4: currently offline processing and thus in user thread
|
|
// other: not defined, but probably pre-empting user thread.
|
|
virtual long getAutomationState (); // returns 0: not supported, 1: off, 2:read, 3:write, 4:read/write
|
|
virtual void wantAsyncOperation (bool state = true); // notify host that we want to operate asynchronously.
|
|
// process() will return immedeately; host will poll getCurrentPosition
|
|
// to see if data are available in time.
|
|
virtual void hasExternalBuffer (bool state = true); // external dsp, may have their own output buffe (32 bit float)
|
|
// host then requests this via effGetDestinationBuffer
|
|
|
|
// plug
|
|
virtual long reportCurrentPosition () {return 0;} // for external dsp, see wantAsyncOperation ()
|
|
virtual float* reportDestinationBuffer () {return 0;} // for external dsp (dma option)
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
// offline
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// host
|
|
virtual bool offlineRead (VstOfflineTask* offline, VstOfflineOption option, bool readSource = true);
|
|
virtual bool offlineWrite (VstOfflineTask* offline, VstOfflineOption option);
|
|
virtual bool offlineStart (VstAudioFile* ptr, long numAudioFiles, long numNewAudioFiles);
|
|
virtual long offlineGetCurrentPass ();
|
|
virtual long offlineGetCurrentMetaPass ();
|
|
|
|
// plug
|
|
virtual bool offlineNotify (VstAudioFile* ptr, long numAudioFiles, bool start) { return false; }
|
|
virtual bool offlinePrepare (VstOfflineTask* offline, long count) {return false;}
|
|
virtual bool offlineRun (VstOfflineTask* offline, long count) {return false;}
|
|
|
|
virtual long offlineGetNumPasses () {return 0;}
|
|
virtual long offlineGetNumMetaPasses () {return 0;}
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
// other
|
|
//----------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// host
|
|
virtual void setOutputSamplerate (float samplerate);
|
|
virtual bool getSpeakerArrangement (VstSpeakerArrangement* pluginInput, VstSpeakerArrangement* pluginOutput);
|
|
virtual bool getHostVendorString (char* text); // fills <text> with a string identifying the vendor (max 64 char)
|
|
virtual bool getHostProductString (char* text); // fills <text> with a string with product name (max 64 char)
|
|
virtual long getHostVendorVersion (); // returns vendor-specific version
|
|
virtual long hostVendorSpecific (long lArg1, long lArg2, void* ptrArg, float floatArg); // no definition
|
|
virtual long canHostDo (char* text); // see 'hostCanDos' in audioeffectx.cpp
|
|
// returns 0: don't know (default), 1: yes, -1: no
|
|
virtual void isSynth (bool state = true); // will call wantEvents if true
|
|
virtual void noTail (bool state = true); // true: tells host we produce no output when silence comes in
|
|
// enables host to omit process() when no data are present
|
|
// on any one input.
|
|
virtual long getHostLanguage (); // returns VstHostLanguage
|
|
virtual void* openWindow (VstWindow*); // create new window
|
|
virtual bool closeWindow (VstWindow*); // close a newly created window
|
|
virtual void* getDirectory (); // get the plug's directory, FSSpec on mac, else char*
|
|
virtual bool updateDisplay(); // something has changed, update 'multi-fx' display
|
|
// returns true if supported
|
|
|
|
// plug
|
|
virtual bool processVariableIo (VstVariableIo* varIo) {return false;}
|
|
virtual bool setSpeakerArrangement (VstSpeakerArrangement* pluginInput, VstSpeakerArrangement* pluginOutput) {return false;}
|
|
virtual void setBlockSizeAndSampleRate (long blockSize, float sampleRate)
|
|
{this->blockSize = blockSize; this->sampleRate = sampleRate;}
|
|
virtual bool setBypass(bool onOff) {return false;} // for 'soft-bypass; process() still called
|
|
virtual bool getEffectName (char* name) {return false;} // name max 32 char
|
|
virtual bool getErrorText (char* text) {return false;} // max 256 char
|
|
virtual bool getVendorString (char* text) {return false;} // fill text with a string identifying the vendor (max 64 char)
|
|
virtual bool getProductString (char* text) {return false;} // fill text with a string identifying the product name (max 64 char) // fills <ptr> with a string with product name (max 64 char)
|
|
virtual long getVendorVersion () {return 0;} // return vendor-specific version
|
|
virtual long vendorSpecific (long lArg, long lArg2, void* ptrArg, float floatArg) {return 0;}
|
|
// no definition, vendor specific handling
|
|
virtual long canDo (char* text) {return 0;} // see 'plugCanDos' in audioeffectx.cpp. return values:
|
|
// 0: don't know (default), 1: yes, -1: no
|
|
virtual void* getIcon () {return 0;} // not yet defined
|
|
virtual bool setViewPosition (long x, long y) {return false;}
|
|
virtual long getGetTailSize () {return 0; }
|
|
virtual long fxIdle () {return 0;}
|
|
virtual bool getParameterProperties (long index, VstParameterProperties* p) {return false;}
|
|
virtual bool keysRequired () {return false;} // version 1 plugs will return true
|
|
virtual long getVstVersion () {return 2;}
|
|
};
|
|
|
|
#endif
|