OSDN Git Service

リセット
[momiji/momiji_main.git] / Core / Momiji.Interop.Vst.h
1 /*
2 [momiji music component library]
3 ---------------------------------------------------------------------
4 Momiji.Core.Vst.h
5         vst dll importer.
6 ---------------------------------------------------------------------
7 Copyright (C) 2011 tyiki badwell {miria@users.sourceforge.jp}.
8
9 This program is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program.  If not, see <http://www.gnu.org/licenses/gpl-3.0.html>.
21 ---------------------------------------------------------------------
22 */
23 #pragma once
24
25 #using <mscorlib.dll>
26
27 using namespace System::Runtime;
28
29 namespace Momiji{
30 namespace Interop {
31 namespace Vst {
32
33 #define VST_DLL_DELEGATE(_charset_)                     [InteropServices::UnmanagedFunctionPointerAttribute(InteropServices::CallingConvention::Cdecl, CharSet = InteropServices::CharSet::##_charset_##, SetLastError = false)]
34
35         //-------------------------------------------------------------------------------------------------------
36         /** AEffect flags */
37         //-------------------------------------------------------------------------------------------------------
38         [System::FlagsAttribute]
39         public enum class VstAEffectFlags: System::Int32
40         {
41         //-------------------------------------------------------------------------------------------------------
42                 effFlagsHasEditor     = 1 << 0,                 //< set if the plug-in provides a custom editor
43                 effFlagsCanReplacing  = 1 << 4,                 //< supports replacing process mode (which should the default mode in VST 2.4)
44                 effFlagsProgramChunks = 1 << 5,                 //< program data is handled in formatless chunks
45                 effFlagsIsSynth       = 1 << 8,                 //< plug-in is a synth (VSTi), Host may assign mixer channels for its outputs
46                 effFlagsNoSoundInStop = 1 << 9,                 //< plug-in does not produce sound when input is all silence
47                 effFlagsCanDoubleReplacing = 1 << 12,   //< plug-in supports double precision processing
48
49                 effFlagsHasClipDeprecated = 1 << 1,                     //< \deprecated deprecated in VST 2.4
50                 effFlagsHasVuDeprecated   = 1 << 2,                     //< \deprecated deprecated in VST 2.4
51                 effFlagsCanMonoDeprecated = 1 << 3,                     //< \deprecated deprecated in VST 2.4
52                 effFlagsExtIsAsyncDeprecated   = 1 << 10,       //< \deprecated deprecated in VST 2.4
53                 effFlagsExtHasBufferDeprecated = 1 << 11        //< \deprecated deprecated in VST 2.4
54         //-------------------------------------------------------------------------------------------------------
55         };
56
57         //-------------------------------------------------------------------------------------------------------
58         /** String length limits (in characters excl. 0 byte) */
59         //-------------------------------------------------------------------------------------------------------
60         public enum class VstStringConstants: System::Int32
61         {
62         //-------------------------------------------------------------------------------------------------------
63                 kVstMaxProgNameLen   = 24,      //< used for #effGetProgramName, #effSetProgramName, #effGetProgramNameIndexed
64                 kVstMaxParamStrLen   = 8,       //< used for #effGetParamLabel, #effGetParamDisplay, #effGetParamName
65                 kVstMaxVendorStrLen  = 64,      //< used for #effGetVendorString, #audioMasterGetVendorString
66                 kVstMaxProductStrLen = 64,      //< used for #effGetProductString, #audioMasterGetProductString
67                 kVstMaxEffectNameLen = 32,      //< used for #effGetEffectName
68                 kVstMaxNameLen       = 64,      //< used for #MidiProgramName, #MidiProgramCategory, #MidiKeyName, #VstSpeakerProperties, #VstPinProperties
69                 kVstMaxLabelLen      = 64,      //< used for #VstParameterProperties->label, #VstPinProperties->label
70                 kVstMaxShortLabelLen = 8,       //< used for #VstParameterProperties->shortLabel, #VstPinProperties->shortLabel
71                 kVstMaxCategLabelLen = 24,      //< used for #VstParameterProperties->label
72                 kVstMaxFileNameLen   = 100      //< used for #VstAudioFile->name
73         //-------------------------------------------------------------------------------------------------------
74         };
75
76         WIN32_DLL_STRUCTLAYOUT_ANSI public ref struct AEffect
77         {
78         public:
79         //-------------------------------------------------------------------------------------------------------
80                 System::Int32                   magic;                  //< must be #kEffectMagic ('VstP')
81
82                 /** Host to Plug-in dispatcher @see AudioEffect::dispatcher */
83                 System::IntPtr  dispatcher;
84                 
85                         /** \deprecated Accumulating process mode is deprecated in VST 2.4! Use AEffect::processReplacing instead! */
86                         System::IntPtr  processDeprecated;
87         
88                 /** Set new value of automatable parameter @see AudioEffect::setParameter */
89                 System::IntPtr  setParameter;
90
91                 /** Returns current value of automatable parameter @see AudioEffect::getParameter*/
92                 System::IntPtr  getParameter;
93
94                 System::Int32 numPrograms;  //< number of programs
95                 System::Int32 numParams;        //< all programs are assumed to have numParams parameters
96                 System::Int32 numInputs;        //< number of audio inputs
97                 System::Int32 numOutputs;       //< number of audio outputs
98
99                 VstAEffectFlags flags;          //< @see VstAEffectFlags
100         
101                 System::IntPtr resvd1;          //< reserved for Host, must be 0
102                 System::IntPtr resvd2;          //< reserved for Host, must be 0
103         
104                 System::Int32 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.
105         
106                         System::Int32 realQualitiesDeprecated;  //< \deprecated unused member
107                         System::Int32 offQualitiesDeprecated;   //< \deprecated unused member
108                         System::Single ioRatioDeprecated;               //< \deprecated unused member
109
110                 System::IntPtr object;                  //< #AudioEffect class pointer
111                 System::IntPtr user;                    //< user-defined pointer
112
113                 System::Int32 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.
114                 System::Int32 version;          //< plug-in version (example 1100 for version 1.1.0.0)
115
116                 /** Process audio samples in replacing mode @see AudioEffect::processReplacing */
117                 System::IntPtr processReplacing;
118
119                 /** Process double-precision audio samples in replacing mode @see AudioEffect::processDoubleReplacing */
120                 System::IntPtr processDoubleReplacing;
121         
122                 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValArray, SizeConst=56)]
123                         array<System::Char>^ future;    //< reserved for future use (please zero)
124         //-------------------------------------------------------------------------------------------------------
125         };
126
127         //-------------------------------------------------------------------------------------------------------
128         /** Basic dispatcher Opcodes (Host to Plug-in) */
129         //-------------------------------------------------------------------------------------------------------
130         public enum class AEffectOpcodes: System::Int32
131         {
132                 effOpen = 0,            ///< no arguments  @see AudioEffect::open
133                 effClose,                       ///< no arguments  @see AudioEffect::close
134
135                 effSetProgram,          ///< [value]: new program number  @see AudioEffect::setProgram
136                 effGetProgram,          ///< [return value]: current program number  @see AudioEffect::getProgram
137                 effSetProgramName,      ///< [ptr]: char* with new program name, limited to #kVstMaxProgNameLen  @see AudioEffect::setProgramName
138                 effGetProgramName,      ///< [ptr]: char buffer for current program name, limited to #kVstMaxProgNameLen  @see AudioEffect::getProgramName
139         
140                 effGetParamLabel,       ///< [ptr]: char buffer for parameter label, limited to #kVstMaxParamStrLen  @see AudioEffect::getParameterLabel
141                 effGetParamDisplay,     ///< [ptr]: char buffer for parameter display, limited to #kVstMaxParamStrLen  @see AudioEffect::getParameterDisplay
142                 effGetParamName,        ///< [ptr]: char buffer for parameter name, limited to #kVstMaxParamStrLen  @see AudioEffect::getParameterName
143         
144                         effGetVuDeprecated,     ///< \deprecated deprecated in VST 2.4
145
146                 effSetSampleRate,       ///< [opt]: new sample rate for audio processing  @see AudioEffect::setSampleRate
147                 effSetBlockSize,        ///< [value]: new maximum block size for audio processing  @see AudioEffect::setBlockSize
148                 effMainsChanged,        ///< [value]: 0 means "turn off", 1 means "turn on"  @see AudioEffect::suspend @see AudioEffect::resume
149
150                 effEditGetRect,         ///< [ptr]: #ERect** receiving pointer to editor size  @see ERect @see AEffEditor::getRect
151                 effEditOpen,            ///< [ptr]: system dependent Window pointer, e.g. HWND on Windows  @see AEffEditor::open
152                 effEditClose,           ///< no arguments @see AEffEditor::close
153
154                         effEditDrawDeprecated,  ///< \deprecated deprecated in VST 2.4
155                         effEditMouseDeprecated, ///< \deprecated deprecated in VST 2.4
156                         effEditKeyDeprecated,   ///< \deprecated deprecated in VST 2.4
157
158                 effEditIdle,            ///< no arguments @see AEffEditor::idle
159         
160                         effEditTopDeprecated,   ///< \deprecated deprecated in VST 2.4
161                         effEditSleepDeprecated, ///< \deprecated deprecated in VST 2.4
162                         effIdentifyDeprecated,  ///< \deprecated deprecated in VST 2.4
163         
164                 effGetChunk,            ///< [ptr]: void** for chunk data address [index]: 0 for bank, 1 for program  @see AudioEffect::getChunk
165                 effSetChunk,            ///< [ptr]: chunk data [value]: byte size [index]: 0 for bank, 1 for program  @see AudioEffect::setChunk
166  
167                 effProcessEvents,       ///< [ptr]: #VstEvents*  @see AudioEffectX::processEvents
168
169                 effCanBeAutomated,                                              ///< [index]: parameter index [return value]: 1=true, 0=false  @see AudioEffectX::canParameterBeAutomated
170                 effString2Parameter,                                    ///< [index]: parameter index [ptr]: parameter string [return value]: true for success  @see AudioEffectX::string2parameter
171
172                         effGetNumProgramCategoriesDeprecated,   ///< \deprecated deprecated in VST 2.4
173
174                 effGetProgramNameIndexed,                               ///< [index]: program index [ptr]: buffer for program name, limited to #kVstMaxProgNameLen [return value]: true for success  @see AudioEffectX::getProgramNameIndexed
175         
176                         effCopyProgramDeprecated,       ///< \deprecated deprecated in VST 2.4
177                         effConnectInputDeprecated,      ///< \deprecated deprecated in VST 2.4
178                         effConnectOutputDeprecated,     ///< \deprecated deprecated in VST 2.4
179         
180                 effGetInputProperties,                                  ///< [index]: input index [ptr]: #VstPinProperties* [return value]: 1 if supported  @see AudioEffectX::getInputProperties
181                 effGetOutputProperties,                         ///< [index]: output index [ptr]: #VstPinProperties* [return value]: 1 if supported  @see AudioEffectX::getOutputProperties
182                 effGetPlugCategory,                                     ///< [return value]: category  @see VstPlugCategory @see AudioEffectX::getPlugCategory
183
184                         effGetCurrentPositionDeprecated,        ///< \deprecated deprecated in VST 2.4
185                         effGetDestinationBufferDeprecated,      ///< \deprecated deprecated in VST 2.4
186
187                 effOfflineNotify,                                               ///< [ptr]: #VstAudioFile array [value]: count [index]: start flag  @see AudioEffectX::offlineNotify
188                 effOfflinePrepare,                                              ///< [ptr]: #VstOfflineTask array [value]: count  @see AudioEffectX::offlinePrepare
189                 effOfflineRun,                                                  ///< [ptr]: #VstOfflineTask array [value]: count  @see AudioEffectX::offlineRun
190
191                 effProcessVarIo,                                                ///< [ptr]: #VstVariableIo*  @see AudioEffectX::processVariableIo
192                 effSetSpeakerArrangement,                               ///< [value]: input #VstSpeakerArrangement* [ptr]: output #VstSpeakerArrangement*  @see AudioEffectX::setSpeakerArrangement
193
194                         effSetBlockSizeAndSampleRateDeprecated, ///< \deprecated deprecated in VST 2.4
195
196                 effSetBypass,                                                   ///< [value]: 1 = bypass, 0 = no bypass  @see AudioEffectX::setBypass
197                 effGetEffectName,                                               ///< [ptr]: buffer for effect name, limited to #kVstMaxEffectNameLen  @see AudioEffectX::getEffectName
198
199                         effGetErrorTextDeprecated,      ///< \deprecated deprecated in VST 2.4
200
201                 effGetVendorString,                                     ///< [ptr]: buffer for effect vendor string, limited to #kVstMaxVendorStrLen  @see AudioEffectX::getVendorString
202                 effGetProductString,                                    ///< [ptr]: buffer for effect vendor string, limited to #kVstMaxProductStrLen  @see AudioEffectX::getProductString
203                 effGetVendorVersion,                                    ///< [return value]: vendor-specific version  @see AudioEffectX::getVendorVersion
204                 effVendorSpecific,                                              ///< no definition, vendor specific handling  @see AudioEffectX::vendorSpecific
205                 effCanDo,                                                               ///< [ptr]: "can do" string [return value]: 0: "don't know" -1: "no" 1: "yes"  @see AudioEffectX::canDo
206                 effGetTailSize,                                         ///< [return value]: tail size (for example the reverb time of a reverb plug-in); 0 is default (return 1 for 'no tail')
207
208                         effIdleDeprecated,                              ///< \deprecated deprecated in VST 2.4
209                         effGetIconDeprecated,                   ///< \deprecated deprecated in VST 2.4
210                         effSetViewPositionDeprecated,   ///< \deprecated deprecated in VST 2.4
211
212                 effGetParameterProperties,                              ///< [index]: parameter index [ptr]: #VstParameterProperties* [return value]: 1 if supported  @see AudioEffectX::getParameterProperties
213
214                         effKeysRequiredDeprecated,      ///< \deprecated deprecated in VST 2.4
215
216                 effGetVstVersion,                                               ///< [return value]: VST version  @see AudioEffectX::getVstVersion
217
218                 effEditKeyDown,                                         ///< [index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used  @see AEffEditor::onKeyDown
219                 effEditKeyUp,                                                   ///< [index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used  @see AEffEditor::onKeyUp
220                 effSetEditKnobMode,                                     ///< [value]: knob mode 0: circular, 1: circular relativ, 2: linear (CKnobMode in VSTGUI)  @see AEffEditor::setKnobMode
221
222                 effGetMidiProgramName,                                  ///< [index]: MIDI channel [ptr]: #MidiProgramName* [return value]: number of used programs, 0 if unsupported  @see AudioEffectX::getMidiProgramName
223                 effGetCurrentMidiProgram,                               ///< [index]: MIDI channel [ptr]: #MidiProgramName* [return value]: index of current program  @see AudioEffectX::getCurrentMidiProgram
224                 effGetMidiProgramCategory,                              ///< [index]: MIDI channel [ptr]: #MidiProgramCategory* [return value]: number of used categories, 0 if unsupported  @see AudioEffectX::getMidiProgramCategory
225                 effHasMidiProgramsChanged,                              ///< [index]: MIDI channel [return value]: 1 if the #MidiProgramName(s) or #MidiKeyName(s) have changed  @see AudioEffectX::hasMidiProgramsChanged
226                 effGetMidiKeyName,                                              ///< [index]: MIDI channel [ptr]: #MidiKeyName* [return value]: true if supported, false otherwise  @see AudioEffectX::getMidiKeyName
227         
228                 effBeginSetProgram,                                     ///< no arguments  @see AudioEffectX::beginSetProgram
229                 effEndSetProgram,                                               ///< no arguments  @see AudioEffectX::endSetProgram
230
231                 effGetSpeakerArrangement,                               ///< [value]: input #VstSpeakerArrangement* [ptr]: output #VstSpeakerArrangement*  @see AudioEffectX::getSpeakerArrangement
232                 effShellGetNextPlugin,                                  ///< [ptr]: buffer for plug-in name, limited to #kVstMaxProductStrLen [return value]: next plugin's uniqueID  @see AudioEffectX::getNextShellPlugin
233
234                 effStartProcess,                                                ///< no arguments  @see AudioEffectX::startProcess
235                 effStopProcess,                                         ///< no arguments  @see AudioEffectX::stopProcess
236                 effSetTotalSampleToProcess,                 ///< [value]: number of samples to process, offline only!  @see AudioEffectX::setTotalSampleToProcess
237                 effSetPanLaw,                                                   ///< [value]: pan law [opt]: gain  @see VstPanLawType @see AudioEffectX::setPanLaw
238         
239                 effBeginLoadBank,                                               ///< [ptr]: #VstPatchChunkInfo* [return value]: -1: bank can't be loaded, 1: bank can be loaded, 0: unsupported  @see AudioEffectX::beginLoadBank
240                 effBeginLoadProgram,                                    ///< [ptr]: #VstPatchChunkInfo* [return value]: -1: prog can't be loaded, 1: prog can be loaded, 0: unsupported  @see AudioEffectX::beginLoadProgram
241
242                 effSetProcessPrecision,                         ///< [value]: @see VstProcessPrecision  @see AudioEffectX::setProcessPrecision
243                 effGetNumMidiInputChannels,                     ///< [return value]: number of used MIDI input channels (1-15)  @see AudioEffectX::getNumMidiInputChannels
244                 effGetNumMidiOutputChannels,                    ///< [return value]: number of used MIDI output channels (1-15)  @see AudioEffectX::getNumMidiOutputChannels
245         };
246
247         //-------------------------------------------------------------------------------------------------------
248         /** Basic dispatcher Opcodes (Plug-in to Host) */
249         //-------------------------------------------------------------------------------------------------------
250         public enum class AudioMasterOpcodes: System::Int32
251         {
252         //-------------------------------------------------------------------------------------------------------
253                 audioMasterAutomate = 0,        ///< [index]: parameter index [opt]: parameter value  @see AudioEffect::setParameterAutomated
254                 audioMasterVersion,                     ///< [return value]: Host VST version (for example 2400 for VST 2.4) @see AudioEffect::getMasterVersion
255                 audioMasterCurrentId,           ///< [return value]: current unique identifier on shell plug-in  @see AudioEffect::getCurrentUniqueId
256                 audioMasterIdle,                        ///< no arguments  @see AudioEffect::masterIdle
257                         audioMasterPinConnectedDeprecated,              ///< \deprecated deprecated in VST 2.4 r2
258                         
259                         audioMasterDeprecated,
260                         audioMasterWantMidiDeprecated,  ///< \deprecated deprecated in VST 2.4
261
262                 audioMasterGetTime,                             ///< [return value]: #VstTimeInfo* or null if not supported [value]: request mask  @see VstTimeInfoFlags @see AudioEffectX::getTimeInfo
263                 audioMasterProcessEvents,               ///< [ptr]: pointer to #VstEvents  @see VstEvents @see AudioEffectX::sendVstEventsToHost
264
265                         audioMasterSetTimeDeprecated,   ///< \deprecated deprecated in VST 2.4
266                         audioMasterTempoAtDeprecated,   ///< \deprecated deprecated in VST 2.4
267                         audioMasterGetNumAutomatableParametersDeprecated,       ///< \deprecated deprecated in VST 2.4
268                         audioMasterGetParameterQuantizationDeprecated,          ///< \deprecated deprecated in VST 2.4
269
270                 audioMasterIOChanged,                   ///< [return value]: 1 if supported  @see AudioEffectX::ioChanged
271
272                         audioMasterNeedIdleDeprecated,  ///< \deprecated deprecated in VST 2.4
273         
274                 audioMasterSizeWindow,                  ///< [index]: new width [value]: new height [return value]: 1 if supported  @see AudioEffectX::sizeWindow
275                 audioMasterGetSampleRate,               ///< [return value]: current sample rate  @see AudioEffectX::updateSampleRate
276                 audioMasterGetBlockSize,                ///< [return value]: current block size  @see AudioEffectX::updateBlockSize
277                 audioMasterGetInputLatency,             ///< [return value]: input latency in audio samples  @see AudioEffectX::getInputLatency
278                 audioMasterGetOutputLatency,    ///< [return value]: output latency in audio samples  @see AudioEffectX::getOutputLatency
279
280                         audioMasterGetPreviousPlugDeprecated,                   ///< \deprecated deprecated in VST 2.4
281                         audioMasterGetNextPlugDeprecated,                               ///< \deprecated deprecated in VST 2.4
282                         audioMasterWillReplaceOrAccumulateDeprecated,   ///< \deprecated deprecated in VST 2.4
283
284                 audioMasterGetCurrentProcessLevel,      ///< [return value]: current process level  @see VstProcessLevels
285                 audioMasterGetAutomationState,          ///< [return value]: current automation state  @see VstAutomationStates
286
287                 audioMasterOfflineStart,                        ///< [index]: numNewAudioFiles [value]: numAudioFiles [ptr]: #VstAudioFile*  @see AudioEffectX::offlineStart
288                 audioMasterOfflineRead,                         ///< [index]: bool readSource [value]: #VstOfflineOption* @see VstOfflineOption [ptr]: #VstOfflineTask*  @see VstOfflineTask @see AudioEffectX::offlineRead
289                 audioMasterOfflineWrite,                        ///< @see audioMasterOfflineRead @see AudioEffectX::offlineRead
290                 audioMasterOfflineGetCurrentPass,       ///< @see AudioEffectX::offlineGetCurrentPass
291                 audioMasterOfflineGetCurrentMetaPass,   ///< @see AudioEffectX::offlineGetCurrentMetaPass
292
293                         audioMasterSetOutputSampleRateDeprecated,                       ///< \deprecated deprecated in VST 2.4
294                         audioMasterGetOutputSpeakerArrangementDeprecated,       ///< \deprecated deprecated in VST 2.4
295
296                 audioMasterGetVendorString,                     ///< [ptr]: char buffer for vendor string, limited to #kVstMaxVendorStrLen  @see AudioEffectX::getHostVendorString
297                 audioMasterGetProductString,            ///< [ptr]: char buffer for vendor string, limited to #kVstMaxProductStrLen  @see AudioEffectX::getHostProductString
298                 audioMasterGetVendorVersion,            ///< [return value]: vendor-specific version  @see AudioEffectX::getHostVendorVersion
299                 audioMasterVendorSpecific,                      ///< no definition, vendor specific handling  @see AudioEffectX::hostVendorSpecific
300         
301                         audioMasterSetIconDeprecated,           ///< \deprecated deprecated in VST 2.4
302         
303                 audioMasterCanDo,                                       ///< [ptr]: "can do" string [return value]: 1 for supported
304                 audioMasterGetLanguage,                         ///< [return value]: language code  @see VstHostLanguage
305
306                         audioMasterOpenWindowDeprecated,                ///< \deprecated deprecated in VST 2.4
307                         audioMasterCloseWindowDeprecated,       ///< \deprecated deprecated in VST 2.4
308
309                 audioMasterGetDirectory,                        ///< [return value]: FSSpec on MAC, else char*  @see AudioEffectX::getDirectory
310                 audioMasterUpdateDisplay,                       ///< no arguments       
311                 audioMasterBeginEdit,               ///< [index]: parameter index  @see AudioEffectX::beginEdit
312                 audioMasterEndEdit,                 ///< [index]: parameter index  @see AudioEffectX::endEdit
313                 audioMasterOpenFileSelector,            ///< [ptr]: VstFileSelect* [return value]: 1 if supported  @see AudioEffectX::openFileSelector
314                 audioMasterCloseFileSelector,           ///< [ptr]: VstFileSelect*  @see AudioEffectX::closeFileSelector
315         
316                         audioMasterEditFileDeprecated,          ///< \deprecated deprecated in VST 2.4
317         
318                         audioMasterGetChunkFileDeprecated,      ///< \deprecated deprecated in VST 2.4 [ptr]: char[2048] or sizeof (FSSpec) [return value]: 1 if supported  @see AudioEffectX::getChunkFile
319
320                         audioMasterGetInputSpeakerArrangementDeprecated,        ///< \deprecated deprecated in VST 2.4
321                 
322         //-------------------------------------------------------------------------------------------------------
323         };
324
325         //-------------------------------------------------------------------------------------------------------
326         /** Parameter Properties used in #effGetParameterProperties. */
327         //-------------------------------------------------------------------------------------------------------
328         WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstParameterProperties
329         {
330         public:
331                 [System::FlagsAttribute]
332                 enum class VstParameterFlags: System::Int32
333                 {
334                 //-------------------------------------------------------------------------------------------------------
335                         kVstParameterIsSwitch                            = 1 << 0,      ///< parameter is a switch (on/off)
336                         kVstParameterUsesIntegerMinMax           = 1 << 1,      ///< minInteger, maxInteger valid
337                         kVstParameterUsesFloatStep                       = 1 << 2,      ///< stepFloat, smallStepFloat, largeStepFloat valid
338                         kVstParameterUsesIntStep                         = 1 << 3,      ///< stepInteger, largeStepInteger valid
339                         kVstParameterSupportsDisplayIndex        = 1 << 4,      ///< displayIndex valid
340                         kVstParameterSupportsDisplayCategory = 1 << 5,  ///< category, etc. valid
341                         kVstParameterCanRamp                             = 1 << 6       ///< set if parameter value can ramp up/down
342                 //-------------------------------------------------------------------------------------------------------
343                 };
344
345         public:
346         //-------------------------------------------------------------------------------------------------------
347                 System::Single stepFloat;                       //< System::Single step
348                 System::Single smallStepFloat;          //< small System::Single step
349                 System::Single largeStepFloat;          //< large System::Single step
350                 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValTStr, SizeConst=safe_cast<System::Int32>(VstStringConstants::kVstMaxLabelLen))]
351                         System::String^         label;          //< parameter label
352                 VstParameterFlags flags;                                //< @see VstParameterFlags
353                 System::Int32 minInteger;               //< integer minimum
354                 System::Int32 maxInteger;               //< integer maximum
355                 System::Int32 stepInteger;              //< integer step
356                 System::Int32 largeStepInteger; //< large integer step
357                 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValTStr, SizeConst=safe_cast<System::Int32>(VstStringConstants::kVstMaxShortLabelLen))]
358                         System::String^         shortLabel;             //< short label, recommended: 6 + delimiter
359
360                 // The following are for remote controller display purposes.
361                 // Note that the kVstParameterSupportsDisplayIndex flag must be set.
362                 // Host can scan all parameters, and find out in what order
363                 // to display them:
364
365                 System::Int16 displayIndex;             //< index where this parameter should be displayed (starting with 0)
366
367                 // Host can also possibly display the parameter group (category), such as...
368                 // ---------------------------
369                 // Osc 1
370                 // Wave  Detune  Octave  Mod
371                 // ---------------------------
372                 // ...if the plug-in supports it (flag #kVstParameterSupportsDisplayCategory)
373
374                 System::Int16 category;                 //< 0: no category, else group index + 1
375                 System::Int16 numParametersInCategory;                  //< number of parameters in category
376                 System::Int16 reserved;                 //< zero
377                 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValTStr, SizeConst=safe_cast<System::Int32>(VstStringConstants::kVstMaxCategLabelLen))]
378                         System::String^         categoryLabel;          //< category label, e.g. "Osc 1" 
379
380                 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValArray, SizeConst=16)]
381                         array<System::Char>^ future;    //< reserved for future use
382         //-------------------------------------------------------------------------------------------------------
383         };
384
385
386         //-------------------------------------------------------------------------------------------------------
387         /** Speaker Arrangement Types*/
388         //-------------------------------------------------------------------------------------------------------
389         public enum class VstSpeakerArrangementType: System::Int32
390         {
391         //-------------------------------------------------------------------------------------------------------
392                 kSpeakerArrUserDefined = -2,//< user defined
393                 kSpeakerArrEmpty = -1,          //< empty arrangement
394                 kSpeakerArrMono  =  0,          //< M
395                 kSpeakerArrStereo,                      //< L R
396                 kSpeakerArrStereoSurround,      //< Ls Rs
397                 kSpeakerArrStereoCenter,        //< Lc Rc
398                 kSpeakerArrStereoSide,          //< Sl Sr
399                 kSpeakerArrStereoCLfe,          //< C Lfe
400                 kSpeakerArr30Cine,                      //< L R C
401                 kSpeakerArr30Music,                     //< L R S
402                 kSpeakerArr31Cine,                      //< L R C Lfe
403                 kSpeakerArr31Music,                     //< L R Lfe S
404                 kSpeakerArr40Cine,                      //< L R C   S (LCRS)
405                 kSpeakerArr40Music,                     //< L R Ls  Rs (Quadro)
406                 kSpeakerArr41Cine,                      //< L R C   Lfe S (LCRS+Lfe)
407                 kSpeakerArr41Music,                     //< L R Lfe Ls Rs (Quadro+Lfe)
408                 kSpeakerArr50,                          //< L R C Ls  Rs 
409                 kSpeakerArr51,                          //< L R C Lfe Ls Rs
410                 kSpeakerArr60Cine,                      //< L R C   Ls  Rs Cs
411                 kSpeakerArr60Music,                     //< L R Ls  Rs  Sl Sr 
412                 kSpeakerArr61Cine,                      //< L R C   Lfe Ls Rs Cs
413                 kSpeakerArr61Music,                     //< L R Lfe Ls  Rs Sl Sr 
414                 kSpeakerArr70Cine,                      //< L R C Ls  Rs Lc Rc 
415                 kSpeakerArr70Music,                     //< L R C Ls  Rs Sl Sr
416                 kSpeakerArr71Cine,                      //< L R C Lfe Ls Rs Lc Rc
417                 kSpeakerArr71Music,                     //< L R C Lfe Ls Rs Sl Sr
418                 kSpeakerArr80Cine,                      //< L R C Ls  Rs Lc Rc Cs
419                 kSpeakerArr80Music,                     //< L R C Ls  Rs Cs Sl Sr
420                 kSpeakerArr81Cine,                      //< L R C Lfe Ls Rs Lc Rc Cs
421                 kSpeakerArr81Music,                     //< L R C Lfe Ls Rs Cs Sl Sr 
422                 kSpeakerArr102,                         //< L R C Lfe Ls Rs Tfl Tfc Tfr Trl Trr Lfe2
423                 kNumSpeakerArr
424         //-------------------------------------------------------------------------------------------------------
425         };
426
427         //-------------------------------------------------------------------------------------------------------
428         /** Pin Properties used in #effGetInputProperties and #effGetOutputProperties. */
429         //-------------------------------------------------------------------------------------------------------
430         WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstPinProperties
431         {
432         public:
433                 [System::FlagsAttribute]
434                 enum class VstPinPropertiesFlags: System::Int32
435                 {
436                 //-------------------------------------------------------------------------------------------------------
437                         kVstPinIsActive   = 1 << 0,             //< pin is active, ignored by Host
438                         kVstPinIsStereo   = 1 << 1,             //< pin is first of a stereo pair
439                         kVstPinUseSpeaker = 1 << 2              //< #VstPinProperties::arrangementType is valid and can be used to get the wanted arrangement
440                 //-------------------------------------------------------------------------------------------------------
441                 };
442         
443         //-------------------------------------------------------------------------------------------------------
444         public:
445                 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValTStr, SizeConst=safe_cast<System::Int32>(VstStringConstants::kVstMaxLabelLen))]
446                         System::String^                 label;                          //< pin name
447                 VstPinPropertiesFlags           flags;                          //< @see VstPinPropertiesFlags
448                 VstSpeakerArrangementType       arrangementType;        //< @see VstSpeakerArrangementType
449                 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValTStr, SizeConst=safe_cast<System::Int32>(VstStringConstants::kVstMaxShortLabelLen))]
450                         System::String^                 shortLabel;                     //< short name (recommended: 6 + delimiter)
451
452                 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValArray, SizeConst=48)]
453                         array<System::Char>^    future;                         //< reserved for future use
454         //-------------------------------------------------------------------------------------------------------
455         };
456
457         //-------------------------------------------------------------------------------------------------------
458         // VstEvent
459         //-------------------------------------------------------------------------------------------------------
460         //-------------------------------------------------------------------------------------------------------
461         /** A generic timestamped event. */
462         //-------------------------------------------------------------------------------------------------------
463         WIN32_DLL_STRUCTLAYOUT_UNION_ANSI
464         //WIN32_DLL_STRUCTLAYOUT_ANSI
465         public value struct VstEvent
466         {
467         public:
468                 //-------------------------------------------------------------------------------------------------------
469                 /** VstEvent Types used by #VstEvent. */
470                 //-------------------------------------------------------------------------------------------------------
471                 enum class VstEventTypes: System::Int32
472                 {
473                 //-------------------------------------------------------------------------------------------------------
474                         kVstMidiType = 1,                                       //< MIDI event  @see VstMidiEvent
475                                 kVstAudioTypeDeprecated,                //< \deprecated unused event type
476                                 kVstVideoTypeDeprecated,                //< \deprecated unused event type
477                                 kVstParameterTypeDeprecated,    //< \deprecated unused event type
478                                 kVstTriggerTypeDeprecated,              //< \deprecated unused event type
479                         kVstSysExType                                           //< MIDI system exclusive  @see VstMidiSysexEvent
480                 //-------------------------------------------------------------------------------------------------------
481                 };
482
483                 //-------------------------------------------------------------------------------------------------------
484                 /** Flags used in #VstMidiEvent. */
485                 //-------------------------------------------------------------------------------------------------------
486                 enum class VstMidiEventFlags: System::Int32
487                 {
488                 //-------------------------------------------------------------------------------------------------------
489                         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)
490                 //-------------------------------------------------------------------------------------------------------
491                 };
492
493         //-------------------------------------------------------------------------------------------------------
494         public:
495 /*              VstEvent()
496                 {
497                         this->byteSize = 
498                                 InteropServices::Marshal::SizeOf(this)
499                                 - (
500                                         4 //InteropServices::Marshal::SizeOf(this->type)
501                                         + 4 //InteropServices::Marshal::SizeOf(this->byteSize)
502                                 );
503                 }
504 */
505         public:
506                 [InteropServices::FieldOffset(0)]       VstEventTypes type;                     //< @see VstEventTypes
507                 [InteropServices::FieldOffset(4)]       System::Int32 byteSize;         //< size of this event, excl. type and byteSize
508                 [InteropServices::FieldOffset(8)]       System::Int32 deltaFrames;      //< sample frames related to the current block start sample position
509                 [InteropServices::FieldOffset(12)]      System::Int32 _flags;           //< generic flags, none defined yet
510
511                 //** VstMidiEvent **
512                 [InteropServices::FieldOffset(12)]      VstMidiEventFlags       flags;          //< @see VstMidiEventFlags
513                 [InteropServices::FieldOffset(16)]      System::Int32   noteLength;             //< (in sample frames) of entire note, if available, else 0
514                 [InteropServices::FieldOffset(20)]      System::Int32   noteOffset;             //< offset (in sample frames) into note from note start if available, else 0
515                 [InteropServices::FieldOffset(24)]      System::Int32   midiData;               //< 1 to 3 MIDI bytes; midiData[3] is reserved (zero)
516                 [InteropServices::FieldOffset(24)]      System::Byte    midiData0;              //< 1 to 3 MIDI bytes; midiData[3] is reserved (zero)
517                 [InteropServices::FieldOffset(25)]      System::Byte    midiData1;
518                 [InteropServices::FieldOffset(26)]      System::Byte    midiData2;
519                 [InteropServices::FieldOffset(27)]      System::Byte    midiData3;
520                 [InteropServices::FieldOffset(28)]      System::Byte    detune;                 //< -64 to +63 cents; for scales other than 'well-tempered' ('microtuning')
521                 [InteropServices::FieldOffset(29)]      System::Byte    noteOffVelocity;//< Note Off Velocity [0, 127]
522                 [InteropServices::FieldOffset(30)]      System::Byte    reserved1;              //< zero (Reserved for future use)
523                 [InteropServices::FieldOffset(31)]      System::Byte    reserved2;              //< zero (Reserved for future use)
524
525                 //** VstMidiSysexEvent ** //TODO: 64bitに対応してない
526                 [InteropServices::FieldOffset(16)]      System::Int32   dumpBytes;      //< byte size of sysexDump
527                 [InteropServices::FieldOffset(20)]      System::IntPtr  resvd1;         //< zero (Reserved for future use)
528                 [InteropServices::FieldOffset(24)]      System::IntPtr  sysexDump;      //< sysex dump
529                 [InteropServices::FieldOffset(28)]      System::IntPtr  resvd2;         //< zero (Reserved for future use)
530         //-------------------------------------------------------------------------------------------------------
531
532                 virtual System::String^ ToString() override
533                 {
534                         if (type == VstEventTypes::kVstMidiType) {
535                                 return 
536                                         "type["+type.ToString("F")+"] byteSize["+byteSize+"] deltaFrames["+deltaFrames+"] flags["+flags.ToString("F")+"] noteLength["+noteLength+" noteOffset["+noteOffset+"] midiData["+midiData.ToString("X8")+":"+midiData0.ToString("X2")+":"+midiData1.ToString("X2")+":"+midiData2.ToString("X2")+":"+midiData3.ToString("X2")+"] detune["+detune+"] noteOffVelocity["+noteOffVelocity+"]";
537                         } else if (type == VstEventTypes::kVstSysExType) {
538                                 return 
539                                         "type["+type.ToString("F")+"] byteSize["+byteSize+"] deltaFrames["+deltaFrames+"] _flags["+_flags+"] dumpBytes["+dumpBytes+" sysexDump["+sysexDump+"]";
540                         } else {
541                                 return 
542                                         "type["+type.ToString("F")+"] byteSize["+byteSize+"] deltaFrames["+deltaFrames+"] _flags["+_flags+"]";
543                         }
544                 }
545         };
546
547
548         //-------------------------------------------------------------------------------------------------------
549         /** A block of events for the current processed audio block. */
550         //-------------------------------------------------------------------------------------------------------
551         WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstEvents
552         {
553         //-------------------------------------------------------------------------------------------------------
554         public:
555                 System::Int32   numEvents;              //< number of Events in array
556                 System::IntPtr  reserved;               //< zero (Reserved for future use)
557                 //System::IntPtr        events;                 //VstEvent* events[2];  ///< event pointer array, variable size
558         //-------------------------------------------------------------------------------------------------------
559         };
560
561         //-------------------------------------------------------------------------------------------------------
562         // VstTimeInfo
563         //-------------------------------------------------------------------------------------------------------
564         //-------------------------------------------------------------------------------------------------------
565         /** VstTimeInfo requested via #audioMasterGetTime.  @see AudioEffectX::getTimeInfo 
566
567         \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.
568         \note VstTimeInfo::ppqPos : At tempo 120, 1 quarter makes 1/2 second, so 2.0 ppq translates to 48000 samples at 48kHz sample rate.
569         .25 ppq is one sixteenth note then. if you need something like 480ppq, you simply multiply ppq by that scaler.
570         \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 :-). 
571         \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.
572         */
573         //-------------------------------------------------------------------------------------------------------
574         WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstTimeInfo
575         {
576         public:
577                 //-------------------------------------------------------------------------------------------------------
578                 /** Flags used in #VstTimeInfo. */
579                 //-------------------------------------------------------------------------------------------------------
580                 [System::FlagsAttribute]
581                 enum class VstTimeInfoFlags: System::Int32
582                 {
583                 //-------------------------------------------------------------------------------------------------------
584                         kVstTransportChanged     = 1,           ///< indicates that play, cycle or record state has changed
585                         kVstTransportPlaying     = 1 << 1,      ///< set if Host sequencer is currently playing
586                         kVstTransportCycleActive = 1 << 2,      ///< set if Host sequencer is in cycle mode
587                         kVstTransportRecording   = 1 << 3,      ///< set if Host sequencer is in record mode
588                         kVstAutomationWriting    = 1 << 6,      ///< set if automation write mode active (record parameter changes)
589                         kVstAutomationReading    = 1 << 7,      ///< set if automation read mode active (play parameter changes)
590                         kVstNanosValid           = 1 << 8,      ///< VstTimeInfo::nanoSeconds valid
591                         kVstPpqPosValid          = 1 << 9,      ///< VstTimeInfo::ppqPos valid
592                         kVstTempoValid           = 1 << 10,     ///< VstTimeInfo::tempo valid
593                         kVstBarsValid            = 1 << 11,     ///< VstTimeInfo::barStartPos valid
594                         kVstCyclePosValid        = 1 << 12,     ///< VstTimeInfo::cycleStartPos and VstTimeInfo::cycleEndPos valid
595                         kVstTimeSigValid         = 1 << 13,     ///< VstTimeInfo::timeSigNumerator and VstTimeInfo::timeSigDenominator valid
596                         kVstSmpteValid           = 1 << 14,     ///< VstTimeInfo::smpteOffset and VstTimeInfo::smpteFrameRate valid
597                         kVstClockValid           = 1 << 15      ///< VstTimeInfo::samplesToNextClock valid
598                 //-------------------------------------------------------------------------------------------------------
599                 };
600
601                 //-------------------------------------------------------------------------------------------------------
602                 /** SMPTE Frame Rates. */
603                 //-------------------------------------------------------------------------------------------------------
604                 enum class VstSmpteFrameRate: System::Int32
605                 {
606                 //-------------------------------------------------------------------------------------------------------
607                         kVstSmpte24fps    = 0,          ///< 24 fps
608                         kVstSmpte25fps    = 1,          ///< 25 fps
609                         kVstSmpte2997fps  = 2,          ///< 29.97 fps
610                         kVstSmpte30fps    = 3,          ///< 30 fps
611                         kVstSmpte2997dfps = 4,          ///< 29.97 drop
612                         kVstSmpte30dfps   = 5,          ///< 30 drop
613
614                         kVstSmpteFilm16mm = 6,          ///< Film 16mm
615                         kVstSmpteFilm35mm = 7,          ///< Film 35mm
616                         kVstSmpte239fps   = 10,         ///< HDTV: 23.976 fps
617                         kVstSmpte249fps   = 11,         ///< HDTV: 24.976 fps
618                         kVstSmpte599fps   = 12,         ///< HDTV: 59.94 fps
619                         kVstSmpte60fps    = 13          ///< HDTV: 60 fps
620                 //-------------------------------------------------------------------------------------------------------
621                 };
622
623         //-------------------------------------------------------------------------------------------------------
624         public:
625                 System::Double samplePos;                               ///< current Position in audio samples (always valid)
626                 System::Double sampleRate;                              ///< current Sample Rate in Herz (always valid)
627                 System::Double nanoSeconds;                             ///< System Time in nanoseconds (10^-9 second)
628                 System::Double ppqPos;                                  ///< Musical Position, in Quarter Note (1.0 equals 1 Quarter Note)
629                 System::Double tempo;                                   ///< current Tempo in BPM (Beats Per Minute)
630                 System::Double barStartPos;                             ///< last Bar Start Position, in Quarter Note
631                 System::Double cycleStartPos;                   ///< Cycle Start (left locator), in Quarter Note
632                 System::Double cycleEndPos;                             ///< Cycle End (right locator), in Quarter Note
633                 System::Int32 timeSigNumerator;         ///< Time Signature Numerator (e.g. 3 for 3/4)
634                 System::Int32 timeSigDenominator;       ///< Time Signature Denominator (e.g. 4 for 3/4)
635                 System::Int32 smpteOffset;                      ///< SMPTE offset (in SMPTE subframes (bits; 1/80 of a frame)). The current SMPTE position can be calculated using #samplePos, #sampleRate, and #smpteFrameRate.
636                 System::Int32 smpteFrameRate;           ///< @see VstSmpteFrameRate
637                 System::Int32 samplesToNextClock;       ///< MIDI Clock Resolution (24 Per Quarter Note), can be negative (nearest clock)
638                 VstTimeInfoFlags flags;                                 ///< @see VstTimeInfoFlags
639         //-------------------------------------------------------------------------------------------------------
640         };
641
642
643         //-------------------------------------------------------------------------------------------------------
644         /** Variable IO for Offline Processing. */
645         //-------------------------------------------------------------------------------------------------------
646         WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstVariableIo
647         {
648         //-------------------------------------------------------------------------------------------------------
649                 System::IntPtr  inputs;                                         //< float** input audio buffers
650                 System::IntPtr  outputs;                                        //< float** output audio buffers
651                 System::Int32   numSamplesInput;                        //< number of incoming samples
652                 System::Int32   numSamplesOutput;                       //< number of outgoing samples
653                 System::IntPtr  numSamplesInputProcessed;       //< System::Int32* number of samples actually processed of input
654                 System::IntPtr  numSamplesOutputProcessed;      //< System::Int32* number of samples actually processed of output
655         //-------------------------------------------------------------------------------------------------------
656         };
657
658         public value class AudioMasterCallBack
659         {
660         public:
661                 ref class AudioMasterEventArgs: System::EventArgs
662                 {
663                 public:
664                         System::IntPtr/*AEffect^*/              effect;
665                         AudioMasterOpcodes      opcode;
666                         System::Int32           index;
667                         System::IntPtr          value;
668                         System::IntPtr          ptr;
669                         System::Single          opt;
670                         System::IntPtr          returnValue;
671                 };
672
673                 VST_DLL_DELEGATE(Ansi) delegate System::IntPtr Delegate(
674                         [InteropServices::In]System::IntPtr/*AEffect^*/         effect,
675                         [InteropServices::In]AudioMasterOpcodes opcode,
676                         [InteropServices::In]System::Int32              index,
677                         [InteropServices::In]System::IntPtr             value,
678                         [InteropServices::In]System::IntPtr             ptr,
679                         [InteropServices::In]System::Single             opt
680                 );
681         };
682
683
684         VST_DLL_DELEGATE(Ansi) public delegate System::IntPtr AEffectDispatcherProc(
685                 [InteropServices::In]System::IntPtr/*AEffect^*/         effect,
686                 [InteropServices::In]AEffectOpcodes     opcode,
687                 [InteropServices::In]System::Int32      index,
688                 [InteropServices::In]System::IntPtr     value,
689                 [InteropServices::In]System::IntPtr     ptr,
690                 [InteropServices::In]System::Single     opt
691         );
692
693         VST_DLL_DELEGATE(Ansi) public delegate void AEffectProcessProc(
694                 [InteropServices::In]System::IntPtr/*AEffect^*/         effect,
695                 [InteropServices::In]System::IntPtr     inputs,
696                 [InteropServices::In]System::IntPtr     outputs,
697                 [InteropServices::In]System::Int32      sampleFrames
698         );
699
700         VST_DLL_DELEGATE(Ansi) public delegate void AEffectProcessDoubleProc(
701                 [InteropServices::In]System::IntPtr/*AEffect^*/         effect,
702                 [InteropServices::In]System::IntPtr     inputs,
703                 [InteropServices::In]System::IntPtr     outputs,
704                 [InteropServices::In]System::Int32      sampleFrames
705         );
706
707         VST_DLL_DELEGATE(Ansi) public delegate void AEffectSetParameterProc(
708                 [InteropServices::In]System::IntPtr/*AEffect^*/         effect,
709                 [InteropServices::In]System::Int32      index,
710                 [InteropServices::In]System::Single     parameter
711         );
712
713         VST_DLL_DELEGATE(Ansi) public delegate System::Single AEffectGetParameterProc(
714                 [InteropServices::In]System::IntPtr/*AEffect^*/         effect,
715                 [InteropServices::In]System::Int32      index
716         );
717
718         VST_DLL_DELEGATE(Ansi) public delegate System::IntPtr VSTPluginMain(
719                 [InteropServices::In][InteropServices::MarshalAs(InteropServices::UnmanagedType::FunctionPtr)]
720                         AudioMasterCallBack::Delegate^  audioMaster
721         );
722
723
724 }
725 }
726 }