2 [momiji music component library]
3 ---------------------------------------------------------------------
6 ---------------------------------------------------------------------
7 Copyright (C) 2011 tyiki badwell {miria@users.sourceforge.jp}.
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.
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.
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 ---------------------------------------------------------------------
27 using namespace System::Runtime;
33 #define VST_DLL_DELEGATE(_charset_) [InteropServices::UnmanagedFunctionPointerAttribute(InteropServices::CallingConvention::Cdecl, CharSet = InteropServices::CharSet::##_charset_##, SetLastError = false)]
35 //-------------------------------------------------------------------------------------------------------
37 //-------------------------------------------------------------------------------------------------------
38 [System::FlagsAttribute]
39 public enum class VstAEffectFlags: System::Int32
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
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 //-------------------------------------------------------------------------------------------------------
57 //-------------------------------------------------------------------------------------------------------
58 /** String length limits (in characters excl. 0 byte) */
59 //-------------------------------------------------------------------------------------------------------
60 public enum class VstStringConstants: System::Int32
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 //-------------------------------------------------------------------------------------------------------
76 WIN32_DLL_STRUCTLAYOUT_ANSI public ref struct AEffect
79 //-------------------------------------------------------------------------------------------------------
80 System::Int32 magic; //< must be #kEffectMagic ('VstP')
82 /** Host to Plug-in dispatcher @see AudioEffect::dispatcher */
83 System::IntPtr dispatcher;
85 /** \deprecated Accumulating process mode is deprecated in VST 2.4! Use AEffect::processReplacing instead! */
86 System::IntPtr processDeprecated;
88 /** Set new value of automatable parameter @see AudioEffect::setParameter */
89 System::IntPtr setParameter;
91 /** Returns current value of automatable parameter @see AudioEffect::getParameter*/
92 System::IntPtr getParameter;
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
99 VstAEffectFlags flags; //< @see VstAEffectFlags
101 System::IntPtr resvd1; //< reserved for Host, must be 0
102 System::IntPtr resvd2; //< reserved for Host, must be 0
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.
106 System::Int32 realQualitiesDeprecated; //< \deprecated unused member
107 System::Int32 offQualitiesDeprecated; //< \deprecated unused member
108 System::Single ioRatioDeprecated; //< \deprecated unused member
110 System::IntPtr object; //< #AudioEffect class pointer
111 System::IntPtr user; //< user-defined pointer
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)
116 /** Process audio samples in replacing mode @see AudioEffect::processReplacing */
117 System::IntPtr processReplacing;
119 /** Process double-precision audio samples in replacing mode @see AudioEffect::processDoubleReplacing */
120 System::IntPtr processDoubleReplacing;
122 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValArray, SizeConst=56)]
123 array<System::Char>^ future; //< reserved for future use (please zero)
124 //-------------------------------------------------------------------------------------------------------
127 //-------------------------------------------------------------------------------------------------------
128 /** Basic dispatcher Opcodes (Host to Plug-in) */
129 //-------------------------------------------------------------------------------------------------------
130 public enum class AEffectOpcodes: System::Int32
132 effOpen = 0, ///< no arguments @see AudioEffect::open
133 effClose, ///< no arguments @see AudioEffect::close
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
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
144 effGetVuDeprecated, ///< \deprecated deprecated in VST 2.4
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
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
154 effEditDrawDeprecated, ///< \deprecated deprecated in VST 2.4
155 effEditMouseDeprecated, ///< \deprecated deprecated in VST 2.4
156 effEditKeyDeprecated, ///< \deprecated deprecated in VST 2.4
158 effEditIdle, ///< no arguments @see AEffEditor::idle
160 effEditTopDeprecated, ///< \deprecated deprecated in VST 2.4
161 effEditSleepDeprecated, ///< \deprecated deprecated in VST 2.4
162 effIdentifyDeprecated, ///< \deprecated deprecated in VST 2.4
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
167 effProcessEvents, ///< [ptr]: #VstEvents* @see AudioEffectX::processEvents
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
172 effGetNumProgramCategoriesDeprecated, ///< \deprecated deprecated in VST 2.4
174 effGetProgramNameIndexed, ///< [index]: program index [ptr]: buffer for program name, limited to #kVstMaxProgNameLen [return value]: true for success @see AudioEffectX::getProgramNameIndexed
176 effCopyProgramDeprecated, ///< \deprecated deprecated in VST 2.4
177 effConnectInputDeprecated, ///< \deprecated deprecated in VST 2.4
178 effConnectOutputDeprecated, ///< \deprecated deprecated in VST 2.4
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
184 effGetCurrentPositionDeprecated, ///< \deprecated deprecated in VST 2.4
185 effGetDestinationBufferDeprecated, ///< \deprecated deprecated in VST 2.4
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
191 effProcessVarIo, ///< [ptr]: #VstVariableIo* @see AudioEffectX::processVariableIo
192 effSetSpeakerArrangement, ///< [value]: input #VstSpeakerArrangement* [ptr]: output #VstSpeakerArrangement* @see AudioEffectX::setSpeakerArrangement
194 effSetBlockSizeAndSampleRateDeprecated, ///< \deprecated deprecated in VST 2.4
196 effSetBypass, ///< [value]: 1 = bypass, 0 = no bypass @see AudioEffectX::setBypass
197 effGetEffectName, ///< [ptr]: buffer for effect name, limited to #kVstMaxEffectNameLen @see AudioEffectX::getEffectName
199 effGetErrorTextDeprecated, ///< \deprecated deprecated in VST 2.4
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')
208 effIdleDeprecated, ///< \deprecated deprecated in VST 2.4
209 effGetIconDeprecated, ///< \deprecated deprecated in VST 2.4
210 effSetViewPositionDeprecated, ///< \deprecated deprecated in VST 2.4
212 effGetParameterProperties, ///< [index]: parameter index [ptr]: #VstParameterProperties* [return value]: 1 if supported @see AudioEffectX::getParameterProperties
214 effKeysRequiredDeprecated, ///< \deprecated deprecated in VST 2.4
216 effGetVstVersion, ///< [return value]: VST version @see AudioEffectX::getVstVersion
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
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
228 effBeginSetProgram, ///< no arguments @see AudioEffectX::beginSetProgram
229 effEndSetProgram, ///< no arguments @see AudioEffectX::endSetProgram
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
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
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
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
247 //-------------------------------------------------------------------------------------------------------
248 /** Basic dispatcher Opcodes (Plug-in to Host) */
249 //-------------------------------------------------------------------------------------------------------
250 public enum class AudioMasterOpcodes: System::Int32
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
259 audioMasterDeprecated,
260 audioMasterWantMidiDeprecated, ///< \deprecated deprecated in VST 2.4
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
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
270 audioMasterIOChanged, ///< [return value]: 1 if supported @see AudioEffectX::ioChanged
272 audioMasterNeedIdleDeprecated, ///< \deprecated deprecated in VST 2.4
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
280 audioMasterGetPreviousPlugDeprecated, ///< \deprecated deprecated in VST 2.4
281 audioMasterGetNextPlugDeprecated, ///< \deprecated deprecated in VST 2.4
282 audioMasterWillReplaceOrAccumulateDeprecated, ///< \deprecated deprecated in VST 2.4
284 audioMasterGetCurrentProcessLevel, ///< [return value]: current process level @see VstProcessLevels
285 audioMasterGetAutomationState, ///< [return value]: current automation state @see VstAutomationStates
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
293 audioMasterSetOutputSampleRateDeprecated, ///< \deprecated deprecated in VST 2.4
294 audioMasterGetOutputSpeakerArrangementDeprecated, ///< \deprecated deprecated in VST 2.4
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
301 audioMasterSetIconDeprecated, ///< \deprecated deprecated in VST 2.4
303 audioMasterCanDo, ///< [ptr]: "can do" string [return value]: 1 for supported
304 audioMasterGetLanguage, ///< [return value]: language code @see VstHostLanguage
306 audioMasterOpenWindowDeprecated, ///< \deprecated deprecated in VST 2.4
307 audioMasterCloseWindowDeprecated, ///< \deprecated deprecated in VST 2.4
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
316 audioMasterEditFileDeprecated, ///< \deprecated deprecated in VST 2.4
318 audioMasterGetChunkFileDeprecated, ///< \deprecated deprecated in VST 2.4 [ptr]: char[2048] or sizeof (FSSpec) [return value]: 1 if supported @see AudioEffectX::getChunkFile
320 audioMasterGetInputSpeakerArrangementDeprecated, ///< \deprecated deprecated in VST 2.4
322 //-------------------------------------------------------------------------------------------------------
325 //-------------------------------------------------------------------------------------------------------
326 /** Parameter Properties used in #effGetParameterProperties. */
327 //-------------------------------------------------------------------------------------------------------
328 WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstParameterProperties
331 [System::FlagsAttribute]
332 enum class VstParameterFlags: System::Int32
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 //-------------------------------------------------------------------------------------------------------
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
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
365 System::Int16 displayIndex; //< index where this parameter should be displayed (starting with 0)
367 // Host can also possibly display the parameter group (category), such as...
368 // ---------------------------
370 // Wave Detune Octave Mod
371 // ---------------------------
372 // ...if the plug-in supports it (flag #kVstParameterSupportsDisplayCategory)
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"
380 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValArray, SizeConst=16)]
381 array<System::Char>^ future; //< reserved for future use
382 //-------------------------------------------------------------------------------------------------------
386 //-------------------------------------------------------------------------------------------------------
387 /** Speaker Arrangement Types*/
388 //-------------------------------------------------------------------------------------------------------
389 public enum class VstSpeakerArrangementType: System::Int32
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
424 //-------------------------------------------------------------------------------------------------------
427 //-------------------------------------------------------------------------------------------------------
428 /** Pin Properties used in #effGetInputProperties and #effGetOutputProperties. */
429 //-------------------------------------------------------------------------------------------------------
430 WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstPinProperties
433 [System::FlagsAttribute]
434 enum class VstPinPropertiesFlags: System::Int32
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 //-------------------------------------------------------------------------------------------------------
443 //-------------------------------------------------------------------------------------------------------
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)
452 [InteropServices::MarshalAs(InteropServices::UnmanagedType::ByValArray, SizeConst=48)]
453 array<System::Char>^ future; //< reserved for future use
454 //-------------------------------------------------------------------------------------------------------
457 //-------------------------------------------------------------------------------------------------------
459 //-------------------------------------------------------------------------------------------------------
460 //-------------------------------------------------------------------------------------------------------
461 /** A generic timestamped event. */
462 //-------------------------------------------------------------------------------------------------------
463 WIN32_DLL_STRUCTLAYOUT_UNION_ANSI
464 //WIN32_DLL_STRUCTLAYOUT_ANSI
465 public value struct VstEvent
468 //-------------------------------------------------------------------------------------------------------
469 /** VstEvent Types used by #VstEvent. */
470 //-------------------------------------------------------------------------------------------------------
471 enum class VstEventTypes: System::Int32
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 //-------------------------------------------------------------------------------------------------------
483 //-------------------------------------------------------------------------------------------------------
484 /** Flags used in #VstMidiEvent. */
485 //-------------------------------------------------------------------------------------------------------
486 enum class VstMidiEventFlags: System::Int32
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 //-------------------------------------------------------------------------------------------------------
493 //-------------------------------------------------------------------------------------------------------
498 InteropServices::Marshal::SizeOf(this)
500 4 //InteropServices::Marshal::SizeOf(this->type)
501 + 4 //InteropServices::Marshal::SizeOf(this->byteSize)
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
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)
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 //-------------------------------------------------------------------------------------------------------
532 virtual System::String^ ToString() override
534 if (type == VstEventTypes::kVstMidiType) {
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) {
539 "type["+type.ToString("F")+"] byteSize["+byteSize+"] deltaFrames["+deltaFrames+"] _flags["+_flags+"] dumpBytes["+dumpBytes+" sysexDump["+sysexDump+"]";
542 "type["+type.ToString("F")+"] byteSize["+byteSize+"] deltaFrames["+deltaFrames+"] _flags["+_flags+"]";
548 //-------------------------------------------------------------------------------------------------------
549 /** A block of events for the current processed audio block. */
550 //-------------------------------------------------------------------------------------------------------
551 WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstEvents
553 //-------------------------------------------------------------------------------------------------------
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 //-------------------------------------------------------------------------------------------------------
561 //-------------------------------------------------------------------------------------------------------
563 //-------------------------------------------------------------------------------------------------------
564 //-------------------------------------------------------------------------------------------------------
565 /** VstTimeInfo requested via #audioMasterGetTime. @see AudioEffectX::getTimeInfo
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.
573 //-------------------------------------------------------------------------------------------------------
574 WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstTimeInfo
577 //-------------------------------------------------------------------------------------------------------
578 /** Flags used in #VstTimeInfo. */
579 //-------------------------------------------------------------------------------------------------------
580 [System::FlagsAttribute]
581 enum class VstTimeInfoFlags: System::Int32
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 //-------------------------------------------------------------------------------------------------------
601 //-------------------------------------------------------------------------------------------------------
602 /** SMPTE Frame Rates. */
603 //-------------------------------------------------------------------------------------------------------
604 enum class VstSmpteFrameRate: System::Int32
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
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 //-------------------------------------------------------------------------------------------------------
623 //-------------------------------------------------------------------------------------------------------
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 //-------------------------------------------------------------------------------------------------------
643 //-------------------------------------------------------------------------------------------------------
644 /** Variable IO for Offline Processing. */
645 //-------------------------------------------------------------------------------------------------------
646 WIN32_DLL_STRUCTLAYOUT_ANSI public value struct VstVariableIo
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 //-------------------------------------------------------------------------------------------------------
658 public value class AudioMasterCallBack
661 ref class AudioMasterEventArgs: System::EventArgs
664 System::IntPtr/*AEffect^*/ effect;
665 AudioMasterOpcodes opcode;
667 System::IntPtr value;
670 System::IntPtr returnValue;
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
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
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
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
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
713 VST_DLL_DELEGATE(Ansi) public delegate System::Single AEffectGetParameterProc(
714 [InteropServices::In]System::IntPtr/*AEffect^*/ effect,
715 [InteropServices::In]System::Int32 index
718 VST_DLL_DELEGATE(Ansi) public delegate System::IntPtr VSTPluginMain(
719 [InteropServices::In][InteropServices::MarshalAs(InteropServices::UnmanagedType::FunctionPtr)]
720 AudioMasterCallBack::Delegate^ audioMaster