summaryrefslogtreecommitdiff
path: root/pluginterfaces/vst2.x
diff options
context:
space:
mode:
authorpepper <pepper@chimecrisis.com>2015-01-31 21:41:28 -0800
committerpepper <pepper@chimecrisis.com>2015-01-31 21:41:28 -0800
commit97587996ee9db30ce00190bdcedd8210490b99f5 (patch)
treed8554969ac496be3a1b02a159f2a4b5b79f9492e /pluginterfaces/vst2.x
backup vst 2.4
Diffstat (limited to 'pluginterfaces/vst2.x')
-rw-r--r--pluginterfaces/vst2.x/aeffect.h351
-rw-r--r--pluginterfaces/vst2.x/aeffectx.h1143
-rw-r--r--pluginterfaces/vst2.x/vstfxstore.h106
3 files changed, 1600 insertions, 0 deletions
diff --git a/pluginterfaces/vst2.x/aeffect.h b/pluginterfaces/vst2.x/aeffect.h
new file mode 100644
index 0000000..5f4f075
--- /dev/null
+++ b/pluginterfaces/vst2.x/aeffect.h
@@ -0,0 +1,351 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/06/20 17:22:55 $
+//
+// Category : VST 2.x Interfaces
+// Filename : aeffect.h
+// Created by : Steinberg Media Technologies
+// Description : Definition of AEffect structure
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __aeffect__
+#define __aeffect__
+
+// gcc based compiler, or CodeWarrior on Mac OS X
+#if ((defined(__GNUC__) && (defined(__APPLE_CPP__) || defined(__APPLE_CC__))) || (defined (__MWERKS__) && defined (__MACH__)))
+ #ifndef TARGET_API_MAC_CARBON
+ #define TARGET_API_MAC_CARBON 1
+ #endif
+ #if __ppc__
+ #ifndef VST_FORCE_DEPRECATED
+ #define VST_FORCE_DEPRECATED 0
+ #endif
+ #endif
+#endif
+
+#if TARGET_API_MAC_CARBON
+ #ifdef __LP64__
+ #pragma options align=power
+ #else
+ #pragma options align=mac68k
+ #endif
+ #define VSTCALLBACK
+#elif defined __BORLANDC__
+ #pragma -a8
+#elif defined(__GNUC__)
+ #pragma pack(push,8)
+ #define VSTCALLBACK __cdecl
+#elif defined(WIN32) || defined(__FLAT__) || defined CBUILDER
+ #pragma pack(push)
+ #pragma pack(8)
+ #define VSTCALLBACK __cdecl
+#else
+ #define VSTCALLBACK
+#endif
+//-------------------------------------------------------------------------------------------------------
+
+#include <string.h> // for strncpy
+
+//-------------------------------------------------------------------------------------------------------
+// VST Version
+//-------------------------------------------------------------------------------------------------------
+
+/** Define SDK Version (you can generate different versions (from 2.0 to 2.4) of this SDK by setting the unwanted extensions to 0). */
+#define VST_2_1_EXTENSIONS 1 ///< Version 2.1 extensions (08-06-2000)
+#define VST_2_2_EXTENSIONS 1 ///< Version 2.2 extensions (08-06-2001)
+#define VST_2_3_EXTENSIONS 1 ///< Version 2.3 extensions (20-05-2003)
+#ifndef VST_2_4_EXTENSIONS
+#define VST_2_4_EXTENSIONS 1 ///< Version 2.4 extensions (01-01-2006)
+#endif
+
+/** Current VST Version */
+#if VST_2_4_EXTENSIONS
+ #define kVstVersion 2400
+#elif VST_2_3_EXTENSIONS
+ #define kVstVersion 2300
+#elif VST_2_2_EXTENSIONS
+ #define kVstVersion 2200
+#elif VST_2_1_EXTENSIONS
+ #define kVstVersion 2100
+#else
+ #define kVstVersion 2
+#endif
+
+/** Disable for Hosts to serve Plug-ins below VST 2.4 */
+#ifndef VST_FORCE_DEPRECATED
+#define VST_FORCE_DEPRECATED VST_2_4_EXTENSIONS
+#endif
+
+/** Declares identifier as deprecated. */
+#if VST_FORCE_DEPRECATED
+#define DECLARE_VST_DEPRECATED(identifier) __##identifier##Deprecated
+#else
+#define DECLARE_VST_DEPRECATED(identifier) identifier
+#endif
+
+/** Define for 64 Bit Platform. */
+#ifndef VST_64BIT_PLATFORM
+#define VST_64BIT_PLATFORM _WIN64 || __LP64__
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+// Integral Types
+//-------------------------------------------------------------------------------------------------------
+
+#ifdef WIN32
+typedef short VstInt16; ///< 16 bit integer type
+typedef int VstInt32; ///< 32 bit integer type
+typedef __int64 VstInt64; ///< 64 bit integer type
+#else
+#include <stdint.h>
+typedef int16_t VstInt16; ///< 16 bit integer type
+typedef int32_t VstInt32; ///< 32 bit integer type
+typedef int64_t VstInt64; ///< 64 bit integer type
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+// Generic Types
+//-------------------------------------------------------------------------------------------------------
+
+#if VST_64BIT_PLATFORM
+typedef VstInt64 VstIntPtr; ///< platform-dependent integer type, same size as pointer
+#else
+typedef VstInt32 VstIntPtr; ///< platform-dependent integer type, same size as pointer
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+// Misc. Definition
+//-------------------------------------------------------------------------------------------------------
+#undef CCONST
+struct AEffect;
+
+/// @cond ignore
+typedef VstIntPtr (VSTCALLBACK *audioMasterCallback) (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt);
+typedef VstIntPtr (VSTCALLBACK *AEffectDispatcherProc) (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt);
+typedef void (VSTCALLBACK *AEffectProcessProc) (AEffect* effect, float** inputs, float** outputs, VstInt32 sampleFrames);
+typedef void (VSTCALLBACK *AEffectProcessDoubleProc) (AEffect* effect, double** inputs, double** outputs, VstInt32 sampleFrames);
+typedef void (VSTCALLBACK *AEffectSetParameterProc) (AEffect* effect, VstInt32 index, float parameter);
+typedef float (VSTCALLBACK *AEffectGetParameterProc) (AEffect* effect, VstInt32 index);
+/// @endcond
+
+/** Four Character Constant (for AEffect->uniqueID) */
+#define CCONST(a, b, c, d) \
+ ((((VstInt32)a) << 24) | (((VstInt32)b) << 16) | (((VstInt32)c) << 8) | (((VstInt32)d) << 0))
+
+/** AEffect magic number */
+#define kEffectMagic CCONST ('V', 's', 't', 'P')
+
+//-------------------------------------------------------------------------------------------------------
+/** Basic VST Effect "C" Interface. */
+//-------------------------------------------------------------------------------------------------------
+struct AEffect
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 magic; ///< must be #kEffectMagic ('VstP')
+
+ /** Host to Plug-in dispatcher @see AudioEffect::dispatcher */
+ AEffectDispatcherProc dispatcher;
+
+ /** \deprecated Accumulating process mode is deprecated in VST 2.4! Use AEffect::processReplacing instead! */
+ AEffectProcessProc DECLARE_VST_DEPRECATED (process);
+
+ /** Set new value of automatable parameter @see AudioEffect::setParameter */
+ AEffectSetParameterProc setParameter;
+
+ /** Returns current value of automatable parameter @see AudioEffect::getParameter*/
+ AEffectGetParameterProc getParameter;
+
+ VstInt32 numPrograms; ///< number of programs
+ VstInt32 numParams; ///< all programs are assumed to have numParams parameters
+ VstInt32 numInputs; ///< number of audio inputs
+ VstInt32 numOutputs; ///< number of audio outputs
+
+ VstInt32 flags; ///< @see VstAEffectFlags
+
+ VstIntPtr resvd1; ///< reserved for Host, must be 0
+ VstIntPtr resvd2; ///< reserved for Host, must be 0
+
+ VstInt32 initialDelay; ///< for algorithms which need input in the first place (Group delay or latency in Samples). This value should be initialized in a resume state.
+
+ VstInt32 DECLARE_VST_DEPRECATED (realQualities); ///< \deprecated unused member
+ VstInt32 DECLARE_VST_DEPRECATED (offQualities); ///< \deprecated unused member
+ float DECLARE_VST_DEPRECATED (ioRatio); ///< \deprecated unused member
+
+ void* object; ///< #AudioEffect class pointer
+ void* user; ///< user-defined pointer
+
+ VstInt32 uniqueID; ///< registered unique identifier (register it at Steinberg 3rd party support Web). This is used to identify a plug-in during save+load of preset and project.
+ VstInt32 version; ///< plug-in version (example 1100 for version 1.1.0.0)
+
+ /** Process audio samples in replacing mode @see AudioEffect::processReplacing */
+ AEffectProcessProc processReplacing;
+
+#if VST_2_4_EXTENSIONS
+ /** Process double-precision audio samples in replacing mode @see AudioEffect::processDoubleReplacing */
+ AEffectProcessDoubleProc processDoubleReplacing;
+
+ char future[56]; ///< reserved for future use (please zero)
+#else
+ char future[60]; ///< reserved for future use (please zero)
+#endif
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** AEffect flags */
+//-------------------------------------------------------------------------------------------------------
+enum VstAEffectFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ effFlagsHasEditor = 1 << 0, ///< set if the plug-in provides a custom editor
+ effFlagsCanReplacing = 1 << 4, ///< supports replacing process mode (which should the default mode in VST 2.4)
+ effFlagsProgramChunks = 1 << 5, ///< program data is handled in formatless chunks
+ effFlagsIsSynth = 1 << 8, ///< plug-in is a synth (VSTi), Host may assign mixer channels for its outputs
+ effFlagsNoSoundInStop = 1 << 9, ///< plug-in does not produce sound when input is all silence
+
+#if VST_2_4_EXTENSIONS
+ effFlagsCanDoubleReplacing = 1 << 12, ///< plug-in supports double precision processing
+#endif
+
+ DECLARE_VST_DEPRECATED (effFlagsHasClip) = 1 << 1, ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effFlagsHasVu) = 1 << 2, ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effFlagsCanMono) = 1 << 3, ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effFlagsExtIsAsync) = 1 << 10, ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effFlagsExtHasBuffer) = 1 << 11 ///< \deprecated deprecated in VST 2.4
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Basic dispatcher Opcodes (Host to Plug-in) */
+//-------------------------------------------------------------------------------------------------------
+enum AEffectOpcodes
+{
+ effOpen = 0, ///< no arguments @see AudioEffect::open
+ effClose, ///< no arguments @see AudioEffect::close
+
+ effSetProgram, ///< [value]: new program number @see AudioEffect::setProgram
+ effGetProgram, ///< [return value]: current program number @see AudioEffect::getProgram
+ effSetProgramName, ///< [ptr]: char* with new program name, limited to #kVstMaxProgNameLen @see AudioEffect::setProgramName
+ effGetProgramName, ///< [ptr]: char buffer for current program name, limited to #kVstMaxProgNameLen @see AudioEffect::getProgramName
+
+ effGetParamLabel, ///< [ptr]: char buffer for parameter label, limited to #kVstMaxParamStrLen @see AudioEffect::getParameterLabel
+ effGetParamDisplay, ///< [ptr]: char buffer for parameter display, limited to #kVstMaxParamStrLen @see AudioEffect::getParameterDisplay
+ effGetParamName, ///< [ptr]: char buffer for parameter name, limited to #kVstMaxParamStrLen @see AudioEffect::getParameterName
+
+ DECLARE_VST_DEPRECATED (effGetVu), ///< \deprecated deprecated in VST 2.4
+
+ effSetSampleRate, ///< [opt]: new sample rate for audio processing @see AudioEffect::setSampleRate
+ effSetBlockSize, ///< [value]: new maximum block size for audio processing @see AudioEffect::setBlockSize
+ effMainsChanged, ///< [value]: 0 means "turn off", 1 means "turn on" @see AudioEffect::suspend @see AudioEffect::resume
+
+ effEditGetRect, ///< [ptr]: #ERect** receiving pointer to editor size @see ERect @see AEffEditor::getRect
+ effEditOpen, ///< [ptr]: system dependent Window pointer, e.g. HWND on Windows @see AEffEditor::open
+ effEditClose, ///< no arguments @see AEffEditor::close
+
+ DECLARE_VST_DEPRECATED (effEditDraw), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effEditMouse), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effEditKey), ///< \deprecated deprecated in VST 2.4
+
+ effEditIdle, ///< no arguments @see AEffEditor::idle
+
+ DECLARE_VST_DEPRECATED (effEditTop), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effEditSleep), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effIdentify), ///< \deprecated deprecated in VST 2.4
+
+ effGetChunk, ///< [ptr]: void** for chunk data address [index]: 0 for bank, 1 for program @see AudioEffect::getChunk
+ effSetChunk, ///< [ptr]: chunk data [value]: byte size [index]: 0 for bank, 1 for program @see AudioEffect::setChunk
+
+ effNumOpcodes
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Basic dispatcher Opcodes (Plug-in to Host) */
+//-------------------------------------------------------------------------------------------------------
+enum AudioMasterOpcodes
+{
+//-------------------------------------------------------------------------------------------------------
+ audioMasterAutomate = 0, ///< [index]: parameter index [opt]: parameter value @see AudioEffect::setParameterAutomated
+ audioMasterVersion, ///< [return value]: Host VST version (for example 2400 for VST 2.4) @see AudioEffect::getMasterVersion
+ audioMasterCurrentId, ///< [return value]: current unique identifier on shell plug-in @see AudioEffect::getCurrentUniqueId
+ audioMasterIdle, ///< no arguments @see AudioEffect::masterIdle
+ DECLARE_VST_DEPRECATED (audioMasterPinConnected) ///< \deprecated deprecated in VST 2.4 r2
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** String length limits (in characters excl. 0 byte) */
+//-------------------------------------------------------------------------------------------------------
+enum VstStringConstants
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstMaxProgNameLen = 24, ///< used for #effGetProgramName, #effSetProgramName, #effGetProgramNameIndexed
+ kVstMaxParamStrLen = 8, ///< used for #effGetParamLabel, #effGetParamDisplay, #effGetParamName
+ kVstMaxVendorStrLen = 64, ///< used for #effGetVendorString, #audioMasterGetVendorString
+ kVstMaxProductStrLen = 64, ///< used for #effGetProductString, #audioMasterGetProductString
+ kVstMaxEffectNameLen = 32 ///< used for #effGetEffectName
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** String copy taking care of null terminator. */
+//-------------------------------------------------------------------------------------------------------
+inline char* vst_strncpy (char* dst, const char* src, size_t maxLen)
+{
+ char* result = strncpy (dst, src, maxLen);
+ dst[maxLen] = 0;
+ return result;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/** String concatenation taking care of null terminator. */
+//-------------------------------------------------------------------------------------------------------
+inline char* vst_strncat (char* dst, const char* src, size_t maxLen)
+{
+ char* result = strncat (dst, src, maxLen);
+ dst[maxLen] = 0;
+ return result;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/** Cast #VstIntPtr to pointer. */
+//-------------------------------------------------------------------------------------------------------
+template <class T> inline T* FromVstPtr (VstIntPtr& arg)
+{
+ T** address = (T**)&arg;
+ return *address;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/** Cast pointer to #VstIntPtr. */
+//-------------------------------------------------------------------------------------------------------
+template <class T> inline VstIntPtr ToVstPtr (T* ptr)
+{
+ VstIntPtr* address = (VstIntPtr*)&ptr;
+ return *address;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/** Structure used for #effEditGetRect. */
+//-------------------------------------------------------------------------------------------------------
+struct ERect
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt16 top; ///< top coordinate
+ VstInt16 left; ///< left coordinate
+ VstInt16 bottom; ///< bottom coordinate
+ VstInt16 right; ///< right coordinate
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+#if TARGET_API_MAC_CARBON
+ #pragma options align=reset
+#elif defined(WIN32) || defined(__FLAT__) || defined(__GNUC__)
+ #pragma pack(pop)
+#elif defined __BORLANDC__
+ #pragma -a-
+#endif
+
+#endif // __aeffect__
diff --git a/pluginterfaces/vst2.x/aeffectx.h b/pluginterfaces/vst2.x/aeffectx.h
new file mode 100644
index 0000000..8983b1d
--- /dev/null
+++ b/pluginterfaces/vst2.x/aeffectx.h
@@ -0,0 +1,1143 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/06/20 12:43:42 $
+//
+// Category : VST 2.x Interfaces
+// Filename : aeffectx.h
+// Created by : Steinberg Media Technologies
+// Description : Definition of auxiliary structures, extensions from VST 1.0 to VST 2.4
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __aeffectx__
+#define __aeffectx__
+
+#ifndef __aeffect__
+#include "aeffect.h"
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+#if TARGET_API_MAC_CARBON
+ #ifdef __LP64__
+ #pragma options align=power
+ #else
+ #pragma options align=mac68k
+ #endif
+#elif defined __BORLANDC__
+ #pragma -a8
+#elif defined(__GNUC__)
+ #pragma pack(push,8)
+#elif defined(WIN32) || defined(__FLAT__)
+ #pragma pack(push)
+ #pragma pack(8)
+#endif
+//-------------------------------------------------------------------------------------------------------
+
+//-------------------------------------------------------------------------------------------------------
+/** String length limits (in characters excl. 0 byte). */
+//-------------------------------------------------------------------------------------------------------
+enum Vst2StringConstants
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstMaxNameLen = 64, ///< used for #MidiProgramName, #MidiProgramCategory, #MidiKeyName, #VstSpeakerProperties, #VstPinProperties
+ kVstMaxLabelLen = 64, ///< used for #VstParameterProperties->label, #VstPinProperties->label
+ kVstMaxShortLabelLen = 8, ///< used for #VstParameterProperties->shortLabel, #VstPinProperties->shortLabel
+ kVstMaxCategLabelLen = 24, ///< used for #VstParameterProperties->label
+ kVstMaxFileNameLen = 100 ///< used for #VstAudioFile->name
+//-------------------------------------------------------------------------------------------------------
+};
+//-------------------------------------------------------------------------------------------------------
+// VstEvent
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** A generic timestamped event. */
+//-------------------------------------------------------------------------------------------------------
+struct VstEvent
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 type; ///< @see VstEventTypes
+ VstInt32 byteSize; ///< size of this event, excl. type and byteSize
+ VstInt32 deltaFrames; ///< sample frames related to the current block start sample position
+ VstInt32 flags; ///< generic flags, none defined yet
+
+ char data[16]; ///< data size may vary, depending on event type
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** VstEvent Types used by #VstEvent. */
+//-------------------------------------------------------------------------------------------------------
+enum VstEventTypes
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstMidiType = 1, ///< MIDI event @see VstMidiEvent
+ DECLARE_VST_DEPRECATED (kVstAudioType), ///< \deprecated unused event type
+ DECLARE_VST_DEPRECATED (kVstVideoType), ///< \deprecated unused event type
+ DECLARE_VST_DEPRECATED (kVstParameterType), ///< \deprecated unused event type
+ DECLARE_VST_DEPRECATED (kVstTriggerType), ///< \deprecated unused event type
+ kVstSysExType ///< MIDI system exclusive @see VstMidiSysexEvent
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** A block of events for the current processed audio block. */
+//-------------------------------------------------------------------------------------------------------
+struct VstEvents
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 numEvents; ///< number of Events in array
+ VstIntPtr reserved; ///< zero (Reserved for future use)
+ VstEvent* events[2]; ///< event pointer array, variable size
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Event (to be casted from VstEvent). */
+//-------------------------------------------------------------------------------------------------------
+struct VstMidiEvent
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 type; ///< #kVstMidiType
+ VstInt32 byteSize; ///< sizeof (VstMidiEvent)
+ VstInt32 deltaFrames; ///< sample frames related to the current block start sample position
+ VstInt32 flags; ///< @see VstMidiEventFlags
+ VstInt32 noteLength; ///< (in sample frames) of entire note, if available, else 0
+ VstInt32 noteOffset; ///< offset (in sample frames) into note from note start if available, else 0
+ char midiData[4]; ///< 1 to 3 MIDI bytes; midiData[3] is reserved (zero)
+ char detune; ///< -64 to +63 cents; for scales other than 'well-tempered' ('microtuning')
+ char noteOffVelocity; ///< Note Off Velocity [0, 127]
+ char reserved1; ///< zero (Reserved for future use)
+ char reserved2; ///< zero (Reserved for future use)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstMidiEvent. */
+//-------------------------------------------------------------------------------------------------------
+enum VstMidiEventFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstMidiEventIsRealtime = 1 << 0 ///< means that this event is played life (not in playback from a sequencer track).\n This allows the Plug-In to handle these flagged events with higher priority, especially when the Plug-In has a big latency (AEffect::initialDelay)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Sysex Event (to be casted from #VstEvent). */
+//-------------------------------------------------------------------------------------------------------
+struct VstMidiSysexEvent
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 type; ///< #kVstSysexType
+ VstInt32 byteSize; ///< sizeof (VstMidiSysexEvent)
+ VstInt32 deltaFrames; ///< sample frames related to the current block start sample position
+ VstInt32 flags; ///< none defined yet (should be zero)
+ VstInt32 dumpBytes; ///< byte size of sysexDump
+ VstIntPtr resvd1; ///< zero (Reserved for future use)
+ char* sysexDump; ///< sysex dump
+ VstIntPtr resvd2; ///< zero (Reserved for future use)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// VstTimeInfo
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** VstTimeInfo requested via #audioMasterGetTime. @see AudioEffectX::getTimeInfo
+
+\note VstTimeInfo::samplePos :Current Position. It must always be valid, and should not cost a lot to ask for. The sample position is ahead of the time displayed to the user. In sequencer stop mode, its value does not change. A 32 bit integer is too small for sample positions, and it's a double to make it easier to convert between ppq and samples.
+\note VstTimeInfo::ppqPos : At tempo 120, 1 quarter makes 1/2 second, so 2.0 ppq translates to 48000 samples at 48kHz sample rate.
+.25 ppq is one sixteenth note then. if you need something like 480ppq, you simply multiply ppq by that scaler.
+\note VstTimeInfo::barStartPos : Say we're at bars/beats readout 3.3.3. That's 2 bars + 2 q + 2 sixteenth, makes 2 * 4 + 2 + .25 = 10.25 ppq. at tempo 120, that's 10.25 * .5 = 5.125 seconds, times 48000 = 246000 samples (if my calculator servers me well :-).
+\note VstTimeInfo::samplesToNextClock : MIDI Clock Resolution (24 per Quarter Note), can be negative the distance to the next midi clock (24 ppq, pulses per quarter) in samples. unless samplePos falls precicely on a midi clock, this will either be negative such that the previous MIDI clock is addressed, or positive when referencing the following (future) MIDI clock.
+*/
+//-------------------------------------------------------------------------------------------------------
+struct VstTimeInfo
+{
+//-------------------------------------------------------------------------------------------------------
+ double samplePos; ///< current Position in audio samples (always valid)
+ double sampleRate; ///< current Sample Rate in Herz (always valid)
+ double nanoSeconds; ///< System Time in nanoseconds (10^-9 second)
+ double ppqPos; ///< Musical Position, in Quarter Note (1.0 equals 1 Quarter Note)
+ double tempo; ///< current Tempo in BPM (Beats Per Minute)
+ double barStartPos; ///< last Bar Start Position, in Quarter Note
+ double cycleStartPos; ///< Cycle Start (left locator), in Quarter Note
+ double cycleEndPos; ///< Cycle End (right locator), in Quarter Note
+ VstInt32 timeSigNumerator; ///< Time Signature Numerator (e.g. 3 for 3/4)
+ VstInt32 timeSigDenominator; ///< Time Signature Denominator (e.g. 4 for 3/4)
+ VstInt32 smpteOffset; ///< SMPTE offset (in SMPTE subframes (bits; 1/80 of a frame)). The current SMPTE position can be calculated using #samplePos, #sampleRate, and #smpteFrameRate.
+ VstInt32 smpteFrameRate; ///< @see VstSmpteFrameRate
+ VstInt32 samplesToNextClock; ///< MIDI Clock Resolution (24 Per Quarter Note), can be negative (nearest clock)
+ VstInt32 flags; ///< @see VstTimeInfoFlags
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstTimeInfo. */
+//-------------------------------------------------------------------------------------------------------
+enum VstTimeInfoFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstTransportChanged = 1, ///< indicates that play, cycle or record state has changed
+ kVstTransportPlaying = 1 << 1, ///< set if Host sequencer is currently playing
+ kVstTransportCycleActive = 1 << 2, ///< set if Host sequencer is in cycle mode
+ kVstTransportRecording = 1 << 3, ///< set if Host sequencer is in record mode
+ kVstAutomationWriting = 1 << 6, ///< set if automation write mode active (record parameter changes)
+ kVstAutomationReading = 1 << 7, ///< set if automation read mode active (play parameter changes)
+ kVstNanosValid = 1 << 8, ///< VstTimeInfo::nanoSeconds valid
+ kVstPpqPosValid = 1 << 9, ///< VstTimeInfo::ppqPos valid
+ kVstTempoValid = 1 << 10, ///< VstTimeInfo::tempo valid
+ kVstBarsValid = 1 << 11, ///< VstTimeInfo::barStartPos valid
+ kVstCyclePosValid = 1 << 12, ///< VstTimeInfo::cycleStartPos and VstTimeInfo::cycleEndPos valid
+ kVstTimeSigValid = 1 << 13, ///< VstTimeInfo::timeSigNumerator and VstTimeInfo::timeSigDenominator valid
+ kVstSmpteValid = 1 << 14, ///< VstTimeInfo::smpteOffset and VstTimeInfo::smpteFrameRate valid
+ kVstClockValid = 1 << 15 ///< VstTimeInfo::samplesToNextClock valid
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** SMPTE Frame Rates. */
+//-------------------------------------------------------------------------------------------------------
+enum VstSmpteFrameRate
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstSmpte24fps = 0, ///< 24 fps
+ kVstSmpte25fps = 1, ///< 25 fps
+ kVstSmpte2997fps = 2, ///< 29.97 fps
+ kVstSmpte30fps = 3, ///< 30 fps
+ kVstSmpte2997dfps = 4, ///< 29.97 drop
+ kVstSmpte30dfps = 5, ///< 30 drop
+
+ kVstSmpteFilm16mm = 6, ///< Film 16mm
+ kVstSmpteFilm35mm = 7, ///< Film 35mm
+ kVstSmpte239fps = 10, ///< HDTV: 23.976 fps
+ kVstSmpte249fps = 11, ///< HDTV: 24.976 fps
+ kVstSmpte599fps = 12, ///< HDTV: 59.94 fps
+ kVstSmpte60fps = 13 ///< HDTV: 60 fps
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Variable IO for Offline Processing. */
+//-------------------------------------------------------------------------------------------------------
+struct VstVariableIo
+{
+//-------------------------------------------------------------------------------------------------------
+ float** inputs; ///< input audio buffers
+ float** outputs; ///< output audio buffers
+ VstInt32 numSamplesInput; ///< number of incoming samples
+ VstInt32 numSamplesOutput; ///< number of outgoing samples
+ VstInt32* numSamplesInputProcessed; ///< number of samples actually processed of input
+ VstInt32* numSamplesOutputProcessed; ///< number of samples actually processed of output
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Language code returned by audioMasterGetLanguage. */
+//-------------------------------------------------------------------------------------------------------
+enum VstHostLanguage
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstLangEnglish = 1, ///< English
+ kVstLangGerman, ///< German
+ kVstLangFrench, ///< French
+ kVstLangItalian, ///< Italian
+ kVstLangSpanish, ///< Spanish
+ kVstLangJapanese ///< Japanese
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** VST 2.x dispatcher Opcodes (Plug-in to Host). Extension of #AudioMasterOpcodes */
+//-------------------------------------------------------------------------------------------------------
+enum AudioMasterOpcodesX
+{
+//-------------------------------------------------------------------------------------------------------
+ DECLARE_VST_DEPRECATED (audioMasterWantMidi) = DECLARE_VST_DEPRECATED (audioMasterPinConnected) + 2, ///< \deprecated deprecated in VST 2.4
+
+ audioMasterGetTime, ///< [return value]: #VstTimeInfo* or null if not supported [value]: request mask @see VstTimeInfoFlags @see AudioEffectX::getTimeInfo
+ audioMasterProcessEvents, ///< [ptr]: pointer to #VstEvents @see VstEvents @see AudioEffectX::sendVstEventsToHost
+
+ DECLARE_VST_DEPRECATED (audioMasterSetTime), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterTempoAt), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterGetNumAutomatableParameters), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterGetParameterQuantization), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterIOChanged, ///< [return value]: 1 if supported @see AudioEffectX::ioChanged
+
+ DECLARE_VST_DEPRECATED (audioMasterNeedIdle), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterSizeWindow, ///< [index]: new width [value]: new height [return value]: 1 if supported @see AudioEffectX::sizeWindow
+ audioMasterGetSampleRate, ///< [return value]: current sample rate @see AudioEffectX::updateSampleRate
+ audioMasterGetBlockSize, ///< [return value]: current block size @see AudioEffectX::updateBlockSize
+ audioMasterGetInputLatency, ///< [return value]: input latency in audio samples @see AudioEffectX::getInputLatency
+ audioMasterGetOutputLatency, ///< [return value]: output latency in audio samples @see AudioEffectX::getOutputLatency
+
+ DECLARE_VST_DEPRECATED (audioMasterGetPreviousPlug), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterGetNextPlug), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterWillReplaceOrAccumulate), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterGetCurrentProcessLevel, ///< [return value]: current process level @see VstProcessLevels
+ audioMasterGetAutomationState, ///< [return value]: current automation state @see VstAutomationStates
+
+ audioMasterOfflineStart, ///< [index]: numNewAudioFiles [value]: numAudioFiles [ptr]: #VstAudioFile* @see AudioEffectX::offlineStart
+ audioMasterOfflineRead, ///< [index]: bool readSource [value]: #VstOfflineOption* @see VstOfflineOption [ptr]: #VstOfflineTask* @see VstOfflineTask @see AudioEffectX::offlineRead
+ audioMasterOfflineWrite, ///< @see audioMasterOfflineRead @see AudioEffectX::offlineRead
+ audioMasterOfflineGetCurrentPass, ///< @see AudioEffectX::offlineGetCurrentPass
+ audioMasterOfflineGetCurrentMetaPass, ///< @see AudioEffectX::offlineGetCurrentMetaPass
+
+ DECLARE_VST_DEPRECATED (audioMasterSetOutputSampleRate), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterGetOutputSpeakerArrangement), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterGetVendorString, ///< [ptr]: char buffer for vendor string, limited to #kVstMaxVendorStrLen @see AudioEffectX::getHostVendorString
+ audioMasterGetProductString, ///< [ptr]: char buffer for vendor string, limited to #kVstMaxProductStrLen @see AudioEffectX::getHostProductString
+ audioMasterGetVendorVersion, ///< [return value]: vendor-specific version @see AudioEffectX::getHostVendorVersion
+ audioMasterVendorSpecific, ///< no definition, vendor specific handling @see AudioEffectX::hostVendorSpecific
+
+ DECLARE_VST_DEPRECATED (audioMasterSetIcon), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterCanDo, ///< [ptr]: "can do" string [return value]: 1 for supported
+ audioMasterGetLanguage, ///< [return value]: language code @see VstHostLanguage
+
+ DECLARE_VST_DEPRECATED (audioMasterOpenWindow), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterCloseWindow), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterGetDirectory, ///< [return value]: FSSpec on MAC, else char* @see AudioEffectX::getDirectory
+ audioMasterUpdateDisplay, ///< no arguments
+ audioMasterBeginEdit, ///< [index]: parameter index @see AudioEffectX::beginEdit
+ audioMasterEndEdit, ///< [index]: parameter index @see AudioEffectX::endEdit
+ audioMasterOpenFileSelector, ///< [ptr]: VstFileSelect* [return value]: 1 if supported @see AudioEffectX::openFileSelector
+ audioMasterCloseFileSelector, ///< [ptr]: VstFileSelect* @see AudioEffectX::closeFileSelector
+
+ DECLARE_VST_DEPRECATED (audioMasterEditFile), ///< \deprecated deprecated in VST 2.4
+
+ DECLARE_VST_DEPRECATED (audioMasterGetChunkFile), ///< \deprecated deprecated in VST 2.4 [ptr]: char[2048] or sizeof (FSSpec) [return value]: 1 if supported @see AudioEffectX::getChunkFile
+
+ DECLARE_VST_DEPRECATED (audioMasterGetInputSpeakerArrangement) ///< \deprecated deprecated in VST 2.4
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** VST 2.x dispatcher Opcodes (Host to Plug-in). Extension of #AEffectOpcodes */
+//-------------------------------------------------------------------------------------------------------
+enum AEffectXOpcodes
+{
+//-------------------------------------------------------------------------------------------------------
+ effProcessEvents = effSetChunk + 1 ///< [ptr]: #VstEvents* @see AudioEffectX::processEvents
+
+ , effCanBeAutomated ///< [index]: parameter index [return value]: 1=true, 0=false @see AudioEffectX::canParameterBeAutomated
+ , effString2Parameter ///< [index]: parameter index [ptr]: parameter string [return value]: true for success @see AudioEffectX::string2parameter
+
+ , DECLARE_VST_DEPRECATED (effGetNumProgramCategories) ///< \deprecated deprecated in VST 2.4
+
+ , effGetProgramNameIndexed ///< [index]: program index [ptr]: buffer for program name, limited to #kVstMaxProgNameLen [return value]: true for success @see AudioEffectX::getProgramNameIndexed
+
+ , DECLARE_VST_DEPRECATED (effCopyProgram) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effConnectInput) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effConnectOutput) ///< \deprecated deprecated in VST 2.4
+
+ , effGetInputProperties ///< [index]: input index [ptr]: #VstPinProperties* [return value]: 1 if supported @see AudioEffectX::getInputProperties
+ , effGetOutputProperties ///< [index]: output index [ptr]: #VstPinProperties* [return value]: 1 if supported @see AudioEffectX::getOutputProperties
+ , effGetPlugCategory ///< [return value]: category @see VstPlugCategory @see AudioEffectX::getPlugCategory
+
+ , DECLARE_VST_DEPRECATED (effGetCurrentPosition) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effGetDestinationBuffer) ///< \deprecated deprecated in VST 2.4
+
+ , effOfflineNotify ///< [ptr]: #VstAudioFile array [value]: count [index]: start flag @see AudioEffectX::offlineNotify
+ , effOfflinePrepare ///< [ptr]: #VstOfflineTask array [value]: count @see AudioEffectX::offlinePrepare
+ , effOfflineRun ///< [ptr]: #VstOfflineTask array [value]: count @see AudioEffectX::offlineRun
+
+ , effProcessVarIo ///< [ptr]: #VstVariableIo* @see AudioEffectX::processVariableIo
+ , effSetSpeakerArrangement ///< [value]: input #VstSpeakerArrangement* [ptr]: output #VstSpeakerArrangement* @see AudioEffectX::setSpeakerArrangement
+
+ , DECLARE_VST_DEPRECATED (effSetBlockSizeAndSampleRate) ///< \deprecated deprecated in VST 2.4
+
+ , effSetBypass ///< [value]: 1 = bypass, 0 = no bypass @see AudioEffectX::setBypass
+ , effGetEffectName ///< [ptr]: buffer for effect name, limited to #kVstMaxEffectNameLen @see AudioEffectX::getEffectName
+
+ , DECLARE_VST_DEPRECATED (effGetErrorText) ///< \deprecated deprecated in VST 2.4
+
+ , effGetVendorString ///< [ptr]: buffer for effect vendor string, limited to #kVstMaxVendorStrLen @see AudioEffectX::getVendorString
+ , effGetProductString ///< [ptr]: buffer for effect vendor string, limited to #kVstMaxProductStrLen @see AudioEffectX::getProductString
+ , effGetVendorVersion ///< [return value]: vendor-specific version @see AudioEffectX::getVendorVersion
+ , effVendorSpecific ///< no definition, vendor specific handling @see AudioEffectX::vendorSpecific
+ , effCanDo ///< [ptr]: "can do" string [return value]: 0: "don't know" -1: "no" 1: "yes" @see AudioEffectX::canDo
+ , effGetTailSize ///< [return value]: tail size (for example the reverb time of a reverb plug-in); 0 is default (return 1 for 'no tail')
+
+ , DECLARE_VST_DEPRECATED (effIdle) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effGetIcon) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effSetViewPosition) ///< \deprecated deprecated in VST 2.4
+
+ , effGetParameterProperties ///< [index]: parameter index [ptr]: #VstParameterProperties* [return value]: 1 if supported @see AudioEffectX::getParameterProperties
+
+ , DECLARE_VST_DEPRECATED (effKeysRequired) ///< \deprecated deprecated in VST 2.4
+
+ , effGetVstVersion ///< [return value]: VST version @see AudioEffectX::getVstVersion
+
+#if VST_2_1_EXTENSIONS
+ , effEditKeyDown ///< [index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used @see AEffEditor::onKeyDown
+ , effEditKeyUp ///< [index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used @see AEffEditor::onKeyUp
+ , effSetEditKnobMode ///< [value]: knob mode 0: circular, 1: circular relativ, 2: linear (CKnobMode in VSTGUI) @see AEffEditor::setKnobMode
+
+ , effGetMidiProgramName ///< [index]: MIDI channel [ptr]: #MidiProgramName* [return value]: number of used programs, 0 if unsupported @see AudioEffectX::getMidiProgramName
+ , effGetCurrentMidiProgram ///< [index]: MIDI channel [ptr]: #MidiProgramName* [return value]: index of current program @see AudioEffectX::getCurrentMidiProgram
+ , effGetMidiProgramCategory ///< [index]: MIDI channel [ptr]: #MidiProgramCategory* [return value]: number of used categories, 0 if unsupported @see AudioEffectX::getMidiProgramCategory
+ , effHasMidiProgramsChanged ///< [index]: MIDI channel [return value]: 1 if the #MidiProgramName(s) or #MidiKeyName(s) have changed @see AudioEffectX::hasMidiProgramsChanged
+ , effGetMidiKeyName ///< [index]: MIDI channel [ptr]: #MidiKeyName* [return value]: true if supported, false otherwise @see AudioEffectX::getMidiKeyName
+
+ , effBeginSetProgram ///< no arguments @see AudioEffectX::beginSetProgram
+ , effEndSetProgram ///< no arguments @see AudioEffectX::endSetProgram
+#endif // VST_2_1_EXTENSIONS
+
+#if VST_2_3_EXTENSIONS
+ , effGetSpeakerArrangement ///< [value]: input #VstSpeakerArrangement* [ptr]: output #VstSpeakerArrangement* @see AudioEffectX::getSpeakerArrangement
+ , effShellGetNextPlugin ///< [ptr]: buffer for plug-in name, limited to #kVstMaxProductStrLen [return value]: next plugin's uniqueID @see AudioEffectX::getNextShellPlugin
+
+ , effStartProcess ///< no arguments @see AudioEffectX::startProcess
+ , effStopProcess ///< no arguments @see AudioEffectX::stopProcess
+ , effSetTotalSampleToProcess ///< [value]: number of samples to process, offline only! @see AudioEffectX::setTotalSampleToProcess
+ , effSetPanLaw ///< [value]: pan law [opt]: gain @see VstPanLawType @see AudioEffectX::setPanLaw
+
+ , effBeginLoadBank ///< [ptr]: #VstPatchChunkInfo* [return value]: -1: bank can't be loaded, 1: bank can be loaded, 0: unsupported @see AudioEffectX::beginLoadBank
+ , effBeginLoadProgram ///< [ptr]: #VstPatchChunkInfo* [return value]: -1: prog can't be loaded, 1: prog can be loaded, 0: unsupported @see AudioEffectX::beginLoadProgram
+#endif // VST_2_3_EXTENSIONS
+
+#if VST_2_4_EXTENSIONS
+ , effSetProcessPrecision ///< [value]: @see VstProcessPrecision @see AudioEffectX::setProcessPrecision
+ , effGetNumMidiInputChannels ///< [return value]: number of used MIDI input channels (1-15) @see AudioEffectX::getNumMidiInputChannels
+ , effGetNumMidiOutputChannels ///< [return value]: number of used MIDI output channels (1-15) @see AudioEffectX::getNumMidiOutputChannels
+#endif // VST_2_4_EXTENSIONS
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Symbolic precision constants used for effSetProcessPrecision. */
+//-------------------------------------------------------------------------------------------------------
+enum VstProcessPrecision
+{
+ kVstProcessPrecision32 = 0, ///< single precision float (32bits)
+ kVstProcessPrecision64 ///< double precision (64bits)
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Parameter Properties used in #effGetParameterProperties. */
+//-------------------------------------------------------------------------------------------------------
+struct VstParameterProperties
+{
+//-------------------------------------------------------------------------------------------------------
+ float stepFloat; ///< float step
+ float smallStepFloat; ///< small float step
+ float largeStepFloat; ///< large float step
+ char label[kVstMaxLabelLen];///< parameter label
+ VstInt32 flags; ///< @see VstParameterFlags
+ VstInt32 minInteger; ///< integer minimum
+ VstInt32 maxInteger; ///< integer maximum
+ VstInt32 stepInteger; ///< integer step
+ VstInt32 largeStepInteger; ///< large integer step
+ char shortLabel[kVstMaxShortLabelLen]; ///< short label, recommended: 6 + delimiter
+
+ // The following are for remote controller display purposes.
+ // Note that the kVstParameterSupportsDisplayIndex flag must be set.
+ // Host can scan all parameters, and find out in what order
+ // to display them:
+
+ VstInt16 displayIndex; ///< index where this parameter should be displayed (starting with 0)
+
+ // Host can also possibly display the parameter group (category), such as...
+ // ---------------------------
+ // Osc 1
+ // Wave Detune Octave Mod
+ // ---------------------------
+ // ...if the plug-in supports it (flag #kVstParameterSupportsDisplayCategory)
+
+ VstInt16 category; ///< 0: no category, else group index + 1
+ VstInt16 numParametersInCategory; ///< number of parameters in category
+ VstInt16 reserved; ///< zero
+ char categoryLabel[kVstMaxCategLabelLen]; ///< category label, e.g. "Osc 1"
+
+ char future[16]; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstParameterProperties. */
+//-------------------------------------------------------------------------------------------------------
+enum VstParameterFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstParameterIsSwitch = 1 << 0, ///< parameter is a switch (on/off)
+ kVstParameterUsesIntegerMinMax = 1 << 1, ///< minInteger, maxInteger valid
+ kVstParameterUsesFloatStep = 1 << 2, ///< stepFloat, smallStepFloat, largeStepFloat valid
+ kVstParameterUsesIntStep = 1 << 3, ///< stepInteger, largeStepInteger valid
+ kVstParameterSupportsDisplayIndex = 1 << 4, ///< displayIndex valid
+ kVstParameterSupportsDisplayCategory = 1 << 5, ///< category, etc. valid
+ kVstParameterCanRamp = 1 << 6 ///< set if parameter value can ramp up/down
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Pin Properties used in #effGetInputProperties and #effGetOutputProperties. */
+//-------------------------------------------------------------------------------------------------------
+struct VstPinProperties
+{
+//-------------------------------------------------------------------------------------------------------
+ char label[kVstMaxLabelLen]; ///< pin name
+ VstInt32 flags; ///< @see VstPinPropertiesFlags
+ VstInt32 arrangementType; ///< @see VstSpeakerArrangementType
+ char shortLabel[kVstMaxShortLabelLen]; ///< short name (recommended: 6 + delimiter)
+
+ char future[48]; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstPinProperties. */
+//-------------------------------------------------------------------------------------------------------
+enum VstPinPropertiesFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstPinIsActive = 1 << 0, ///< pin is active, ignored by Host
+ kVstPinIsStereo = 1 << 1, ///< pin is first of a stereo pair
+ kVstPinUseSpeaker = 1 << 2 ///< #VstPinProperties::arrangementType is valid and can be used to get the wanted arrangement
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Plug-in Categories. */
+//-------------------------------------------------------------------------------------------------------
+enum VstPlugCategory
+{
+//-------------------------------------------------------------------------------------------------------
+ kPlugCategUnknown = 0, ///< Unknown, category not implemented
+ kPlugCategEffect, ///< Simple Effect
+ kPlugCategSynth, ///< VST Instrument (Synths, samplers,...)
+ kPlugCategAnalysis, ///< Scope, Tuner, ...
+ kPlugCategMastering, ///< Dynamics, ...
+ kPlugCategSpacializer, ///< Panners, ...
+ kPlugCategRoomFx, ///< Delays and Reverbs
+ kPlugSurroundFx, ///< Dedicated surround processor
+ kPlugCategRestoration, ///< Denoiser, ...
+ kPlugCategOfflineProcess, ///< Offline Process
+ kPlugCategShell, ///< Plug-in is container of other plug-ins @see effShellGetNextPlugin
+ kPlugCategGenerator, ///< ToneGenerator, ...
+
+ kPlugCategMaxCount ///< Marker to count the categories
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// MIDI Programs
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Program Description. */
+//-------------------------------------------------------------------------------------------------------
+struct MidiProgramName
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 thisProgramIndex; ///< 0 or greater: fill struct for this program index
+ char name[kVstMaxNameLen]; ///< program name
+ char midiProgram; ///< -1:off, 0-127
+ char midiBankMsb; ///< -1:off, 0-127
+ char midiBankLsb; ///< -1:off, 0-127
+ char reserved; ///< zero
+ VstInt32 parentCategoryIndex; ///< -1:no parent category
+ VstInt32 flags; ///< omni etc. @see VstMidiProgramNameFlags
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in MidiProgramName. */
+//-------------------------------------------------------------------------------------------------------
+enum VstMidiProgramNameFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kMidiIsOmni = 1 ///< default is multi. for omni mode, channel 0 is used for inquiries and program changes
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Program Category. */
+//-------------------------------------------------------------------------------------------------------
+struct MidiProgramCategory
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 thisCategoryIndex; ///< 0 or greater: fill struct for this category index.
+ char name[kVstMaxNameLen]; ///< name
+ VstInt32 parentCategoryIndex; ///< -1:no parent category
+ VstInt32 flags; ///< reserved, none defined yet, zero.
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Key Description. */
+//-------------------------------------------------------------------------------------------------------
+struct MidiKeyName
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 thisProgramIndex; ///< 0 or greater: fill struct for this program index.
+ VstInt32 thisKeyNumber; ///< 0 - 127. fill struct for this key number.
+ char keyName[kVstMaxNameLen]; ///< key name, empty means regular key names
+ VstInt32 reserved; ///< zero
+ VstInt32 flags; ///< reserved, none defined yet, zero.
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// Surround Setup
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** Speaker Properties.
+ The origin for azimuth is right (as by math conventions dealing with radians).
+ The elevation origin is also right, visualizing a rotation of a circle across the
+ -pi/pi axis of the horizontal circle. Thus, an elevation of -pi/2 corresponds
+ to bottom, and a speaker standing on the left, and 'beaming' upwards would have
+ an azimuth of -pi, and an elevation of pi/2.
+ For user interface representation, grads are more likely to be used, and the
+ origins will obviously 'shift' accordingly. */
+//-------------------------------------------------------------------------------------------------------
+struct VstSpeakerProperties
+{
+//-------------------------------------------------------------------------------------------------------
+ float azimuth; ///< unit: rad, range: -PI...PI, exception: 10.f for LFE channel
+ float elevation; ///< unit: rad, range: -PI/2...PI/2, exception: 10.f for LFE channel
+ float radius; ///< unit: meter, exception: 0.f for LFE channel
+ float reserved; ///< zero (reserved for future use)
+ char name[kVstMaxNameLen]; ///< for new setups, new names should be given (L/R/C... won't do)
+ VstInt32 type; ///< @see VstSpeakerType
+
+ char future[28]; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Speaker Arrangement. */
+//-------------------------------------------------------------------------------------------------------
+struct VstSpeakerArrangement
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 type; ///< e.g. #kSpeakerArr51 for 5.1 @see VstSpeakerArrangementType
+ VstInt32 numChannels; ///< number of channels in this speaker arrangement
+ VstSpeakerProperties speakers[8]; ///< variable sized speaker array
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Speaker Types. */
+//-------------------------------------------------------------------------------------------------------
+enum VstSpeakerType
+{
+//-------------------------------------------------------------------------------------------------------
+ kSpeakerUndefined = 0x7fffffff, ///< Undefined
+ kSpeakerM = 0, ///< Mono (M)
+ kSpeakerL, ///< Left (L)
+ kSpeakerR, ///< Right (R)
+ kSpeakerC, ///< Center (C)
+ kSpeakerLfe, ///< Subbass (Lfe)
+ kSpeakerLs, ///< Left Surround (Ls)
+ kSpeakerRs, ///< Right Surround (Rs)
+ kSpeakerLc, ///< Left of Center (Lc)
+ kSpeakerRc, ///< Right of Center (Rc)
+ kSpeakerS, ///< Surround (S)
+ kSpeakerCs = kSpeakerS, ///< Center of Surround (Cs) = Surround (S)
+ kSpeakerSl, ///< Side Left (Sl)
+ kSpeakerSr, ///< Side Right (Sr)
+ kSpeakerTm, ///< Top Middle (Tm)
+ kSpeakerTfl, ///< Top Front Left (Tfl)
+ kSpeakerTfc, ///< Top Front Center (Tfc)
+ kSpeakerTfr, ///< Top Front Right (Tfr)
+ kSpeakerTrl, ///< Top Rear Left (Trl)
+ kSpeakerTrc, ///< Top Rear Center (Trc)
+ kSpeakerTrr, ///< Top Rear Right (Trr)
+ kSpeakerLfe2 ///< Subbass 2 (Lfe2)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** User-defined speaker types, to be extended in the negative range.
+ Will be handled as their corresponding speaker types with abs values:
+ e.g abs(#kSpeakerU1) == #kSpeakerL, abs(#kSpeakerU2) == #kSpeakerR) */
+//-------------------------------------------------------------------------------------------------------
+enum VstUserSpeakerType
+{
+//-------------------------------------------------------------------------------------------------------
+ kSpeakerU32 = -32,
+ kSpeakerU31,
+ kSpeakerU30,
+ kSpeakerU29,
+ kSpeakerU28,
+ kSpeakerU27,
+ kSpeakerU26,
+ kSpeakerU25,
+ kSpeakerU24,
+ kSpeakerU23,
+ kSpeakerU22,
+ kSpeakerU21,
+ kSpeakerU20, ///< == #kSpeakerLfe2
+ kSpeakerU19, ///< == #kSpeakerTrr
+ kSpeakerU18, ///< == #kSpeakerTrc
+ kSpeakerU17, ///< == #kSpeakerTrl
+ kSpeakerU16, ///< == #kSpeakerTfr
+ kSpeakerU15, ///< == #kSpeakerTfc
+ kSpeakerU14, ///< == #kSpeakerTfl
+ kSpeakerU13, ///< == #kSpeakerTm
+ kSpeakerU12, ///< == #kSpeakerSr
+ kSpeakerU11, ///< == #kSpeakerSl
+ kSpeakerU10, ///< == #kSpeakerCs
+ kSpeakerU9, ///< == #kSpeakerS
+ kSpeakerU8, ///< == #kSpeakerRc
+ kSpeakerU7, ///< == #kSpeakerLc
+ kSpeakerU6, ///< == #kSpeakerRs
+ kSpeakerU5, ///< == #kSpeakerLs
+ kSpeakerU4, ///< == #kSpeakerLfe
+ kSpeakerU3, ///< == #kSpeakerC
+ kSpeakerU2, ///< == #kSpeakerR
+ kSpeakerU1 ///< == #kSpeakerL
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Speaker Arrangement Types*/
+//-------------------------------------------------------------------------------------------------------
+enum VstSpeakerArrangementType
+{
+//-------------------------------------------------------------------------------------------------------
+ kSpeakerArrUserDefined = -2,///< user defined
+ kSpeakerArrEmpty = -1, ///< empty arrangement
+ kSpeakerArrMono = 0, ///< M
+ kSpeakerArrStereo, ///< L R
+ kSpeakerArrStereoSurround, ///< Ls Rs
+ kSpeakerArrStereoCenter, ///< Lc Rc
+ kSpeakerArrStereoSide, ///< Sl Sr
+ kSpeakerArrStereoCLfe, ///< C Lfe
+ kSpeakerArr30Cine, ///< L R C
+ kSpeakerArr30Music, ///< L R S
+ kSpeakerArr31Cine, ///< L R C Lfe
+ kSpeakerArr31Music, ///< L R Lfe S
+ kSpeakerArr40Cine, ///< L R C S (LCRS)
+ kSpeakerArr40Music, ///< L R Ls Rs (Quadro)
+ kSpeakerArr41Cine, ///< L R C Lfe S (LCRS+Lfe)
+ kSpeakerArr41Music, ///< L R Lfe Ls Rs (Quadro+Lfe)
+ kSpeakerArr50, ///< L R C Ls Rs
+ kSpeakerArr51, ///< L R C Lfe Ls Rs
+ kSpeakerArr60Cine, ///< L R C Ls Rs Cs
+ kSpeakerArr60Music, ///< L R Ls Rs Sl Sr
+ kSpeakerArr61Cine, ///< L R C Lfe Ls Rs Cs
+ kSpeakerArr61Music, ///< L R Lfe Ls Rs Sl Sr
+ kSpeakerArr70Cine, ///< L R C Ls Rs Lc Rc
+ kSpeakerArr70Music, ///< L R C Ls Rs Sl Sr
+ kSpeakerArr71Cine, ///< L R C Lfe Ls Rs Lc Rc
+ kSpeakerArr71Music, ///< L R C Lfe Ls Rs Sl Sr
+ kSpeakerArr80Cine, ///< L R C Ls Rs Lc Rc Cs
+ kSpeakerArr80Music, ///< L R C Ls Rs Cs Sl Sr
+ kSpeakerArr81Cine, ///< L R C Lfe Ls Rs Lc Rc Cs
+ kSpeakerArr81Music, ///< L R C Lfe Ls Rs Cs Sl Sr
+ kSpeakerArr102, ///< L R C Lfe Ls Rs Tfl Tfc Tfr Trl Trr Lfe2
+ kNumSpeakerArr
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// Offline Processing
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** Offline Task Description. */
+//-------------------------------------------------------------------------------------------------------
+struct VstOfflineTask
+{
+//-------------------------------------------------------------------------------------------------------
+ char processName[96]; ///< set by plug-in
+
+ // audio access
+ double readPosition; ///< set by plug-in/Host
+ double writePosition; ///< set by plug-in/Host
+ VstInt32 readCount; ///< set by plug-in/Host
+ VstInt32 writeCount; ///< set by plug-in
+ VstInt32 sizeInputBuffer; ///< set by Host
+ VstInt32 sizeOutputBuffer; ///< set by Host
+ void* inputBuffer; ///< set by Host
+ void* outputBuffer; ///< set by Host
+ double positionToProcessFrom; ///< set by Host
+ double numFramesToProcess; ///< set by Host
+ double maxFramesToWrite; ///< set by plug-in
+
+ // other data access
+ void* extraBuffer; ///< set by plug-in
+ VstInt32 value; ///< set by Host or plug-in
+ VstInt32 index; ///< set by Host or plug-in
+
+ // file attributes
+ double numFramesInSourceFile; ///< set by Host
+ double sourceSampleRate; ///< set by Host or plug-in
+ double destinationSampleRate; ///< set by Host or plug-in
+ VstInt32 numSourceChannels; ///< set by Host or plug-in
+ VstInt32 numDestinationChannels;///< set by Host or plug-in
+ VstInt32 sourceFormat; ///< set by Host
+ VstInt32 destinationFormat; ///< set by plug-in
+ char outputText[512]; ///< set by plug-in or Host
+
+ // progress notification
+ double progress; ///< set by plug-in
+ VstInt32 progressMode; ///< Reserved for future use
+ char progressText[100]; ///< set by plug-in
+
+ VstInt32 flags; ///< set by Host and plug-in; see enum #VstOfflineTaskFlags
+ VstInt32 returnValue; ///< Reserved for future use
+ void* hostOwned; ///< set by Host
+ void* plugOwned; ///< set by plug-in
+
+ char future[1024]; ///< Reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstOfflineTask. */
+//-------------------------------------------------------------------------------------------------------
+enum VstOfflineTaskFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstOfflineUnvalidParameter = 1 << 0, ///< set by Host
+ kVstOfflineNewFile = 1 << 1, ///< set by Host
+
+ kVstOfflinePlugError = 1 << 10, ///< set by plug-in
+ kVstOfflineInterleavedAudio = 1 << 11, ///< set by plug-in
+ kVstOfflineTempOutputFile = 1 << 12, ///< set by plug-in
+ kVstOfflineFloatOutputFile = 1 << 13, ///< set by plug-in
+ kVstOfflineRandomWrite = 1 << 14, ///< set by plug-in
+ kVstOfflineStretch = 1 << 15, ///< set by plug-in
+ kVstOfflineNoThread = 1 << 16 ///< set by plug-in
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Option passed to #offlineRead/#offlineWrite. */
+//-------------------------------------------------------------------------------------------------------
+enum VstOfflineOption
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstOfflineAudio, ///< reading/writing audio samples
+ kVstOfflinePeaks, ///< reading graphic representation
+ kVstOfflineParameter, ///< reading/writing parameters
+ kVstOfflineMarker, ///< reading/writing marker
+ kVstOfflineCursor, ///< reading/moving edit cursor
+ kVstOfflineSelection, ///< reading/changing selection
+ kVstOfflineQueryFiles ///< to request the Host to call asynchronously #offlineNotify
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Structure passed to #offlineNotify and #offlineStart */
+//-------------------------------------------------------------------------------------------------------
+struct VstAudioFile
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 flags; ///< see enum #VstAudioFileFlags
+ void* hostOwned; ///< any data private to Host
+ void* plugOwned; ///< any data private to plug-in
+ char name[kVstMaxFileNameLen]; ///< file title
+ VstInt32 uniqueId; ///< uniquely identify a file during a session
+ double sampleRate; ///< file sample rate
+ VstInt32 numChannels; ///< number of channels (1 for mono, 2 for stereo...)
+ double numFrames; ///< number of frames in the audio file
+ VstInt32 format; ///< Reserved for future use
+ double editCursorPosition; ///< -1 if no such cursor
+ double selectionStart; ///< frame index of first selected frame, or -1
+ double selectionSize; ///< number of frames in selection, or 0
+ VstInt32 selectedChannelsMask; ///< 1 bit per channel
+ VstInt32 numMarkers; ///< number of markers in the file
+ VstInt32 timeRulerUnit; ///< see doc for possible values
+ double timeRulerOffset; ///< offset in time ruler (positive or negative)
+ double tempo; ///< as BPM (Beats Per Minute)
+ VstInt32 timeSigNumerator; ///< time signature numerator
+ VstInt32 timeSigDenominator; ///< time signature denominator
+ VstInt32 ticksPerBlackNote; ///< resolution
+ VstInt32 smpteFrameRate; ///< SMPTE rate (set as in #VstTimeInfo)
+
+ char future[64]; ///< Reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstAudioFile. */
+//-------------------------------------------------------------------------------------------------------
+enum VstAudioFileFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstOfflineReadOnly = 1 << 0, ///< set by Host (in call #offlineNotify)
+ kVstOfflineNoRateConversion = 1 << 1, ///< set by Host (in call #offlineNotify)
+ kVstOfflineNoChannelChange = 1 << 2, ///< set by Host (in call #offlineNotify)
+
+ kVstOfflineCanProcessSelection = 1 << 10, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineNoCrossfade = 1 << 11, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantRead = 1 << 12, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantWrite = 1 << 13, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantWriteMarker = 1 << 14, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantMoveCursor = 1 << 15, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantSelect = 1 << 16 ///< set by plug-in (in call #offlineStart)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Audio file marker. */
+//-------------------------------------------------------------------------------------------------------
+struct VstAudioFileMarker
+{
+//-------------------------------------------------------------------------------------------------------
+ double position; ///< marker position
+ char name[32]; ///< marker name
+ VstInt32 type; ///< marker type
+ VstInt32 id; ///< marker identifier
+ VstInt32 reserved; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// Others
+//-------------------------------------------------------------------------------------------------------
+
+//-------------------------------------------------------------------------------------------------------
+/** \deprecated Structure used for #openWindow and #closeWindow (deprecated in VST 2.4). */
+//-------------------------------------------------------------------------------------------------------
+struct DECLARE_VST_DEPRECATED (VstWindow)
+{
+//-------------------------------------------------------------------------------------------------------
+ char title[128];
+ VstInt16 xPos;
+ VstInt16 yPos;
+ VstInt16 width;
+ VstInt16 height;
+ VstInt32 style;
+ void* parent;
+ void* userHandle;
+ void* winHandle;
+
+ char future[104];
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Structure used for keyUp/keyDown. */
+//-------------------------------------------------------------------------------------------------------
+struct VstKeyCode
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 character; ///< ASCII character
+ unsigned char virt; ///< @see VstVirtualKey
+ unsigned char modifier; ///< @see VstModifierKey
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Platform-independent definition of Virtual Keys (used in #VstKeyCode). */
+//-------------------------------------------------------------------------------------------------------
+enum VstVirtualKey
+{
+//-------------------------------------------------------------------------------------------------------
+ VKEY_BACK = 1,
+ VKEY_TAB,
+ VKEY_CLEAR,
+ VKEY_RETURN,
+ VKEY_PAUSE,
+ VKEY_ESCAPE,
+ VKEY_SPACE,
+ VKEY_NEXT,
+ VKEY_END,
+ VKEY_HOME,
+ VKEY_LEFT,
+ VKEY_UP,
+ VKEY_RIGHT,
+ VKEY_DOWN,
+ VKEY_PAGEUP,
+ VKEY_PAGEDOWN,
+ VKEY_SELECT,
+ VKEY_PRINT,
+ VKEY_ENTER,
+ VKEY_SNAPSHOT,
+ VKEY_INSERT,
+ VKEY_DELETE,
+ VKEY_HELP,
+ VKEY_NUMPAD0,
+ VKEY_NUMPAD1,
+ VKEY_NUMPAD2,
+ VKEY_NUMPAD3,
+ VKEY_NUMPAD4,
+ VKEY_NUMPAD5,
+ VKEY_NUMPAD6,
+ VKEY_NUMPAD7,
+ VKEY_NUMPAD8,
+ VKEY_NUMPAD9,
+ VKEY_MULTIPLY,
+ VKEY_ADD,
+ VKEY_SEPARATOR,
+ VKEY_SUBTRACT,
+ VKEY_DECIMAL,
+ VKEY_DIVIDE,
+ VKEY_F1,
+ VKEY_F2,
+ VKEY_F3,
+ VKEY_F4,
+ VKEY_F5,
+ VKEY_F6,
+ VKEY_F7,
+ VKEY_F8,
+ VKEY_F9,
+ VKEY_F10,
+ VKEY_F11,
+ VKEY_F12,
+ VKEY_NUMLOCK,
+ VKEY_SCROLL,
+ VKEY_SHIFT,
+ VKEY_CONTROL,
+ VKEY_ALT,
+ VKEY_EQUALS
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Modifier flags used in #VstKeyCode. */
+//-------------------------------------------------------------------------------------------------------
+enum VstModifierKey
+{
+//-------------------------------------------------------------------------------------------------------
+ MODIFIER_SHIFT = 1<<0, ///< Shift
+ MODIFIER_ALTERNATE = 1<<1, ///< Alt
+ MODIFIER_COMMAND = 1<<2, ///< Control on Mac
+ MODIFIER_CONTROL = 1<<3 ///< Ctrl on PC, Apple on Mac
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** File filter used in #VstFileSelect. */
+//-------------------------------------------------------------------------------------------------------
+struct VstFileType
+{
+//-------------------------------------------------------------------------------------------------------
+ char name[128]; ///< display name
+ char macType[8]; ///< MacOS type
+ char dosType[8]; ///< Windows file extension
+ char unixType[8]; ///< Unix file extension
+ char mimeType1[128]; ///< MIME type
+ char mimeType2[128]; ///< additional MIME type
+
+ VstFileType (const char* _name = 0, const char* _macType = 0, const char* _dosType = 0,
+ const char* _unixType = 0, const char* _mimeType1 = 0, const char* _mimeType2 = 0)
+ {
+ vst_strncpy (name, _name ? _name : "", 127);
+ vst_strncpy (macType, _macType ? _macType : "", 7);
+ vst_strncpy (dosType, _dosType ? _dosType : "", 7);
+ vst_strncpy (unixType, _unixType ? _unixType : "", 7);
+ vst_strncpy (mimeType1, _mimeType1 ? _mimeType1 : "", 127);
+ vst_strncpy (mimeType2, _mimeType2 ? _mimeType2 : "", 127);
+ }
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** File Selector Description used in #audioMasterOpenFileSelector. */
+//-------------------------------------------------------------------------------------------------------
+struct VstFileSelect
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 command; ///< @see VstFileSelectCommand
+ VstInt32 type; ///< @see VstFileSelectType
+ VstInt32 macCreator; ///< optional: 0 = no creator
+ VstInt32 nbFileTypes; ///< number of fileTypes
+ VstFileType* fileTypes; ///< list of fileTypes @see VstFileType
+ char title[1024]; ///< text to display in file selector's title
+ char* initialPath; ///< initial path
+ char* returnPath; ///< use with #kVstFileLoad and #kVstDirectorySelect. null: Host allocates memory, plug-in must call #closeOpenFileSelector!
+ VstInt32 sizeReturnPath; ///< size of allocated memory for return paths
+ char** returnMultiplePaths; ///< use with kVstMultipleFilesLoad. Host allocates memory, plug-in must call #closeOpenFileSelector!
+ VstInt32 nbReturnPath; ///< number of selected paths
+ VstIntPtr reserved; ///< reserved for Host application
+
+ char future[116]; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Command constants used in #VstFileSelect structure. */
+//-------------------------------------------------------------------------------------------------------
+enum VstFileSelectCommand
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstFileLoad = 0, ///< for loading a file
+ kVstFileSave, ///< for saving a file
+ kVstMultipleFilesLoad, ///< for loading multiple files
+ kVstDirectorySelect ///< for selecting a directory/folder
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Types used in #VstFileSelect structure. */
+//-------------------------------------------------------------------------------------------------------
+enum VstFileSelectType
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstFileType = 0 ///< regular file selector
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Structure used for #effBeginLoadBank/#effBeginLoadProgram. */
+//-------------------------------------------------------------------------------------------------------
+struct VstPatchChunkInfo
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 version; ///< Format Version (should be 1)
+ VstInt32 pluginUniqueID; ///< UniqueID of the plug-in
+ VstInt32 pluginVersion; ///< Plug-in Version
+ VstInt32 numElements; ///< Number of Programs (Bank) or Parameters (Program)
+
+ char future[48]; ///< Reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** PanLaw Type. */
+//-------------------------------------------------------------------------------------------------------
+enum VstPanLawType
+{
+//-------------------------------------------------------------------------------------------------------
+ kLinearPanLaw = 0, ///< L = pan * M; R = (1 - pan) * M;
+ kEqualPowerPanLaw ///< L = pow (pan, 0.5) * M; R = pow ((1 - pan), 0.5) * M;
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Process Levels returned by #audioMasterGetCurrentProcessLevel. */
+//-------------------------------------------------------------------------------------------------------
+enum VstProcessLevels
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstProcessLevelUnknown = 0, ///< not supported by Host
+ kVstProcessLevelUser, ///< 1: currently in user thread (GUI)
+ kVstProcessLevelRealtime, ///< 2: currently in audio thread (where process is called)
+ kVstProcessLevelPrefetch, ///< 3: currently in 'sequencer' thread (MIDI, timer etc)
+ kVstProcessLevelOffline ///< 4: currently offline processing and thus in user thread
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Automation States returned by #audioMasterGetAutomationState. */
+//-------------------------------------------------------------------------------------------------------
+enum VstAutomationStates
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstAutomationUnsupported = 0, ///< not supported by Host
+ kVstAutomationOff, ///< off
+ kVstAutomationRead, ///< read
+ kVstAutomationWrite, ///< write
+ kVstAutomationReadWrite ///< read and write
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+#if TARGET_API_MAC_CARBON
+ #pragma options align=reset
+#elif defined(WIN32) || defined(__FLAT__) || defined(__GNUC__)
+ #pragma pack(pop)
+#elif defined __BORLANDC__
+ #pragma -a-
+#endif
+//-------------------------------------------------------------------------------------------------------
+
+#endif //__aeffectx__
diff --git a/pluginterfaces/vst2.x/vstfxstore.h b/pluginterfaces/vst2.x/vstfxstore.h
new file mode 100644
index 0000000..c642777
--- /dev/null
+++ b/pluginterfaces/vst2.x/vstfxstore.h
@@ -0,0 +1,106 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/02/09 11:05:51 $
+//
+// Category : VST 2.x Interfaces
+// Filename : vstfxstore.h
+// Created by : Steinberg Media Technologies
+// Description : Definition of Program (fxp) and Bank (fxb) structures
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __vstfxstore__
+#define __vstfxstore__
+
+#ifndef __aeffect__
+#include "aeffect.h"
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+/** Root chunk identifier for Programs (fxp) and Banks (fxb). */
+#define cMagic 'CcnK'
+
+/** Regular Program (fxp) identifier. */
+#define fMagic 'FxCk'
+
+/** Regular Bank (fxb) identifier. */
+#define bankMagic 'FxBk'
+
+/** Program (fxp) identifier for opaque chunk data. */
+#define chunkPresetMagic 'FPCh'
+
+/** Bank (fxb) identifier for opaque chunk data. */
+#define chunkBankMagic 'FBCh'
+
+/*
+ Note: The C data structures below are for illustration only. You can not read/write them directly.
+ The byte order on disk of fxp and fxb files is Big Endian. You have to swap integer
+ and floating-point values on Little Endian platforms (Windows, MacIntel)!
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/** Program (fxp) structure. */
+//-------------------------------------------------------------------------------------------------------
+struct fxProgram
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 chunkMagic; ///< 'CcnK'
+ VstInt32 byteSize; ///< size of this chunk, excl. magic + byteSize
+
+ VstInt32 fxMagic; ///< 'FxCk' (regular) or 'FPCh' (opaque chunk)
+ VstInt32 version; ///< format version (currently 1)
+ VstInt32 fxID; ///< fx unique ID
+ VstInt32 fxVersion; ///< fx version
+
+ VstInt32 numParams; ///< number of parameters
+ char prgName[28]; ///< program name (null-terminated ASCII string)
+
+ union
+ {
+ float params[1]; ///< variable sized array with parameter values
+ struct
+ {
+ VstInt32 size; ///< size of program data
+ char chunk[1]; ///< variable sized array with opaque program data
+ } data; ///< program chunk data
+ } content; ///< program content depending on fxMagic
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Bank (fxb) structure. */
+//-------------------------------------------------------------------------------------------------------
+struct fxBank
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 chunkMagic; ///< 'CcnK'
+ VstInt32 byteSize; ///< size of this chunk, excl. magic + byteSize
+
+ VstInt32 fxMagic; ///< 'FxBk' (regular) or 'FBCh' (opaque chunk)
+ VstInt32 version; ///< format version (1 or 2)
+ VstInt32 fxID; ///< fx unique ID
+ VstInt32 fxVersion; ///< fx version
+
+ VstInt32 numPrograms; ///< number of programs
+
+#if VST_2_4_EXTENSIONS
+ VstInt32 currentProgram; ///< version 2: current program number
+ char future[124]; ///< reserved, should be zero
+#else
+ char future[128]; ///< reserved, should be zero
+#endif
+
+ union
+ {
+ fxProgram programs[1]; ///< variable number of programs
+ struct
+ {
+ VstInt32 size; ///< size of bank data
+ char chunk[1]; ///< variable sized array with opaque bank data
+ } data; ///< bank chunk data
+ } content; ///< bank content depending on fxMagic
+//-------------------------------------------------------------------------------------------------------
+};
+
+#endif // __vstfxstore__