VST2SDK
A recreation of the popular Steinberg VST 2.x SDK.
Loading...
Searching...
No Matches
vst.h
Go to the documentation of this file.
1/* An attempt at an untained clean room reimplementation of the widely popular VST 2.x SDK.
2 * Copyright (c) 2020 Xaymar Dirks <info@xaymar.com> (previously known as Michael Fabian Dirks)
3 *
4 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
5 * following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
8 * disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
11 * following disclaimer in the documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
14 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
15 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
16 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
17 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
18 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
19 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20 */
21
22// Please refer to README.md and LICENSE for further information.
23
24// Protect against double inclusion in practically every compiler available.
25#pragma once
26#ifndef VST2SDK_VST_H
27/** @private */
28#define VST2SDK_VST_H
29
30/* The VST 2.x alignment appears to be 8 for both 32 and 64-bit. This alignment is ignored by some earlier Windows
31 * platforms and compilers, but we don't care about those.
32 */
33#pragma pack(push, 8)
34
35#ifdef __cplusplus
36#include <cinttypes>
37extern "C" {
38#else
39#include <inttypes.h>
40#endif
41
42/** Standard calling convention across plug-ins and hosts.
43 * On some older Windows platforms this is not __cdecl but something similar to __stdcall. We don't really care about
44 * those old platforms anyway so __cdecl it is.
45 */
46#define VST_FUNCTION_INTERFACE __cdecl
47
48/** Maximum number of channels/streams/inputs/outputs supported by VST 2.x
49 */
50#define VST_MAX_CHANNELS 32 // Couldn't find any audio editing software which would attempt to add more channels.
51
52/** Convert four numbers into a FourCC
53 */
54#define VST_FOURCC(a,b,c,d) ((((uint32_t)a) << 24) | (((uint32_t)b) << 16) | (((uint32_t)c) << 8) | (((uint32_t)d) << 0))
55
56/** Known Status Codes
57 */
59 /** Unknown / False
60 * We either don't know the answer or we can't handle the data/notification.
61 *
62 * @sa VST_HOST_OPCODE
63 * @sa VST_EFFECT_OPCODE
64 */
66 /** @sa VST_STATUS_0 */
68 /** @sa VST_STATUS_0 */
70 /** @sa VST_STATUS_0 */
72
73 /** Yes / True
74 * We've handled the data/notification.
75 *
76 * @sa VST_HOST_OPCODE
77 * @sa VST_EFFECT_OPCODE
78 */
80 /** @sa VST_STATUS_1 */
82 /** @sa VST_STATUS_1 */
84 /** @sa VST_STATUS_1 */
86
87 /** No
88 * We're unable to handle the data/notification.
89 *
90 * @sa VST_HOST_OPCODE
91 * @sa VST_EFFECT_OPCODE
92 */
94 /** @sa VST_STATUS_m1 */
96
97 _VST_STATUS_PAD = 0xFFFFFFFFul,
98};
99
100/** Known Buffer Sizes
101 */
115}; // This is an enum because I started to dislike macros.
116
117/** Valid VST 1.x and 2.x versions
118 * The format is either a single digit or four digits in Base10 format.
119 *
120 * @code{.c}
121 * // Converts a Base10 VST version to a uint8_t[4] representation of the version.
122 * uint32_t expand_vst_version(uint32_t v) {
123 * if (v < 10) { //
124 * return v << 24;
125 * }
126 * uint8_t major = v / 1000;
127 * uint8_t minor = (v / 100) % 10;
128 * uint8_t revision = (v / 10) % 10;
129 * uint8_t patch = v % 10;
130 * return (major << 24) | (minor << 16) | (revision << 8) | patch;
131 * }
132 * @endcode
133 */
135 VST_VERSION_1 = 0, // Anything before 2.0, used by official plug-ins.
136 VST_VERSION_1_0_0_0 = 1000, // 1.0, used by some third-party plug-ins.
137 VST_VERSION_1_1_0_0 = 1100, // 1.1, used by some third-party plug-ins.
138 VST_VERSION_2 = 2, // 2.0, used by official plug-ins.
139 VST_VERSION_2_0_0_0 = 2000, // 2.0, used by some third-party plug-ins.
140 VST_VERSION_2_1_0_0 = 2100, // 2.1
141 VST_VERSION_2_2_0_0 = 2200, // 2.2
142 VST_VERSION_2_3_0_0 = 2300, // 2.3
143 VST_VERSION_2_4_0_0 = 2400, // 2.4
144
145 // Pad to force 32-bit number.
146 _VST_VERSION_PAD = 0xFFFFFFFFul,
147};
148
149/** Window/Editor Rectangle.
150 * The order is counter-clockwise starting from the top.
151 */
153 int16_t top;
154 int16_t left;
155 int16_t bottom;
156 int16_t right;
157};
158
159//------------------------------------------------------------------------------------------------------------------------
160// VST Parameters
161//------------------------------------------------------------------------------------------------------------------------
162
163/** Flags for parameters.
164 * @sa vst_parameter_properties_t
165 */
167 /** Parameter is an on/off switch.
168 *
169 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
170 */
172 /** @sa VST_PARAMETER_FLAG_1ls0 */
174
175 /** Parameter limits are set as integers.
176 *
177 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
178 */
180 /** @sa VST_PARAMETER_FLAG_1ls1 */
182
183 /** Parameter uses float steps.
184 *
185 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
186 */
188 /** @sa VST_PARAMETER_FLAG_1ls2 */
190
191 /** Parameter uses integer steps.
192 *
193 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
194 */
196 /** @sa VST_PARAMETER_FLAG_1ls3 */
198
199 /** Parameter has an display order index for the default editor.
200 *
201 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
202 */
204 /** @sa VST_PARAMETER_FLAG_1ls4 */
206
207 /** Parameter has a category for the default editor.
208 *
209 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
210 */
212 /** @sa VST_PARAMETER_FLAG_1ls5 */
214
215 /** Parameter can be gradually increased/decreased.
216 *
217 * @sa VST_EFFECT_OPCODE_PARAM_IS_AUTOMATABLE
218 */
220 /** @sa VST_PARAMETER_FLAG_1ls6 */
222
224};
225
226/** Information about a parameter.
227 *
228 * @important Many VST hosts and plug-ins expect their parameters to be normalized within 0.0 and 1.0.
229 */
231 /** Float Step value
232 *
233 * Some hosts and plug-ins expect this to be within 0 and 1.0.
234 *
235 * @note Requires @ref VST_PARAMETER_FLAG_STEP_FLOAT to be set.
236 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
237 */
238 float step_f32;
239
240 /** Float small step value
241 * This is used for "tiny" changes.
242 *
243 * Some hosts and plug-ins expect this to be within 0 and 1.0.
244 *
245 * @note Requires @ref VST_PARAMETER_FLAG_STEP_FLOAT to be set.
246 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
247 */
249
250 /** Float large step value
251 * This is used for "huge" changes.
252 *
253 * Some hosts and plug-ins expect this to be within 0 and 1.0.
254 *
255 * @note Requires @ref VST_PARAMETER_FLAG_STEP_FLOAT to be set.
256 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
257 */
259
260 /** Human-readable name for this parameter.
261 *
262 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
263 */
265
266 /** Parameter Flags
267 *
268 * Any combination of @ref VST_PARAMETER_FLAG.
269 */
270 uint32_t flags;
271
272 /** Minimum Integer value
273 *
274 * @note Requires @ref VST_PARAMETER_FLAG_INTEGER_LIMITS to be set.
275 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
276 */
278
279 /** Maximum Integer value
280 *
281 * @note Requires @ref VST_PARAMETER_FLAG_INTEGER_LIMITS to be set.
282 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
283 */
285
286 /** Integer Step value
287 *
288 * @note Requires @ref VST_PARAMETER_FLAG_STEP_INT to be set.
289 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
290 */
291 int32_t step_i32;
292
293 /** Short Human-readable label for this parameter.
294 *
295 * I have no idea why this exists?
296 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
297 */
299
300 /** Display order index.
301 *
302 * @note Requires @ref VST_PARAMETER_FLAG_INDEX to be set.
303 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
304 */
305 uint16_t index;
306
307 /** Category index
308 *
309 * Must either be 0 for no category, or any number increasing from 1 onwards.
310 *
311 * @note Requires @ref VST_PARAMETER_FLAG_CATEGORY to be set.
312 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
313 */
314 uint16_t category;
315
316 /** How many parameters are in this category?
317 * This allows the plug-in to specify the same category multiple times.
318 *
319 * @note Requires @ref VST_PARAMETER_FLAG_CATEGORY to be set.
320 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
321 */
323
324 uint16_t _unknown_00; // Must be set to 0.
325
326 /** Human-readable name for the category this parameter is in.
327 *
328 * @note Requires @ref VST_PARAMETER_FLAG_CATEGORY to be set.
329 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
330 */
332
333 char _reserved[16]; // Reserved for future expansions?
334};
335
336//------------------------------------------------------------------------------------------------------------------------
337// VST Input Microphones/Output Speakers
338//------------------------------------------------------------------------------------------------------------------------
339
341 // Default Types
347 VST_SPEAKER_TYPE_LEFT_REAR = 5, // Rear/Surround Left
348 VST_SPEAKER_TYPE_RIGHT_REAR = 6, // Rear/Surround Right
349 // 7
350 // 8
351 // 9
352 VST_SPEAKER_TYPE_LEFT_SIDE = 10, // Side Left
353 VST_SPEAKER_TYPE_RIGHT_SIDE = 11, // Side Right
354 // 12
355 // 13
356 // 14
357 // 15
358 // ...
359
360 // User Types (seen rarely, but never exceeds -32)
393
394
395 // Pad to force 32-bit number.
396 _VST_SPEAKER_TYPE_PAD = 0xFFFFFFFFul,
397};
398
400 /** Azimuth in Radians
401 * Range: -PI (Left) through 0.0 (Right) to PI (Left)
402 *
403 * @note Must be 10.0 if this is a LFE.
404 */
405 float azimuth;
406
407 /** Altitude in Radians
408 * Range: -PI/2 (Bottom) to PI/2 (Top)
409 *
410 * @note Must be 10.0 if this is a LFE.
411 */
412 float altitude;
413
414 /** Distance in Meters
415 * range: 0 to +-Infinity
416 *
417 * @note Must be 0.0 if this is a LFE.
418 */
419 float distance;
420
421 float _unknown_00; // Must be set to 0
422
423 /** Human readable name for this speaker.
424 *
425 * Some hosts will behave weird if you use "L", "R", "C", "Ls", "Rs", "Lc", "Rc", "LFE", "Lfe", "Sl", "Sr", "Cs",
426 * and other 2 to 3 letter short codes. Best not to use those if you like your plug-in in a not-crashy state.
427 */
429
430 /** The type of the speaker
431 *
432 * See VST_SPEAKER_TYPE
433 *
434 * If the above is one of those short codes some host seems to overwrite this with their own. Memory safety is
435 * optional apparently.
436 */
437 int32_t type;
438
439 uint8_t _reserved[28]; // Reserved for future expansions?
440};
441
443 /** Custom speaker arrangement.
444 *
445 * Accidentally discovered through random testing.
446 */
448
449 /** Unknown/Empty speaker layout.
450 */
452
453 /** Mono
454 */
456
457 /** Stereo
458 */
460
461 /** Quadraphonic
462 */
464
465 /** 5.0 (Old Surround)
466 *
467 * L, R, C, RL, RR
468 */
470
471 /** 5.1 (Old Surround)
472 *
473 * L, R, C, LFE, RL, RR
474 */
476
477 /** 7.1 (Full Surround)
478 *
479 * L, R, C, LFE, SL, SR, RL, RR
480 */
482
483 // Pad to force 32-bit number.
485};
486
488 int32_t type; // See VST_SPEAKER_ARRANGEMENT_TYPE
489 int32_t channels; // Number of channels in this arrangement.
490 struct vst_speaker_properties_t speakers[VST_MAX_CHANNELS]; // Array of speaker properties, actual size defined by channels.
491};
492
493//------------------------------------------------------------------------------------------------------------------------
494// VST Input/Output Streams
495//------------------------------------------------------------------------------------------------------------------------
496
498 /** Ignored?
499 */
501
502 /** Stream is in Stereo
503 *
504 * Can't be used with VST_STREAM_FLAG_USE_TYPE.
505 */
508
509 /** Stream is defined by VST_SPEAKER_ARRANGEMENT_TYPE
510 *
511 * Can't be used with VST_STREAM_FLAG_STEREO.
512 */
515};
516
518 /** Human-readable name for this stream.
519 */
521
522 /** Stream flags
523 * Any combination of VST_STREAM_FLAG
524 */
525 int32_t flags;
526
527 /** Stream arrangement (optional)
528 * See VST_SPEAKER_ARRANGEMENT_TYPE
529 */
530 int32_t type;
531
532 /** Human-readable label for this stream.
533 */
535
536 uint8_t _reserved[48]; // 48 bytes of uninitialized data, always.
537};
538
539//------------------------------------------------------------------------------------------------------------------------
540// VST Events
541//------------------------------------------------------------------------------------------------------------------------
542
543/** A generic event.
544 *
545 * @sa vst_host_supports_t.sendVstEvents
546 * @sa vst_host_supports_t.receiveVstEvents
547 */
549 int32_t _unknown_00;
550 int32_t _unknown_01;
551 int32_t _unknown_02;
552 int32_t _unknown_03;
553 int32_t _unknown_04; // Always zero or uninitialized.
554 int32_t _unknown_05; // Always zero or uninitialized.
555 int32_t _unknown_06; // Always zero or uninitialized.
556 int32_t _unknown_07; // Always zero or uninitialized.
557};
558
559/** A collection of events.
560 *
561 * @sa vst_event_t
562 * @sa vst_host_supports_t.sendVstEvents
563 * @sa vst_host_supports_t.receiveVstEvents
564 * @sa vst_effect_supports_t.sendVstEvents
565 * @sa vst_effect_supports_t.receiveVstEvents
566 * @sa VST_EFFECT_OPCODE_EVENT
567 * @sa VST_HOST_OPCODE_EVENT
568 */
570 /** Number of events stored in @ref vst_events_t.events.
571 */
572 int32_t count;
573
574 int32_t _unknown_00; // Always zero or uninitialized.
575
576 /** An array of pointers to valid @ref vst_event_t structures.
577 *
578 * The size of this array is defined by @ref vst_events_t.count.
579 */
581};
582
583//------------------------------------------------------------------------------------------------------------------------
584// VST Host related Things
585//------------------------------------------------------------------------------------------------------------------------
586
587struct vst_effect_t; // Pre-define vst_effect_t so we can use it below.
588
589/** Plug-in to Host Op-Codes
590 * These Op-Codes are emitted by the plug-in and the host _may_ handle them or return 0 (false).
591 * We have no guarantees about anything actually happening.
592 */
594 /** Update automation for a given Parameter
595 *
596 * Must be used to notify the host that the parameter was changed by the user if a custom editor is used.
597 *
598 * @param p_int1 Parameter Index
599 * @param p_float Parameter Value
600 * @return Expected to return... something.
601 */
602 VST_HOST_OPCODE_00 = 0x00, // cb(vst, 0x00, ?, 0, 0);
603 /** @sa VST_HOST_OPCODE_00 */
605 /** @sa VST_HOST_OPCODE_00 */
607
608 /** Retrieve the Hosts VST Version.
609 *
610 * @return See VST_VERSION enumeration.
611 */
613 /** @sa VST_HOST_OPCODE_01 */
615
616 /** Get the currently selected effect id in container plug-ins.
617 *
618 * Used in combination with @ref VST_EFFECT_CATEGORY_CONTAINER.
619 *
620 * @return The currently selected unique effect id in this container.
621 */
622 VST_HOST_OPCODE_02 = 0x02, // bool cb(0, 0x02, 0, 0, 0);
623 /** @sa VST_HOST_OPCODE_02 */
625
626 /** Some sort of idle keep-alive?
627 *
628 * Seems to be called only in editor windows when a modal popup is present.
629 */
631 /** @sa VST_HOST_OPCODE_03 */
633
635
636 //--------------------------------------------------------------------------------
637 // VST 2.x starts here.
638 //--------------------------------------------------------------------------------
639
641
643
645
647
648 /** Send events from plug-in to host.
649 * The host must support receiving events (see @ref vst_host_supports_t.receiveVstEvents) while the plug-in may
650 * optionally signal to the host that it wants to send events to the host (see @ref
651 * vst_effect_supports_t.sendVstEvents).
652 *
653 * @sa vst_event_t
654 * @sa vst_events_t
655 * @sa vst_effect_supports_t.sendVstEvents
656 * @sa vst_host_supports_t.receiveVstEvents
657 * @sa VST_EFFECT_OPCODE_EVENT
658 * @note (VST 2.0+) Available from VST 2.0 onwards.
659 * @param p_ptr A valid pointer to a @ref vst_events_t structure.
660 */
662 /** @sa VST_HOST_OPCODE_09 */
664
666
668
670
672
673 /** Notify the host that numInputs/numOutputs/delay/numParams has changed.
674 * Only supported if the host replies @ref VST_STATUS_TRUE to @ref VST_HOST_OPCODE_SUPPORTS query for
675 * @ref vst_host_supports_t.acceptIOChanges.
676 *
677 * @note In VST 2.3 and earlier calling this outside of @ref VST_EFFECT_OPCODE_IDLE may result in a crash.
678 * @note In VST 2.3 and later this may only be called while between @ref VST_EFFECT_OPCODE_PROCESS_END and
679 * @ref VST_EFFECT_OPCODE_PROCESS_BEGIN.
680 *
681 * @return @ref VST_STATUS_TRUE if supported and handled otherwise @ref VST_STATUS_FALSE.
682 */
684 /** @sa VST_HOST_OPCODE_0E */
686
688
689 /** Request that the host changes the size of the containing window.
690 *
691 * @note (VST 2.x) Available from VST 2.0 onwards.
692 * @sa vst_host_supports_t.sizeWindow
693 *
694 * @param p_int1 Width (in pixels) that we'd like to have.
695 * @param p_int2 Height (in pixels) that we'd like to have.
696 * @param p_ptr Must be zero'd.
697 * @param p_float Must be zero'd.
698 * @return @ref VST_STATUS_TRUE if change was accepted, anything else if not. Do not rely on the return code being 0.
699 */
701 /** @sa VST_HOST_OPCODE_10 */
703
705
707
709
711
713
715
717
719
721
723
725
727
729
730 /** Retrieve the hosts output speaker arrangement.
731 * Seems to always reply with the data provided in @ref VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT p_ptr.
732 *
733 * @note (VST 2.3+) Available from VST 2.3 onwards.
734 * @deprecated (VST 2.4+) Deprecated from VST 2.4 onwards.
735 * @sa vst_speaker_arrangement_t
736 * @sa VST_EFFECT_OPCODE_SET_SPEAKER_ARRANGEMENT
737 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
738 * @sa VST_HOST_OPCODE_GET_INPUT_SPEAKER_ARRANGEMENT
739 * @return Seems to be a valid pointer to @ref vst_speaker_arrangement_t if supported.
740 */
742 /** @sa VST_HOST_OPCODE_1E */
744 /** @sa VST_HOST_OPCODE_1E */
746
748
750
751 /** Retrieve the vendor name into the ptr buffer.
752 *
753 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_VENDOR_NAME.
754 */
756 /** @sa VST_HOST_OPCODE_21 */
758
759 /** Retrieve the product name into the ptr buffer.
760 *
761 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_PRODUCT_NAME.
762 */
764 /** @sa VST_HOST_OPCODE_22 */
766
767 /** Retrieve the vendor version in return value.
768 *
769 * @return Version.
770 */
772 /** @sa VST_HOST_OPCODE_23 */
774
775 /** User defined OP Code, for custom interaction.
776 *
777 */
779 /** @sa VST_HOST_OPCODE_24 */
781
783
784 /** Check if the host supports a certain feature.
785 *
786 * @param p_ptr `char[...]` Zero terminated string for which feature we want to support.
787 * @return @ref VST_STATUS_TRUE if the feature is supported otherwise @ref VST_STATUS_FALSE.
788 */
790 /** @sa VST_HOST_OPCODE_26 */
792
794
796
797 /** Retrieve the directory of the effect that emitted this.
798 * The returned value seems to be unchanged for container plug-ins.
799 *
800 * @note (VST 2.0+) Available from VST 2.0 onwards.
801 * @return (Windows) A zero-terminated char buffer of unknown size.
802 * @return (MacOS) A valid FSSpec structure.
803 */
805 /** @sa VST_HOST_OPCODE_29 */
807
808 /** Refresh everything related to the effect that emitted this event.
809 * The plug-in should only emit this if something important has changed that the host doesn't already know about.
810 *
811 * @note (VST 2.0+) Available from VST 2.0 onwards.
812 */
814 /** @sa VST_HOST_OPCODE_2A */
815 //VST_HOST_OPCODE_EDITOR_UPDATE = 0x2A,
816 /** @sa VST_HOST_OPCODE_2A */
818
819 //--------------------------------------------------------------------------------
820 // VST 2.1
821 //--------------------------------------------------------------------------------
822
823 /** Notify host that a parameter is being edited.
824 * "Locks" the parameter from being edited in compatible hosts.
825 *
826 * @note (VST 2.1+) Available from VST 2.1 onwards.
827 * @param p_int1 Parameter index.
828 */
830 /** @sa VST_HOST_OPCODE_2B */
832 /** @sa VST_HOST_OPCODE_2B */
834
835 /** Notify host that parameter is no longer being edited.
836 * "Unlocks" the parameter for further editing in compatible hosts. Remember to call the @ref VST_HOST_PARAM_UPDATE
837 * op-code afterwards so that the host knows it needs to update its automation data.
838 *
839 * @note (VST 2.1+) Available from VST 2.1 onwards.
840 * @sa VST_HOST_PARAM_UPDATE
841 * @param p_int1 Parameter index.
842 */
844 /** @sa VST_HOST_OPCODE_2C */
846 /** @sa VST_HOST_OPCODE_2C */
848
849 //--------------------------------------------------------------------------------
850 // VST 2.2
851 //--------------------------------------------------------------------------------
852
854
856
857 /**
858 * When queried by the plug-in shortly after @ref VST_EFFECT_OPCODE_PROGRAM_LOAD it often crashes compatible hosts
859 * with a memory access exception. This exception can be controlled with p_ptr but it's unclear what that is
860 * pointing at so far. In the event that it doesn't crash the memory address we pointed at changes to a path.
861 *
862 * @todo Figure out what p_ptr is.
863 * @note (VST 2.2+) Available from VST 2.2 onwards.
864 * @deprecated (VST 2.4+) Deprecated from VST 2.4 onwards.
865 * @param p_ptr A pointer to something
866 */
868
869 //--------------------------------------------------------------------------------
870 // VST 2.3
871 //--------------------------------------------------------------------------------
872
873 /** Retrieve the hosts input speaker arrangement.
874 * Seems to always reply with the data provided in @ref VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT p_int2.
875 *
876 * @note (VST 2.3+) Available from VST 2.3 onwards.
877 * @deprecated (VST 2.4+) Deprecated from VST 2.4 onwards.
878 * @sa vst_speaker_arrangement_t
879 * @sa VST_EFFECT_OPCODE_SET_SPEAKER_ARRANGEMENT
880 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
881 * @sa VST_HOST_OPCODE_GET_OUTPUT_SPEAKER_ARRANGEMENT
882 * @return Seems to be a valid pointer to @ref vst_speaker_arrangement_t if supported.
883 */
885 /** @sa VST_HOST_OPCODE_30 */
887 /** @sa VST_HOST_OPCODE_30 */
889
890 // Highest number of known OPCODE.
892
893 // Pad to force 32-bit number.
894 _VST_HOST_OPCODE_PAD = 0xFFFFFFFFul,
895};
896
897/** Plug-in to Host support checks
898 *
899 * Provided as `char* p_ptr` in the VST_EFFECT_OPCODE_SUPPORTS op code.
900 *
901 * Harvested via strings command and just checking what hosts actually responded to.
902 */
904 /** Does the host support modifying input/output/params/delay when programs, banks or parameters are changed?
905 * This only means that the host supports this inside of @ref VST_EFFECT_OPCODE_IDLE (VST 2.3 or earlier) or outside
906 * of a @ref VST_EFFECT_OPCODE_PROCESS_BEGIN and @ref VST_EFFECT_OPCODE_PROCESS_END group.
907 *
908 * Signals that the host supports the following:
909 * - @ref VST_HOST_OPCODE_IO_MODIFIED
910 *
911 * @return @ref VST_STATUS_TRUE if it supports it.
912 */
913 const char* acceptIOChanges;
914
915 /** Is the host using process begin/end instead of idle?
916 * The host may opt to emit @ref VST_EFFECT_OPCODE_IDLE or @ref VST_EFFECT_OPCODE_PROCESS_BEGIN and
917 * @ref VST_EFFECT_OPCODE_PROCESS_END when running in VST 2.3 compatibility mode.
918 *
919 * @sa VST_EFFECT_OPCODE_PROCESS_BEGIN
920 * @sa VST_EFFECT_OPCODE_PROCESS_END
921 * @sa VST_EFFECT_OPCODE_IDLE
922 * @note (VST 2.3) Available from VST 2.3 onwards.
923 * @deprecated (VST 2.4) This behavior is the default in VST 2.4 and later.
924 * @return @ref VST_STATUS_TRUE if it supports it.
925 */
926 const char* startStopProcess;
927
928 /** Does the host support container plug-ins?
929 *
930 * @note Is shell a reference to Windows shell menus?
931 * @sa VST_HOST_OPCODE_CURRENT_EFFECT_ID
932 * @sa VST_EFFECT_OPCODE_CONTAINER_NEXT_EFFECT_ID
933 * @return @ref VST_STATUS_TRUE if the host supports it _and_ the current plug-in is a container plug-in.
934 */
935 const char* shellCategory;
936
937 /** Can we request that the host changes the editor window size?
938 *
939 * @note (VST 2.0+) Available from VST 2.0 onwards.
940 * @sa VST_HOST_OPCODE_EDITOR_RESIZE
941 */
942 const char* sizeWindow;
943
944 /** Host can send events to plug-in.
945 *
946 * @note (VST 2.0+) Available from VST 2.0 onwards.
947 */
948 const char* sendVstEvents;
949
950 /** Host can receive events from plug-in.
951 *
952 * @note (VST 2.0+) Available from VST 2.0 onwards.
953 */
954 const char* receiveVstEvents;
955
956 const char* sendVstMidiEvent;
959
960 const char* sendVstTimeInfo;
961 const char* reportConnectionChanges; // Seems related to speakers?
962
963 const char* offline;
964
965 const char* editFile;
966 const char* openFileSelector;
967 const char* closeFileSelector;
968} /** @private */ vst_host_supports = {
969 .acceptIOChanges = "acceptIOChanges",
970 .startStopProcess = "startStopProcess",
971 .shellCategory = "shellCategory",
972 .sizeWindow = "sizeWindow",
973 .sendVstEvents = "sendVstEvents",
974 .receiveVstEvents = "receiveVstEvents",
975 .sendVstMidiEvent = "sendVstMidiEvent",
976 .receiveVstMidiEvent = "receiveVstMidiEvent",
977 .sendVstMidiEventFlagIsRealtime = "sendVstMidiEventFlagIsRealtime",
978 .sendVstTimeInfo = "sendVstTimeInfo",
979 .reportConnectionChanges = "reportConnectionChanges",
980 .offline = "offline",
981 .editFile = "editFile",
982 .openFileSelector = "openFileSelector",
983 .closeFileSelector = "closeFileSelector",
984};
985
986/** Plug-in to Host callback
987 *
988 * The plug-in may call this to attempt to change things on the host side. The host side is free to ignore all requests, annoyingly enough.
989 *
990 * @param opcode See VST_HOST_OPCODE
991 * @param p_str Zero terminated string or null on call.
992 * @return ?
993 */
994typedef intptr_t (VST_FUNCTION_INTERFACE *vst_host_callback_t)(struct vst_effect_t* plugin, int32_t opcode, int32_t p_int1, int64_t p_int2, const char* p_str, float p_float);
995
996//------------------------------------------------------------------------------------------------------------------------
997// VST Plug-in/Effect related Things
998//------------------------------------------------------------------------------------------------------------------------
999
1000/** Magic Number identifying a VST 2.x plug-in structure
1001 *
1002 * @sa vst_effect_t.magic_numer
1003 */
1004#define VST_MAGICNUMBER VST_FOURCC('V', 's', 't', 'P')
1005
1006/** Default VST 2.x Sample Rate
1007 * All VST 2.x hosts expect you to initialize your plug-in to these default values.
1008 *
1009 * @sa VST_EFFECT_OPCODE_SET_SAMPLE_RATE
1010 */
1011#define VST_DEFAULT_SAMPLE_RATE 44100.0f
1012
1013/** Default VST 2.x Block Size
1014 * All VST 2.x hosts expect you to initialize your plug-in to these default values.
1015 *
1016 * @sa VST_EFFECT_OPCODE_SET_BLOCK_SIZE
1017 */
1018#define VST_DEFAULT_BLOCK_SIZE 1024
1019
1020/** Plug-in Categories
1021 * Pre-defined category grouping that also affect host behavior when handling the plug-in. This is not just a UI/UX
1022 * thing, it actually affects what plug-ins can do, so place your plug-in into the correct category.
1023 *
1024 */
1027
1028 /** Generic Effects
1029 * Examples: Distortion, Pitch Shift, ...
1030 *
1031 * Supports: Delay (Optional), Tail Samples, MIDI
1032 */
1034 /** @sa VST_EFFECT_CATEGORY_01 */
1036
1037 /** Instruments
1038 * Examples: Instruments, Synths, Samplers, ...
1039 *
1040 * Supports: Delay (Optional), Tail Samples, MIDI
1041 */
1043 /** @sa VST_EFFECT_CATEGORY_02 */
1045
1046 /** Metering
1047 * Examples: Loudness Meters, Volume Analysis, ...
1048 *
1049 * Supports: Tail Samples, MIDI
1050 * @note Delay causes crashes in some hosts. Fun.
1051 */
1053 /** @sa VST_EFFECT_CATEGORY_03 */
1055
1056 /** Mastering
1057 * Examples: Compressors, Limiters, ...
1058 *
1059 * Supports: Delay, Tail Samples (optional), MIDI
1060 */
1062 /** @sa VST_EFFECT_CATEGORY_04 */
1064
1065 /** Spatializers
1066 * Examples: Channel Panning, Expanders, ...
1067 *
1068 * Supports: Tail Samples (optional), MIDI
1069 */
1071 /** @sa VST_EFFECT_CATEGORY_05 */
1073
1074 /** Delay/Echo
1075 * Examples: Echo, Reverb, Room Simulation, Delay, ...
1076 *
1077 * Supports: Delay, Tail Samples, MIDI
1078 */
1080 /** @sa VST_EFFECT_CATEGORY_06 */
1082
1084
1085 /** Restoration
1086 * Examples: Noise Filtering, Upsamplers, ...
1087 *
1088 * Supports: Delay, Tail Samples, MIDI
1089 * @note Some DAWs allocate additional processing time to these.
1090 */
1092 /** @sa VST_EFFECT_CATEGORY_08 */
1094
1095 /** Offline Processing
1096 * Examples: Nothing
1097 * Supports: Nothing
1098 */
1100 /** @sa VST_EFFECT_CATEGORY_09 */
1101 VST_EFFECT_CATEGORY_OFFLINE = 0x09, // Offline Processing VST? Seems to receive all audio data prior to playback.
1102
1103 /** Container Plug-in
1104 * This plug-in contains multiple effects in one and requires special handling on both sides.
1105 *
1106 * Host handling:
1107 * @code{.c}
1108 * uint32_t current_select_id;
1109 *
1110 * // ... in intptr_t vst_host_callback(vst_effect_t* plugin, VST_HOST_OPCODE opcode, ...)
1111 * case VST_HOST_OPCODE_SUPPORTS: {
1112 * char* text = (char*)p_ptr;
1113 * // The plug-in may ask the host if it even supports containers at all and changes behavior if we don't.
1114 * if (text && strcmp(text, vst_host_supports.shellCategory) == 0) {
1115 * return VST_STATUS_TRUE;
1116 * }
1117 * }
1118 * case VST_HOST_OPCODE_CURRENT_EFFECT_ID:
1119 * return current_selected_id;
1120 * // ...
1121 *
1122 * // ... in whatever you use to load plug-ins ...
1123 * current_select_id;
1124 * vst_effect_t* plugin = plugin_main(&vst_host_callback);
1125 * int32_t plugin_category = plugin->control(plugin, VST_EFFECT_OPCODE_CATEGORY, 0, 0, 0, 0)
1126 * if (plugin_category == VST_EFFECT_CATEGORY_CONTAINER) {
1127 * char effect_name[VST_BUFFER_SIZE_EFFECT_NAME] effect_name;
1128 * int32_t effect_id;
1129 * // Iterate over all contained effects.
1130 * while ((effect_id = plugin->control(plugin, VST_EFFECT_OPCODE_CONTAINER_NEXT_EFFECT_ID, 0, 0, effect_name, 0)) != 0) {
1131 * // Contained effects must be named as far as I can tell.
1132 * if (effect_name[0] != 0) {
1133 * // Do some logic that does the necessary things to list these in the host.
1134 * }
1135 * }
1136 * } else {
1137 * // Do things to list only this plugin in the host.
1138 * }
1139 * // ...
1140 * @endcode
1141 *
1142 * Plug-in handling:
1143 * @code{.c}
1144 * // ... in vst_effect for the container
1145 * size_t current_effect_idx;
1146 * int32_t effect_list[] = {
1147 * // ... list of effect ids.
1148 * }
1149 * // ... in control(...)
1150 * case VST_EFFECT_OPCODE_CONTAINER_NEXT_EFFECT_ID:
1151 * // Make sure current_effect_idx doesn't exceed the maximum.
1152 * if (current_effect_idx > ARRAYSIZEOF(effect_list)) {
1153 * current_effect_idx;
1154 * return 0;
1155 * }
1156 * // Some code that turns effect indices into names to store into p_ptr.
1157 * return effect_list[current_effect_idx++]; // Return the effect id.
1158 * // ...
1159 *
1160 * VST_ENTRYPOINT {
1161 * // Ensure the host VST 2.x compatible.
1162 * int32_t vst_version = callback(nullptr, VST_HOST_OPCODE_VST_VERSION, 0, 0, 0, 0);
1163 * if (vst_version == 0) {
1164 * return 0; // It's not so we exit early.
1165 * }
1166 *
1167 * // Check if the host wants
1168 * int32_t effect_id = callback(nullptr, VST_HOST_OPCODE_CURRENT_EFFECT_ID, 0, 0, 0);
1169 * if (effect_id == 0) {
1170 * // ... logic specific to making the container.
1171 * return new vst_container_effect();
1172 * } else {
1173 * // ... logic specific to make sub effects
1174 * return new vst_sub_effect();
1175 * }
1176 * }
1177 *
1178 * // ...
1179 * @endcode
1180 */
1182 /** @sa VST_EFFECT_CATEGORY_0A */
1184
1185 /** Waveform Generators
1186 * Examples: Sine Wave Generator, ...
1187 * Supports: Delay, Tail Samples
1188 *
1189 * I don't know why this exists, there's only one plug-in that has it and all it does is generate a 400hz sine wave.
1190 *
1191 * @sa VST_EFFECT_CATEGORY_INSTRUMENT
1192 */
1194 /** @sa VST_EFFECT_CATEGORY_0B */
1196
1197 /** @private */
1198 VST_EFFECT_CATEGORY_MAX, // Not part of specification, marks maximum category.
1199
1200 /** @private */
1201 _VST_EFFECT_CATEGORY_PAD = 0xFFFFFFFFul,
1202};
1203
1204/** Effect Flags
1205 */
1207 /** Effect provides a custom editor.
1208 * The host will not provide a generic editor interface and expects @ref VST_EFFECT_OPCODE_EDITOR_OPEN and
1209 * @ref VST_EFFECT_OPCODE_EDITOR_CLOSE to work as expected. We are in charge of notifying the host about various
1210 * things like which parameter is in focus and stuff.
1211 *
1212 * @sa VST_EFFECT_OPCODE_EDITOR_GET_RECT
1213 * @sa VST_EFFECT_OPCODE_EDITOR_OPEN
1214 * @sa VST_EFFECT_OPCODE_EDITOR_CLOSE
1215 * @sa VST_EFFECT_OPCODE_EDITOR_DRAW
1216 * @sa VST_EFFECT_OPCODE_EDITOR_MOUSE
1217 * @sa VST_EFFECT_OPCODE_EDITOR_KEYBOARD
1218 * @sa VST_EFFECT_OPCODE_EDITOR_KEEP_ALIVE
1219 * @sa VST_EFFECT_OPCODE_EDITOR_VKEY_DOWN
1220 * @sa VST_EFFECT_OPCODE_EDITOR_VKEY_UP
1221 * @sa VST_HOST_OPCODE_EDITOR_UPDATE
1222 * @sa VST_HOST_OPCODE_PARAM_START_EDIT
1223 * @sa VST_HOST_OPCODE_PARAM_STOP_EDIT
1224 * @sa VST_HOST_OPCODE_PARAM_UPDATE
1225 */
1227 /** @sa VST_EFFECT_FLAG_1ls0 */
1229
1230 //1 << 1,
1231 //1 << 2, // Only seen when the plug-in responds to VST_EFFECT_OPCODE_09. Seems to be ignored by hosts entirely.
1232 //1 << 3, // Only seen when the plug-in behaves differently in mono mode. Seems to be ignored by hosts entirely.
1233
1234 /** Effect uses process_float.
1235 *
1236 * @sa vst_effect_t.process_float
1237 * @sa vst_effect_process_float_t
1238 * @deprecated (VST 2.4) Must be set in VST 2.4 and later or the host should fail to load the plug-in.
1239 */
1241 /** @sa VST_EFFECT_FLAG_1ls4 */
1243
1244 /** Effect supports saving/loading programs/banks from unformatted chunk data.
1245 * When not set some sort of format is expected that I've yet to decipher.
1246 *
1247 * @sa VST_EFFECT_OPCODE_GET_CHUNK_DATA
1248 * @sa VST_EFFECT_OPCODE_SET_CHUNK_DATA
1249 */
1251 /** @sa VST_EFFECT_FLAG_1ls5 */
1253
1254 //1 << 6,
1255 //1 << 7,
1256
1257 /** Effect is an Instrument/Generator
1258 *
1259 * This must be set in addition to @ref VST_EFFECT_CATEGORY_INSTRUMENT otherwise instruments don't work right.
1260 * @note (VST 2.x) Flag is new to VST 2.x and later.
1261 */
1263 /** @sa VST_EFFECT_FLAG_1ls8 */
1265
1266 /** Effect does not produce tail samples when the input is silent.
1267 *
1268 * Not to be confused with choosing to tell the host there is no tail.
1269 * @sa VST_EFFECT_OPCODE_GET_TAIL_SAMPLES
1270 * @note (VST 2.x) Flag is new to VST 2.x and later.
1271 */
1273 /** @sa VST_EFFECT_FLAG_1ls9 */
1275
1276 //1 << 10,
1277 //1 << 11,
1278
1279 /** Effect supports process_double.
1280 * The host can freely choose between process_float and process_double as required.
1281 *
1282 * @note (VST 2.4) Available in VST 2.4 and later only.
1283 * @sa vst_effect_t.process_double
1284 * @sa vst_effect_process_double_t
1285 */
1287 /** @sa VST_EFFECT_FLAG_1ls12 */
1289};
1290
1291/** Host to Plug-in Op-Codes
1292 * These Op-Codes are emitted by the host and we must either handle them or return 0 (false).
1293 */
1295 /** Create/Initialize the effect (if it has not been created already).
1296 *
1297 * @return Always 0.
1298 */
1300 /** @sa VST_EFFECT_OPCODE_00 */
1302 /** @sa VST_EFFECT_OPCODE_00 */
1304
1305 /** Destroy the effect (if there is any) and free its memory.
1306 *
1307 * This should destroy the actual object created by VST_ENTRYPOINT.
1308 *
1309 * @return Always 0.
1310 */
1312 /** @sa VST_EFFECT_OPCODE_01 */
1314
1315 /** Set which program number is currently select.
1316 *
1317 * @param p_int2 The program number to set. Can be negative for some reason.
1318 */
1320 /** @sa VST_EFFECT_OPCODE_02 */
1322 /** @sa VST_EFFECT_OPCODE_02 */
1324
1325 /** Get currently selected program number.
1326 *
1327 * @return The currently set program number. Can be negative for some reason.
1328 */
1330 /** @sa VST_EFFECT_OPCODE_03 */
1332 /** @sa VST_EFFECT_OPCODE_03 */
1334
1335 /** Set the name of the currently selected program.
1336 *
1337 * @param p_ptr `const char[VST_BUFFER_SIZE_PROGRAM_NAME]` Zero terminated string.
1338 */
1340 /** @sa VST_EFFECT_OPCODE_04 */
1342 /** @sa VST_EFFECT_OPCODE_04 */
1344
1345 /** Get the name of the currently selected program.
1346 *
1347 * @param p_ptr `char[VST_BUFFER_SIZE_PROGRAM_NAME]` Zero terminated string.
1348 */
1350 /** @sa VST_EFFECT_OPCODE_05 */
1352 /** @sa VST_EFFECT_OPCODE_05 */
1354
1355 /** Get the value? label for the parameter.
1356 *
1357 * @param p_int1 Parameter index.
1358 * @param p_ptr 'char[VST_BUFFER_SIZE_PARAM_LABEL]' Zero terminated string.
1359 * @return 0 on success, 1 on failure.
1360 */
1362 /** @sa VST_EFFECT_OPCODE_06 */
1364 /** @sa VST_EFFECT_OPCODE_06 */
1366 /** @sa VST_EFFECT_OPCODE_06 */
1368
1369 /** Get the string representing the value for the parameter.
1370 *
1371 * @param p_int1 Parameter index.
1372 * @param p_ptr 'char[VST_BUFFER_SIZE_PARAM_VALUE]' Zero terminated string.
1373 * @return 0 on success, 1 on failure.
1374 */
1376 /** @sa VST_EFFECT_OPCODE_07 */
1378 /** @sa VST_EFFECT_OPCODE_07 */
1380 /** @sa VST_EFFECT_OPCODE_07 */
1382 /** @sa VST_EFFECT_OPCODE_07 */
1384
1385 /** Get the name for the parameter.
1386 *
1387 * @param p_int1 Parameter index.
1388 * @param p_ptr 'char[VST_BUFFER_SIZE_PARAM_NAME]' Zero terminated string.
1389 * @return 0 on success, 1 on failure.
1390 */
1392 /** @sa VST_EFFECT_OPCODE_08 */
1394 /** @sa VST_EFFECT_OPCODE_08 */
1396 /** @sa VST_EFFECT_OPCODE_08 */
1398
1399 /**
1400 *
1401 * @deprecated: (VST 2.3+) Not used in VST 2.3 or later.
1402 */
1404
1405 /** Set the new sample rate for the plugin to use.
1406 *
1407 * @param p_float New sample rate as a float (double on 64-bit because register upgrades).
1408 */
1410 /** @sa VST_EFFECT_OPCODE_0A */
1412 /** @sa VST_EFFECT_OPCODE_0A */
1414
1415 /** Sets the block size, which is the maximum number of samples passed into the effect via process calls.
1416 *
1417 * @param p_int2 The maximum number of samples to be passed in.
1418 */
1420 /** @sa VST_EFFECT_OPCODE_0B */
1422 /** @sa VST_EFFECT_OPCODE_0B */
1424
1425 /** Effect processing should be suspended/paused or resumed/unpaused.
1426 *
1427 * Unclear if this is should result in a flush of buffers. In VST 2.3+ this is quite clear as we get process
1428 * begin/end.
1429 *
1430 * @param p_int2 @ref VST_STATUS_FALSE if the effect should suspend processing, @ref VST_STATUS_TRUE if it should
1431 * resume.
1432 */
1434 /** @sa VST_EFFECT_OPCODE_0C */
1436 /** @sa VST_EFFECT_OPCODE_0C */
1438 /** @sa VST_EFFECT_OPCODE_0C */
1440
1441 /** Retrieve the client rect size of the plugins window.
1442 * If no window has been created, returns the default rect.
1443 *
1444 * @param p_ptr Pointer of type 'struct vst_rect_t*'.
1445 * @return On success, returns 1 and updates p_ptr to the rect. On failure, returns 0.
1446 */
1448 /** @sa VST_EFFECT_OPCODE_0D */
1450 /** @sa VST_EFFECT_OPCODE_0D */
1452 /** @sa VST_EFFECT_OPCODE_0D */
1454
1455 /** Create the window for the plugin.
1456 *
1457 * @param p_ptr HWND of the parent window.
1458 * @return 0 on failure, or HWND on success.
1459 */
1461 /** @sa VST_EFFECT_OPCODE_0E */
1463 /** @sa VST_EFFECT_OPCODE_0E */
1465
1466 /** Destroy the plugins window.
1467 *
1468 * @return Always 0.
1469 */
1471 /** @sa VST_EFFECT_OPCODE_0F */
1473 /** @sa VST_EFFECT_OPCODE_0F */
1475
1476 /** Window Draw Event?
1477 *
1478 * Ocasionally called simultaneously as WM_DRAW on windows.
1479 *
1480 * @note Present in some VST 2.1 or earlier plugins.
1481 *
1482 * @note Appears to be Mac OS exclusive.
1483 *
1484 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
1485 */
1487 /** @sa VST_EFFECT_OPCODE_10 */
1489 /** @sa VST_EFFECT_OPCODE_10 */
1491
1492 /** Window Mouse Event?
1493 *
1494 * Called at the same time mouse events happen.
1495 *
1496 * @note Present in some VST 2.1 or earlier plugins.
1497 *
1498 * @note Appears to be Mac OS exclusive.
1499 *
1500 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
1501 */
1503 /** @sa VST_EFFECT_OPCODE_11 */
1505 /** @sa VST_EFFECT_OPCODE_11 */
1507
1508 /** Window Keyboard Event?
1509 *
1510 * Called at the same time keyboard events happen.
1511 *
1512 * @note Present in some VST 2.1 or earlier plugins.
1513 *
1514 * @note Appears to be Mac OS exclusive.
1515 *
1516 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
1517 */
1519 /** @sa VST_EFFECT_OPCODE_12 */
1521 /** @sa VST_EFFECT_OPCODE_12 */
1523
1524 /** Window/Editor Idle/Keep-Alive Callback?
1525 *
1526 * Does not receive any parameters. Randomly called when nothing happens? Idle/Keep-Alive callback?
1527 */
1529 /** @sa VST_EFFECT_OPCODE_13 */
1531
1532 /** Window Focus Event?
1533 *
1534 * Sometimes called when the editor window goes back into focus.
1535 *
1536 * @note Present in some VST 2.1 or earlier plugins.
1537 * @note Appears to be Mac OS exclusive.
1538 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
1539 */
1541
1542 /** Window Unfocus Event?
1543 *
1544 * Sometimes called when the editor window goes out of focus.
1545 *
1546 * @note Present in some VST 2.1 or earlier plugins.
1547 * @note Appears to be Mac OS exclusive.
1548 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
1549 */
1551
1552 /**
1553 *
1554 * @note Present in some VST 2.1 or earlier plugins.
1555 * @important Almost all plug-ins return the @ref VST_FOURCC 'NvEf' (0x4E764566) here.
1556 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
1557 */
1559 /** @sa VST_EFFECT_OPCODE_16 */
1561
1562 /** Get Chunk Data
1563 *
1564 * Save current program or bank state to a buffer.
1565 * Behavior is different based on the @ref VST_EFFECT_FLAG_CHUNKS flag.
1566 *
1567 * @sa VST_EFFECT_FLAG_CHUNKS
1568 * @param p_int1 0 means Bank, 1 means Program, nothing else used?
1569 * @param p_ptr `void**` Pointer to a potential pointer containing your own chunk data.
1570 * @return Size of the Chunk Data in bytes.
1571 */
1573 /** @sa VST_EFFECT_OPCODE_17 */
1575
1576 /** Set Chunk Data
1577 *
1578 * Restore current program or bank state from a buffer.
1579 * Behavior is different based on the @ref VST_EFFECT_FLAG_CHUNKS flag.
1580 *
1581 * @sa VST_EFFECT_FLAG_CHUNKS
1582 * @param p_int1 0 means Bank, 1 means Program, nothing else used?
1583 * @param p_int2 Size of the Chunk Data in bytes.
1584 * @param p_ptr `void*` Pointer to a buffer containing chunk data.
1585 */
1587 /** @sa VST_EFFECT_OPCODE_18 */
1589
1590 //--------------------------------------------------------------------------------
1591 // VST 2.x starts here.
1592 //--------------------------------------------------------------------------------
1593
1594 /** Send events from host to plug-in.
1595 * The plug-in must support receiving events (see @ref vst_effect_supports_t.receiveVstEvents) while the host may
1596 * optionally signal to the plugin that it wants to send events to the host (see @ref
1597 * vst_host_supports_t.sendVstEvents).
1598 *
1599 * @sa vst_event_t
1600 * @sa vst_events_t
1601 * @sa vst_host_supports_t.sendVstEvents
1602 * @sa vst_effect_supports_t.receiveVstEvents
1603 * @sa VST_HOST_OPCODE_EVENT
1604 * @note (VST 2.0+) Available from VST 2.0 onwards.
1605 * @param p_ptr A valid pointer to a @ref vst_events_t structure.
1606 */
1608 /** @sa VST_EFFECT_OPCODE_19 */
1610
1611 /** Can the parameter be automated?
1612 *
1613 * @note (VST 2.0+) Available from VST 2.0 onwards.
1614 * @param p_int1 Index of the parameter.
1615 * @return 1 if the parameter can be automated, otherwise 0.
1616 */
1618 /** @sa VST_EFFECT_OPCODE_1A */
1620 /** @sa VST_EFFECT_OPCODE_1A */
1622 /** @sa VST_EFFECT_OPCODE_1A */
1624
1625 /** Set Parameter value from string representation.
1626 *
1627 * @note (VST 2.0+) Available from VST 2.0 onwards.
1628 * @param p_int1 Index of the parameter.
1629 * @param p_ptr `const char*` Zero terminated string representation of the value to set.
1630 * @return 1 if it worked, otherwise 0.
1631 */
1633 /** @sa VST_EFFECT_OPCODE_1B */
1635 /** @sa VST_EFFECT_OPCODE_1B */
1637
1638 /**
1639 *
1640 *
1641 * @note (VST 2.0+) Available from VST 2.0 onwards.
1642 */
1644
1645 /**
1646 *
1647 * @note (VST 2.0+) Available from VST 2.0 onwards.
1648 * @sa VST_EFFECT_OPCODE_05
1649 */
1651
1652 /**
1653 *
1654 *
1655 * @note (VST 2.0+) Available from VST 2.0 onwards.
1656 */
1658
1659 /** Input connected.
1660 *
1661 *
1662 * @note (VST 2.0+) Available from VST 2.0 onwards.
1663 */
1665
1666 /** Input disconnected.
1667 *
1668 *
1669 * @note (VST 2.0+) Available from VST 2.0 onwards.
1670 */
1672
1673 /** Retrieve properties for the given input index.
1674 *
1675 * @note (VST 2.0+) Available from VST 2.0 onwards.
1676 * @param p_int1 Index of the input to get the properties for.
1677 * @param p_ptr Pointer to @ref vst_stream_properties_t for the selected input provided by the host.
1678 * @return @ref VST_STATUS_TRUE if p_ptr is updated, @ref VST_STATUS_FALSE otherwise.
1679 */
1681 /** @sa VST_EFFECT_OPCODE_21 */
1683
1684 /** Retrieve properties for the given output index.
1685 *
1686 * @note (VST 2.0+) Available from VST 2.0 onwards.
1687 * @param p_int1 Index of the output to get the properties for.
1688 * @param p_ptr Pointer to @ref vst_stream_properties_t for the selected output provided by the host.
1689 * @return @ref VST_STATUS_TRUE if p_ptr is updated, @ref VST_STATUS_FALSE otherwise.
1690 */
1692 /** @sa VST_EFFECT_OPCODE_22 */
1694
1695 /** Retrieve category of this effect.
1696 *
1697 * @note (VST 2.0+) Available from VST 2.0 onwards.
1698 * @return The category that this effect is in, see @ref VST_EFFECT_CATEGORY.
1699 */
1701 /** @sa VST_EFFECT_OPCODE_23 */
1703 /** @sa VST_EFFECT_OPCODE_23 */
1705
1706 /**
1707 *
1708 *
1709 * @note (VST 2.0+) Available from VST 2.0 onwards.
1710 */
1712
1713 /**
1714 *
1715 *
1716 * @note (VST 2.0+) Available from VST 2.0 onwards.
1717 */
1719
1720 /**
1721 *
1722 * Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
1723 * @note (VST 2.0+) Available from VST 2.0 onwards.
1724 */
1726
1727 /**
1728 *
1729 * Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
1730 * @note (VST 2.0+) Available from VST 2.0 onwards.
1731 */
1733
1734 /**
1735 *
1736 * Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
1737 * @note (VST 2.0+) Available from VST 2.0 onwards.
1738 */
1740
1741 /**
1742 *
1743 * Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
1744 * @note (VST 2.0+) Available from VST 2.0 onwards.
1745 */
1747
1748 /** Host wants to change the speaker arrangement.
1749 *
1750 * @note (VST 2.0+) Available from VST 2.0 onwards.
1751 * @param p_int2 Pointer to a @ref vst_speaker_arrangement_t for the input.
1752 * @param p_ptr Pointer to a @ref vst_speaker_arrangement_t for the output.
1753 * @return @ref VST_STATUS_TRUE if we accept the new arrangement, @ref VST_STATUS_FALSE if we don't in which case
1754 * the host is required to ask for the speaker arrangement via @ref VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
1755 * and may retry this op-code with different values.
1756 * @sa vst_effect_t.num_inputs
1757 * @sa vst_effect_t.num_outputs
1758 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
1759 */
1761 /** @sa VST_EFFECT_OPCODE_2A */
1763
1764 /**
1765 *
1766 *
1767 */
1769
1770 /** Enable/Disable bypassing the effect.
1771 *
1772 * See @ref VST_EFFECT_OPCODE_SUPPORTS with @ref vst_effect_supports_t.bypass for more information.
1773 *
1774 * @note (VST 2.0+) Available from VST 2.0 onwards.
1775 * @param p_int2 Zero if bypassing the effect is disabled, otherwise 1.
1776 */
1778 /** @sa VST_EFFECT_OPCODE_2C */
1780
1781 /** Retrieve the effect name into the ptr buffer.
1782 *
1783 * @note (VST 2.0+) Available from VST 2.0 onwards.
1784 * @bug Various hosts only provide a buffer that is 32 bytes long.
1785 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_EFFECT_NAME.
1786 * @return Always 0, even on failure.
1787 */
1789 /** @sa VST_EFFECT_OPCODE_2D */
1791 /** @sa VST_EFFECT_OPCODE_2D */
1793 /** @sa VST_EFFECT_OPCODE_2D */
1795
1796 /** Translate an error code to a string.
1797 *
1798 * @bug Some hosts provide unexpected data in p_ptr.
1799 * @note (VST 2.0+) Available from VST 2.0 onwards.
1800 * @deprecated (VST 2.4+) Fairly sure this is deprecated in VST 2.4 and later.
1801 * @param p_ptr A zero terminated char buffer with undefined size.
1802 * @return @ref VST_STATUS_TRUE if we could translate the error, @ref VST_STATUS_FALSE if not.
1803 */
1805 /** @sa VST_EFFECT_OPCODE_2E */
1807
1808 /** Retrieve the vendor name into the ptr buffer.
1809 *
1810 * @note (VST 2.0+) Available from VST 2.0 onwards.
1811 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_VENDOR_NAME.
1812 */
1814 /** @sa VST_EFFECT_OPCODE_2F */
1816 /** @sa VST_EFFECT_OPCODE_2F */
1818
1819 /** Retrieve the product name into the ptr buffer.
1820 *
1821 * @note (VST 2.0+) Available from VST 2.0 onwards.
1822 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_PRODUCT_NAME.
1823 */
1825 /** @sa VST_EFFECT_OPCODE_30 */
1827 /** @sa VST_EFFECT_OPCODE_30 */
1829
1830 /** Retrieve the vendor version in return value.
1831 *
1832 * @note (VST 2.0+) Available from VST 2.0 onwards.
1833 * @return Version.
1834 */
1836 /** @sa VST_EFFECT_OPCODE_31 */
1838 /** @sa VST_EFFECT_OPCODE_31 */
1840
1841 /** User-defined Op-Code for VST extensions.
1842 *
1843 * @note (VST 2.0+) Available from VST 2.0 onwards.
1844 * All parameters are undefined by the standard and left up to the host/plug-in. Use @ref VST_EFFECT_OPCODE_SUPPORTS
1845 * and @ref VST_EFFECT_OPCODE_VENDOR_NAME + @ref VST_EFFECT_OPCODE_VENDOR_VERSION to check if the plug-in is
1846 * compatible with your expected format.
1847 */
1849 /** @sa VST_EFFECT_OPCODE_32 */
1851
1852 /** Test for support of a specific named feature.
1853 *
1854 * @note (VST 2.0+) Available from VST 2.0 onwards.
1855 * @param p_ptr A zero terminated char buffer of undefined size containing the feature name.
1856 * @return @ref VST_STATUS_YES if the feature is supported, @ref VST_STATUS_NO if the feature is not supported,
1857 * @ref VST_STATUS_UNKNOWN in all other cases.
1858 */
1860 /** @sa VST_EFFECT_OPCODE_33 */
1862
1863 /** Number of samples that are at the tail at the end of playback.
1864 *
1865 * @note (VST 2.0+) Available from VST 2.0 onwards.
1866 * @return @ref VST_STATUS_UNKNOWN for automatic tail size, @ref VST_STATUS_TRUE for no tail, any other number above
1867 * 1 for the number of samples the tail has.
1868 */
1870 /** @sa VST_EFFECT_OPCODE_34 */
1872 /** @sa VST_EFFECT_OPCODE_34 */
1874
1875 /** Notify effect that it is idle?
1876 *
1877 * @note (VST 2.0+) Available from VST 2.0 onwards.
1878 * @deprecated (VST 2.4+) As of VST 2.4 the default behavior is @ref VST_EFFECT_OPCODE_PROCESS_BEGIN and
1879 * @ref VST_EFFECT_OPCODE_PROCESS_END which allows cleaner control flows.
1880 * @sa vst_host_supports.startStopProcess
1881 */
1883 /** @sa VST_EFFECT_OPCODE_35 */
1885
1886 /**
1887 *
1888 *
1889 * @note (VST 2.0+) Available from VST 2.0 onwards.
1890 * @deprecated (VST 2.4) Invalid in all VST 2.4 and later hosts.
1891 */
1893
1894 /**
1895 *
1896 *
1897 * @note (VST 2.0+) Available from VST 2.0 onwards.
1898 * @deprecated (VST 2.4) Invalid in all VST 2.4 and later hosts.
1899 */
1901
1902 /** Parameter Properties
1903 *
1904 * @note (VST 2.0+) Available from VST 2.0 onwards.
1905 * @param p_int1 Parameter index to get properties for.
1906 * @param p_ptr Pointer to @ref vst_parameter_properties_t for the given parameter.
1907 * @return @ref VST_STATUS_YES if supported, otherwise @ref VST_STATUS_NO.
1908 */
1910 /** @sa VST_EFFECT_OPCODE_38 */
1912 /** @sa VST_EFFECT_OPCODE_38 */
1914
1915 /**
1916 *
1917 * @note (VST 2.0+) Available from VST 2.0 onwards.
1918 * @deprecated (VST 2.4) Invalid in all VST 2.4 and later hosts.
1919 */
1921
1922 /** Retrieve the VST Version supported.
1923 *
1924 * @note (VST 2.0+) Available from VST 2.0 onwards.
1925 * @sa VST_VERSION
1926 * @return One of the valid enums in @ref VST_VERSION
1927 */
1929 /** @sa VST_EFFECT_OPCODE_3A */
1931
1932 //--------------------------------------------------------------------------------
1933 // VST 2.1
1934 //--------------------------------------------------------------------------------
1935
1936 /** Editor Virtual Key Down Input
1937 *
1938 * @note (VST 2.1+) Available from VST 2.1 onwards.
1939 * @param p_int1 ASCII character that represents the virtual key code.
1940 * @param p_int2 Virtual Key Code
1941 * @param p_float Modifiers being held down (bitfield)
1942 * @return @ref VST_STATUS_TRUE if we used the input, otherwise @ref VST_STATUS_FALSE
1943 */
1945 /** @sa VST_EFFECT_OPCODE_3B */
1947
1948 /** Editor Virtual Key Up Event
1949 *
1950 * @note (VST 2.1+) Available from VST 2.1 onwards.
1951 * @param p_int1 ASCII character that represents the virtual key code.
1952 * @param p_int2 Virtual Key Code
1953 * @param p_float Modifiers being held down (bitfield)
1954 * @return @ref VST_STATUS_TRUE if we used the input, otherwise @ref VST_STATUS_FALSE
1955 */
1957 /** @sa VST_EFFECT_OPCODE_3C */
1959
1960 /**
1961 *
1962 * @note (VST 2.1+) Available from VST 2.1 onwards.
1963 * @param p_int2 A value between 0 and 2.
1964 */
1966
1967 /**
1968 *
1969 * Midi related
1970 * @note (VST 2.1+) Available from VST 2.1 onwards.
1971 */
1973
1974 /**
1975 *
1976 * Midi related
1977 * @note (VST 2.1+) Available from VST 2.1 onwards.
1978 */
1980
1981 /**
1982 *
1983 * Midi related
1984 * @note (VST 2.1+) Available from VST 2.1 onwards.
1985 */
1987
1988 /**
1989 *
1990 * Midi related
1991 * @note (VST 2.1+) Available from VST 2.1 onwards.
1992 */
1994
1995 /**
1996 *
1997 * Midi related
1998 * @note (VST 2.1+) Available from VST 2.1 onwards.
1999 */
2001
2002 /** Host is starting to set up a program.
2003 * Emitted prior to the host loading a program.
2004 *
2005 * @note (VST 2.1+) Available from VST 2.1 onwards.
2006 * @return @ref VST_STATUS_TRUE if we understood the notification, or @ref VST_STATUS_FALSE if not.
2007 */
2009 /** @sa VST_EFFECT_OPCODE_43 */
2011
2012 /** Host is done setting up a program.
2013 * Emitted after the host finished loading a program.
2014 *
2015 * @note (VST 2.1+) Available from VST 2.1 onwards.
2016 * @return @ref VST_STATUS_TRUE if we understood the notification, or @ref VST_STATUS_FALSE if not.
2017 */
2019 /** @sa VST_EFFECT_OPCODE_44 */
2021
2022 //--------------------------------------------------------------------------------
2023 // VST 2.3
2024 //--------------------------------------------------------------------------------
2025
2026 /** Host wants to know the current speaker arrangement.
2027 *
2028 * @note (VST 2.3+) Available from VST 2.3 onwards.
2029 * @param p_int2 Pointer to @ref vst_speaker_arrangement_t for the input.
2030 * @param p_ptr Pointer to @ref vst_speaker_arrangement_t for the output.
2031 * @return @ref VST_STATUS_TRUE if we were successful, otherwise @ref VST_STATUS_FALSE.
2032 */
2034 /** @sa VST_EFFECT_OPCODE_45 */
2036
2037 /** Get the next effect contained in this effect.
2038 * This returns the next effect based on an effect internal counter, the host does not provide any index.
2039 *
2040 * Used in combination with @ref VST_EFFECT_CATEGORY_CONTAINER.
2041 *
2042 * @note (VST 2.3+) Available from VST 2.3 onwards.
2043 * @param p_ptr Pointer to a char buffer of size @ref VST_BUFFER_SIZE_EFFECT_NAME to store the name of the next effect.
2044 * @return Next effects unique_id
2045 */
2047 /** @sa VST_EFFECT_OPCODE_46 */
2049
2050 /** Begin processing of audio.
2051 *
2052 * Host is requesting that we prepare for a new section of audio separate from the previous section.
2053 * @note (VST 2.3+) Available from VST 2.3 onwards.
2054 */
2056 /** @sa VST_EFFECT_OPCODE_47 */
2058
2059 /** End processing of audio.
2060 *
2061 * Host is requesting that we stop processing audio and go into idle instead.
2062 * @note (VST 2.3+) Available from VST 2.3 onwards.
2063 */
2065 /** @sa VST_EFFECT_OPCODE_48 */
2067
2068 /**
2069 *
2070 *
2071 * @note (VST 2.3+) Available from VST 2.3 onwards.
2072 */
2074
2075 /**
2076 *
2077 * @note (VST 2.3+) Available from VST 2.3 onwards.
2078 * @sa VST_EFFECT_CATEGORY_SPATIAL
2079 * @param p_int2 Unknown meaning.
2080 * @param p_float Unknown meaning, usually 1.0
2081 */
2083
2084 /** Host wants to know if we can load the provided bank data.
2085 * Should be emitted prior to @ref VST_EFFECT_OPCODE_SET_CHUNK_DATA by the host.
2086 *
2087 * @note (VST 2.3+) Available from VST 2.3 onwards.
2088 * @param p_ptr Unknown structured data.
2089 * @return @ref VST_STATUS_NO if we can't load the data, @ref VST_STATUS_YES if we can load the data,
2090 * @ref VST_STATUS_UNKNOWN if this isn't supported.
2091 */
2093 /** @sa VST_EFFECT_OPCODE_4B */
2095
2096 /** Host wants to know if we can load the provided program data.
2097 * Should be emitted prior to @ref VST_EFFECT_OPCODE_PROGRAM_SET_BEGIN by the host.
2098 *
2099 * @note (VST 2.3+) Available from VST 2.3 onwards.
2100 * @param p_ptr Unknown structured data.
2101 * @return @ref VST_STATUS_NO if we can't load the data, @ref VST_STATUS_YES if we can load the data,
2102 * @ref VST_STATUS_UNKNOWN if this isn't supported.
2103 */
2105 /** @sa VST_EFFECT_OPCODE_4C */
2107
2108 //--------------------------------------------------------------------------------
2109 // VST 2.4
2110 //--------------------------------------------------------------------------------
2111
2112 /**
2113 *
2114 *
2115 * @note (VST 2.4+) Available from VST 2.4 onwards.
2116 */
2118
2119 /**
2120 *
2121 *
2122 * @note (VST 2.4+) Available from VST 2.4 onwards.
2123 */
2125
2126 /**
2127 *
2128 *
2129 * @note (VST 2.4+) Available from VST 2.4 onwards.
2130 */
2132
2133 /** @private */
2134 VST_EFFECT_OPCODE_MAX,
2135
2136 /** @private */
2137 _VST_EFFECT_OPCODE_PAD = 0xFFFFFFFFul,
2138};
2139
2140/** Host to Plug-in support checks
2141 *
2142 * Provided as `char* p_ptr` in the VST_EFFECT_OPCODE_SUPPORTS op code.
2143 *
2144 * Harvested via strings command and just checking what plug-ins actually responded to.
2145 */
2147 /** Effect supports alternative bypass.
2148 * The alternative bypass still has the host call process/process_float/process_double and expects us to compensate
2149 * for our delay/latency, copy inputs to outputs, and do minimal work. If we don't support it the host will not call
2150 * process/process_float/process_double at all while bypass is enabled.
2151 *
2152 * @note VST 2.3 or later only.
2153 * @return VST_STATUS_TRUE if we support this, otherwise VST_STATUS_FALSE.
2154 */
2155 const char* bypass;
2156
2157 const char* sendVstEvents;
2158 const char* receiveVstEvents;
2159 const char* sendVstMidiEvent;
2161 const char* midiProgramNames; // VST 2.1 or later.
2163 const char* offline;
2164 // The following were only found in VST 2.3 plug-ins
2166 const char* conformsToWindowRules; // Mac OS only, invalid in VST 2.4. Seems related to vst_host_supports.sizeWindow
2167 const char* plugAsSend;
2168 const char* mixDryWet;
2169 const char* noRealTime;
2170 const char* multipass;
2171 const char* metapass;
2172 const char* _1in1out;
2173 const char* _1in2out;
2174 const char* _2in1out;
2175 const char* _2in2out;
2176 const char* _2in4out;
2177 const char* _4in2out;
2178 const char* _4in4out;
2179 const char* _4in8out;
2180 const char* _8in4out;
2181 const char* _8in8out;
2182} /** @private */ vst_effect_supports = {
2183 .bypass = "bypass",
2184 .sendVstEvents = "sendVstEvents",
2185 .receiveVstEvents = "receiveVstEvents",
2186 .sendVstMidiEvent = "sendVstMidiEvent",
2187 .receiveVstMidiEvent = "receiveVstMidiEvent",
2188 .midiProgramNames = "midiProgramNames",
2189 .receiveVstTimeInfo = "receiveVstTimeInfo",
2190 .offline = "offline",
2191 .plugAsChannelInsert = "plugAsChannelInsert",
2192 .conformsToWindowRules = "conformsToWindowRules",
2193 .plugAsSend = "plugAsSend",
2194 .mixDryWet = "mixDryWet",
2195 .noRealTime = "noRealTime",
2196 .multipass = "multipass",
2197 .metapass = "metapass",
2198 ._1in1out = "1in1out",
2199 ._1in2out = "1in2out",
2200 ._2in1out = "2in1out",
2201 ._2in2out = "2in2out",
2202 ._2in4out = "2in4out",
2203 ._4in2out = "4in2out",
2204 ._4in4out = "4in4out",
2205 ._4in8out = "4in8out",
2206 ._8in4out = "8in4out",
2207 ._8in8out = "8in8out",
2208};
2209
2210/** Control the VST through an opcode and up to four parameters.
2211 *
2212 * @sa VST_EFFECT_OPCODE
2213 *
2214 * @param self Pointer to the effect itself.
2215 * @param opcode The opcode to run, see @ref VST_EFFECT_OPCODE.
2216 * @param p_int1 Parameter, see @ref VST_EFFECT_OPCODE.
2217 * @param p_int2 Parameter, see @ref VST_EFFECT_OPCODE.
2218 * @param p_ptr Parameter, see @ref VST_EFFECT_OPCODE.
2219 * @param p_float Parameter, see @ref VST_EFFECT_OPCODE.
2220 */
2221typedef intptr_t (VST_FUNCTION_INTERFACE* vst_effect_control_t)(struct vst_effect_t* self, int32_t opcode, int32_t p_int1, intptr_t p_int2, void* p_ptr, float p_float);
2222
2223/** Process the given number of samples in inputs and outputs.
2224 *
2225 * Used to handle input data and provides output data. We seem to be the ones that provide the output buffer?
2226 *
2227 * @param self Pointer to the effect itself.
2228 * @param inputs Pointer to an array of 'const float[samples]' with size @ref vst_effect_t.num_inputs.
2229 * @param outputs Pointer to an array of 'float[samples]' with size @ref vst_effect_t.num_outputs.
2230 * @param samples Number of samples per channel in inputs and outputs.
2231 */
2232typedef void (VST_FUNCTION_INTERFACE* vst_effect_process_t) (struct vst_effect_t* self, const float* const* inputs, float** outputs, int32_t samples);
2233
2234/** Updates the value for the parameter at the given index, or does nothing if out of bounds.
2235 *
2236 * @param self Pointer to the effect itself.
2237 * @param index Parameter index.
2238 * @param value New value for the parameter.
2239 */
2240typedef void(VST_FUNCTION_INTERFACE* vst_effect_set_parameter_t)(struct vst_effect_t* self, uint32_t index, float value);
2241
2242/** Retrieve the current value of the parameter at the given index, or do nothing if out of bounds.
2243 *
2244 * @param self Pointer to the effect itself.
2245 * @param index Parameter index.
2246 * @return Current value of the parameter.
2247 */
2248typedef float(VST_FUNCTION_INTERFACE* vst_effect_get_parameter_t)(struct vst_effect_t* self, uint32_t index);
2249
2250/** Process the given number of single samples in inputs and outputs.
2251 *
2252 * Process input and overwrite the output in place. Host provides output buffers.
2253 *
2254 * @important Not thread-safe on MacOS for some reason or another.
2255 *
2256 * @param self Pointer to the effect itself.
2257 * @param inputs Pointer to an array of 'const float[samples]' with size numInputs.
2258 * @param outputs Pointer to an array of 'float[samples]' with size numOutputs.
2259 * @param samples Number of samples per channel in inputs.
2260 */
2261typedef void(VST_FUNCTION_INTERFACE* vst_effect_process_float_t)(struct vst_effect_t* self, const float* const* inputs, float** outputs, int32_t samples);
2262
2263/** Process the given number of double samples in inputs and outputs.
2264 *
2265 * Process input and overwrite the output in place. Host provides output buffers.
2266 *
2267 * @note (VST 2.4+) Available from VST 2.4 and later.
2268 *
2269 * @param self Pointer to the effect itself.
2270 * @param inputs Pointer to an array of 'const double[samples]' with size numInputs.
2271 * @param outputs Pointer to an array of 'double[samples]' with size numOutputs.
2272 * @param samples Number of samples per channel in inputs.
2273 */
2274typedef void (VST_FUNCTION_INTERFACE* vst_effect_process_double_t)(struct vst_effect_t* self, const double* const* inputs, double** outputs, int32_t samples);
2275
2276/** Plug-in Effect definition
2277 */
2279 /** VST Magic Number
2280 *
2281 * Should always be VST_FOURCC('VstP')
2282 *
2283 * @sa VST_MAGICNUMBER
2284 */
2286
2287 /** Control Function
2288 * @sa vst_effect_control_t
2289 * @sa VST_EFFECT_OPCODE
2290 */
2291 vst_effect_control_t control;
2292
2293 /** Process Function
2294 * @sa vst_effect_process_t
2295 * @deprecated (VST 2.4+) Deprecated and practically unsupported in all VST 2.4 compatible hosts and may treat it
2296 * as just another @ref vst_effect_t.process_float.
2297 */
2299
2300 /** Set Parameter Function
2301 * @sa vst_effect_set_parameter_t
2302 */
2304
2305 /** Get Parameter Function
2306 * @sa vst_effect_get_parameter_t
2307 */
2309
2310 /** Number of available pre-defined programs.
2311 *
2312 * @sa VST_EFFECT_OPCODE_PROGRAM_LOAD
2313 * @sa VST_EFFECT_OPCODE_PROGRAM_SET_BEGIN
2314 * @sa VST_EFFECT_OPCODE_PROGRAM_SET
2315 * @sa VST_EFFECT_OPCODE_PROGRAM_SET_NAME
2316 * @sa VST_EFFECT_OPCODE_PROGRAM_SET_END
2317 * @sa VST_EFFECT_OPCODE_PROGRAM_GET
2318 * @sa VST_EFFECT_OPCODE_PROGRAM_GET_NAME
2319 * @sa VST_EFFECT_FLAG_CHUNKS
2320 * @sa VST_EFFECT_OPCODE_SET_CHUNK_DATA
2321 * @sa VST_EFFECT_OPCODE_GET_CHUNK_DATA
2322 */
2324
2325 /** Number of available parameters.
2326 * All programs must have at least this many parameters.
2327 *
2328 * @sa VST_HOST_OPCODE_IO_MODIFIED
2329 */
2330 int32_t num_params;
2331
2332 /** Number of available input streams.
2333 *
2334 *
2335 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
2336 * @sa VST_EFFECT_OPCODE_INPUT_GET_PROPERTIES
2337 * @sa VST_HOST_OPCODE_IO_MODIFIED
2338 */
2339 int32_t num_inputs;
2340
2341 /** Number of available output streams.
2342 *
2343 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
2344 * @sa VST_EFFECT_OPCODE_OUTPUT_GET_PROPERTIES
2345 * @sa VST_HOST_OPCODE_IO_MODIFIED
2346 */
2348
2349 /** Effect Flags
2350 *
2351 * @sa VST_EFFECT_FLAGS
2352 */
2353 int32_t flags;
2354
2355 void* _unknown_00; // Must be zero when created. Reserved for host?
2356 void* _unknown_01; // Must be zero when created. Reserved for host?
2357
2358 /** Initial delay before processing of samples can actually begin in Samples.
2359 *
2360 * @note The host can modify this at runtime so it is not safe.
2361 * @note Should be reinitialized when the effect is resumed.
2362 *
2363 * @sa VST_HOST_OPCODE_IO_MODIFIED
2364 */
2365 int32_t delay;
2366
2367 int32_t _unknown_02; // Unknown int32_t values.
2369
2370 /** Ratio of Input to Output production
2371 * Defines how much output data is produced relative to input data when using 'process' instead of 'processFloat'.
2372 * Example: A ratio of 2.0 means we produce twice as much output as we receive input.
2373 *
2374 * Range: >0.0 to Infinity
2375 * Default: 1.0
2376 * @note Ignored in VST 2.4 or with VST_EFFECT_FLAG_SUPPORTS_FLOAT.
2377 */
2379
2380 /** Effect Internal Pointer
2381 *
2382 * You can freely set this to point at some sort of class or similar for use in your own effect. The host must
2383 * never modify this or the data available through this.
2384 */
2386
2387 /** Host Internal Pointer
2388 *
2389 * The host may set this to point at data related to your effect instance that the host needs. The effect must
2390 * never modify this or the data available through this.
2391 */
2392 void* host_internal; // Pointer to Host internal data.
2393
2394 /** Id of the plugin.
2395 *
2396 * Due to this not being enough for uniqueness, it should not be used alone for indexing.
2397 * Ideally you want to index like this:
2398 * [unique_id][module_name][version][flags]
2399 * If any of the checks after unique_id fail, you default to the first possible choice.
2400 *
2401 * Used in combination with @ref VST_EFFECT_CATEGORY_CONTAINER.
2402 *
2403 * BUG: Some broken hosts rely on this alone to save information about VST plug-ins.
2404 */
2405 int32_t unique_id;
2406
2407 /** Plugin version
2408 *
2409 * Unrelated to the minimum VST Version, but often the same.
2410 */
2411 int32_t version;
2412
2413 //--------------------------------------------------------------------------------
2414 // VST 2.x starts here.
2415 //--------------------------------------------------------------------------------
2416
2417 /** Process function for in-place single (32-bit float) processiong.
2418 * @sa vst_effect_process_single_t
2419 * @note (VST 2.0+) Available from VST 2.0 and later.
2420 */
2422
2423 //--------------------------------------------------------------------------------
2424 // VST 2.4 starts here.
2425 //--------------------------------------------------------------------------------
2426
2427 /** Process function for in-place double (64-bit float) processiong.
2428 * @sa vst_effect_process_double_t
2429 * @note (VST 2.4+) Available from VST 2.4 and later.
2430 */
2432
2433 // Everything after this is unknown and was present in reacomp-standalone.dll.
2434 uint8_t _unknown[56]; // 56-bytes of something. Could also just be 52-bytes.
2435};
2436
2437/** VST 2.x Entry Point for all platforms
2438 *
2439 * Must be present in VST 2.x plug-ins but must not be present in VST 1.x plug-ins.
2440 *
2441 * @return A new instance of the VST 2.x effect.
2442 */
2443#define VST_ENTRYPOINT
2444 vst_effect_t* VSTPluginMain(vst_host_callback_t callback)
2445
2446/** [DEPRECATED] VST 1.x Entry Point for Windows
2447 *
2448 * Do not implement in VST 2.1 or later plug-ins!
2449 *
2450 * @return A new instance of the VST 1.x effect.
2451 */
2452#define VST_ENTRYPOINT_WINDOWS
2453 vst_effect_t* MAIN(vst_host_callback_t callback) { return VSTPluginMain(callback); }
2454
2455/** [DEPRECATED] VST 1.x Entry Point for MacOS
2456 *
2457 * Do not implement in VST 2.1 or later plug-ins!
2458 *
2459 * @return A new instance of the VST 1.x effect.
2460 */
2461#define VST_ENTRYPOINT_MACOS
2462 vst_effect_t* main_macho(vst_host_callback_t callback) { return VSTPluginMain(callback); }
2463
2464/** [DEPRECATED] VST 2.3 Entry Point for PowerPC
2465 *
2466 * Present in some VST 2.3 and earlier compatible plug-ins that support MacOS.
2467 *
2468 * @return A new instance of the VST 2.x effect.
2469 */
2470#define VST_ENTRYPOINT_MACOS_POWERPC
2471 vst_effect_t* main(vst_host_callback_t callback) { return VSTPluginMain(callback); }
2472
2473#ifdef __cplusplus
2474}
2475#endif
2476#pragma pack(pop)
2477#endif
Host to Plug-in support checks.
Definition vst.h:2146
const char * _2in1out
Definition vst.h:2174
const char * _4in4out
Definition vst.h:2178
const char * plugAsChannelInsert
Definition vst.h:2165
const char * _1in1out
Definition vst.h:2172
const char * _4in8out
Definition vst.h:2179
const char * _2in2out
Definition vst.h:2175
const char * _8in4out
Definition vst.h:2180
const char * _1in2out
Definition vst.h:2173
const char * _2in4out
Definition vst.h:2176
const char * sendVstEvents
Definition vst.h:2157
const char * _4in2out
Definition vst.h:2177
const char * conformsToWindowRules
Definition vst.h:2166
const char * mixDryWet
Definition vst.h:2168
const char * receiveVstEvents
Definition vst.h:2158
const char * receiveVstTimeInfo
Definition vst.h:2162
const char * noRealTime
Definition vst.h:2169
const char * bypass
Effect supports alternative bypass.
Definition vst.h:2155
const char * _8in8out
Definition vst.h:2181
const char * plugAsSend
Definition vst.h:2167
const char * multipass
Definition vst.h:2170
const char * midiProgramNames
Definition vst.h:2161
const char * receiveVstMidiEvent
Definition vst.h:2160
const char * offline
Definition vst.h:2163
const char * metapass
Definition vst.h:2171
const char * sendVstMidiEvent
Definition vst.h:2159
Plug-in Effect definition.
Definition vst.h:2278
int32_t num_outputs
Number of available output streams.
Definition vst.h:2347
int32_t magic_number
VST Magic Number.
Definition vst.h:2285
vst_effect_process_double_t process_double
Process function for in-place double (64-bit float) processiong.
Definition vst.h:2431
int32_t _unknown_02
Definition vst.h:2367
int32_t unique_id
Id of the plugin.
Definition vst.h:2405
vst_effect_process_t process
Process Function.
Definition vst.h:2298
int32_t flags
Effect Flags.
Definition vst.h:2353
float input_output_ratio
Ratio of Input to Output production Defines how much output data is produced relative to input data w...
Definition vst.h:2378
int32_t num_programs
Number of available pre-defined programs.
Definition vst.h:2323
vst_effect_process_float_t process_float
Process function for in-place single (32-bit float) processiong.
Definition vst.h:2421
int32_t version
Plugin version.
Definition vst.h:2411
void * host_internal
Host Internal Pointer.
Definition vst.h:2392
vst_effect_set_parameter_t set_parameter
Set Parameter Function.
Definition vst.h:2303
uint8_t _unknown[56]
Definition vst.h:2434
void * _unknown_01
Definition vst.h:2356
int32_t _unknown_03
Definition vst.h:2368
int32_t num_params
Number of available parameters.
Definition vst.h:2330
void * effect_internal
Effect Internal Pointer.
Definition vst.h:2385
vst_effect_get_parameter_t get_parameter
Get Parameter Function.
Definition vst.h:2308
int32_t delay
Initial delay before processing of samples can actually begin in Samples.
Definition vst.h:2365
int32_t num_inputs
Number of available input streams.
Definition vst.h:2339
void * _unknown_00
Definition vst.h:2355
vst_effect_control_t control
Control Function.
Definition vst.h:2291
A generic event.
Definition vst.h:548
int32_t _unknown_07
Definition vst.h:556
int32_t _unknown_02
Definition vst.h:551
int32_t _unknown_03
Definition vst.h:552
int32_t _unknown_00
Definition vst.h:549
int32_t _unknown_01
Definition vst.h:550
int32_t _unknown_06
Definition vst.h:555
int32_t _unknown_04
Definition vst.h:553
int32_t _unknown_05
Definition vst.h:554
A collection of events.
Definition vst.h:569
vst_event_t ** events
An array of pointers to valid vst_event_t structures.
Definition vst.h:580
int32_t _unknown_00
Definition vst.h:574
int32_t count
Number of events stored in vst_events_t::events.
Definition vst.h:572
Plug-in to Host support checks.
Definition vst.h:903
const char * acceptIOChanges
Does the host support modifying input/output/params/delay when programs, banks or parameters are chan...
Definition vst.h:913
const char * openFileSelector
Definition vst.h:966
const char * receiveVstMidiEvent
Definition vst.h:957
const char * editFile
Definition vst.h:965
const char * offline
Definition vst.h:963
const char * sendVstEvents
Host can send events to plug-in.
Definition vst.h:948
const char * sendVstMidiEventFlagIsRealtime
Definition vst.h:958
const char * reportConnectionChanges
Definition vst.h:961
const char * startStopProcess
Is the host using process begin/end instead of idle? The host may opt to emit VST_EFFECT_OPCODE_IDLE ...
Definition vst.h:926
const char * sendVstMidiEvent
Definition vst.h:956
const char * sizeWindow
Can we request that the host changes the editor window size?
Definition vst.h:942
const char * receiveVstEvents
Host can receive events from plug-in.
Definition vst.h:954
const char * closeFileSelector
Definition vst.h:967
const char * sendVstTimeInfo
Definition vst.h:960
const char * shellCategory
Does the host support container plug-ins?
Definition vst.h:935
Information about a parameter.
Definition vst.h:230
char label[VST_BUFFER_SIZE_PARAM_LABEL]
Short Human-readable label for this parameter.
Definition vst.h:298
char category_label[VST_BUFFER_SIZE_CATEGORY_LABEL]
Human-readable name for the category this parameter is in.
Definition vst.h:331
uint32_t flags
Parameter Flags.
Definition vst.h:270
uint16_t category
Category index.
Definition vst.h:314
int32_t max_value_i32
Maximum Integer value.
Definition vst.h:284
char name[VST_BUFFER_SIZE_PARAM_LONG_NAME]
Human-readable name for this parameter.
Definition vst.h:264
float step_f32
Float Step value.
Definition vst.h:238
float step_large_f32
Float large step value This is used for "huge" changes.
Definition vst.h:258
int32_t step_i32
Integer Step value.
Definition vst.h:291
uint16_t index
Display order index.
Definition vst.h:305
int32_t min_value_i32
Minimum Integer value.
Definition vst.h:277
float step_small_f32
Float small step value This is used for "tiny" changes.
Definition vst.h:248
uint16_t num_parameters_in_category
How many parameters are in this category? This allows the plug-in to specify the same category multip...
Definition vst.h:322
Window/Editor Rectangle.
Definition vst.h:152
int16_t left
Definition vst.h:154
int16_t top
Definition vst.h:153
int16_t bottom
Definition vst.h:155
int16_t right
Definition vst.h:156
struct vst_speaker_properties_t speakers[VST_MAX_CHANNELS]
Definition vst.h:490
int32_t type
The type of the speaker.
Definition vst.h:437
float azimuth
Azimuth in Radians Range: -PI (Left) through 0.0 (Right) to PI (Left)
Definition vst.h:405
float distance
Distance in Meters range: 0 to +-Infinity.
Definition vst.h:419
float altitude
Altitude in Radians Range: -PI/2 (Bottom) to PI/2 (Top)
Definition vst.h:412
char name[VST_BUFFER_SIZE_SPEAKER_NAME]
Human readable name for this speaker.
Definition vst.h:428
uint8_t _reserved[28]
Definition vst.h:439
int32_t type
Stream arrangement (optional) See VST_SPEAKER_ARRANGEMENT_TYPE.
Definition vst.h:530
int32_t flags
Stream flags Any combination of VST_STREAM_FLAG.
Definition vst.h:525
char label[VST_BUFFER_SIZE_STREAM_LABEL]
Human-readable label for this stream.
Definition vst.h:534
char name[VST_BUFFER_SIZE_STREAM_NAME]
Human-readable name for this stream.
Definition vst.h:520
uint8_t _reserved[48]
Definition vst.h:536
VST_SPEAKER_ARRANGEMENT_TYPE
Definition vst.h:442
@ VST_SPEAKER_ARRANGEMENT_TYPE_7_1
7.1 (Full Surround)
Definition vst.h:481
@ VST_SPEAKER_ARRANGEMENT_TYPE_UNKNOWN
Unknown/Empty speaker layout.
Definition vst.h:451
@ _VST_SPEAKER_ARRANGEMENT_TYPE_PAD
Definition vst.h:484
@ VST_SPEAKER_ARRANGEMENT_TYPE_5_1
5.1 (Old Surround)
Definition vst.h:475
@ VST_SPEAKER_ARRANGEMENT_TYPE_CUSTOM
Custom speaker arrangement.
Definition vst.h:447
@ VST_SPEAKER_ARRANGEMENT_TYPE_MONO
Mono.
Definition vst.h:455
@ VST_SPEAKER_ARRANGEMENT_TYPE_STEREO
Stereo.
Definition vst.h:459
@ VST_SPEAKER_ARRANGEMENT_TYPE_5_0
5.0 (Old Surround)
Definition vst.h:469
@ VST_SPEAKER_ARRANGEMENT_TYPE_4_0
Quadraphonic.
Definition vst.h:463
#define VST_FOURCC(a, b, c, d)
Convert four numbers into a FourCC.
Definition vst.h:54
VST_VERSION
Valid VST 1.x and 2.x versions The format is either a single digit or four digits in Base10 format.
Definition vst.h:134
@ VST_VERSION_1_1_0_0
Definition vst.h:137
@ VST_VERSION_2_1_0_0
Definition vst.h:140
@ VST_VERSION_2_0_0_0
Definition vst.h:139
@ _VST_VERSION_PAD
Definition vst.h:146
@ VST_VERSION_2
Definition vst.h:138
@ VST_VERSION_2_2_0_0
Definition vst.h:141
@ VST_VERSION_2_3_0_0
Definition vst.h:142
@ VST_VERSION_2_4_0_0
Definition vst.h:143
@ VST_VERSION_1_0_0_0
Definition vst.h:136
@ VST_VERSION_1
Definition vst.h:135
void(VST_FUNCTION_INTERFACE * vst_effect_process_t)(struct vst_effect_t *self, const float *const *inputs, float **outputs, int32_t samples)
Process the given number of samples in inputs and outputs.
Definition vst.h:2232
#define VST_MAX_CHANNELS
Maximum number of channels/streams/inputs/outputs supported by VST 2.x.
Definition vst.h:50
void(VST_FUNCTION_INTERFACE * vst_effect_set_parameter_t)(struct vst_effect_t *self, uint32_t index, float value)
Updates the value for the parameter at the given index, or does nothing if out of bounds.
Definition vst.h:2240
VST_HOST_OPCODE
Plug-in to Host Op-Codes These Op-Codes are emitted by the plug-in and the host may handle them or re...
Definition vst.h:593
@ VST_HOST_OPCODE_EVENT
Definition vst.h:663
@ VST_HOST_OPCODE_28
Definition vst.h:795
@ VST_HOST_OPCODE_04
Definition vst.h:634
@ VST_HOST_OPCODE_18
Definition vst.h:718
@ VST_HOST_OPCODE_CURRENT_EFFECT_ID
Definition vst.h:624
@ VST_HOST_OPCODE_PARAM_START_EDIT
Definition vst.h:831
@ VST_HOST_OPCODE_PARAM_STOP_EDIT
Definition vst.h:845
@ VST_HOST_OPCODE_06
Definition vst.h:642
@ VST_HOST_OPCODE_1A
Definition vst.h:722
@ VST_HOST_OPCODE_EDITOR_RESIZE
Definition vst.h:702
@ VST_HOST_OPCODE_0F
Definition vst.h:687
@ VST_HOST_OPCODE_2F
When queried by the plug-in shortly after VST_EFFECT_OPCODE_PROGRAM_LOAD it often crashes compatible ...
Definition vst.h:867
@ VST_HOST_OPCODE_IO_MODIFIED
Definition vst.h:685
@ VST_HOST_OPCODE_1B
Definition vst.h:724
@ VST_HOST_OPCODE_12
Definition vst.h:706
@ VST_HOST_OPCODE_KEEPALIVE_OR_IDLE
Definition vst.h:632
@ VST_HOST_OPCODE_07
Definition vst.h:644
@ VST_HOST_OPCODE_OUTPUT_GET_SPEAKER_ARRANGEMENT
Definition vst.h:745
@ VST_HOST_OPCODE_1C
Definition vst.h:726
@ VST_HOST_OPCODE_08
Definition vst.h:646
@ VST_HOST_OPCODE_27
Definition vst.h:793
@ VST_HOST_OPCODE_20
Definition vst.h:749
@ VST_HOST_OPCODE_INPUT_GET_SPEAKER_ARRANGEMENT
Definition vst.h:888
@ VST_HOST_OPCODE_2B
Notify host that a parameter is being edited.
Definition vst.h:829
@ VST_HOST_OPCODE_16
Definition vst.h:714
@ VST_HOST_OPCODE_25
Definition vst.h:782
@ VST_HOST_OPCODE_1D
Definition vst.h:728
@ VST_HOST_OPCODE_PARAM_LOCK
Definition vst.h:833
@ VST_HOST_OPCODE_23
Retrieve the vendor version in return value.
Definition vst.h:771
@ VST_HOST_OPCODE_15
Definition vst.h:712
@ VST_HOST_OPCODE_24
User defined OP Code, for custom interaction.
Definition vst.h:778
@ VST_HOST_OPCODE_19
Definition vst.h:720
@ VST_HOST_OPCODE_05
Definition vst.h:640
@ VST_HOST_OPCODE_1E
Retrieve the hosts output speaker arrangement.
Definition vst.h:741
@ VST_HOST_OPCODE_29
Retrieve the directory of the effect that emitted this.
Definition vst.h:804
@ VST_HOST_OPCODE_01
Retrieve the Hosts VST Version.
Definition vst.h:612
@ VST_HOST_OPCODE_AUTOMATE
Definition vst.h:604
@ VST_HOST_OPCODE_0A
Definition vst.h:665
@ VST_HOST_OPCODE_26
Check if the host supports a certain feature.
Definition vst.h:789
@ VST_HOST_OPCODE_11
Definition vst.h:704
@ VST_HOST_OPCODE_0C
Definition vst.h:669
@ VST_HOST_OPCODE_10
Request that the host changes the size of the containing window.
Definition vst.h:700
@ VST_HOST_OPCODE_2C
Notify host that parameter is no longer being edited.
Definition vst.h:843
@ VST_HOST_OPCODE_13
Definition vst.h:708
@ VST_HOST_OPCODE_0E
Notify the host that numInputs/numOutputs/delay/numParams has changed.
Definition vst.h:683
@ VST_HOST_OPCODE_2D
Definition vst.h:853
@ VST_HOST_OPCODE_0D
Definition vst.h:671
@ VST_HOST_OPCODE_00
Update automation for a given Parameter.
Definition vst.h:602
@ VST_HOST_OPCODE_17
Definition vst.h:716
@ VST_HOST_OPCODE_03
Some sort of idle keep-alive?
Definition vst.h:630
@ VST_HOST_OPCODE_PRODUCT_NAME
Definition vst.h:765
@ VST_HOST_OPCODE_2A
Refresh everything related to the effect that emitted this event.
Definition vst.h:813
@ VST_HOST_OPCODE_02
Get the currently selected effect id in container plug-ins.
Definition vst.h:622
@ VST_HOST_OPCODE_GET_OUTPUT_SPEAKER_ARRANGEMENT
Definition vst.h:743
@ VST_HOST_OPCODE_VENDOR_VERSION
Definition vst.h:773
@ VST_HOST_OPCODE_14
Definition vst.h:710
@ VST_HOST_OPCODE_VENDOR_NAME
Definition vst.h:757
@ VST_HOST_OPCODE_2E
Definition vst.h:855
@ VST_HOST_OPCODE_MAX
Definition vst.h:891
@ VST_HOST_OPCODE_22
Retrieve the product name into the ptr buffer.
Definition vst.h:763
@ _VST_HOST_OPCODE_PAD
Definition vst.h:894
@ VST_HOST_OPCODE_GET_INPUT_SPEAKER_ARRANGEMENT
Definition vst.h:886
@ VST_HOST_OPCODE_21
Retrieve the vendor name into the ptr buffer.
Definition vst.h:755
@ VST_HOST_OPCODE_VST_VERSION
Definition vst.h:614
@ VST_HOST_OPCODE_GET_EFFECT_DIRECTORY
Definition vst.h:806
@ VST_HOST_OPCODE_PARAM_UNLOCK
Definition vst.h:847
@ VST_HOST_OPCODE_SUPPORTS
Definition vst.h:791
@ VST_HOST_OPCODE_CUSTOM
Definition vst.h:780
@ VST_HOST_OPCODE_PARAM_UPDATE
Definition vst.h:606
@ VST_HOST_OPCODE_30
Retrieve the hosts input speaker arrangement.
Definition vst.h:884
@ VST_HOST_OPCODE_1F
Definition vst.h:747
@ VST_HOST_OPCODE_0B
Definition vst.h:667
@ VST_HOST_OPCODE_REFRESH
Definition vst.h:817
@ VST_HOST_OPCODE_09
Send events from plug-in to host.
Definition vst.h:661
void(VST_FUNCTION_INTERFACE * vst_effect_process_double_t)(struct vst_effect_t *self, const double *const *inputs, double **outputs, int32_t samples)
Process the given number of double samples in inputs and outputs.
Definition vst.h:2274
VST_STATUS
Known Status Codes.
Definition vst.h:58
@ VST_STATUS_ERROR
Definition vst.h:69
@ VST_STATUS_0
Unknown / False We either don't know the answer or we can't handle the data/notification.
Definition vst.h:65
@ VST_STATUS_YES
Definition vst.h:85
@ VST_STATUS_m1
No We're unable to handle the data/notification.
Definition vst.h:93
@ VST_STATUS_1
Yes / True We've handled the data/notification.
Definition vst.h:79
@ _VST_STATUS_PAD
Definition vst.h:97
@ VST_STATUS_TRUE
Definition vst.h:81
@ VST_STATUS_SUCCESS
Definition vst.h:83
@ VST_STATUS_FALSE
Definition vst.h:67
@ VST_STATUS_UNKNOWN
Definition vst.h:71
@ VST_STATUS_NO
Definition vst.h:95
VST_SPEAKER_TYPE
Definition vst.h:340
@ VST_SPEAKER_TYPE_RIGHT_REAR
Definition vst.h:348
@ _VST_SPEAKER_TYPE_PAD
Definition vst.h:396
@ VST_SPEAKER_TYPE_RIGHT
Definition vst.h:344
@ VST_SPEAKER_TYPE_CENTER
Definition vst.h:345
@ VST_SPEAKER_TYPE_LFE
Definition vst.h:346
@ VST_SPEAKER_TYPE_USER_09
Definition vst.h:384
@ VST_SPEAKER_TYPE_USER_25
Definition vst.h:368
@ VST_SPEAKER_TYPE_MONO
Definition vst.h:342
@ VST_SPEAKER_TYPE_USER_04
Definition vst.h:389
@ VST_SPEAKER_TYPE_USER_11
Definition vst.h:382
@ VST_SPEAKER_TYPE_USER_10
Definition vst.h:383
@ VST_SPEAKER_TYPE_USER_12
Definition vst.h:381
@ VST_SPEAKER_TYPE_USER_30
Definition vst.h:363
@ VST_SPEAKER_TYPE_USER_32
Definition vst.h:361
@ VST_SPEAKER_TYPE_USER_20
Definition vst.h:373
@ VST_SPEAKER_TYPE_USER_15
Definition vst.h:378
@ VST_SPEAKER_TYPE_RIGHT_SIDE
Definition vst.h:353
@ VST_SPEAKER_TYPE_LEFT_SIDE
Definition vst.h:352
@ VST_SPEAKER_TYPE_USER_13
Definition vst.h:380
@ VST_SPEAKER_TYPE_USER_02
Definition vst.h:391
@ VST_SPEAKER_TYPE_USER_23
Definition vst.h:370
@ VST_SPEAKER_TYPE_USER_28
Definition vst.h:365
@ VST_SPEAKER_TYPE_USER_05
Definition vst.h:388
@ VST_SPEAKER_TYPE_USER_01
Definition vst.h:392
@ VST_SPEAKER_TYPE_LEFT
Definition vst.h:343
@ VST_SPEAKER_TYPE_USER_07
Definition vst.h:386
@ VST_SPEAKER_TYPE_USER_27
Definition vst.h:366
@ VST_SPEAKER_TYPE_USER_18
Definition vst.h:375
@ VST_SPEAKER_TYPE_USER_29
Definition vst.h:364
@ VST_SPEAKER_TYPE_USER_21
Definition vst.h:372
@ VST_SPEAKER_TYPE_USER_06
Definition vst.h:387
@ VST_SPEAKER_TYPE_USER_26
Definition vst.h:367
@ VST_SPEAKER_TYPE_USER_19
Definition vst.h:374
@ VST_SPEAKER_TYPE_USER_31
Definition vst.h:362
@ VST_SPEAKER_TYPE_USER_24
Definition vst.h:369
@ VST_SPEAKER_TYPE_USER_22
Definition vst.h:371
@ VST_SPEAKER_TYPE_USER_17
Definition vst.h:376
@ VST_SPEAKER_TYPE_USER_08
Definition vst.h:385
@ VST_SPEAKER_TYPE_LEFT_REAR
Definition vst.h:347
@ VST_SPEAKER_TYPE_USER_14
Definition vst.h:379
@ VST_SPEAKER_TYPE_USER_16
Definition vst.h:377
@ VST_SPEAKER_TYPE_USER_03
Definition vst.h:390
VST_EFFECT_CATEGORY
Plug-in Categories Pre-defined category grouping that also affect host behavior when handling the plu...
Definition vst.h:1025
@ VST_EFFECT_CATEGORY_0A
Container Plug-in This plug-in contains multiple effects in one and requires special handling on both...
Definition vst.h:1181
@ VST_EFFECT_CATEGORY_EFFECT
Definition vst.h:1035
@ VST_EFFECT_CATEGORY_02
Instruments Examples: Instruments, Synths, Samplers, ...
Definition vst.h:1042
@ VST_EFFECT_CATEGORY_METERING
Definition vst.h:1054
@ VST_EFFECT_CATEGORY_01
Generic Effects Examples: Distortion, Pitch Shift, ...
Definition vst.h:1033
@ VST_EFFECT_CATEGORY_08
Restoration Examples: Noise Filtering, Upsamplers, ...
Definition vst.h:1091
@ VST_EFFECT_CATEGORY_WAVEGENERATOR
Definition vst.h:1195
@ VST_EFFECT_CATEGORY_09
Offline Processing Examples: Nothing Supports: Nothing
Definition vst.h:1099
@ VST_EFFECT_CATEGORY_SPATIAL
Definition vst.h:1072
@ VST_EFFECT_CATEGORY_07
Definition vst.h:1083
@ VST_EFFECT_CATEGORY_06
Delay/Echo Examples: Echo, Reverb, Room Simulation, Delay, ...
Definition vst.h:1079
@ VST_EFFECT_CATEGORY_OFFLINE
Definition vst.h:1101
@ VST_EFFECT_CATEGORY_0B
Waveform Generators Examples: Sine Wave Generator, ... Supports: Delay, Tail Samples
Definition vst.h:1193
@ VST_EFFECT_CATEGORY_05
Spatializers Examples: Channel Panning, Expanders, ...
Definition vst.h:1070
@ VST_EFFECT_CATEGORY_MASTERING
Definition vst.h:1063
@ VST_EFFECT_CATEGORY_RESTORATION
Definition vst.h:1093
@ VST_EFFECT_CATEGORY_UNCATEGORIZED
Definition vst.h:1026
@ VST_EFFECT_CATEGORY_03
Metering Examples: Loudness Meters, Volume Analysis, ...
Definition vst.h:1052
@ VST_EFFECT_CATEGORY_INSTRUMENT
Definition vst.h:1044
@ VST_EFFECT_CATEGORY_DELAY_OR_ECHO
Definition vst.h:1081
@ VST_EFFECT_CATEGORY_04
Mastering Examples: Compressors, Limiters, ...
Definition vst.h:1061
@ VST_EFFECT_CATEGORY_CONTAINER
Definition vst.h:1183
VST_EFFECT_FLAG
Effect Flags.
Definition vst.h:1206
@ VST_EFFECT_FLAG_SILENT_TAIL
Definition vst.h:1274
@ VST_EFFECT_FLAG_1ls9
Effect does not produce tail samples when the input is silent.
Definition vst.h:1272
@ VST_EFFECT_FLAG_CHUNKS
Definition vst.h:1252
@ VST_EFFECT_FLAG_1ls4
Effect uses process_float.
Definition vst.h:1240
@ VST_EFFECT_FLAG_1ls5
Effect supports saving/loading programs/banks from unformatted chunk data.
Definition vst.h:1250
@ VST_EFFECT_FLAG_EDITOR
Definition vst.h:1228
@ VST_EFFECT_FLAG_SUPPORTS_FLOAT
Definition vst.h:1242
@ VST_EFFECT_FLAG_1ls0
Effect provides a custom editor.
Definition vst.h:1226
@ VST_EFFECT_FLAG_INSTRUMENT
Definition vst.h:1264
@ VST_EFFECT_FLAG_1ls12
Effect supports process_double.
Definition vst.h:1286
@ VST_EFFECT_FLAG_1ls8
Effect is an Instrument/Generator.
Definition vst.h:1262
@ VST_EFFECT_FLAG_SUPPORTS_DOUBLE
Definition vst.h:1288
VST_BUFFER_SIZE
Known Buffer Sizes.
Definition vst.h:102
@ VST_BUFFER_SIZE_SPEAKER_NAME
Definition vst.h:112
@ VST_BUFFER_SIZE_STREAM_NAME
Definition vst.h:113
@ VST_BUFFER_SIZE_PARAM_VALUE
Definition vst.h:105
@ VST_BUFFER_SIZE_STREAM_LABEL
Definition vst.h:106
@ VST_BUFFER_SIZE_PARAM_LABEL
Definition vst.h:103
@ VST_BUFFER_SIZE_VENDOR_NAME
Definition vst.h:114
@ VST_BUFFER_SIZE_PARAM_NAME
Definition vst.h:104
@ VST_BUFFER_SIZE_PROGRAM_NAME
Definition vst.h:108
@ VST_BUFFER_SIZE_CATEGORY_LABEL
Definition vst.h:107
@ VST_BUFFER_SIZE_EFFECT_NAME
Definition vst.h:109
@ VST_BUFFER_SIZE_PARAM_LONG_NAME
Definition vst.h:110
@ VST_BUFFER_SIZE_PRODUCT_NAME
Definition vst.h:111
void(VST_FUNCTION_INTERFACE * vst_effect_process_float_t)(struct vst_effect_t *self, const float *const *inputs, float **outputs, int32_t samples)
Process the given number of single samples in inputs and outputs.
Definition vst.h:2261
VST_PARAMETER_FLAG
Flags for parameters.
Definition vst.h:166
@ VST_PARAMETER_FLAG_SWITCH
Definition vst.h:173
@ VST_PARAMETER_FLAG_1ls6
Parameter can be gradually increased/decreased.
Definition vst.h:219
@ VST_PARAMETER_FLAG_1ls5
Parameter has a category for the default editor.
Definition vst.h:211
@ VST_PARAMETER_FLAG_1ls4
Parameter has an display order index for the default editor.
Definition vst.h:203
@ VST_PARAMETER_FLAG_1ls2
Parameter uses float steps.
Definition vst.h:187
@ VST_PARAMETER_FLAG_INTEGER_LIMITS
Definition vst.h:181
@ VST_PARAMETER_FLAG_STEP_FLOAT
Definition vst.h:189
@ VST_PARAMETER_FLAG_INDEX
Definition vst.h:205
@ VST_PARAMETER_FLAG_CATEGORY
Definition vst.h:213
@ VST_PARAMETER_FLAG_RAMPING
Definition vst.h:221
@ VST_PARAMETER_FLAG_1ls3
Parameter uses integer steps.
Definition vst.h:195
@ VST_PARAMETER_FLAG_1ls0
Parameter is an on/off switch.
Definition vst.h:171
@ VST_PARAMETER_FLAG_STEP_INT
Definition vst.h:197
@ VST_PARAMETER_FLAG_1ls1
Parameter limits are set as integers.
Definition vst.h:179
@ _VST_PARAMETER_FLAG_PAD
Definition vst.h:223
#define VST_FUNCTION_INTERFACE
Standard calling convention across plug-ins and hosts.
Definition vst.h:46
VST_EFFECT_OPCODE
Host to Plug-in Op-Codes These Op-Codes are emitted by the host and we must either handle them or ret...
Definition vst.h:1294
@ VST_EFFECT_OPCODE_WINDOW_MOUSE
Definition vst.h:1504
@ VST_EFFECT_OPCODE_2A
Host wants to change the speaker arrangement.
Definition vst.h:1760
@ VST_EFFECT_OPCODE_GETVENDORVERSION
Definition vst.h:1837
@ VST_EFFECT_OPCODE_20
Input disconnected.
Definition vst.h:1671
@ VST_EFFECT_OPCODE_14
Window Focus Event?
Definition vst.h:1540
@ VST_EFFECT_OPCODE_PARAM_VALUE_TO_STRING
Definition vst.h:1383
@ VST_EFFECT_OPCODE_PARAM_GETLABEL
Definition vst.h:1363
@ VST_EFFECT_OPCODE_4E
Definition vst.h:2124
@ VST_EFFECT_OPCODE_43
Host is starting to set up a program.
Definition vst.h:2008
@ VST_EFFECT_OPCODE_3E
Midi related.
Definition vst.h:1972
@ VST_EFFECT_OPCODE_32
User-defined Op-Code for VST extensions.
Definition vst.h:1848
@ VST_EFFECT_OPCODE_03
Get currently selected program number.
Definition vst.h:1329
@ VST_EFFECT_OPCODE_SET_CHUNK_DATA
Definition vst.h:1588
@ VST_EFFECT_OPCODE_21
Retrieve properties for the given input index.
Definition vst.h:1680
@ VST_EFFECT_OPCODE_PRODUCT_NAME
Definition vst.h:1828
@ VST_EFFECT_OPCODE_4B
Host wants to know if we can load the provided bank data.
Definition vst.h:2092
@ VST_EFFECT_OPCODE_PARAM_NAME
Definition vst.h:1397
@ VST_EFFECT_OPCODE_1C
Definition vst.h:1643
@ VST_EFFECT_OPCODE_41
Midi related.
Definition vst.h:1993
@ VST_EFFECT_OPCODE_SET_SAMPLE_RATE
Definition vst.h:1413
@ VST_EFFECT_OPCODE_CREATE
Definition vst.h:1301
@ VST_EFFECT_OPCODE_EDITOR_GET_RECT
Definition vst.h:1453
@ VST_EFFECT_OPCODE_SET_SPEAKER_ARRANGEMENT
Definition vst.h:1762
@ VST_EFFECT_OPCODE_PARAM_GETVALUE
Definition vst.h:1377
@ VST_EFFECT_OPCODE_PROGRAM_SET_NAME
Definition vst.h:1343
@ VST_EFFECT_OPCODE_06
Get the value? label for the parameter.
Definition vst.h:1361
@ VST_EFFECT_OPCODE_0A
Set the new sample rate for the plugin to use.
Definition vst.h:1409
@ VST_EFFECT_OPCODE_10
Window Draw Event?
Definition vst.h:1486
@ VST_EFFECT_OPCODE_2F
Retrieve the vendor name into the ptr buffer.
Definition vst.h:1813
@ VST_EFFECT_OPCODE_PROGRAM_GET
Definition vst.h:1333
@ VST_EFFECT_OPCODE_28
Seen in plug-ins with VST_EFFECT_CATEGORY_OFFLINE.
Definition vst.h:1739
@ VST_EFFECT_OPCODE_4D
Definition vst.h:2117
@ VST_EFFECT_OPCODE_01
Destroy the effect (if there is any) and free its memory.
Definition vst.h:1311
@ VST_EFFECT_OPCODE_3C
Editor Virtual Key Up Event.
Definition vst.h:1956
@ VST_EFFECT_OPCODE_1B
Set Parameter value from string representation.
Definition vst.h:1632
@ VST_EFFECT_OPCODE_SET_BLOCK_SIZE
Definition vst.h:1423
@ VST_EFFECT_OPCODE_IDLE
Definition vst.h:1884
@ VST_EFFECT_OPCODE_33
Test for support of a specific named feature.
Definition vst.h:1859
@ VST_EFFECT_OPCODE_04
Set the name of the currently selected program.
Definition vst.h:1339
@ VST_EFFECT_OPCODE_09
Definition vst.h:1403
@ VST_EFFECT_OPCODE_PARAM_GET_NAME
Definition vst.h:1395
@ VST_EFFECT_OPCODE_BANK_LOAD
Definition vst.h:2094
@ VST_EFFECT_OPCODE_EDITOR_MOUSE
Definition vst.h:1506
@ VST_EFFECT_OPCODE_WINDOW_CREATE
Definition vst.h:1462
@ VST_EFFECT_OPCODE_0B
Sets the block size, which is the maximum number of samples passed into the effect via process calls.
Definition vst.h:1419
@ VST_EFFECT_OPCODE_PARAM_GET_VALUE
Definition vst.h:1379
@ VST_EFFECT_OPCODE_39
Definition vst.h:1920
@ VST_EFFECT_OPCODE_05
Get the name of the currently selected program.
Definition vst.h:1349
@ VST_EFFECT_OPCODE_1A
Can the parameter be automated?
Definition vst.h:1617
@ VST_EFFECT_OPCODE_19
Send events from host to plug-in.
Definition vst.h:1607
@ VST_EFFECT_OPCODE_PROGRAM_SET_END
Definition vst.h:2020
@ VST_EFFECT_OPCODE_GET_PROGRAM
Definition vst.h:1331
@ VST_EFFECT_OPCODE_12
Window Keyboard Event?
Definition vst.h:1518
@ VST_EFFECT_OPCODE_42
Midi related.
Definition vst.h:2000
@ VST_EFFECT_OPCODE_EFFECT_CATEGORY
Definition vst.h:1702
@ VST_EFFECT_OPCODE_PARAM_IS_AUTOMATABLE
Definition vst.h:1621
@ VST_EFFECT_OPCODE_WINDOW_DRAW
Definition vst.h:1488
@ VST_EFFECT_OPCODE_DESTROY
Definition vst.h:1313
@ VST_EFFECT_OPCODE_SETBLOCKSIZE
Definition vst.h:1421
@ VST_EFFECT_OPCODE_02
Set which program number is currently select.
Definition vst.h:1319
@ VST_EFFECT_OPCODE_48
End processing of audio.
Definition vst.h:2064
@ VST_EFFECT_OPCODE_GETNAME2
Definition vst.h:1826
@ VST_EFFECT_OPCODE_CUSTOM
Definition vst.h:1850
@ VST_EFFECT_OPCODE_2E
Translate an error code to a string.
Definition vst.h:1804
@ VST_EFFECT_OPCODE_3D
Definition vst.h:1965
@ VST_EFFECT_OPCODE_EDITOR_KEEP_ALIVE
Definition vst.h:1530
@ VST_EFFECT_OPCODE_PARAM_PROPERTIES
Definition vst.h:1913
@ VST_EFFECT_OPCODE_TAIL_SAMPLES
Definition vst.h:1873
@ VST_EFFECT_OPCODE_30
Retrieve the product name into the ptr buffer.
Definition vst.h:1824
@ VST_EFFECT_OPCODE_PARAM_VALUE
Definition vst.h:1381
@ VST_EFFECT_OPCODE_35
Notify effect that it is idle?
Definition vst.h:1882
@ VST_EFFECT_OPCODE_PROGRAM_GET_NAME
Definition vst.h:1353
@ VST_EFFECT_OPCODE_0D
Retrieve the client rect size of the plugins window.
Definition vst.h:1447
@ VST_EFFECT_OPCODE_1E
Definition vst.h:1657
@ VST_EFFECT_OPCODE_PROGRAM_LOAD
Definition vst.h:2106
@ VST_EFFECT_OPCODE_23
Retrieve category of this effect.
Definition vst.h:1700
@ VST_EFFECT_OPCODE_VST_VERSION
Definition vst.h:1930
@ VST_EFFECT_OPCODE_36
Definition vst.h:1892
@ VST_EFFECT_OPCODE_CATEGORY
Definition vst.h:1704
@ VST_EFFECT_OPCODE_EDITOR_OPEN
Definition vst.h:1464
@ VST_EFFECT_OPCODE_EDITOR_VKEY_DOWN
Definition vst.h:1946
@ VST_EFFECT_OPCODE_00
Create/Initialize the effect (if it has not been created already).
Definition vst.h:1299
@ VST_EFFECT_OPCODE_2B
Definition vst.h:1768
@ VST_EFFECT_OPCODE_SUSPEND_RESUME
Definition vst.h:1437
@ VST_EFFECT_OPCODE_24
Definition vst.h:1711
@ VST_EFFECT_OPCODE_PARAM_LABEL
Definition vst.h:1367
@ VST_EFFECT_OPCODE_40
Midi related.
Definition vst.h:1986
@ VST_EFFECT_OPCODE_22
Retrieve properties for the given output index.
Definition vst.h:1691
@ VST_EFFECT_OPCODE_4F
Definition vst.h:2131
@ VST_EFFECT_OPCODE_47
Begin processing of audio.
Definition vst.h:2055
@ VST_EFFECT_OPCODE_38
Parameter Properties.
Definition vst.h:1909
@ VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
Definition vst.h:2035
@ VST_EFFECT_OPCODE_0E
Create the window for the plugin.
Definition vst.h:1460
@ VST_EFFECT_OPCODE_3B
Editor Virtual Key Down Input.
Definition vst.h:1944
@ VST_EFFECT_OPCODE_BYPASS
Definition vst.h:1779
@ VST_EFFECT_OPCODE_EDITOR_KEYBOARD
Definition vst.h:1522
@ VST_EFFECT_OPCODE_INPUT_GET_PROPERTIES
Definition vst.h:1682
@ VST_EFFECT_OPCODE_VENDOR_NAME
Definition vst.h:1817
@ VST_EFFECT_OPCODE_PARAM_ISAUTOMATABLE
Definition vst.h:1619
@ VST_EFFECT_OPCODE_WINDOW_KEYBOARD
Definition vst.h:1520
@ VST_EFFECT_OPCODE_GET_PROGRAM_NAME
Definition vst.h:1351
@ VST_EFFECT_OPCODE_17
Get Chunk Data.
Definition vst.h:1572
@ VST_EFFECT_OPCODE_31
Retrieve the vendor version in return value.
Definition vst.h:1835
@ VST_EFFECT_OPCODE_2D
Retrieve the effect name into the ptr buffer.
Definition vst.h:1788
@ VST_EFFECT_OPCODE_07
Get the string representing the value for the parameter.
Definition vst.h:1375
@ VST_EFFECT_OPCODE_EVENT
Definition vst.h:1609
@ VST_EFFECT_OPCODE_PROCESS_END
Definition vst.h:2066
@ VST_EFFECT_OPCODE_SET_PROGRAM
Definition vst.h:1321
@ VST_EFFECT_OPCODE_27
Seen in plug-ins with VST_EFFECT_CATEGORY_OFFLINE.
Definition vst.h:1732
@ VST_EFFECT_OPCODE_EDITOR_DRAW
Definition vst.h:1490
@ VST_EFFECT_OPCODE_15
Window Unfocus Event?
Definition vst.h:1550
@ VST_EFFECT_OPCODE_49
Definition vst.h:2073
@ VST_EFFECT_OPCODE_NAME
Definition vst.h:1794
@ VST_EFFECT_OPCODE_EDITOR_CLOSE
Definition vst.h:1474
@ VST_EFFECT_OPCODE_29
Seen in plug-ins with VST_EFFECT_CATEGORY_OFFLINE.
Definition vst.h:1746
@ VST_EFFECT_OPCODE_3A
Retrieve the VST Version supported.
Definition vst.h:1928
@ VST_EFFECT_OPCODE_11
Window Mouse Event?
Definition vst.h:1502
@ VST_EFFECT_OPCODE_PARAM_GET_LABEL
Definition vst.h:1365
@ VST_EFFECT_OPCODE_SETSAMPLERATE
Definition vst.h:1411
@ VST_EFFECT_OPCODE_0F
Destroy the plugins window.
Definition vst.h:1470
@ VST_EFFECT_OPCODE_GET_CHUNK_DATA
Definition vst.h:1574
@ VST_EFFECT_OPCODE_INITIALIZE
Definition vst.h:1303
@ VST_EFFECT_OPCODE_GETTAILSAMPLES
Definition vst.h:1871
@ VST_EFFECT_OPCODE_18
Set Chunk Data.
Definition vst.h:1586
@ VST_EFFECT_OPCODE_EFFECT_NAME
Definition vst.h:1792
@ VST_EFFECT_OPCODE_GET_PARAMETER_PROPERTIES
Definition vst.h:1911
@ VST_EFFECT_OPCODE_PARAM_AUTOMATABLE
Definition vst.h:1623
@ VST_EFFECT_OPCODE_PARAM_GETNAME
Definition vst.h:1393
@ VST_EFFECT_OPCODE_4A
Definition vst.h:2082
@ VST_EFFECT_OPCODE_08
Get the name for the parameter.
Definition vst.h:1391
@ VST_EFFECT_OPCODE_13
Window/Editor Idle/Keep-Alive Callback?
Definition vst.h:1528
@ VST_EFFECT_OPCODE_45
Host wants to know the current speaker arrangement.
Definition vst.h:2033
@ VST_EFFECT_OPCODE_WINDOW_GETRECT
Definition vst.h:1449
@ VST_EFFECT_OPCODE_OUTPUT_GET_PROPERTIES
Definition vst.h:1693
@ VST_EFFECT_OPCODE_PARAM_VALUE_FROM_STRING
Definition vst.h:1636
@ VST_EFFECT_OPCODE_GETVENDOR
Definition vst.h:1815
@ VST_EFFECT_OPCODE_PROCESS_BEGIN
Definition vst.h:2057
@ VST_EFFECT_OPCODE_1D
Definition vst.h:1650
@ VST_EFFECT_OPCODE_PAUSE_UNPAUSE
Definition vst.h:1435
@ VST_EFFECT_OPCODE_4C
Host wants to know if we can load the provided program data.
Definition vst.h:2104
@ VST_EFFECT_OPCODE_26
Seen in plug-ins with VST_EFFECT_CATEGORY_OFFLINE.
Definition vst.h:1725
@ VST_EFFECT_OPCODE_CONTAINER_NEXT_EFFECT_ID
Definition vst.h:2048
@ VST_EFFECT_OPCODE_GETNAME
Definition vst.h:1790
@ VST_EFFECT_OPCODE_VENDOR_VERSION
Definition vst.h:1839
@ VST_EFFECT_OPCODE_46
Get the next effect contained in this effect.
Definition vst.h:2046
@ VST_EFFECT_OPCODE_SET_PROGRAM_NAME
Definition vst.h:1341
@ VST_EFFECT_OPCODE_FOURCC
Definition vst.h:1560
@ VST_EFFECT_OPCODE_37
Definition vst.h:1900
@ VST_EFFECT_OPCODE_44
Host is done setting up a program.
Definition vst.h:2018
@ VST_EFFECT_OPCODE_3F
Midi related.
Definition vst.h:1979
@ VST_EFFECT_OPCODE_WINDOW_DESTROY
Definition vst.h:1472
@ VST_EFFECT_OPCODE_EDITOR_VKEY_UP
Definition vst.h:1958
@ VST_EFFECT_OPCODE_1F
Input connected.
Definition vst.h:1664
@ VST_EFFECT_OPCODE_34
Number of samples that are at the tail at the end of playback.
Definition vst.h:1869
@ VST_EFFECT_OPCODE_2C
Enable/Disable bypassing the effect.
Definition vst.h:1777
@ VST_EFFECT_OPCODE_PROGRAM_SET
Definition vst.h:1323
@ VST_EFFECT_OPCODE_SUPPORTS
Definition vst.h:1861
@ VST_EFFECT_OPCODE_PROGRAM_SET_BEGIN
Definition vst.h:2010
@ VST_EFFECT_OPCODE_16
Definition vst.h:1558
@ VST_EFFECT_OPCODE_TRANSLATE_ERROR
Definition vst.h:1806
@ VST_EFFECT_OPCODE_EDITOR_RECT
Definition vst.h:1451
@ VST_EFFECT_OPCODE_25
Definition vst.h:1718
@ VST_EFFECT_OPCODE_PARAM_SET_VALUE
Definition vst.h:1634
@ VST_EFFECT_OPCODE_SUSPEND
Definition vst.h:1439
@ VST_EFFECT_OPCODE_0C
Effect processing should be suspended/paused or resumed/unpaused.
Definition vst.h:1433
VST_STREAM_FLAG
Definition vst.h:497
@ VST_STREAM_FLAG_STEREO
Definition vst.h:507
@ VST_STREAM_FLAG_1ls2
Stream is defined by VST_SPEAKER_ARRANGEMENT_TYPE.
Definition vst.h:513
@ VST_STREAM_FLAG_1ls0
Ignored?
Definition vst.h:500
@ VST_STREAM_FLAG_1ls1
Stream is in Stereo.
Definition vst.h:506
@ VST_STREAM_FLAG_USE_TYPE
Definition vst.h:514
float(VST_FUNCTION_INTERFACE * vst_effect_get_parameter_t)(struct vst_effect_t *self, uint32_t index)
Retrieve the current value of the parameter at the given index, or do nothing if out of bounds.
Definition vst.h:2248