1 /**
2 * Translation of the VST SDK.
3 * Copyright: Steinberg.
4 * License: To use this file you MUST agree with the Steinberg VST license included in the VST SDK.
5 * Authors: D translation by Guillaume Piolat.
6 */
7 module dplug.vst.aeffectx;
8
9 import dplug.vst.aeffect;
10
11 align(8):
12
13 /// String length limits (in characters excl. 0 byte).
14 alias int Vst2StringConstants;
15 enum : Vst2StringConstants
16 {
17 kVstMaxNameLen = 64, /// used for #MidiProgramName, #MidiProgramCategory, #MidiKeyName, #VstSpeakerProperties, #VstPinProperties
18 kVstMaxLabelLen = 64, /// used for #VstParameterProperties->label, #VstPinProperties->label
19 kVstMaxShortLabelLen = 8, /// used for #VstParameterProperties->shortLabel, #VstPinProperties->shortLabel
20 kVstMaxCategLabelLen = 24, /// used for #VstParameterProperties->label
21 kVstMaxFileNameLen = 100 /// used for #VstAudioFile->name
22 }
23
24 /// A generic timestamped event.
25 struct VstEvent
26 {
27 VstInt32 type; ///< @see VstEventTypes
28 VstInt32 byteSize; ///< size of this event, excl. type and byteSize
29 VstInt32 deltaFrames; ///< sample frames related to the current block start sample position
30 VstInt32 flags; ///< generic flags, none defined yet
31
32 char[16] data; ///< data size may vary, depending on event type
33 }
34
35 /// VstEvent Types used by #VstEvent.
36 alias int VstEventTypes;
37 enum : VstEventTypes
38 {
39 kVstMidiType = 1, ///< MIDI event @see VstMidiEvent
40 DEPRECATED_kVstAudioType, ///< \deprecated unused event type
41 DEPRECATED_kVstVideoType, ///< \deprecated unused event type
42 DEPRECATED_kVstParameterType, ///< \deprecated unused event type
43 DEPRECATED_kVstTriggerType, ///< \deprecated unused event type
44 kVstSysExType ///< MIDI system exclusive @see VstMidiSysexEvent
45 }
46
47 /// A block of events for the current processed audio block.
48 struct VstEvents
49 {
50 VstInt32 numEvents; ///< number of Events in array
51 VstIntPtr reserved; ///< zero (Reserved for future use)
52 VstEvent*[2] events; ///< event pointer array, variable size
53 }
54
55 /// MIDI Event (to be casted from VstEvent).
56 struct VstMidiEvent
57 {
58 VstInt32 type; ///< #kVstMidiType
59 VstInt32 byteSize; ///< sizeof (VstMidiEvent)
60 VstInt32 deltaFrames; ///< sample frames related to the current block start sample position
61 VstInt32 flags; ///< @see VstMidiEventFlags
62 VstInt32 noteLength; ///< (in sample frames) of entire note, if available, else 0
63 VstInt32 noteOffset; ///< offset (in sample frames) into note from note start if available, else 0
64 char[4] midiData; ///< 1 to 3 MIDI bytes; midiData[3] is reserved (zero)
65 char detune; ///< -64 to +63 cents; for scales other than 'well-tempered' ('microtuning')
66 char noteOffVelocity; ///< Note Off Velocity [0, 127]
67 char reserved1; ///< zero (Reserved for future use)
68 char reserved2; ///< zero (Reserved for future use)
69 }
70
71 /// Flags used in #VstMidiEvent.
72 alias int VstMidiEventFlags;
73 enum : VstMidiEventFlags
74 {
75 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)
76 }
77
78 /// MIDI Sysex Event (to be casted from #VstEvent).
79 struct VstMidiSysexEvent
80 {
81 VstInt32 type; ///< #kVstSysexType
82 VstInt32 byteSize; ///< sizeof (VstMidiSysexEvent)
83 VstInt32 deltaFrames; ///< sample frames related to the current block start sample position
84 VstInt32 flags; ///< none defined yet (should be zero)
85 VstInt32 dumpBytes; ///< byte size of sysexDump
86 VstIntPtr resvd1; ///< zero (Reserved for future use)
87 char* sysexDump; ///< sysex dump
88 VstIntPtr resvd2; ///< zero (Reserved for future use)
89 }
90
91 //-------------------------------------------------------------------------------------------------------
92 // VstTimeInfo
93 //-------------------------------------------------------------------------------------------------------
94 //-------------------------------------------------------------------------------------------------------
95 /** VstTimeInfo requested via #audioMasterGetTime. @see AudioEffectX::getTimeInfo
96
97 \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.
98 \note VstTimeInfo::ppqPos : At tempo 120, 1 quarter makes 1/2 second, so 2.0 ppq translates to 48000 samples at 48kHz sample rate.
99 .25 ppq is one sixteenth note then. if you need something like 480ppq, you simply multiply ppq by that scaler.
100 \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 :-).
101 \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.
102 */
103 //-------------------------------------------------------------------------------------------------------
104 struct VstTimeInfo
105 {
106 double samplePos; ///< current Position in audio samples (always valid)
107 double sampleRate; ///< current Sample Rate in Herz (always valid)
108 double nanoSeconds; ///< System Time in nanoseconds (10^-9 second)
109 double ppqPos; ///< Musical Position, in Quarter Note (1.0 equals 1 Quarter Note)
110 double tempo; ///< current Tempo in BPM (Beats Per Minute)
111 double barStartPos; ///< last Bar Start Position, in Quarter Note
112 double cycleStartPos; ///< Cycle Start (left locator), in Quarter Note
113 double cycleEndPos; ///< Cycle End (right locator), in Quarter Note
114 VstInt32 timeSigNumerator; ///< Time Signature Numerator (e.g. 3 for 3/4)
115 VstInt32 timeSigDenominator; ///< Time Signature Denominator (e.g. 4 for 3/4)
116 VstInt32 smpteOffset; ///< SMPTE offset (in SMPTE subframes (bits; 1/80 of a frame)). The current SMPTE position can be calculated using #samplePos, #sampleRate, and #smpteFrameRate.
117 VstInt32 smpteFrameRate; ///< @see VstSmpteFrameRate
118 VstInt32 samplesToNextClock; ///< MIDI Clock Resolution (24 Per Quarter Note), can be negative (nearest clock)
119 VstInt32 flags; ///< @see VstTimeInfoFlags
120 }
121
122 /// Flags used in #VstTimeInfo.
123 alias int VstTimeInfoFlags;
124 enum : VstTimeInfoFlags
125 {
126 kVstTransportChanged = 1, ///< indicates that play, cycle or record state has changed
127 kVstTransportPlaying = 1 << 1, ///< set if Host sequencer is currently playing
128 kVstTransportCycleActive = 1 << 2, ///< set if Host sequencer is in cycle mode
129 kVstTransportRecording = 1 << 3, ///< set if Host sequencer is in record mode
130 kVstAutomationWriting = 1 << 6, ///< set if automation write mode active (record parameter changes)
131 kVstAutomationReading = 1 << 7, ///< set if automation read mode active (play parameter changes)
132 kVstNanosValid = 1 << 8, ///< VstTimeInfo::nanoSeconds valid
133 kVstPpqPosValid = 1 << 9, ///< VstTimeInfo::ppqPos valid
134 kVstTempoValid = 1 << 10, ///< VstTimeInfo::tempo valid
135 kVstBarsValid = 1 << 11, ///< VstTimeInfo::barStartPos valid
136 kVstCyclePosValid = 1 << 12, ///< VstTimeInfo::cycleStartPos and VstTimeInfo::cycleEndPos valid
137 kVstTimeSigValid = 1 << 13, ///< VstTimeInfo::timeSigNumerator and VstTimeInfo::timeSigDenominator valid
138 kVstSmpteValid = 1 << 14, ///< VstTimeInfo::smpteOffset and VstTimeInfo::smpteFrameRate valid
139 kVstClockValid = 1 << 15 ///< VstTimeInfo::samplesToNextClock valid
140 }
141
142 //-------------------------------------------------------------------------------------------------------
143 /** SMPTE Frame Rates. */
144 //-------------------------------------------------------------------------------------------------------
145 alias int VstSmpteFrameRate;
146 enum : VstSmpteFrameRate
147 {
148 //-------------------------------------------------------------------------------------------------------
149 kVstSmpte24fps = 0, ///< 24 fps
150 kVstSmpte25fps = 1, ///< 25 fps
151 kVstSmpte2997fps = 2, ///< 29.97 fps
152 kVstSmpte30fps = 3, ///< 30 fps
153 kVstSmpte2997dfps = 4, ///< 29.97 drop
154 kVstSmpte30dfps = 5, ///< 30 drop
155
156 kVstSmpteFilm16mm = 6, ///< Film 16mm
157 kVstSmpteFilm35mm = 7, ///< Film 35mm
158 kVstSmpte239fps = 10, ///< HDTV: 23.976 fps
159 kVstSmpte249fps = 11, ///< HDTV: 24.976 fps
160 kVstSmpte599fps = 12, ///< HDTV: 59.94 fps
161 kVstSmpte60fps = 13 ///< HDTV: 60 fps
162 //-------------------------------------------------------------------------------------------------------
163 };
164
165 //-------------------------------------------------------------------------------------------------------
166 /** Variable IO for Offline Processing. */
167 //-------------------------------------------------------------------------------------------------------
168 struct VstVariableIo
169 {
170 //-------------------------------------------------------------------------------------------------------
171 float** inputs; ///< input audio buffers
172 float** outputs; ///< output audio buffers
173 VstInt32 numSamplesInput; ///< number of incoming samples
174 VstInt32 numSamplesOutput; ///< number of outgoing samples
175 VstInt32* numSamplesInputProcessed; ///< number of samples actually processed of input
176 VstInt32* numSamplesOutputProcessed; ///< number of samples actually processed of output
177 //-------------------------------------------------------------------------------------------------------
178 };
179
180 //-------------------------------------------------------------------------------------------------------
181 /** Language code returned by audioMasterGetLanguage. */
182 //-------------------------------------------------------------------------------------------------------
183 alias int VstHostLanguage;
184 enum : VstHostLanguage
185 {
186 //-------------------------------------------------------------------------------------------------------
187 kVstLangEnglish = 1, ///< English
188 kVstLangGerman, ///< German
189 kVstLangFrench, ///< French
190 kVstLangItalian, ///< Italian
191 kVstLangSpanish, ///< Spanish
192 kVstLangJapanese ///< Japanese
193 //-------------------------------------------------------------------------------------------------------
194 };
195
196 //-------------------------------------------------------------------------------------------------------
197 /** VST 2.x dispatcher Opcodes (Plug-in to Host). Extension of #AudioMasterOpcodes */
198 //-------------------------------------------------------------------------------------------------------
199
200 alias int AudioMasterOpcodesX;
201 enum : AudioMasterOpcodesX
202 {
203 //-------------------------------------------------------------------------------------------------------
204 DEPRECATED_audioMasterWantMidi = DEPRECATED_audioMasterPinConnected + 2, ///< \deprecated deprecated in VST 2.4
205
206 audioMasterGetTime, ///< [return value]: #VstTimeInfo* or null if not supported [value]: request mask @see VstTimeInfoFlags @see AudioEffectX::getTimeInfo
207 audioMasterProcessEvents, ///< [ptr]: pointer to #VstEvents @see VstEvents @see AudioEffectX::sendVstEventsToHost
208
209 DEPRECATED_audioMasterSetTime, ///< \deprecated deprecated in VST 2.4
210 DEPRECATED_audioMasterTempoAt, ///< \deprecated deprecated in VST 2.4
211 DEPRECATED_audioMasterGetNumAutomatableParameters, ///< \deprecated deprecated in VST 2.4
212 DEPRECATED_audioMasterGetParameterQuantization, ///< \deprecated deprecated in VST 2.4
213
214 audioMasterIOChanged, ///< [return value]: 1 if supported @see AudioEffectX::ioChanged
215
216 DEPRECATED_audioMasterNeedIdle, ///< \deprecated deprecated in VST 2.4
217
218 audioMasterSizeWindow, ///< [index]: width [value]: height [return value]: 1 if supported @see AudioEffectX::sizeWindow
219 audioMasterGetSampleRate, ///< [return value]: current sample rate @see AudioEffectX::updateSampleRate
220 audioMasterGetBlockSize, ///< [return value]: current block size @see AudioEffectX::updateBlockSize
221 audioMasterGetInputLatency, ///< [return value]: input latency in audio samples @see AudioEffectX::getInputLatency
222 audioMasterGetOutputLatency, ///< [return value]: output latency in audio samples @see AudioEffectX::getOutputLatency
223
224 DEPRECATED_audioMasterGetPreviousPlug, ///< \deprecated deprecated in VST 2.4
225 DEPRECATED_audioMasterGetNextPlug, ///< \deprecated deprecated in VST 2.4
226 DEPRECATED_audioMasterWillReplaceOrAccumulate, ///< \deprecated deprecated in VST 2.4
227
228 audioMasterGetCurrentProcessLevel, ///< [return value]: current process level @see VstProcessLevels
229 audioMasterGetAutomationState, ///< [return value]: current automation state @see VstAutomationStates
230
231 audioMasterOfflineStart, ///< [index]: numNewAudioFiles [value]: numAudioFiles [ptr]: #VstAudioFile* @see AudioEffectX::offlineStart
232 audioMasterOfflineRead, ///< [index]: bool readSource [value]: #VstOfflineOption* @see VstOfflineOption [ptr]: #VstOfflineTask* @see VstOfflineTask @see AudioEffectX::offlineRead
233 audioMasterOfflineWrite, ///< @see audioMasterOfflineRead @see AudioEffectX::offlineRead
234 audioMasterOfflineGetCurrentPass, ///< @see AudioEffectX::offlineGetCurrentPass
235 audioMasterOfflineGetCurrentMetaPass, ///< @see AudioEffectX::offlineGetCurrentMetaPass
236
237 DEPRECATED_audioMasterSetOutputSampleRate, ///< \deprecated deprecated in VST 2.4
238 DEPRECATED_audioMasterGetOutputSpeakerArrangement, ///< \deprecated deprecated in VST 2.4
239
240 audioMasterGetVendorString, ///< [ptr]: char buffer for vendor string, limited to #kVstMaxVendorStrLen @see AudioEffectX::getHostVendorString
241 audioMasterGetProductString, ///< [ptr]: char buffer for vendor string, limited to #kVstMaxProductStrLen @see AudioEffectX::getHostProductString
242 audioMasterGetVendorVersion, ///< [return value]: vendor-specific version @see AudioEffectX::getHostVendorVersion
243 audioMasterVendorSpecific, ///< no definition, vendor specific handling @see AudioEffectX::hostVendorSpecific
244
245 DEPRECATED_audioMasterSetIcon, ///< \deprecated deprecated in VST 2.4
246
247 audioMasterCanDo, ///< [ptr]: "can do" string [return value]: 1 for supported
248 audioMasterGetLanguage, ///< [return value]: language code @see VstHostLanguage
249
250 DEPRECATED_audioMasterOpenWindow, ///< \deprecated deprecated in VST 2.4
251 DEPRECATED_audioMasterCloseWindow, ///< \deprecated deprecated in VST 2.4
252
253 audioMasterGetDirectory, ///< [return value]: FSSpec on MAC, else char* @see AudioEffectX::getDirectory
254 audioMasterUpdateDisplay, ///< no arguments
255 audioMasterBeginEdit, ///< [index]: parameter index @see AudioEffectX::beginEdit
256 audioMasterEndEdit, ///< [index]: parameter index @see AudioEffectX::endEdit
257 audioMasterOpenFileSelector, ///< [ptr]: VstFileSelect* [return value]: 1 if supported @see AudioEffectX::openFileSelector
258 audioMasterCloseFileSelector, ///< [ptr]: VstFileSelect* @see AudioEffectX::closeFileSelector
259
260 DEPRECATED_audioMasterEditFile, ///< \deprecated deprecated in VST 2.4
261
262 DEPRECATED_audioMasterGetChunkFile, ///< \deprecated deprecated in VST 2.4 [ptr]: char[2048] or sizeof (FSSpec) [return value]: 1 if supported @see AudioEffectX::getChunkFile
263
264 DEPRECATED_audioMasterGetInputSpeakerArrangement ///< \deprecated deprecated in VST 2.4
265 }
266
267 //-------------------------------------------------------------------------------------------------------
268 /** VST 2.x dispatcher Opcodes (Host to Plug-in). Extension of #AEffectOpcodes */
269 //-------------------------------------------------------------------------------------------------------
270 alias int AEffectXOpcodes;
271 enum : AEffectXOpcodes
272 {
273 //-------------------------------------------------------------------------------------------------------
274 effProcessEvents = effSetChunk + 1 ///< [ptr]: #VstEvents* @see AudioEffectX::processEvents
275
276 , effCanBeAutomated ///< [index]: parameter index [return value]: 1=true, 0=false @see AudioEffectX::canParameterBeAutomated
277 , effString2Parameter ///< [index]: parameter index [ptr]: parameter string [return value]: true for success @see AudioEffectX::string2parameter
278
279 , DEPRECATED_effGetNumProgramCategories ///< \deprecated deprecated in VST 2.4
280
281 , effGetProgramNameIndexed ///< [index]: program index [ptr]: buffer for program name, limited to #kVstMaxProgNameLen [return value]: true for success @see AudioEffectX::getProgramNameIndexed
282
283 , DEPRECATED_effCopyProgram ///< \deprecated deprecated in VST 2.4
284 , DEPRECATED_effConnectInput ///< \deprecated deprecated in VST 2.4
285 , DEPRECATED_effConnectOutput ///< \deprecated deprecated in VST 2.4
286
287 , effGetInputProperties ///< [index]: input index [ptr]: #VstPinProperties* [return value]: 1 if supported @see AudioEffectX::getInputProperties
288 , effGetOutputProperties ///< [index]: output index [ptr]: #VstPinProperties* [return value]: 1 if supported @see AudioEffectX::getOutputProperties
289 , effGetPlugCategory ///< [return value]: category @see VstPlugCategory @see AudioEffectX::getPlugCategory
290
291 , DEPRECATED_effGetCurrentPosition ///< \deprecated deprecated in VST 2.4
292 , DEPRECATED_effGetDestinationBuffer ///< \deprecated deprecated in VST 2.4
293
294 , effOfflineNotify ///< [ptr]: #VstAudioFile array [value]: count [index]: start flag @see AudioEffectX::offlineNotify
295 , effOfflinePrepare ///< [ptr]: #VstOfflineTask array [value]: count @see AudioEffectX::offlinePrepare
296 , effOfflineRun ///< [ptr]: #VstOfflineTask array [value]: count @see AudioEffectX::offlineRun
297
298 , effProcessVarIo ///< [ptr]: #VstVariableIo* @see AudioEffectX::processVariableIo
299 , effSetSpeakerArrangement ///< [value]: input #VstSpeakerArrangement* [ptr]: output #VstSpeakerArrangement* @see AudioEffectX::setSpeakerArrangement
300
301 , DEPRECATED_effSetBlockSizeAndSampleRate ///< \deprecated deprecated in VST 2.4
302
303 , effSetBypass ///< [value]: 1 = bypass, 0 = no bypass @see AudioEffectX::setBypass
304 , effGetEffectName ///< [ptr]: buffer for effect name, limited to #kVstMaxEffectNameLen @see AudioEffectX::getEffectName
305
306 , DEPRECATED_effGetErrorText ///< \deprecated deprecated in VST 2.4
307
308 , effGetVendorString ///< [ptr]: buffer for effect vendor string, limited to #kVstMaxVendorStrLen @see AudioEffectX::getVendorString
309 , effGetProductString ///< [ptr]: buffer for effect vendor string, limited to #kVstMaxProductStrLen @see AudioEffectX::getProductString
310 , effGetVendorVersion ///< [return value]: vendor-specific version @see AudioEffectX::getVendorVersion
311 , effVendorSpecific ///< no definition, vendor specific handling @see AudioEffectX::vendorSpecific
312 , effCanDo ///< [ptr]: "can do" string [return value]: 0: "don't know" -1: "no" 1: "yes" @see AudioEffectX::canDo
313 , effGetTailSize ///< [return value]: tail size (for example the reverb time of a reverb plug-in); 0 is default (return 1 for 'no tail')
314
315 , DEPRECATED_effIdle ///< \deprecated deprecated in VST 2.4
316 , DEPRECATED_effGetIcon ///< \deprecated deprecated in VST 2.4
317 , DEPRECATED_effSetViewPosition ///< \deprecated deprecated in VST 2.4
318
319 , effGetParameterProperties ///< [index]: parameter index [ptr]: #VstParameterProperties* [return value]: 1 if supported @see AudioEffectX::getParameterProperties
320
321 , DEPRECATED_effKeysRequired ///< \deprecated deprecated in VST 2.4
322
323 , effGetVstVersion ///< [return value]: VST version @see AudioEffectX::getVstVersion
324
325 // VST 2.1
326 , effEditKeyDown ///< [index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used @see AEffEditor::onKeyDown
327 , effEditKeyUp ///< [index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used @see AEffEditor::onKeyUp
328 , effSetEditKnobMode ///< [value]: knob mode 0: circular, 1: circular relativ, 2: linear (CKnobMode in VSTGUI) @see AEffEditor::setKnobMode
329
330 , effGetMidiProgramName ///< [index]: MIDI channel [ptr]: #MidiProgramName* [return value]: number of used programs, 0 if unsupported @see AudioEffectX::getMidiProgramName
331 , effGetCurrentMidiProgram ///< [index]: MIDI channel [ptr]: #MidiProgramName* [return value]: index of current program @see AudioEffectX::getCurrentMidiProgram
332 , effGetMidiProgramCategory ///< [index]: MIDI channel [ptr]: #MidiProgramCategory* [return value]: number of used categories, 0 if unsupported @see AudioEffectX::getMidiProgramCategory
333 , effHasMidiProgramsChanged ///< [index]: MIDI channel [return value]: 1 if the #MidiProgramName(s) or #MidiKeyName(s) have changed @see AudioEffectX::hasMidiProgramsChanged
334 , effGetMidiKeyName ///< [index]: MIDI channel [ptr]: #MidiKeyName* [return value]: true if supported, false otherwise @see AudioEffectX::getMidiKeyName
335
336 , effBeginSetProgram ///< no arguments @see AudioEffectX::beginSetProgram
337 , effEndSetProgram ///< no arguments @see AudioEffectX::endSetProgram
338
339 // VST 2.3
340 , effGetSpeakerArrangement ///< [value]: input #VstSpeakerArrangement* [ptr]: output #VstSpeakerArrangement* @see AudioEffectX::getSpeakerArrangement
341 , effShellGetNextPlugin ///< [ptr]: buffer for plug-in name, limited to #kVstMaxProductStrLen [return value]: next plugin's uniqueID @see AudioEffectX::getNextShellPlugin
342
343 , effStartProcess ///< no arguments @see AudioEffectX::startProcess
344 , effStopProcess ///< no arguments @see AudioEffectX::stopProcess
345 , effSetTotalSampleToProcess ///< [value]: number of samples to process, offline only! @see AudioEffectX::setTotalSampleToProcess
346 , effSetPanLaw ///< [value]: pan law [opt]: gain @see VstPanLawType @see AudioEffectX::setPanLaw
347
348 , effBeginLoadBank ///< [ptr]: #VstPatchChunkInfo* [return value]: -1: bank can't be loaded, 1: bank can be loaded, 0: unsupported @see AudioEffectX::beginLoadBank
349 , effBeginLoadProgram ///< [ptr]: #VstPatchChunkInfo* [return value]: -1: prog can't be loaded, 1: prog can be loaded, 0: unsupported @see AudioEffectX::beginLoadProgram
350
351 // VST 2.4
352 , effSetProcessPrecision ///< [value]: @see VstProcessPrecision @see AudioEffectX::setProcessPrecision
353 , effGetNumMidiInputChannels ///< [return value]: number of used MIDI input channels (1-15) @see AudioEffectX::getNumMidiInputChannels
354 , effGetNumMidiOutputChannels ///< [return value]: number of used MIDI output channels (1-15) @see AudioEffectX::getNumMidiOutputChannels
355 }
356
357 //-------------------------------------------------------------------------------------------------------
358 /** Symbolic precision constants used for effSetProcessPrecision. */
359 //-------------------------------------------------------------------------------------------------------
360 alias int VstProcessPrecision;
361 enum : VstProcessPrecision
362 {
363 kVstProcessPrecision32 = 0, ///< single precision float (32bits)
364 kVstProcessPrecision64 ///< double precision (64bits)
365 }
366
367 //-------------------------------------------------------------------------------------------------------
368 /** Parameter Properties used in #effGetParameterProperties. */
369 //-------------------------------------------------------------------------------------------------------
370 struct VstParameterProperties
371 {
372 //-------------------------------------------------------------------------------------------------------
373 float stepFloat; ///< float step
374 float smallStepFloat; ///< small float step
375 float largeStepFloat; ///< large float step
376 char[kVstMaxLabelLen] label;///< parameter label
377 VstInt32 flags; ///< @see VstParameterFlags
378 VstInt32 minInteger; ///< integer minimum
379 VstInt32 maxInteger; ///< integer maximum
380 VstInt32 stepInteger; ///< integer step
381 VstInt32 largeStepInteger; ///< large integer step
382 char[kVstMaxShortLabelLen] shortLabel; ///< short label, recommended: 6 + delimiter
383
384 // The following are for remote controller display purposes.
385 // Note that the kVstParameterSupportsDisplayIndex flag must be set.
386 // Host can scan all parameters, and find out in what order
387 // to display them:
388
389 VstInt16 displayIndex; ///< index where this parameter should be displayed (starting with 0)
390
391 // Host can also possibly display the parameter group (category), such as...
392 // ---------------------------
393 // Osc 1
394 // Wave Detune Octave Mod
395 // ---------------------------
396 // ...if the plug-in supports it (flag #kVstParameterSupportsDisplayCategory)
397
398 VstInt16 category; ///< 0: no category, else group index + 1
399 VstInt16 numParametersInCategory; ///< number of parameters in category
400 VstInt16 reserved; ///< zero
401 char[kVstMaxCategLabelLen] categoryLabel; ///< category label, e.g. "Osc 1"
402
403 char[16] future; ///< reserved for future use
404 //-------------------------------------------------------------------------------------------------------
405 }
406
407 //-------------------------------------------------------------------------------------------------------
408 /** Flags used in #VstParameterProperties. */
409 //-------------------------------------------------------------------------------------------------------
410 alias int VstParameterFlags;
411 enum : VstParameterFlags
412 {
413 //-------------------------------------------------------------------------------------------------------
414 kVstParameterIsSwitch = 1 << 0, ///< parameter is a switch (on/off)
415 kVstParameterUsesIntegerMinMax = 1 << 1, ///< minInteger, maxInteger valid
416 kVstParameterUsesFloatStep = 1 << 2, ///< stepFloat, smallStepFloat, largeStepFloat valid
417 kVstParameterUsesIntStep = 1 << 3, ///< stepInteger, largeStepInteger valid
418 kVstParameterSupportsDisplayIndex = 1 << 4, ///< displayIndex valid
419 kVstParameterSupportsDisplayCategory = 1 << 5, ///< category, etc. valid
420 kVstParameterCanRamp = 1 << 6 ///< set if parameter value can ramp up/down
421 //-------------------------------------------------------------------------------------------------------
422 }
423
424 //-------------------------------------------------------------------------------------------------------
425 /** Pin Properties used in #effGetInputProperties and #effGetOutputProperties. */
426 //-------------------------------------------------------------------------------------------------------
427 struct VstPinProperties
428 {
429 //-------------------------------------------------------------------------------------------------------
430 char[kVstMaxLabelLen] label; ///< pin name
431 VstInt32 flags; ///< @see VstPinPropertiesFlags
432 VstInt32 arrangementType; ///< @see VstSpeakerArrangementType
433 char[kVstMaxShortLabelLen] shortLabel; ///< short name (recommended: 6 + delimiter)
434
435 char[48] future; ///< reserved for future use
436 //-------------------------------------------------------------------------------------------------------
437 }
438
439 //-------------------------------------------------------------------------------------------------------
440 /** Flags used in #VstPinProperties. */
441 //-------------------------------------------------------------------------------------------------------
442 alias int VstPinPropertiesFlags;
443 enum : VstPinPropertiesFlags
444 {
445 //-------------------------------------------------------------------------------------------------------
446 kVstPinIsActive = 1 << 0, ///< pin is active, ignored by Host
447 kVstPinIsStereo = 1 << 1, ///< pin is first of a stereo pair
448 kVstPinUseSpeaker = 1 << 2 ///< #VstPinProperties::arrangementType is valid and can be used to get the wanted arrangement
449 //-------------------------------------------------------------------------------------------------------
450 }
451
452 //-------------------------------------------------------------------------------------------------------
453 /** Plug-in Categories. */
454 //-------------------------------------------------------------------------------------------------------
455 alias int VstPlugCategory;
456 enum : VstPlugCategory
457 {
458 //-------------------------------------------------------------------------------------------------------
459 kPlugCategUnknown = 0, ///< Unknown, category not implemented
460 kPlugCategEffect, ///< Simple Effect
461 kPlugCategSynth, ///< VST Instrument (Synths, samplers,...)
462 kPlugCategAnalysis, ///< Scope, Tuner, ...
463 kPlugCategMastering, ///< Dynamics, ...
464 kPlugCategSpacializer, ///< Panners, ...
465 kPlugCategRoomFx, ///< Delays and Reverbs
466 kPlugSurroundFx, ///< Dedicated surround processor
467 kPlugCategRestoration, ///< Denoiser, ...
468 kPlugCategOfflineProcess, ///< Offline Process
469 kPlugCategShell, ///< Plug-in is container of other plug-ins @see effShellGetNextPlugin
470 kPlugCategGenerator, ///< ToneGenerator, ...
471
472 kPlugCategMaxCount ///< Marker to count the categories
473 //-------------------------------------------------------------------------------------------------------
474 }
475
476 //-------------------------------------------------------------------------------------------------------
477 // MIDI Programs
478 //-------------------------------------------------------------------------------------------------------
479 //-------------------------------------------------------------------------------------------------------
480 /** MIDI Program Description. */
481 //-------------------------------------------------------------------------------------------------------
482 struct MidiProgramName
483 {
484 //-------------------------------------------------------------------------------------------------------
485 VstInt32 thisProgramIndex; ///< 0 or greater: fill struct for this program index
486 char[kVstMaxNameLen] name; ///< program name
487 char midiProgram; ///< -1:off, 0-127
488 char midiBankMsb; ///< -1:off, 0-127
489 char midiBankLsb; ///< -1:off, 0-127
490 char reserved; ///< zero
491 VstInt32 parentCategoryIndex; ///< -1:no parent category
492 VstInt32 flags; ///< omni etc. @see VstMidiProgramNameFlags
493 //-------------------------------------------------------------------------------------------------------
494 }
495
496 //-------------------------------------------------------------------------------------------------------
497 /** Flags used in MidiProgramName. */
498 //-------------------------------------------------------------------------------------------------------
499 alias int VstMidiProgramNameFlags;
500 enum : VstMidiProgramNameFlags
501 {
502 //-------------------------------------------------------------------------------------------------------
503 kMidiIsOmni = 1 ///< default is multi. for omni mode, channel 0 is used for inquiries and program changes
504 //-------------------------------------------------------------------------------------------------------
505 }
506
507 //-------------------------------------------------------------------------------------------------------
508 /** MIDI Program Category. */
509 //-------------------------------------------------------------------------------------------------------
510 struct MidiProgramCategory
511 {
512 //-------------------------------------------------------------------------------------------------------
513 VstInt32 thisCategoryIndex; ///< 0 or greater: fill struct for this category index.
514 char[kVstMaxNameLen] name; ///< name
515 VstInt32 parentCategoryIndex; ///< -1:no parent category
516 VstInt32 flags; ///< reserved, none defined yet, zero.
517 //-------------------------------------------------------------------------------------------------------
518 }
519
520 //-------------------------------------------------------------------------------------------------------
521 /** MIDI Key Description. */
522 //-------------------------------------------------------------------------------------------------------
523 struct MidiKeyName
524 {
525 //-------------------------------------------------------------------------------------------------------
526 VstInt32 thisProgramIndex; ///< 0 or greater: fill struct for this program index.
527 VstInt32 thisKeyNumber; ///< 0 - 127. fill struct for this key number.
528 char[kVstMaxNameLen] keyName; ///< key name, empty means regular key names
529 VstInt32 reserved; ///< zero
530 VstInt32 flags; ///< reserved, none defined yet, zero.
531 //-------------------------------------------------------------------------------------------------------
532 }
533
534 //-------------------------------------------------------------------------------------------------------
535 // Surround Setup
536 //-------------------------------------------------------------------------------------------------------
537 //-------------------------------------------------------------------------------------------------------
538 /** Speaker Properties.
539 The origin for azimuth is right (as by math conventions dealing with radians).
540 The elevation origin is also right, visualizing a rotation of a circle across the
541 -pi/pi axis of the horizontal circle. Thus, an elevation of -pi/2 corresponds
542 to bottom, and a speaker standing on the left, and 'beaming' upwards would have
543 an azimuth of -pi, and an elevation of pi/2.
544 For user interface representation, grads are more likely to be used, and the
545 origins will obviously 'shift' accordingly. */
546 //-------------------------------------------------------------------------------------------------------
547 struct VstSpeakerProperties
548 {
549 //-------------------------------------------------------------------------------------------------------
550 float azimuth; ///< unit: rad, range: -PI...PI, exception: 10.f for LFE channel
551 float elevation; ///< unit: rad, range: -PI/2...PI/2, exception: 10.f for LFE channel
552 float radius; ///< unit: meter, exception: 0.f for LFE channel
553 float reserved; ///< zero (reserved for future use)
554 char[kVstMaxNameLen] name; ///< for other setups, other names should be given (L/R/C... won't do)
555 VstInt32 type; ///< @see VstSpeakerType
556
557 char[28] future; ///< reserved for future use
558 //-------------------------------------------------------------------------------------------------------
559 }
560
561 //-------------------------------------------------------------------------------------------------------
562 /** Speaker Arrangement. */
563 //-------------------------------------------------------------------------------------------------------
564 struct VstSpeakerArrangement
565 {
566 //-------------------------------------------------------------------------------------------------------
567 VstInt32 type; ///< e.g. #kSpeakerArr51 for 5.1 @see VstSpeakerArrangementType
568 VstInt32 numChannels; ///< number of channels in this speaker arrangement
569 VstSpeakerProperties[8] speakers; ///< variable sized speaker array
570 //-------------------------------------------------------------------------------------------------------
571 }
572
573 //-------------------------------------------------------------------------------------------------------
574 /** Speaker Types. */
575 //-------------------------------------------------------------------------------------------------------
576 alias int VstSpeakerType;
577 enum : VstSpeakerType
578 {
579 //-------------------------------------------------------------------------------------------------------
580 kSpeakerUndefined = 0x7fffffff, ///< Undefined
581 kSpeakerM = 0, ///< Mono (M)
582 kSpeakerL, ///< Left (L)
583 kSpeakerR, ///< Right (R)
584 kSpeakerC, ///< Center (C)
585 kSpeakerLfe, ///< Subbass (Lfe)
586 kSpeakerLs, ///< Left Surround (Ls)
587 kSpeakerRs, ///< Right Surround (Rs)
588 kSpeakerLc, ///< Left of Center (Lc)
589 kSpeakerRc, ///< Right of Center (Rc)
590 kSpeakerS, ///< Surround (S)
591 kSpeakerCs = kSpeakerS, ///< Center of Surround (Cs) = Surround (S)
592 kSpeakerSl, ///< Side Left (Sl)
593 kSpeakerSr, ///< Side Right (Sr)
594 kSpeakerTm, ///< Top Middle (Tm)
595 kSpeakerTfl, ///< Top Front Left (Tfl)
596 kSpeakerTfc, ///< Top Front Center (Tfc)
597 kSpeakerTfr, ///< Top Front Right (Tfr)
598 kSpeakerTrl, ///< Top Rear Left (Trl)
599 kSpeakerTrc, ///< Top Rear Center (Trc)
600 kSpeakerTrr, ///< Top Rear Right (Trr)
601 kSpeakerLfe2 ///< Subbass 2 (Lfe2)
602 //-------------------------------------------------------------------------------------------------------
603 }
604
605 //-------------------------------------------------------------------------------------------------------
606 /** User-defined speaker types, to be extended in the negative range.
607 Will be handled as their corresponding speaker types with abs values:
608 e.g abs(#kSpeakerU1) == #kSpeakerL, abs(#kSpeakerU2) == #kSpeakerR */
609 alias int VstUserSpeakerType;
610 enum : VstUserSpeakerType
611 {
612 //-------------------------------------------------------------------------------------------------------
613 kSpeakerU32 = -32,
614 kSpeakerU31,
615 kSpeakerU30,
616 kSpeakerU29,
617 kSpeakerU28,
618 kSpeakerU27,
619 kSpeakerU26,
620 kSpeakerU25,
621 kSpeakerU24,
622 kSpeakerU23,
623 kSpeakerU22,
624 kSpeakerU21,
625 kSpeakerU20, ///< == #kSpeakerLfe2
626 kSpeakerU19, ///< == #kSpeakerTrr
627 kSpeakerU18, ///< == #kSpeakerTrc
628 kSpeakerU17, ///< == #kSpeakerTrl
629 kSpeakerU16, ///< == #kSpeakerTfr
630 kSpeakerU15, ///< == #kSpeakerTfc
631 kSpeakerU14, ///< == #kSpeakerTfl
632 kSpeakerU13, ///< == #kSpeakerTm
633 kSpeakerU12, ///< == #kSpeakerSr
634 kSpeakerU11, ///< == #kSpeakerSl
635 kSpeakerU10, ///< == #kSpeakerCs
636 kSpeakerU9, ///< == #kSpeakerS
637 kSpeakerU8, ///< == #kSpeakerRc
638 kSpeakerU7, ///< == #kSpeakerLc
639 kSpeakerU6, ///< == #kSpeakerRs
640 kSpeakerU5, ///< == #kSpeakerLs
641 kSpeakerU4, ///< == #kSpeakerLfe
642 kSpeakerU3, ///< == #kSpeakerC
643 kSpeakerU2, ///< == #kSpeakerR
644 kSpeakerU1 ///< == #kSpeakerL
645 //-------------------------------------------------------------------------------------------------------
646 }
647
648 //-------------------------------------------------------------------------------------------------------
649 /** Speaker Arrangement Types*/
650 //-------------------------------------------------------------------------------------------------------
651 alias int VstSpeakerArrangementType;
652 enum : VstSpeakerArrangementType
653 {
654 //-------------------------------------------------------------------------------------------------------
655 kSpeakerArrUserDefined = -2,///< user defined
656 kSpeakerArrEmpty = -1, ///< empty arrangement
657 kSpeakerArrMono = 0, ///< M
658 kSpeakerArrStereo, ///< L R
659 kSpeakerArrStereoSurround, ///< Ls Rs
660 kSpeakerArrStereoCenter, ///< Lc Rc
661 kSpeakerArrStereoSide, ///< Sl Sr
662 kSpeakerArrStereoCLfe, ///< C Lfe
663 kSpeakerArr30Cine, ///< L R C
664 kSpeakerArr30Music, ///< L R S
665 kSpeakerArr31Cine, ///< L R C Lfe
666 kSpeakerArr31Music, ///< L R Lfe S
667 kSpeakerArr40Cine, ///< L R C S (LCRS)
668 kSpeakerArr40Music, ///< L R Ls Rs (Quadro)
669 kSpeakerArr41Cine, ///< L R C Lfe S (LCRS+Lfe)
670 kSpeakerArr41Music, ///< L R Lfe Ls Rs (Quadro+Lfe)
671 kSpeakerArr50, ///< L R C Ls Rs
672 kSpeakerArr51, ///< L R C Lfe Ls Rs
673 kSpeakerArr60Cine, ///< L R C Ls Rs Cs
674 kSpeakerArr60Music, ///< L R Ls Rs Sl Sr
675 kSpeakerArr61Cine, ///< L R C Lfe Ls Rs Cs
676 kSpeakerArr61Music, ///< L R Lfe Ls Rs Sl Sr
677 kSpeakerArr70Cine, ///< L R C Ls Rs Lc Rc
678 kSpeakerArr70Music, ///< L R C Ls Rs Sl Sr
679 kSpeakerArr71Cine, ///< L R C Lfe Ls Rs Lc Rc
680 kSpeakerArr71Music, ///< L R C Lfe Ls Rs Sl Sr
681 kSpeakerArr80Cine, ///< L R C Ls Rs Lc Rc Cs
682 kSpeakerArr80Music, ///< L R C Ls Rs Cs Sl Sr
683 kSpeakerArr81Cine, ///< L R C Lfe Ls Rs Lc Rc Cs
684 kSpeakerArr81Music, ///< L R C Lfe Ls Rs Cs Sl Sr
685 kSpeakerArr102, ///< L R C Lfe Ls Rs Tfl Tfc Tfr Trl Trr Lfe2
686 kNumSpeakerArr
687 //-------------------------------------------------------------------------------------------------------
688 }
689
690 //-------------------------------------------------------------------------------------------------------
691 // Offline Processing
692 //-------------------------------------------------------------------------------------------------------
693 //-------------------------------------------------------------------------------------------------------
694 /** Offline Task Description. */
695 //-------------------------------------------------------------------------------------------------------
696 struct VstOfflineTask
697 {
698 //-------------------------------------------------------------------------------------------------------
699 char[96] processName; ///< set by plug-in
700
701 // audio access
702 double readPosition; ///< set by plug-in/Host
703 double writePosition; ///< set by plug-in/Host
704 VstInt32 readCount; ///< set by plug-in/Host
705 VstInt32 writeCount; ///< set by plug-in
706 VstInt32 sizeInputBuffer; ///< set by Host
707 VstInt32 sizeOutputBuffer; ///< set by Host
708 void* inputBuffer; ///< set by Host
709 void* outputBuffer; ///< set by Host
710 double positionToProcessFrom; ///< set by Host
711 double numFramesToProcess; ///< set by Host
712 double maxFramesToWrite; ///< set by plug-in
713
714 // other data access
715 void* extraBuffer; ///< set by plug-in
716 VstInt32 value; ///< set by Host or plug-in
717 VstInt32 index; ///< set by Host or plug-in
718
719 // file attributes
720 double numFramesInSourceFile; ///< set by Host
721 double sourceSampleRate; ///< set by Host or plug-in
722 double destinationSampleRate; ///< set by Host or plug-in
723 VstInt32 numSourceChannels; ///< set by Host or plug-in
724 VstInt32 numDestinationChannels;///< set by Host or plug-in
725 VstInt32 sourceFormat; ///< set by Host
726 VstInt32 destinationFormat; ///< set by plug-in
727 char[512] outputText; ///< set by plug-in or Host
728
729 // progress notification
730 double progress; ///< set by plug-in
731 VstInt32 progressMode; ///< Reserved for future use
732 char[100] progressText; ///< set by plug-in
733
734 VstInt32 flags; ///< set by Host and plug-in; see enum #VstOfflineTaskFlags
735 VstInt32 returnValue; ///< Reserved for future use
736 void* hostOwned; ///< set by Host
737 void* plugOwned; ///< set by plug-in
738
739 char[1024] future; ///< Reserved for future use
740 //-------------------------------------------------------------------------------------------------------
741 }
742
743 //-------------------------------------------------------------------------------------------------------
744 /** Flags used in #VstOfflineTask. */
745 //-------------------------------------------------------------------------------------------------------
746 alias int VstOfflineTaskFlags;
747 enum : VstOfflineTaskFlags
748 {
749 //-------------------------------------------------------------------------------------------------------
750 kVstOfflineUnvalidParameter = 1 << 0, ///< set by Host
751 kVstOfflineNewFile = 1 << 1, ///< set by Host
752
753 kVstOfflinePlugError = 1 << 10, ///< set by plug-in
754 kVstOfflineInterleavedAudio = 1 << 11, ///< set by plug-in
755 kVstOfflineTempOutputFile = 1 << 12, ///< set by plug-in
756 kVstOfflineFloatOutputFile = 1 << 13, ///< set by plug-in
757 kVstOfflineRandomWrite = 1 << 14, ///< set by plug-in
758 kVstOfflineStretch = 1 << 15, ///< set by plug-in
759 kVstOfflineNoThread = 1 << 16 ///< set by plug-in
760 //-------------------------------------------------------------------------------------------------------
761 }
762
763 //-------------------------------------------------------------------------------------------------------
764 /** Option passed to #offlineRead/#offlineWrite. */
765 //-------------------------------------------------------------------------------------------------------
766 alias int VstOfflineOption;
767 enum : VstOfflineOption
768 {
769 //-------------------------------------------------------------------------------------------------------
770 kVstOfflineAudio, ///< reading/writing audio samples
771 kVstOfflinePeaks, ///< reading graphic representation
772 kVstOfflineParameter, ///< reading/writing parameters
773 kVstOfflineMarker, ///< reading/writing marker
774 kVstOfflineCursor, ///< reading/moving edit cursor
775 kVstOfflineSelection, ///< reading/changing selection
776 kVstOfflineQueryFiles ///< to request the Host to call asynchronously #offlineNotify
777 //-------------------------------------------------------------------------------------------------------
778 }
779
780 //-------------------------------------------------------------------------------------------------------
781 /** Structure passed to #offlineNotify and #offlineStart */
782 //-------------------------------------------------------------------------------------------------------
783 struct VstAudioFile
784 {
785 //-------------------------------------------------------------------------------------------------------
786 VstInt32 flags; ///< see enum #VstAudioFileFlags
787 void* hostOwned; ///< any data private to Host
788 void* plugOwned; ///< any data private to plug-in
789 char[kVstMaxFileNameLen] name; ///< file title
790 VstInt32 uniqueId; ///< uniquely identify a file during a session
791 double sampleRate; ///< file sample rate
792 VstInt32 numChannels; ///< number of channels (1 for mono, 2 for stereo...)
793 double numFrames; ///< number of frames in the audio file
794 VstInt32 format; ///< Reserved for future use
795 double editCursorPosition; ///< -1 if no such cursor
796 double selectionStart; ///< frame index of first selected frame, or -1
797 double selectionSize; ///< number of frames in selection, or 0
798 VstInt32 selectedChannelsMask; ///< 1 bit per channel
799 VstInt32 numMarkers; ///< number of markers in the file
800 VstInt32 timeRulerUnit; ///< see doc for possible values
801 double timeRulerOffset; ///< offset in time ruler (positive or negative)
802 double tempo; ///< as BPM (Beats Per Minute)
803 VstInt32 timeSigNumerator; ///< time signature numerator
804 VstInt32 timeSigDenominator; ///< time signature denominator
805 VstInt32 ticksPerBlackNote; ///< resolution
806 VstInt32 smpteFrameRate; ///< SMPTE rate (set as in #VstTimeInfo)
807
808 char[64] future; ///< Reserved for future use
809 //-------------------------------------------------------------------------------------------------------
810 }
811
812 //-------------------------------------------------------------------------------------------------------
813 /** Flags used in #VstAudioFile. */
814 //-------------------------------------------------------------------------------------------------------
815 alias int VstAudioFileFlags;
816 enum : VstAudioFileFlags
817 {
818 //-------------------------------------------------------------------------------------------------------
819 kVstOfflineReadOnly = 1 << 0, ///< set by Host (in call #offlineNotify)
820 kVstOfflineNoRateConversion = 1 << 1, ///< set by Host (in call #offlineNotify)
821 kVstOfflineNoChannelChange = 1 << 2, ///< set by Host (in call #offlineNotify)
822
823 kVstOfflineCanProcessSelection = 1 << 10, ///< set by plug-in (in call #offlineStart)
824 kVstOfflineNoCrossfade = 1 << 11, ///< set by plug-in (in call #offlineStart)
825 kVstOfflineWantRead = 1 << 12, ///< set by plug-in (in call #offlineStart)
826 kVstOfflineWantWrite = 1 << 13, ///< set by plug-in (in call #offlineStart)
827 kVstOfflineWantWriteMarker = 1 << 14, ///< set by plug-in (in call #offlineStart)
828 kVstOfflineWantMoveCursor = 1 << 15, ///< set by plug-in (in call #offlineStart)
829 kVstOfflineWantSelect = 1 << 16 ///< set by plug-in (in call #offlineStart)
830 //-------------------------------------------------------------------------------------------------------
831 }
832
833 //-------------------------------------------------------------------------------------------------------
834 /** Audio file marker. */
835 //-------------------------------------------------------------------------------------------------------
836 struct VstAudioFileMarker
837 {
838 //-------------------------------------------------------------------------------------------------------
839 double position; ///< marker position
840 char[32] name; ///< marker name
841 VstInt32 type; ///< marker type
842 VstInt32 id; ///< marker identifier
843 VstInt32 reserved; ///< reserved for future use
844 //-------------------------------------------------------------------------------------------------------
845 }
846
847 //-------------------------------------------------------------------------------------------------------
848 // Others
849 //-------------------------------------------------------------------------------------------------------
850
851 //-------------------------------------------------------------------------------------------------------
852 /** \deprecated Structure used for #openWindow and #closeWindow (deprecated in VST 2.4). */
853 //-------------------------------------------------------------------------------------------------------
854 struct DEPRECATED_VstWindow
855 {
856 //-------------------------------------------------------------------------------------------------------
857 char[128] title;
858 VstInt16 xPos;
859 VstInt16 yPos;
860 VstInt16 width;
861 VstInt16 height;
862 VstInt32 style;
863 void* parent;
864 void* userHandle;
865 void* winHandle;
866
867 char[104] future;
868 //-------------------------------------------------------------------------------------------------------
869 }
870
871 //-------------------------------------------------------------------------------------------------------
872 /** Structure used for keyUp/keyDown. */
873 //-------------------------------------------------------------------------------------------------------
874 struct VstKeyCode
875 {
876 //-------------------------------------------------------------------------------------------------------
877 VstInt32 character; ///< ASCII character
878 ubyte virt; ///< @see VstVirtualKey
879 ubyte modifier; ///< @see VstModifierKey
880 //-------------------------------------------------------------------------------------------------------
881 }
882
883 //-------------------------------------------------------------------------------------------------------
884 /** Platform-independent definition of Virtual Keys (used in #VstKeyCode). */
885 //-------------------------------------------------------------------------------------------------------
886 alias int VstVirtualKey;
887 enum : VstVirtualKey
888 {
889 //-------------------------------------------------------------------------------------------------------
890 VKEY_BACK = 1,
891 VKEY_TAB,
892 VKEY_CLEAR,
893 VKEY_RETURN,
894 VKEY_PAUSE,
895 VKEY_ESCAPE,
896 VKEY_SPACE,
897 VKEY_NEXT,
898 VKEY_END,
899 VKEY_HOME,
900 VKEY_LEFT,
901 VKEY_UP,
902 VKEY_RIGHT,
903 VKEY_DOWN,
904 VKEY_PAGEUP,
905 VKEY_PAGEDOWN,
906 VKEY_SELECT,
907 VKEY_PRINT,
908 VKEY_ENTER,
909 VKEY_SNAPSHOT,
910 VKEY_INSERT,
911 VKEY_DELETE,
912 VKEY_HELP,
913 VKEY_NUMPAD0,
914 VKEY_NUMPAD1,
915 VKEY_NUMPAD2,
916 VKEY_NUMPAD3,
917 VKEY_NUMPAD4,
918 VKEY_NUMPAD5,
919 VKEY_NUMPAD6,
920 VKEY_NUMPAD7,
921 VKEY_NUMPAD8,
922 VKEY_NUMPAD9,
923 VKEY_MULTIPLY,
924 VKEY_ADD,
925 VKEY_SEPARATOR,
926 VKEY_SUBTRACT,
927 VKEY_DECIMAL,
928 VKEY_DIVIDE,
929 VKEY_F1,
930 VKEY_F2,
931 VKEY_F3,
932 VKEY_F4,
933 VKEY_F5,
934 VKEY_F6,
935 VKEY_F7,
936 VKEY_F8,
937 VKEY_F9,
938 VKEY_F10,
939 VKEY_F11,
940 VKEY_F12,
941 VKEY_NUMLOCK,
942 VKEY_SCROLL,
943 VKEY_SHIFT,
944 VKEY_CONTROL,
945 VKEY_ALT,
946 VKEY_EQUALS
947 //-------------------------------------------------------------------------------------------------------
948 }
949
950 //-------------------------------------------------------------------------------------------------------
951 /** Modifier flags used in #VstKeyCode. */
952 //-------------------------------------------------------------------------------------------------------
953 alias int VstModifierKey;
954 enum : VstModifierKey
955 {
956 //-------------------------------------------------------------------------------------------------------
957 MODIFIER_SHIFT = 1<<0, ///< Shift
958 MODIFIER_ALTERNATE = 1<<1, ///< Alt
959 MODIFIER_COMMAND = 1<<2, ///< Control on Mac
960 MODIFIER_CONTROL = 1<<3 ///< Ctrl on PC, Apple on Mac
961 //-------------------------------------------------------------------------------------------------------
962 }
963
964 //-------------------------------------------------------------------------------------------------------
965 /** File filter used in #VstFileSelect. */
966 //-------------------------------------------------------------------------------------------------------
967 struct VstFileType
968 {
969 //-------------------------------------------------------------------------------------------------------
970 char[128] name; ///< display name
971 char[8] macType; ///< MacOS type
972 char[8] dosType; ///< Windows file extension
973 char[8] unixType; ///< Unix file extension
974 char[128] mimeType1; ///< MIME type
975 char[128] mimeType2; ///< additional MIME type
976
977 this(const char* _name, const char* _macType, const char* _dosType,
978 const char* _unixType, const char* _mimeType1, const char* _mimeType2)
979 {
980 vst_strncpy (name.ptr, _name ? _name : "", 127);
981 vst_strncpy (macType.ptr, _macType ? _macType : "", 7);
982 vst_strncpy (dosType.ptr, _dosType ? _dosType : "", 7);
983 vst_strncpy (unixType.ptr, _unixType ? _unixType : "", 7);
984 vst_strncpy (mimeType1.ptr, _mimeType1 ? _mimeType1 : "", 127);
985 vst_strncpy (mimeType2.ptr, _mimeType2 ? _mimeType2 : "", 127);
986 }
987 //-------------------------------------------------------------------------------------------------------
988 }
989
990 //-------------------------------------------------------------------------------------------------------
991 /** File Selector Description used in #audioMasterOpenFileSelector. */
992 //-------------------------------------------------------------------------------------------------------
993 struct VstFileSelect
994 {
995 //-------------------------------------------------------------------------------------------------------
996 VstInt32 command; ///< @see VstFileSelectCommand
997 VstInt32 type; ///< @see VstFileSelectType
998 VstInt32 macCreator; ///< optional: 0 = no creator
999 VstInt32 nbFileTypes; ///< number of fileTypes
1000 VstFileType* fileTypes; ///< list of fileTypes @see VstFileType
1001 char[1024] title; ///< text to display in file selector's title
1002 char* initialPath; ///< initial path
1003 char* returnPath; ///< use with #kVstFileLoad and #kVstDirectorySelect. null: Host allocates memory, plug-in must call #closeOpenFileSelector!
1004 VstInt32 sizeReturnPath; ///< size of allocated memory for return paths
1005 char** returnMultiplePaths; ///< use with kVstMultipleFilesLoad. Host allocates memory, plug-in must call #closeOpenFileSelector!
1006 VstInt32 nbReturnPath; ///< number of selected paths
1007 VstIntPtr reserved; ///< reserved for Host application
1008
1009 char[116] future; ///< reserved for future use
1010 //-------------------------------------------------------------------------------------------------------
1011 }
1012
1013 //-------------------------------------------------------------------------------------------------------
1014 /** Command constants used in #VstFileSelect structure. */
1015 //-------------------------------------------------------------------------------------------------------
1016 alias int VstFileSelectCommand;
1017 enum : VstFileSelectCommand
1018 {
1019 //-------------------------------------------------------------------------------------------------------
1020 kVstFileLoad = 0, ///< for loading a file
1021 kVstFileSave, ///< for saving a file
1022 kVstMultipleFilesLoad, ///< for loading multiple files
1023 kVstDirectorySelect ///< for selecting a directory/folder
1024 //-------------------------------------------------------------------------------------------------------
1025 }
1026
1027 //-------------------------------------------------------------------------------------------------------
1028 /** Types used in #VstFileSelect structure. */
1029 //-------------------------------------------------------------------------------------------------------
1030 alias int VstFileSelectType;
1031 enum : VstFileSelectType
1032 {
1033 //-------------------------------------------------------------------------------------------------------
1034 kVstFileType = 0 ///< regular file selector
1035 //-------------------------------------------------------------------------------------------------------
1036 }
1037
1038 //-------------------------------------------------------------------------------------------------------
1039 /** Structure used for #effBeginLoadBank/#effBeginLoadProgram. */
1040 //-------------------------------------------------------------------------------------------------------
1041 struct VstPatchChunkInfo
1042 {
1043 //-------------------------------------------------------------------------------------------------------
1044 VstInt32 version_; ///< Format Version (should be 1)
1045 VstInt32 pluginUniqueID; ///< UniqueID of the plug-in
1046 VstInt32 pluginVersion; ///< Plug-in Version
1047 VstInt32 numElements; ///< Number of Programs (Bank) or Parameters (Program)
1048
1049 char[48] future; ///< Reserved for future use
1050 //-------------------------------------------------------------------------------------------------------
1051 }
1052
1053 //-------------------------------------------------------------------------------------------------------
1054 /** PanLaw Type. */
1055 //-------------------------------------------------------------------------------------------------------
1056 alias int VstPanLawType;
1057 enum : VstPanLawType
1058 {
1059 //-------------------------------------------------------------------------------------------------------
1060 kLinearPanLaw = 0, ///< L = pan * M; R = (1 - pan) * M;
1061 kEqualPowerPanLaw ///< L = pow (pan, 0.5) * M; R = pow ((1 - pan), 0.5) * M;
1062 //-------------------------------------------------------------------------------------------------------
1063 }
1064
1065 //-------------------------------------------------------------------------------------------------------
1066 /** Process Levels returned by #audioMasterGetCurrentProcessLevel. */
1067 //-------------------------------------------------------------------------------------------------------
1068 alias int VstProcessLevels;
1069 enum : VstProcessLevels
1070 {
1071 //-------------------------------------------------------------------------------------------------------
1072 kVstProcessLevelUnknown = 0, ///< not supported by Host
1073 kVstProcessLevelUser, ///< 1: currently in user thread (GUI)
1074 kVstProcessLevelRealtime, ///< 2: currently in audio thread (where process is called)
1075 kVstProcessLevelPrefetch, ///< 3: currently in 'sequencer' thread (MIDI, timer etc)
1076 kVstProcessLevelOffline ///< 4: currently offline processing and thus in user thread
1077 //-------------------------------------------------------------------------------------------------------
1078 }
1079
1080 //-------------------------------------------------------------------------------------------------------
1081 /** Automation States returned by #audioMasterGetAutomationState. */
1082 //-------------------------------------------------------------------------------------------------------
1083 alias int VstAutomationStates;
1084 enum : VstAutomationStates
1085 {
1086 //-------------------------------------------------------------------------------------------------------
1087 kVstAutomationUnsupported = 0, ///< not supported by Host
1088 kVstAutomationOff, ///< off
1089 kVstAutomationRead, ///< read
1090 kVstAutomationWrite, ///< write
1091 kVstAutomationReadWrite ///< read and write
1092 //-------------------------------------------------------------------------------------------------------
1093 }