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#define VST2SDK_VST_H
28
29/* The VST 2.x alignment appears to be 8 for both 32 and 64-bit. This alignment is ignored by some earlier Windows
30 * platforms and compilers, but we don't care about those.
31 */
32#pragma pack(push, 8)
33
34#ifdef __cplusplus
35#if __cplusplus < 201103L
36#include <inttypes.h>
37#else
38#include <cinttypes>
39#endif
40extern "C" {
41#else
42#include <inttypes.h>
43#endif
44
45/** Standard calling convention across plug-ins and hosts.
46 * On some older Windows platforms this is not __cdecl but something similar to __stdcall. We don't really care about
47 * those old platforms anyway so __cdecl it is.
48 */
49#define VST_FUNCTION_INTERFACE __cdecl
50
51/** Maximum number of channels/streams/inputs/outputs supported by VST 2.x
52 * Couldn't find any audio editing software which would attempt to add more channels.
53 *
54 * @todo Is 32 channels really the maximum?
55 */
56#define VST_MAX_CHANNELS 32
57
58/** Convert four numbers into a FourCC
59 */
60#define VST_FOURCC(a,b,c,d) ((((uint32_t)a) << 24) | (((uint32_t)b) << 16) | (((uint32_t)c) << 8) | (((uint32_t)d) << 0))
61
62/** Known Status Codes
63 */
65 /** Unknown / False
66 * We either don't know the answer or we can't handle the data/notification.
67 *
68 * @sa VST_HOST_OPCODE
69 * @sa VST_EFFECT_OPCODE
70 */
72 /** @sa VST_STATUS_0 */
74 /** @sa VST_STATUS_0 */
76 /** @sa VST_STATUS_0 */
78
79 /** Yes / True
80 * We've handled the data/notification.
81 *
82 * @sa VST_HOST_OPCODE
83 * @sa VST_EFFECT_OPCODE
84 */
86 /** @sa VST_STATUS_1 */
88 /** @sa VST_STATUS_1 */
90 /** @sa VST_STATUS_1 */
92
93 /** No
94 * We're unable to handle the data/notification.
95 *
96 * @sa VST_HOST_OPCODE
97 * @sa VST_EFFECT_OPCODE
98 */
100 /** @sa VST_STATUS_m1 */
102
103 _VST_STATUS_PAD = (-1l)
105
106/** Known Buffer Sizes
107 */
122
123/** Valid VST 1.x and 2.x versions
124 * The format is either a single digit or four digits in Base10 format.
125 *
126 * @code{.c}
127 * // Converts a Base10 VST version to a uint8_t[4] representation of the version.
128 * uint32_t expand_vst_version(uint32_t v) {
129 * if (v < 10) { //
130 * return v << 24;
131 * }
132 * uint8_t major = v / 1000;
133 * uint8_t minor = (v / 100) % 10;
134 * uint8_t revision = (v / 10) % 10;
135 * uint8_t patch = v % 10;
136 * return (major << 24) | (minor << 16) | (revision << 8) | patch;
137 * }
138 * @endcode
139 */
141 /** Private SDK Version 1.0
142 *
143 * Many types likely won't quite match up with what we expect.
144 */
146 /** SDK Version 1.0. */
148 /** SDK Version 1.1. */
150 /** Private SDK Version 2.0
151 *
152 * Many types likely won't quite match up with what we expect.
153 */
155 /** SDK Version 2.0 */
157 /** SDK Version 2.1 */
159 /** SDK Version 2.2 */
161 /** SDK Version 2.3 */
163 /** SDK Version 2.4 */
165
166 /* @private Pad to 32-bit. */
167 _VST_VERSION_PAD = (-1l)
169
170/** Window/Editor Rectangle.
171 * The order is counter-clockwise starting from the top.
172 */
174 int16_t top;
175 int16_t left;
176 int16_t bottom;
177 int16_t right;
178};
179
180/** Virtual Key codes.
181 *
182 * Steinberg seems to like reinventing the wheel. What was the problem with just using the platform specific key codes?
183 */
186
189
192
194
197
200
203
206
208
211
214
217
220
223
226
229
232
234
237
240
242
245
248
250
253
256
259
262
265
268
271
274
277
280
283
286
289
292
294
297
300
303
306
309
312
315
318
321
324
327
330
333
336
339
342
345
348
361 VST_VKEY_69 = 69
363
365 /** One of the shift keys is held down. */
367 /** @sa VST_VKEY_MODIFIER_1ls0 */
369
370 /** One of the alt keys is held down. */
372 /** @sa VST_VKEY_MODIFIER_1ls1 */
374
375 /** Control on MacOS, System (Windows Logo) on Windows.
376 *
377 * Very funny Steinberg.
378 */
380 /** @sa VST_VKEY_MODIFIER_1ls2 */
382
383 /** Control on PC, System (Apple Logo) on Mac OS.
384 *
385 * I have questions. They're all "Why?!".
386 */
388 /** @sa VST_VKEY_MODIFIER_1ls3 */
391
392/*------------------------------------------------------------------------------------------------------------------------*/
393/* VST Parameters */
394/*------------------------------------------------------------------------------------------------------------------------*/
395
396/** Flags for parameters.
397 * @sa vst_parameter_properties_t
398 */
400 /** Parameter is an on/off switch.
401 *
402 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
403 */
405 /** @sa VST_PARAMETER_FLAG_1ls0 */
407
408 /** Parameter limits are set as integers.
409 *
410 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
411 */
413 /** @sa VST_PARAMETER_FLAG_1ls1 */
415
416 /** Parameter uses float steps.
417 *
418 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
419 */
421 /** @sa VST_PARAMETER_FLAG_1ls2 */
423
424 /** Parameter uses integer steps.
425 *
426 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
427 */
429 /** @sa VST_PARAMETER_FLAG_1ls3 */
431
432 /** Parameter has an display order index for the default editor.
433 *
434 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
435 */
437 /** @sa VST_PARAMETER_FLAG_1ls4 */
439
440 /** Parameter has a category for the default editor.
441 *
442 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
443 */
445 /** @sa VST_PARAMETER_FLAG_1ls5 */
447
448 /** Parameter can be gradually increased/decreased.
449 *
450 * @sa VST_EFFECT_OPCODE_PARAM_IS_AUTOMATABLE
451 */
453 /** @sa VST_PARAMETER_FLAG_1ls6 */
455
458
459/** Information about a parameter.
460 *
461 * @important Many VST hosts and plug-ins expect their parameters to be normalized within 0.0 and 1.0.
462 */
464 /** Float Step value
465 *
466 * Some hosts and plug-ins expect this to be within 0 and 1.0.
467 *
468 * @note Requires @ref VST_PARAMETER_FLAG_STEP_FLOAT to be set.
469 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
470 */
471 float step_f32;
472
473 /** Float small step value
474 * This is used for "tiny" changes.
475 *
476 * Some hosts and plug-ins expect this to be within 0 and 1.0.
477 *
478 * @note Requires @ref VST_PARAMETER_FLAG_STEP_FLOAT to be set.
479 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
480 */
482
483 /** Float large step value
484 * This is used for "huge" changes.
485 *
486 * Some hosts and plug-ins expect this to be within 0 and 1.0.
487 *
488 * @note Requires @ref VST_PARAMETER_FLAG_STEP_FLOAT to be set.
489 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
490 */
492
493 /** Human-readable name for this parameter.
494 *
495 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
496 */
498
499 /** Parameter Flags
500 *
501 * Any combination of @ref VST_PARAMETER_FLAG.
502 */
503 uint32_t flags;
504
505 /** Minimum Integer value
506 *
507 * @note Requires @ref VST_PARAMETER_FLAG_INTEGER_LIMITS to be set.
508 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
509 */
511
512 /** Maximum Integer value
513 *
514 * @note Requires @ref VST_PARAMETER_FLAG_INTEGER_LIMITS to be set.
515 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
516 */
518
519 /** Integer Step value
520 *
521 * @note Requires @ref VST_PARAMETER_FLAG_STEP_INT to be set.
522 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
523 */
524 int32_t step_i32;
525
526 /** Short Human-readable label for this parameter.
527 *
528 * I have no idea why this exists?
529 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
530 */
532
533 /** Display order index.
534 *
535 * @note Requires @ref VST_PARAMETER_FLAG_INDEX to be set.
536 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
537 */
538 uint16_t index;
539
540 /** Category index
541 *
542 * Must either be 0 for no category, or any number increasing from 1 onwards.
543 *
544 * @note Requires @ref VST_PARAMETER_FLAG_CATEGORY to be set.
545 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
546 */
547 uint16_t category;
548
549 /** How many parameters are in this category?
550 * This allows the plug-in to specify the same category multiple times.
551 *
552 * @note Requires @ref VST_PARAMETER_FLAG_CATEGORY to be set.
553 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
554 */
556
557 /** @private Must be zero anyway. */
558 uint16_t _unknown_00;
559
560 /** Human-readable name for the category this parameter is in.
561 *
562 * @note Requires @ref VST_PARAMETER_FLAG_CATEGORY to be set.
563 * @note Ignored if @ref VST_EFFECT_FLAG_EDITOR is set.
564 */
566
567 /** @private Reserved for future expansion? */
568 char _reserved[16];
569};
570
571/*------------------------------------------------------------------------------------------------------------------------*/
572/* VST Input Microphones/Output Speakers */
573/*------------------------------------------------------------------------------------------------------------------------*/
574
575/** Default speaker types.
576 *
577 * @todo Are there more?
578 */
580 /** Mono */
582 /** (Front) Left */
584 /** (Front) Right */
586 /** (Front) Center */
588 /** LFE / Subwoofer */
590 /** Rear/Surround Left */
592 /** Rear/Surround Right */
594 /** Side Left */
596 /** Side Right */
598
631
632
633 /* @private Pad to 32-bit. */
636
637/** Speaker properties.
638 */
640 /** Azimuth in Radians
641 * Range: -PI (Left) through 0.0 (Right) to PI (Left)
642 *
643 * @note Must be 10.0 if this is a LFE.
644 */
645 float azimuth;
646
647 /** Altitude in Radians
648 * Range: -PI/2 (Bottom) to PI/2 (Top)
649 *
650 * @note Must be 10.0 if this is a LFE.
651 */
652 float altitude;
653
654 /** Distance in Meters
655 * range: 0 to +-Infinity
656 *
657 * @note Must be 0.0 if this is a LFE.
658 */
659 float distance;
660
661 /** @private Must be zero. */
662 float _unknown_00;
663
664 /** Human readable name for this speaker.
665 *
666 * Some hosts will behave weird if you use "L", "R", "C", "Ls", "Rs", "Lc", "Rc", "LFE", "Lfe", "Sl", "Sr", "Cs",
667 * and other 2 to 3 letter short codes. Best not to use those if you like your plug-in in a not-crashy state.
668 */
670
671 /** The type of the speaker
672 *
673 * See VST_SPEAKER_TYPE
674 *
675 * If the above is one of those short codes some host seems to overwrite this with their own. Memory safety is
676 * optional apparently.
677 */
678 int32_t type;
679
680 /** @private Reserved for future expansion? */
681 uint8_t _reserved[28];
682};
683
684/** Known default speaker arrangements.
685 *
686 * @todo There's got to be a lot more right?
687 */
689 /** Custom speaker arrangement.
690 *
691 * Accidentally discovered through random testing.
692 */
694
695 /** Unknown/Empty speaker layout.
696 */
698
699 /** Mono
700 */
702
703 /** Stereo
704 */
706
707 /** Quadraphonic
708 */
710
711 /** 5.0 (Old Surround)
712 *
713 * L, R, C, RL, RR
714 */
716
717 /** 5.1 (Old Surround)
718 *
719 * L, R, C, LFE, RL, RR
720 */
722
723 /** 7.1 (Full Surround)
724 *
725 * L, R, C, LFE, SL, SR, RL, RR
726 */
728
729 /* @private Pad to 32-bit. */
732
733/** Speaker arrangement definition.
734 */
736 /** Any of @ref VST_SPEAKER_ARRANGEMENT_TYPE.
737 *
738 */
739 int32_t type;
740
741 /** Number of channels used in @ref speakers.
742 *
743 * Appears to be limited to @ref VST_MAX_CHANNELS.
744 */
745 int32_t channels;
746
747 /** Array of @ref vst_speaker_properties_t with size @ref channels.
748 *
749 * @note This is defined as @ref VST_MAX_CHANNELS as there's currently no host that supports more than that.
750 */
752};
753
754/*------------------------------------------------------------------------------------------------------------------------*/
755/* VST Input/Output Streams */
756/*------------------------------------------------------------------------------------------------------------------------*/
757
759 /** Ignored?
760 */
762
763 /** Stream is in Stereo
764 *
765 * Can't be used with VST_STREAM_FLAG_USE_TYPE.
766 */
769
770 /** Stream is defined by VST_SPEAKER_ARRANGEMENT_TYPE
771 *
772 * Can't be used with VST_STREAM_FLAG_STEREO.
773 */
777
779 /** Human-readable name for this stream.
780 */
782
783 /** Stream flags
784 * Any combination of VST_STREAM_FLAG
785 */
786 int32_t flags;
787
788 /** Stream arrangement (optional)
789 * See VST_SPEAKER_ARRANGEMENT_TYPE
790 */
791 int32_t type;
792
793 /** Human-readable label for this stream.
794 */
796
797 /** @private Reserved for future expansion? */
798 uint8_t _reserved[48];
799};
800
801/*------------------------------------------------------------------------------------------------------------------------*/
802/* VST Events */
803/*------------------------------------------------------------------------------------------------------------------------*/
804
805/** Available event types.
806 *
807 * Seems like we can implement our own events for smooth automation and similar.
808 */
810 /** Invalid event.
811 *
812 * Crashes the host or plug-in if used.
813 */
815 /** @sa VST_EVENT_TYPE_00 */
817
818 /** MIDI Event.
819 *
820 * Allows casting @ref vst_event_t to @ref vst_event_midi_t.
821 */
823 /** @sa VST_EVENT_TYPE_01 */
825
828
829 /** @todo Seems to be related to parameter automation in some hosts. Structure varies by host, only the first section (vst_event_t) is identical.
830 */
832
833 /** @todo Seems to be related to switch parameter automation in some hosts. Structure varies by host, only the first section (vst_event_t) is identical.
834 */
836
837 /** MIDI SysEx Event.
838 *
839 * Allows casting @ref vst_event_t to @ref vst_event_midi_sysex_t.
840 * See: https://blog.landr.com/midi-sysex/
841 */
844
845/** A generic event.
846 *
847 * @sa vst_events_t
848 * @sa vst_host_supports_t.sendVstEvents
849 * @sa vst_host_supports_t.receiveVstEvents
850 * @sa vst_effect_supports_t.sendVstEvents
851 * @sa vst_effect_supports_t.receiveVstEvents
852 * @sa VST_EFFECT_OPCODE_EVENT
853 * @sa VST_HOST_OPCODE_EVENT
854 */
856 /** What event type was triggered?
857 * Any of @ref VST_EVENT_TYPE
858 */
859 int32_t type;
860
861 /** Content size in bytes.
862 *
863 * The size is calculated excluding @ref type and @ref size.
864 * @code{.c}
865 * vst_event_t myevent;
866 * myevent.size = sizeof(vst_event_t) - sizeof(vst_event_t.type) - sizeof(vst_event_t.size);
867 * @endcode
868 */
869 int32_t size;
870
871 /** Offset of the event relative to some position.
872 *
873 * @todo What position is this relative to?
874 */
875 int32_t offset;
876
877 /** @private Set by the event itself. */
878 int32_t _pad_00[5];
879};
880
881/** A MIDI event.
882 *
883 * @sa VST_EVENT_TYPE_MIDI
884 * @sa vst_host_supports_t.sendVstMidiEvents
885 * @sa vst_host_supports_t.receiveVstMidiEvents
886 * @sa vst_host_supports_t.sendVstMidiEventFlagIsRealtime
887 * @sa vst_effect_supports_t.sendVstMidiEvents
888 * @sa vst_effect_supports_t.receiveVstMidiEvents
889 */
891 /** Shared event structure. */
893
894 struct {
895 /** @private */
896 int32_t _pad_00[3];
897
898 /** Is this note played in real time (played live)?
899 * Can only ever be 0 (sequencer) or 1 (live).
900 *
901 * @todo Can this be 1 in VST 2.3 and earlier or only 2.4?
902 * @sa vst_host_supports_t.sendVstMidiEventFlagIsRealtime
903 */
905
906 /** Note Length (in samples/frames) of the played note if available.
907 */
908 int32_t length;
909
910 /** Some kind of offset (in samples/frames).
911 */
912 int32_t offset;
913
914 /** Zero terminated array containing up to 3 bytes of MIDI information.
915 *
916 * @note @ref data[3] is always zero.
917 */
918 char data[4];
919
920 /** Tune (in cents) for anything that isn't the default scale.
921 *
922 * Range: -64 to 63
923 */
924 int8_t tune;
925
926 /** Note velocity.
927 *
928 * Range: 0 to 127
929 * @todo Are negative values possible?
930 */
931 int8_t velocity;
932
933 /** @private Padding */
934 char _pad_01[2];
935 } midi;
936};
937
938/** A MIDI SysEx event.
939 *
940 * See: https://blog.landr.com/midi-sysex/
941 *
942 * @sa VST_EVENT_TYPE_MIDI_SYSEX
943 * @sa vst_host_supports_t.sendVstMidiEvents
944 * @sa vst_host_supports_t.receiveVstMidiEvents
945 * @sa vst_host_supports_t.sendVstMidiEventFlagIsRealtime
946 * @sa vst_effect_supports_t.sendVstMidiEvents
947 * @sa vst_effect_supports_t.receiveVstMidiEvents
948 */
950 /** Shared event structure. */
952
953 struct {
954 /** @private */
955 int32_t _pad_00[4];
956
957 /** Size (in bytes) of the SysEx event.
958 */
959 int32_t size;
960
961 /** @private Must be zero. */
962 intptr_t _pad_01;
963
964 /** Zero terminated buffer of size @ref size.
965 *
966 * Format is specific to the MIDI device that is used.
967 */
968 char* data;
969
970 /** @private Must be zero. */
971 intptr_t _pad_02;
972 } sysex;
973};
974
975/** A collection of events.
976 *
977 * @sa vst_event_t
978 * @sa vst_host_supports_t.sendVstEvents
979 * @sa vst_host_supports_t.receiveVstEvents
980 * @sa vst_effect_supports_t.sendVstEvents
981 * @sa vst_effect_supports_t.receiveVstEvents
982 * @sa VST_EFFECT_OPCODE_EVENT
983 * @sa VST_HOST_OPCODE_EVENT
984 */
986 /** Number of events stored in @ref vst_events_t.events.
987 */
988 int32_t count;
989
990 /** @private Reserved, must be zero. */
991 int32_t _reserved_00;
992
993 /** An array of pointers to valid @ref vst_event_t structures.
994 *
995 * The size of this array is defined by @ref vst_events_t.count.
996 */
998};
999
1000/*------------------------------------------------------------------------------------------------------------------------*/
1001/* VST Host related Things */
1002/*------------------------------------------------------------------------------------------------------------------------*/
1003
1004/* Pre-define vst_effect_t so we can use it below. */
1005struct vst_effect_t;
1006
1007/**
1008 * @sa VST_HOST_OPCODE_ACTIVE_THREAD
1009 */
1011 /** The active thread has no special usage assigned.
1012 */
1014
1015 /** The active thread is used for user interface work.
1016 */
1018
1019 /** The active thread is used for audio processing.
1020 */
1022
1023 /** The active thread is related to events and event handling.
1024 *
1025 * @sa VST_HOST_OPCODE_EVENT
1026 * @sa VST_EFFECT_OPCODE_EVENT
1027 */
1029
1030 /** The active thread was created by an effect.
1031 */
1033
1034 /** @private */
1035 VST_HOST_ACTIVE_THREAD_MAX,
1036 /** @private */
1037 _VST_HOST_ACTIVE_THREAD_PAD = (-1l)
1038};
1039
1040/** Plug-in to Host Op-Codes
1041 * These Op-Codes are emitted by the plug-in and the host _may_ handle them or return 0 (false).
1042 * We have no guarantees about anything actually happening.
1043 */
1045 /** Update automation for a given Parameter
1046 *
1047 * Must be used to notify the host that the parameter was changed by the user if a custom editor is used.
1048 *
1049 * @param p_int1 Parameter Index
1050 * @param p_float Parameter Value
1051 * @return Expected to return... something.
1052 */
1054 /** @sa VST_HOST_OPCODE_00 */
1056 /** @sa VST_HOST_OPCODE_00 */
1058
1059 /** Retrieve the Hosts VST Version.
1060 *
1061 * @return See VST_VERSION enumeration.
1062 */
1064 /** @sa VST_HOST_OPCODE_01 */
1066
1067 /** Get the currently selected effect id in container plug-ins.
1068 *
1069 * Used in combination with @ref VST_EFFECT_CATEGORY_CONTAINER.
1070 *
1071 * @return The currently selected unique effect id in this container.
1072 */
1074 /** @sa VST_HOST_OPCODE_02 */
1076
1077 /** Some sort of idle keep-alive?
1078 *
1079 * Seems to be called only in editor windows when a modal popup is present.
1080 */
1082 /** @sa VST_HOST_OPCODE_03 */
1084
1085 /** @todo */
1087
1088 /*-------------------------------------------------------------------------------- */
1089 /* VST 2.0 */
1090 /*--------------------------------------------------------------------------------*/
1091
1092 /** @todo */
1094
1095 /** @todo */
1097
1098 /** @todo */
1100
1101 /** @todo */
1103
1104 /** Send events from plug-in to host.
1105 * The host must support receiving events (see @ref vst_host_supports_t.receiveVstEvents) while the plug-in may
1106 * optionally signal to the host that it wants to send events to the host (see @ref
1107 * vst_effect_supports_t.sendVstEvents).
1108 *
1109 * @sa vst_event_t
1110 * @sa vst_events_t
1111 * @sa vst_effect_supports_t.sendVstEvents
1112 * @sa vst_host_supports_t.receiveVstEvents
1113 * @sa vst_effect_supports_t.sendVstMidiEvents
1114 * @sa vst_host_supports_t.receiveVstMidiEvents
1115 * @sa VST_EFFECT_OPCODE_EVENT
1116 * @note (VST 2.0+) Available from VST 2.0 onwards.
1117 * @param p_ptr A valid pointer to a @ref vst_events_t structure.
1118 */
1120 /** @sa VST_HOST_OPCODE_09 */
1122
1123 /** @todo */
1125
1126 /** @todo */
1128
1129 /** @todo */
1131
1132 /** Notify the host that numInputs/numOutputs/delay/numParams has changed.
1133 * Only supported if the host replies @ref VST_STATUS_TRUE to @ref VST_HOST_OPCODE_SUPPORTS query for
1134 * @ref vst_host_supports_t.acceptIOChanges.
1135 *
1136 * @note In VST 2.3 and earlier calling this outside of @ref VST_EFFECT_OPCODE_IDLE may result in a crash.
1137 * @note In VST 2.3 and later this may only be called while between @ref VST_EFFECT_OPCODE_PROCESS_END and
1138 * @ref VST_EFFECT_OPCODE_PROCESS_BEGIN.
1139 *
1140 * @return @ref VST_STATUS_TRUE if supported and handled otherwise @ref VST_STATUS_FALSE.
1141 */
1143 /** @sa VST_HOST_OPCODE_0D */
1145
1146 /** @todo */
1148
1149 /** Request that the host changes the size of the containing window.
1150 *
1151 * @note (VST 2.x) Available from VST 2.0 onwards.
1152 * @sa vst_host_supports_t.sizeWindow
1153 *
1154 * @param p_int1 Width (in pixels) that we'd like to have.
1155 * @param p_int2 Height (in pixels) that we'd like to have.
1156 * @param p_ptr Must be zero'd.
1157 * @param p_float Must be zero'd.
1158 * @return @ref VST_STATUS_TRUE if change was accepted, anything else if not. Do not rely on the return code being 0.
1159 */
1161 /** @sa VST_HOST_OPCODE_0F */
1163
1164 /** Get the current sample rate the effect should be running at.
1165 *
1166 * @note (VST 2.x) Available from VST 2.0 onwards.
1167 * @sa VST_EFFECT_OPCODE_SET_SAMPLE_RATE
1168 *
1169 * @return The current sample rate in Hertz.
1170 */
1172 /** @sa VST_HOST_OPCODE_10 */
1174
1175 /** Get the current block size for the effect.
1176 *
1177 * @note (VST 2.x) Available from VST 2.0 onwards.
1178 * @sa VST_EFFECT_OPCODE_SET_BLOCK_SIZE
1179 *
1180 * @return The current block size in samples.
1181 */
1183 /** @sa VST_HOST_OPCODE_11 */
1185
1186 /** Current input latency.
1187 * Appears to only work with ASIO input/output devices.
1188 *
1189 * @note (VST 2.0+) Available from VST 2.0 onwards.
1190 * @return Current input audio latency in samples.
1191 */
1193 /** @sa VST_HOST_OPCODE_12 */
1195
1196 /** Current output latency.
1197 * Appears to only work with ASIO input/output devices.
1198 *
1199 * @note (VST 2.0+) Available from VST 2.0 onwards.
1200 * @return Current output audio latency in samples.
1201 */
1203 /** @sa VST_HOST_OPCODE_13 */
1205
1206 /** Get which effect is attached to the indexed input stream.
1207 *
1208 * @note (VST 2.0+) Available from VST 2.0 onwards.
1209 * @deprecated (VST 2.4+) Non-functional from VST 2.4 onwards and unimplemented in many earlier hosts.
1210 * @param p_int1 Which input stream should be queried?
1211 * @return Pointer to a valid @ref vst_effect_t structure or 0.
1212 */
1214 /** @sa VST_HOST_OPCODE_14 */
1216 /** @sa VST_HOST_OPCODE_14 */
1218
1219 /** Get which effect is attached to the indexed output stream.
1220 *
1221 * @note (VST 2.0+) Available from VST 2.0 onwards.
1222 * @deprecated (VST 2.4+) Non-functional from VST 2.4 onwards and unimplemented in many earlier hosts.
1223 * @param p_int1 Which output stream should be queried?
1224 * @return Pointer to a valid @ref vst_effect_t structure or 0.
1225 */
1227 /** @sa VST_HOST_OPCODE_15 */
1229 /** @sa VST_HOST_OPCODE_15 */
1231
1232 /** @todo */
1234
1235 /** Which thread is the host currently processing this call from?
1236 * Useful for memory and thread safety since we can guarantee code paths don't intersect between threads in
1237 * compatible hosts. Not so useful in incompatible hosts.
1238 *
1239 * @note (VST 2.0+) Available from VST 2.0 onwards.
1240 * @return Any of @ref VST_HOST_ACTIVE_THREAD or 0 if unsupported.
1241 */
1243 /** @sa VST_HOST_OPCODE_17 */
1245
1246 /** @todo */
1248
1249 /** @todo */
1251
1252 /** @todo */
1254
1255 /** @todo */
1257
1258 /** @todo */
1260
1261 /** @todo */
1263
1264 /** @todo */
1266
1267 /** Retrieve the hosts output speaker arrangement.
1268 * Seems to always reply with the data provided in @ref VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT p_ptr.
1269 *
1270 * @note (VST 2.3+) Available from VST 2.3 onwards.
1271 * @deprecated (VST 2.4+) Deprecated from VST 2.4 onwards.
1272 * @sa vst_speaker_arrangement_t
1273 * @sa VST_EFFECT_OPCODE_SET_SPEAKER_ARRANGEMENT
1274 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
1275 * @sa VST_HOST_OPCODE_GET_INPUT_SPEAKER_ARRANGEMENT
1276 * @return Seems to be a valid pointer to @ref vst_speaker_arrangement_t if supported.
1277 */
1279 /** @sa VST_HOST_OPCODE_1F */
1281 /** @sa VST_HOST_OPCODE_1F */
1283
1284 /** Retrieve the vendor name into the ptr buffer.
1285 *
1286 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_VENDOR_NAME.
1287 */
1289 /** @sa VST_HOST_OPCODE_20 */
1291
1292 /** Retrieve the product name into the ptr buffer.
1293 *
1294 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_PRODUCT_NAME.
1295 */
1297 /** @sa VST_HOST_OPCODE_21 */
1299
1300 /** Retrieve the vendor version in return value.
1301 *
1302 * @return Version.
1303 */
1305 /** @sa VST_HOST_OPCODE_22 */
1307
1308 /** User defined OP Code, for custom interaction.
1309 *
1310 */
1312 /** @sa VST_HOST_OPCODE_23 */
1314
1315 /** @todo */
1317
1318 /** Check if the host supports a certain feature.
1319 *
1320 * @param p_ptr `char[...]` Zero terminated string for which feature we want to support.
1321 * @return @ref VST_STATUS_TRUE if the feature is supported otherwise @ref VST_STATUS_FALSE.
1322 */
1324 /** @sa VST_HOST_OPCODE_25 */
1326
1327 /** What language is the host in?
1328 *
1329 * @return 1 if english, 2 if german. more possible?
1330 */
1332 /** @sa VST_HOST_OPCODE_26 */
1334
1335 /** Crash the host if p_ptr isn't nullptr.
1336 * @todo
1337 */
1339
1340 /** Crash the host if p_ptr isn't nullptr.
1341 * @todo
1342 */
1344
1345 /** Retrieve the directory of the effect that emitted this.
1346 * The returned value seems to be unchanged for container plug-ins.
1347 *
1348 * @note (VST 2.0+) Available from VST 2.0 onwards.
1349 * @return (Windows) A zero-terminated char buffer of unknown size.
1350 * @return (MacOS) A valid FSSpec structure.
1351 */
1353 /** @sa VST_HOST_OPCODE_29 */
1355
1356 /** Refresh everything related to the effect that called this.
1357 * This includes things like parameters, programs, banks, windows, files, meters, streams, sample rate, block size,
1358 * and a lot more. Anything that has to do with the effect should be refreshed when the effect calls this.
1359 *
1360 * @note (VST 2.0+) Available from VST 2.0 onwards.
1361 */
1363 /** @sa VST_HOST_OPCODE_2A */
1365 /** @sa VST_HOST_OPCODE_2A */
1367
1368 /*--------------------------------------------------------------------------------*/
1369 /* VST 2.1 */
1370 /*--------------------------------------------------------------------------------*/
1371
1372 /** Notify host that a parameter is being edited.
1373 * "Locks" the parameter from being edited in compatible hosts.
1374 *
1375 * @note (VST 2.1+) Available from VST 2.1 onwards.
1376 * @param p_int1 Parameter index.
1377 */
1379 /** @sa VST_HOST_OPCODE_2B */
1381 /** @sa VST_HOST_OPCODE_2B */
1383
1384 /** Notify host that parameter is no longer being edited.
1385 * "Unlocks" the parameter for further editing in compatible hosts. Remember to call the @ref VST_HOST_OPCODE_PARAM_UPDATE
1386 * op-code afterwards so that the host knows it needs to update its automation data.
1387 *
1388 * @note (VST 2.1+) Available from VST 2.1 onwards.
1389 * @sa VST_HOST_OPCODE_PARAM_UPDATE
1390 * @param p_int1 Parameter index.
1391 */
1393 /** @sa VST_HOST_OPCODE_2C */
1395 /** @sa VST_HOST_OPCODE_2C */
1397
1398 /** Crash the host depending on what p_ptr is pointing at.
1399 * @todo
1400 */
1402
1403 /*--------------------------------------------------------------------------------*/
1404 /* VST 2.2 */
1405 /*--------------------------------------------------------------------------------*/
1406
1407 /** Crash the host depending on what p_ptr is pointing at.
1408 * @todo
1409 */
1411
1412 /** Crash the host depending on what p_ptr is pointing at.
1413 * @todo
1414 */
1416
1417 /**
1418 * When queried by the plug-in shortly after @ref VST_EFFECT_OPCODE_PROGRAM_LOAD it often crashes compatible hosts
1419 * with a memory access exception. This exception can be controlled with p_ptr but it's unclear what that is
1420 * pointing at so far. In the event that it doesn't crash the memory address we pointed at changes to a path.
1421 *
1422 * @todo Figure out what p_ptr is.
1423 * @note (VST 2.2+) Available from VST 2.2 onwards.
1424 * @deprecated (VST 2.4+) Deprecated from VST 2.4 onwards.
1425 * @param p_ptr A pointer to something
1426 * @todo
1427 */
1429
1430 /*--------------------------------------------------------------------------------*/
1431 /* VST 2.3 */
1432 /*--------------------------------------------------------------------------------*/
1433
1434 /** Retrieve the hosts input speaker arrangement.
1435 * Seems to always reply with the data provided in @ref VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT p_int2.
1436 *
1437 * @note (VST 2.3+) Available from VST 2.3 onwards.
1438 * @deprecated (VST 2.4+) Deprecated from VST 2.4 onwards.
1439 * @sa vst_speaker_arrangement_t
1440 * @sa VST_EFFECT_OPCODE_SET_SPEAKER_ARRANGEMENT
1441 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
1442 * @sa VST_HOST_OPCODE_GET_OUTPUT_SPEAKER_ARRANGEMENT
1443 * @return Seems to be a valid pointer to @ref vst_speaker_arrangement_t if supported.
1444 */
1446 /** @sa VST_HOST_OPCODE_31 */
1448 /** @sa VST_HOST_OPCODE_31 */
1450
1451 /** @private Highest known OPCODE. */
1452 VST_HOST_OPCODE_MAX,
1453
1454 /** @private Force as 32-bit unsigned integer in compatible compilers. */
1455 _VST_HOST_OPCODE_PAD = (-1l)
1456};
1457
1458#if (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 202002L)
1459/** Plug-in to Host support checks
1460 *
1461 * Provided as `char* p_ptr` in the VST_EFFECT_OPCODE_SUPPORTS op code.
1462 *
1463 * Harvested via strings command and just checking what hosts actually responded to.
1464 */
1465struct vst_host_supports_t {
1466 /** Does the host support modifying input/output/params/delay when programs, banks or parameters are changed?
1467 * This only means that the host supports this inside of @ref VST_EFFECT_OPCODE_IDLE (VST 2.3 or earlier) or outside
1468 * of a @ref VST_EFFECT_OPCODE_PROCESS_BEGIN and @ref VST_EFFECT_OPCODE_PROCESS_END group.
1469 *
1470 * Signals that the host supports the following:
1471 * - @ref VST_HOST_OPCODE_IO_MODIFIED
1472 *
1473 * @return @ref VST_STATUS_TRUE if it supports it.
1474 */
1475 const char* acceptIOChanges;
1476
1477 /** Is the host using process begin/end instead of idle?
1478 * The host may opt to emit @ref VST_EFFECT_OPCODE_IDLE or @ref VST_EFFECT_OPCODE_PROCESS_BEGIN and
1479 * @ref VST_EFFECT_OPCODE_PROCESS_END when running in VST 2.3 compatibility mode.
1480 *
1481 * @sa VST_EFFECT_OPCODE_PROCESS_BEGIN
1482 * @sa VST_EFFECT_OPCODE_PROCESS_END
1483 * @sa VST_EFFECT_OPCODE_IDLE
1484 * @note (VST 2.3) Available from VST 2.3 onwards.
1485 * @deprecated (VST 2.4) This behavior is the default in VST 2.4 and later.
1486 * @return @ref VST_STATUS_TRUE if it supports it.
1487 */
1488 const char* startStopProcess;
1489
1490 /** Does the host support container plug-ins?
1491 *
1492 * @note Is shell a reference to Windows shell menus?
1493 * @sa VST_HOST_OPCODE_CURRENT_EFFECT_ID
1494 * @sa VST_EFFECT_OPCODE_CONTAINER_NEXT_EFFECT_ID
1495 * @return @ref VST_STATUS_TRUE if the host supports it _and_ the current plug-in is a container plug-in.
1496 */
1497 const char* shellCategory;
1498
1499 /** Can we request that the host changes the editor window size?
1500 *
1501 * @note (VST 2.0+) Available from VST 2.0 onwards.
1502 * @sa VST_HOST_OPCODE_EDITOR_RESIZE
1503 */
1504 const char* sizeWindow;
1505
1506 /** Host can send events to plug-in.
1507 *
1508 * @sa vst_effect_supports_t.receiveVstEvents
1509 * @sa VST_EFFECT_OPCODE_EVENT
1510 * @note (VST 2.0+) Available from VST 2.0 onwards.
1511 */
1512 const char* sendVstEvents;
1513
1514 /** Host can receive events from plug-in.
1515 *
1516 * @sa vst_effect_supports_t.sendVstEvents
1517 * @sa VST_HOST_OPCODE_EVENT
1518 * @note (VST 2.0+) Available from VST 2.0 onwards.
1519 */
1520 const char* receiveVstEvents;
1521
1522 /** Host can send MIDI events to plug-in.
1523 *
1524 * @sa vst_effect_supports_t.receiveVstMidiEvents
1525 * @sa VST_EFFECT_OPCODE_EVENT
1526 * @sa vst_effect_midi_t
1527 * @sa vst_effect_midi_sysex_t
1528 * @note (VST 2.0+) Available from VST 2.0 onwards.
1529 */
1530 const char* sendVstMidiEvent;
1531
1532 /** Host can receive MIDI events from plug-in.
1533 *
1534 * @sa vst_effect_supports_t.sendVstMidiEvents
1535 * @sa VST_HOST_OPCODE_EVENT
1536 * @sa vst_effect_midi_t
1537 * @sa vst_effect_midi_sysex_t
1538 * @note (VST 2.0+) Available from VST 2.0 onwards.
1539 */
1540 const char* receiveVstMidiEvent;
1541
1542 /** Host can send real time (live) MIDI events to plug-in.
1543 *
1544 * @sa vst_host_supports_t.sendVstMidiEvent
1545 * @sa vst_effect_supports_t.receiveVstMidiEvents
1546 * @sa VST_EFFECT_OPCODE_EVENT
1547 * @sa vst_effect_midi_t
1548 * @note (VST 2.0+) Available from VST 2.0 onwards.
1549 */
1550 const char* sendVstMidiEventFlagIsRealtime;
1551
1552 const char* sendVstTimeInfo;
1553 const char* reportConnectionChanges; // Seems related to speakers?
1554
1555 const char* offline;
1556
1557 const char* editFile;
1558 const char* openFileSelector;
1559 const char* closeFileSelector;
1560} /** @private */ vst_host_supports = {
1561 .acceptIOChanges = "acceptIOChanges",
1562 .startStopProcess = "startStopProcess",
1563 .shellCategory = "shellCategory",
1564 .sizeWindow = "sizeWindow",
1565 .sendVstEvents = "sendVstEvents",
1566 .receiveVstEvents = "receiveVstEvents",
1567 .sendVstMidiEvent = "sendVstMidiEvent",
1568 .receiveVstMidiEvent = "receiveVstMidiEvent",
1569 .sendVstMidiEventFlagIsRealtime = "sendVstMidiEventFlagIsRealtime",
1570 .sendVstTimeInfo = "sendVstTimeInfo",
1571 .reportConnectionChanges = "reportConnectionChanges",
1572 .offline = "offline",
1573 .editFile = "editFile",
1574 .openFileSelector = "openFileSelector",
1575 .closeFileSelector = "closeFileSelector",
1576};
1577#endif
1578
1579/** Plug-in to Host callback
1580 *
1581 * 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.
1582 *
1583 * @param opcode See VST_HOST_OPCODE
1584 * @param p_str Zero terminated string or null on call.
1585 * @return ?
1586 */
1587typedef 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);
1588
1589//------------------------------------------------------------------------------------------------------------------------
1590// VST Plug-in/Effect related Things
1591//------------------------------------------------------------------------------------------------------------------------
1592
1593/** Magic Number identifying a VST 2.x plug-in structure
1594 *
1595 * @sa vst_effect_t.magic_numer
1596 */
1597#define VST_MAGICNUMBER VST_FOURCC('V', 's', 't', 'P')
1598
1599/** Default VST 2.x Sample Rate
1600 * All VST 2.x hosts expect you to initialize your plug-in to these default values.
1601 *
1602 * @sa VST_EFFECT_OPCODE_SET_SAMPLE_RATE
1603 */
1604#define VST_DEFAULT_SAMPLE_RATE 44100.0f
1605
1606/** Default VST 2.x Block Size
1607 * All VST 2.x hosts expect you to initialize your plug-in to these default values.
1608 *
1609 * @sa VST_EFFECT_OPCODE_SET_BLOCK_SIZE
1610 */
1611#define VST_DEFAULT_BLOCK_SIZE 1024
1612
1613/** Plug-in Categories
1614 * Pre-defined category grouping that also affect host behavior when handling the plug-in. This is not just a UI/UX
1615 * thing, it actually affects what plug-ins can do, so place your plug-in into the correct category.
1616 *
1617 */
1620
1621 /** Generic Effects
1622 * Examples: Distortion, Pitch Shift, ...
1623 *
1624 * Supports: Delay (Optional), Tail Samples, MIDI
1625 */
1627 /** @sa VST_EFFECT_CATEGORY_01 */
1629
1630 /** Instruments
1631 * Examples: Instruments, Synths, Samplers, ...
1632 *
1633 * Supports: Delay (Optional), Tail Samples, MIDI
1634 */
1636 /** @sa VST_EFFECT_CATEGORY_02 */
1638
1639 /** Metering
1640 * Examples: Loudness Meters, Volume Analysis, ...
1641 *
1642 * Supports: Tail Samples, MIDI
1643 * @note Delay causes crashes in some hosts. Fun.
1644 */
1646 /** @sa VST_EFFECT_CATEGORY_03 */
1648
1649 /** Mastering
1650 * Examples: Compressors, Limiters, ...
1651 *
1652 * Supports: Delay, Tail Samples (optional), MIDI
1653 */
1655 /** @sa VST_EFFECT_CATEGORY_04 */
1657
1658 /** Spatializers
1659 * Examples: Channel Panning, Expanders, ...
1660 *
1661 * Supports: Tail Samples (optional), MIDI
1662 */
1664 /** @sa VST_EFFECT_CATEGORY_05 */
1666
1667 /** Delay/Echo
1668 * Examples: Echo, Reverb, Room Simulation, Delay, ...
1669 *
1670 * Supports: Delay, Tail Samples, MIDI
1671 */
1673 /** @sa VST_EFFECT_CATEGORY_06 */
1675
1676 /** External Processing.
1677 * This VST effect is an interface to an external device and requires special handling.
1678 *
1679 * @todo What does this actually support? Is it even still supported?
1680 */
1682 /** @sa VST_EFFECT_CATEGORY_07 */
1684
1685 /** Restoration
1686 * Examples: Noise Filtering, Upsamplers, ...
1687 *
1688 * Supports: Delay, Tail Samples, MIDI
1689 * @note Some DAWs allocate additional processing time to these.
1690 */
1692 /** @sa VST_EFFECT_CATEGORY_08 */
1694
1695 /** Offline Processing
1696 * Examples: Nothing
1697 * Supports: Nothing
1698 */
1700 /** @sa VST_EFFECT_CATEGORY_09 */
1701 VST_EFFECT_CATEGORY_OFFLINE = 0x09, // Offline Processing VST? Seems to receive all audio data prior to playback.
1702
1703 /** Container Plug-in
1704 * This plug-in contains multiple effects in one and requires special handling on both sides.
1705 *
1706 * Host handling:
1707 * @code{.c}
1708 * uint32_t current_select_id;
1709 *
1710 * // ... in intptr_t vst_host_callback(vst_effect_t* plugin, VST_HOST_OPCODE opcode, ...)
1711 * case VST_HOST_OPCODE_SUPPORTS: {
1712 * char* text = (char*)p_ptr;
1713 * // The plug-in may ask the host if it even supports containers at all and changes behavior if we don't.
1714 * if (text && strcmp(text, vst_host_supports.shellCategory) == 0) {
1715 * return VST_STATUS_TRUE;
1716 * }
1717 * }
1718 * case VST_HOST_OPCODE_CURRENT_EFFECT_ID:
1719 * return current_selected_id;
1720 * // ...
1721 *
1722 * // ... in whatever you use to load plug-ins ...
1723 * current_select_id;
1724 * vst_effect_t* plugin = plugin_main(&vst_host_callback);
1725 * int32_t plugin_category = plugin->control(plugin, VST_EFFECT_OPCODE_CATEGORY, 0, 0, 0, 0)
1726 * if (plugin_category == VST_EFFECT_CATEGORY_CONTAINER) {
1727 * char effect_name[VST_BUFFER_SIZE_EFFECT_NAME] effect_name;
1728 * int32_t effect_id;
1729 * // Iterate over all contained effects.
1730 * while ((effect_id = plugin->control(plugin, VST_EFFECT_OPCODE_CONTAINER_NEXT_EFFECT_ID, 0, 0, effect_name, 0)) != 0) {
1731 * // Contained effects must be named as far as I can tell.
1732 * if (effect_name[0] != 0) {
1733 * // Do some logic that does the necessary things to list these in the host.
1734 * }
1735 * }
1736 * } else {
1737 * // Do things to list only this plugin in the host.
1738 * }
1739 * // ...
1740 * @endcode
1741 *
1742 * Plug-in handling:
1743 * @code{.c}
1744 * // ... in vst_effect for the container
1745 * size_t current_effect_idx;
1746 * int32_t effect_list[] = {
1747 * // ... list of effect ids.
1748 * }
1749 * // ... in control(...)
1750 * case VST_EFFECT_OPCODE_CONTAINER_NEXT_EFFECT_ID:
1751 * // Make sure current_effect_idx doesn't exceed the maximum.
1752 * if (current_effect_idx > ARRAYSIZEOF(effect_list)) {
1753 * current_effect_idx;
1754 * return 0;
1755 * }
1756 * // Some code that turns effect indices into names to store into p_ptr.
1757 * return effect_list[current_effect_idx++]; // Return the effect id.
1758 * // ...
1759 *
1760 * VST_ENTRYPOINT {
1761 * // Ensure the host VST 2.x compatible.
1762 * int32_t vst_version = callback(nullptr, VST_HOST_OPCODE_VST_VERSION, 0, 0, 0, 0);
1763 * if (vst_version == 0) {
1764 * return 0; // It's not so we exit early.
1765 * }
1766 *
1767 * // Check if the host wants
1768 * int32_t effect_id = callback(nullptr, VST_HOST_OPCODE_CURRENT_EFFECT_ID, 0, 0, 0);
1769 * if (effect_id == 0) {
1770 * // ... logic specific to making the container.
1771 * return new vst_container_effect();
1772 * } else {
1773 * // ... logic specific to make sub effects
1774 * return new vst_sub_effect();
1775 * }
1776 * }
1777 *
1778 * // ...
1779 * @endcode
1780 */
1782 /** @sa VST_EFFECT_CATEGORY_0A */
1784
1785 /** Waveform Generators
1786 * Examples: Sine Wave Generator, ...
1787 * Supports: Delay, Tail Samples
1788 *
1789 * 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.
1790 *
1791 * @sa VST_EFFECT_CATEGORY_INSTRUMENT
1792 */
1794 /** @sa VST_EFFECT_CATEGORY_0B */
1796
1797 /** @private */
1798 VST_EFFECT_CATEGORY_MAX, // Not part of specification, marks maximum category.
1799
1800 /** @private */
1801 _VST_EFFECT_CATEGORY_PAD = (-1l)
1802};
1803
1804/** Effect Flags
1805 */
1807 /** Effect provides a custom editor.
1808 * The host will not provide a generic editor interface and expects @ref VST_EFFECT_OPCODE_EDITOR_OPEN and
1809 * @ref VST_EFFECT_OPCODE_EDITOR_CLOSE to work as expected. We are in charge of notifying the host about various
1810 * things like which parameter is in focus and stuff.
1811 *
1812 * @sa VST_EFFECT_OPCODE_EDITOR_GET_RECT
1813 * @sa VST_EFFECT_OPCODE_EDITOR_OPEN
1814 * @sa VST_EFFECT_OPCODE_EDITOR_CLOSE
1815 * @sa VST_EFFECT_OPCODE_EDITOR_DRAW
1816 * @sa VST_EFFECT_OPCODE_EDITOR_MOUSE
1817 * @sa VST_EFFECT_OPCODE_EDITOR_KEYBOARD
1818 * @sa VST_EFFECT_OPCODE_EDITOR_KEEP_ALIVE
1819 * @sa VST_EFFECT_OPCODE_EDITOR_VKEY_DOWN
1820 * @sa VST_EFFECT_OPCODE_EDITOR_VKEY_UP
1821 * @sa VST_HOST_OPCODE_EDITOR_UPDATE
1822 * @sa VST_HOST_OPCODE_PARAM_START_EDIT
1823 * @sa VST_HOST_OPCODE_PARAM_STOP_EDIT
1824 * @sa VST_HOST_OPCODE_PARAM_UPDATE
1825 */
1827 /** @sa VST_EFFECT_FLAG_1ls0 */
1829
1830 //1 << 1,
1831 //1 << 2, // Only seen when the plug-in responds to VST_EFFECT_OPCODE_09. Seems to be ignored by hosts entirely.
1832 //1 << 3, // Only seen when the plug-in behaves differently in mono mode. Seems to be ignored by hosts entirely.
1833
1834 /** Effect uses process_float.
1835 *
1836 * @sa vst_effect_t.process_float
1837 * @sa vst_effect_process_float_t
1838 * @deprecated (VST 2.4) Must be set in VST 2.4 and later or the host should fail to load the plug-in.
1839 */
1841 /** @sa VST_EFFECT_FLAG_1ls4 */
1843
1844 /** Effect supports saving/loading programs/banks from unformatted chunk data.
1845 * When not set some sort of format is expected that I've yet to decipher.
1846 *
1847 * @sa VST_EFFECT_OPCODE_GET_CHUNK_DATA
1848 * @sa VST_EFFECT_OPCODE_SET_CHUNK_DATA
1849 */
1851 /** @sa VST_EFFECT_FLAG_1ls5 */
1853
1854 //1 << 6,
1855 //1 << 7,
1856
1857 /** Effect is an Instrument/Generator
1858 *
1859 * This must be set in addition to @ref VST_EFFECT_CATEGORY_INSTRUMENT otherwise instruments don't work right.
1860 * @note (VST 2.x) Flag is new to VST 2.x and later.
1861 */
1863 /** @sa VST_EFFECT_FLAG_1ls8 */
1865
1866 /** Effect does not produce tail samples when the input is silent.
1867 *
1868 * Not to be confused with choosing to tell the host there is no tail.
1869 * @sa VST_EFFECT_OPCODE_GET_TAIL_SAMPLES
1870 * @note (VST 2.x) Flag is new to VST 2.x and later.
1871 */
1873 /** @sa VST_EFFECT_FLAG_1ls9 */
1875
1876 //1 << 10,
1877 //1 << 11,
1878
1879 /** Effect supports process_double.
1880 * The host can freely choose between process_float and process_double as required.
1881 *
1882 * @note (VST 2.4) Available in VST 2.4 and later only.
1883 * @sa vst_effect_t.process_double
1884 * @sa vst_effect_process_double_t
1885 */
1887 /** @sa VST_EFFECT_FLAG_1ls12 */
1890
1891/** Host to Plug-in Op-Codes
1892 * These Op-Codes are emitted by the host and we must either handle them or return 0 (false).
1893 */
1895 /** Create/Initialize the effect (if it has not been created already).
1896 *
1897 * @return Always 0.
1898 */
1900 /** @sa VST_EFFECT_OPCODE_00 */
1902 /** @sa VST_EFFECT_OPCODE_00 */
1904
1905 /** Destroy the effect (if there is any) and free its memory.
1906 *
1907 * This should destroy the actual object created by VST_ENTRYPOINT.
1908 *
1909 * @return Always 0.
1910 */
1912 /** @sa VST_EFFECT_OPCODE_01 */
1914
1915 /** Set which program number is currently select.
1916 *
1917 * @param p_int2 The program number to set. Can be negative for some reason.
1918 */
1920 /** @sa VST_EFFECT_OPCODE_02 */
1922 /** @sa VST_EFFECT_OPCODE_02 */
1924
1925 /** Get currently selected program number.
1926 *
1927 * @return The currently set program number. Can be negative for some reason.
1928 */
1930 /** @sa VST_EFFECT_OPCODE_03 */
1932 /** @sa VST_EFFECT_OPCODE_03 */
1934
1935 /** Set the name of the currently selected program.
1936 *
1937 * @param p_ptr `const char[VST_BUFFER_SIZE_PROGRAM_NAME]` Zero terminated string.
1938 */
1940 /** @sa VST_EFFECT_OPCODE_04 */
1942 /** @sa VST_EFFECT_OPCODE_04 */
1944
1945 /** Get the name of the currently selected program.
1946 *
1947 * @param p_ptr `char[VST_BUFFER_SIZE_PROGRAM_NAME]` Zero terminated string.
1948 */
1950 /** @sa VST_EFFECT_OPCODE_05 */
1952 /** @sa VST_EFFECT_OPCODE_05 */
1954
1955 /** Get the value? label for the parameter.
1956 *
1957 * @param p_int1 Parameter index.
1958 * @param p_ptr 'char[VST_BUFFER_SIZE_PARAM_LABEL]' Zero terminated string.
1959 * @return 0 on success, 1 on failure.
1960 */
1962 /** @sa VST_EFFECT_OPCODE_06 */
1964 /** @sa VST_EFFECT_OPCODE_06 */
1966 /** @sa VST_EFFECT_OPCODE_06 */
1968
1969 /** Get the string representing the value for the parameter.
1970 *
1971 * @param p_int1 Parameter index.
1972 * @param p_ptr 'char[VST_BUFFER_SIZE_PARAM_VALUE]' Zero terminated string.
1973 * @return 0 on success, 1 on failure.
1974 */
1976 /** @sa VST_EFFECT_OPCODE_07 */
1978 /** @sa VST_EFFECT_OPCODE_07 */
1980 /** @sa VST_EFFECT_OPCODE_07 */
1982 /** @sa VST_EFFECT_OPCODE_07 */
1984
1985 /** Get the name for the parameter.
1986 *
1987 * @param p_int1 Parameter index.
1988 * @param p_ptr 'char[VST_BUFFER_SIZE_PARAM_NAME]' Zero terminated string.
1989 * @return 0 on success, 1 on failure.
1990 */
1992 /** @sa VST_EFFECT_OPCODE_08 */
1994 /** @sa VST_EFFECT_OPCODE_08 */
1996 /** @sa VST_EFFECT_OPCODE_08 */
1998
1999 /**
2000 *
2001 * @deprecated: (VST 2.3+) Not used in VST 2.3 or later.
2002 * @todo
2003 */
2005
2006 /** Set the new sample rate for the plugin to use.
2007 *
2008 * @param p_float New sample rate as a float (double on 64-bit because register upgrades).
2009 */
2011 /** @sa VST_EFFECT_OPCODE_0A */
2013 /** @sa VST_EFFECT_OPCODE_0A */
2015
2016 /** Sets the block size, which is the maximum number of samples passed into the effect via process calls.
2017 *
2018 * @param p_int2 The maximum number of samples to be passed in.
2019 */
2021 /** @sa VST_EFFECT_OPCODE_0B */
2023 /** @sa VST_EFFECT_OPCODE_0B */
2025
2026 /** Effect processing should be suspended/paused or resumed/unpaused.
2027 *
2028 * Unclear if this is should result in a flush of buffers. In VST 2.3+ this is quite clear as we get process
2029 * begin/end.
2030 *
2031 * @param p_int2 @ref VST_STATUS_FALSE if the effect should suspend processing, @ref VST_STATUS_TRUE if it should
2032 * resume.
2033 */
2035 /** @sa VST_EFFECT_OPCODE_0C */
2037 /** @sa VST_EFFECT_OPCODE_0C */
2039 /** @sa VST_EFFECT_OPCODE_0C */
2041
2042 /** Retrieve the client rect size of the plugins window.
2043 * If no window has been created, returns the default rect.
2044 *
2045 * @param p_ptr Pointer of type 'struct vst_rect_t*'.
2046 * @return On success, returns 1 and updates p_ptr to the rect. On failure, returns 0.
2047 */
2049 /** @sa VST_EFFECT_OPCODE_0D */
2051 /** @sa VST_EFFECT_OPCODE_0D */
2053 /** @sa VST_EFFECT_OPCODE_0D */
2055
2056 /** Create the window for the plugin.
2057 *
2058 * @param p_ptr HWND of the parent window.
2059 * @return 0 on failure, or HWND on success.
2060 */
2062 /** @sa VST_EFFECT_OPCODE_0E */
2064 /** @sa VST_EFFECT_OPCODE_0E */
2066
2067 /** Destroy the plugins window.
2068 *
2069 * @return Always 0.
2070 */
2072 /** @sa VST_EFFECT_OPCODE_0F */
2074 /** @sa VST_EFFECT_OPCODE_0F */
2076
2077 /** Window Draw Event?
2078 *
2079 * Ocasionally called simultaneously as WM_DRAW on windows.
2080 *
2081 * @note Present in some VST 2.1 or earlier plugins.
2082 *
2083 * @note Appears to be Mac OS exclusive.
2084 *
2085 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
2086 */
2088 /** @sa VST_EFFECT_OPCODE_10 */
2090 /** @sa VST_EFFECT_OPCODE_10 */
2092
2093 /** Window Mouse Event?
2094 *
2095 * Called at the same time mouse events happen.
2096 *
2097 * @note Present in some VST 2.1 or earlier plugins.
2098 *
2099 * @note Appears to be Mac OS exclusive.
2100 *
2101 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
2102 */
2104 /** @sa VST_EFFECT_OPCODE_11 */
2106 /** @sa VST_EFFECT_OPCODE_11 */
2108
2109 /** Window Keyboard Event?
2110 *
2111 * Called at the same time keyboard events happen.
2112 *
2113 * @note Present in some VST 2.1 or earlier plugins.
2114 *
2115 * @note Appears to be Mac OS exclusive.
2116 *
2117 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
2118 */
2120 /** @sa VST_EFFECT_OPCODE_12 */
2122 /** @sa VST_EFFECT_OPCODE_12 */
2124
2125 /** Window/Editor Idle/Keep-Alive Callback?
2126 *
2127 * Does not receive any parameters. Randomly called when nothing happens? Idle/Keep-Alive callback?
2128 */
2130 /** @sa VST_EFFECT_OPCODE_13 */
2132
2133 /** Window Focus Event?
2134 *
2135 * Sometimes called when the editor window goes back into focus.
2136 *
2137 * @note Present in some VST 2.1 or earlier plugins.
2138 * @note Appears to be Mac OS exclusive.
2139 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
2140 */
2142
2143 /** Window Unfocus Event?
2144 *
2145 * Sometimes called when the editor window goes out of focus.
2146 *
2147 * @note Present in some VST 2.1 or earlier plugins.
2148 * @note Appears to be Mac OS exclusive.
2149 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
2150 */
2152
2153 /**
2154 *
2155 * @note Present in some VST 2.1 or earlier plugins.
2156 * @important Almost all plug-ins return the @ref VST_FOURCC 'NvEf' (0x4E764566) here.
2157 * @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
2158 */
2160 /** @sa VST_EFFECT_OPCODE_16 */
2162
2163 /** Get Chunk Data
2164 *
2165 * Save current program or bank state to a buffer.
2166 * Behavior is different based on the @ref VST_EFFECT_FLAG_CHUNKS flag.
2167 *
2168 * @sa VST_EFFECT_FLAG_CHUNKS
2169 * @param p_int1 0 means Bank, 1 means Program, nothing else used?
2170 * @param p_ptr `void**` Pointer to a potential pointer containing your own chunk data.
2171 * @return Size of the Chunk Data in bytes.
2172 */
2174 /** @sa VST_EFFECT_OPCODE_17 */
2176
2177 /** Set Chunk Data
2178 *
2179 * Restore current program or bank state from a buffer.
2180 * Behavior is different based on the @ref VST_EFFECT_FLAG_CHUNKS flag.
2181 *
2182 * @sa VST_EFFECT_FLAG_CHUNKS
2183 * @param p_int1 0 means Bank, 1 means Program, nothing else used?
2184 * @param p_int2 Size of the Chunk Data in bytes.
2185 * @param p_ptr `void*` Pointer to a buffer containing chunk data.
2186 */
2188 /** @sa VST_EFFECT_OPCODE_18 */
2190
2191 //--------------------------------------------------------------------------------
2192 // VST 2.x starts here.
2193 //--------------------------------------------------------------------------------
2194
2195 /** Send events from host to plug-in.
2196 * The plug-in must support receiving events (see @ref vst_effect_supports_t.receiveVstEvents) while the host may
2197 * optionally signal to the plugin that it wants to send events to the host (see @ref
2198 * vst_host_supports_t.sendVstEvents).
2199 *
2200 * @sa vst_event_t
2201 * @sa vst_events_t
2202 * @sa vst_host_supports_t.sendVstEvents
2203 * @sa vst_effect_supports_t.receiveVstEvents
2204 * @sa vst_host_supports_t.sendVstMidiEvents
2205 * @sa vst_effect_supports_t.receiveVstMidiEvents
2206 * @sa VST_HOST_OPCODE_EVENT
2207 * @note (VST 2.0+) Available from VST 2.0 onwards.
2208 * @param p_ptr A valid pointer to a @ref vst_events_t structure.
2209 */
2211 /** @sa VST_EFFECT_OPCODE_19 */
2213
2214 /** Can the parameter be automated?
2215 *
2216 * @note (VST 2.0+) Available from VST 2.0 onwards.
2217 * @param p_int1 Index of the parameter.
2218 * @return 1 if the parameter can be automated, otherwise 0.
2219 */
2221 /** @sa VST_EFFECT_OPCODE_1A */
2223 /** @sa VST_EFFECT_OPCODE_1A */
2225 /** @sa VST_EFFECT_OPCODE_1A */
2227
2228 /** Set Parameter value from string representation.
2229 *
2230 * @note (VST 2.0+) Available from VST 2.0 onwards.
2231 * @param p_int1 Index of the parameter.
2232 * @param p_ptr `const char*` Zero terminated string representation of the value to set.
2233 * @return 1 if it worked, otherwise 0.
2234 */
2236 /** @sa VST_EFFECT_OPCODE_1B */
2238 /** @sa VST_EFFECT_OPCODE_1B */
2240
2241 /**
2242 *
2243 *
2244 * @note (VST 2.0+) Available from VST 2.0 onwards.
2245 * @todo
2246 */
2248
2249 /**
2250 *
2251 * @note (VST 2.0+) Available from VST 2.0 onwards.
2252 * @sa VST_EFFECT_OPCODE_05
2253 * @todo
2254 */
2256
2257 /**
2258 *
2259 *
2260 * @note (VST 2.0+) Available from VST 2.0 onwards.
2261 * @todo
2262 */
2264
2265 /** Input connected.
2266 *
2267 *
2268 * @note (VST 2.0+) Available from VST 2.0 onwards.
2269 * @todo
2270 */
2272
2273 /** Input disconnected.
2274 *
2275 *
2276 * @note (VST 2.0+) Available from VST 2.0 onwards.
2277 * @todo
2278 */
2280
2281 /** Retrieve properties for the given input index.
2282 *
2283 * @note (VST 2.0+) Available from VST 2.0 onwards.
2284 * @param p_int1 Index of the input to get the properties for.
2285 * @param p_ptr Pointer to @ref vst_stream_properties_t for the selected input provided by the host.
2286 * @return @ref VST_STATUS_TRUE if p_ptr is updated, @ref VST_STATUS_FALSE otherwise.
2287 */
2289 /** @sa VST_EFFECT_OPCODE_21 */
2291 /** @sa VST_EFFECT_OPCODE_21 */
2293
2294 /** Retrieve properties for the given output index.
2295 *
2296 * @note (VST 2.0+) Available from VST 2.0 onwards.
2297 * @param p_int1 Index of the output to get the properties for.
2298 * @param p_ptr Pointer to @ref vst_stream_properties_t for the selected output provided by the host.
2299 * @return @ref VST_STATUS_TRUE if p_ptr is updated, @ref VST_STATUS_FALSE otherwise.
2300 */
2302 /** @sa VST_EFFECT_OPCODE_22 */
2304 /** @sa VST_EFFECT_OPCODE_22 */
2306
2307 /** Retrieve category of this effect.
2308 *
2309 * @note (VST 2.0+) Available from VST 2.0 onwards.
2310 * @return The category that this effect is in, see @ref VST_EFFECT_CATEGORY.
2311 */
2313 /** @sa VST_EFFECT_OPCODE_23 */
2315 /** @sa VST_EFFECT_OPCODE_23 */
2317
2318 /**
2319 *
2320 *
2321 * @note (VST 2.0+) Available from VST 2.0 onwards.
2322 * @todo
2323 */
2325
2326 /**
2327 *
2328 *
2329 * @note (VST 2.0+) Available from VST 2.0 onwards.
2330 * @todo
2331 */
2333
2334 /**
2335 *
2336 * Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
2337 * @note (VST 2.0+) Available from VST 2.0 onwards.
2338 * @todo
2339 */
2341
2342 /**
2343 *
2344 * Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
2345 * @note (VST 2.0+) Available from VST 2.0 onwards.
2346 * @todo
2347 */
2349
2350 /**
2351 *
2352 * Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
2353 * @note (VST 2.0+) Available from VST 2.0 onwards.
2354 * @todo
2355 */
2357
2358 /**
2359 *
2360 * Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
2361 * @note (VST 2.0+) Available from VST 2.0 onwards.
2362 * @todo
2363 */
2365
2366 /** Host wants to change the speaker arrangement.
2367 *
2368 * @sa vst_effect_t.num_inputs
2369 * @sa vst_effect_t.num_outputs
2370 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
2371 * @note (VST 2.0+) Available from VST 2.0 onwards.
2372 * @param p_int2 Pointer to a @ref vst_speaker_arrangement_t structure.
2373 * @param p_ptr Pointer to a @ref vst_speaker_arrangement_t structure.
2374 * @return @ref VST_STATUS_TRUE if we accept the new arrangement, @ref VST_STATUS_FALSE if we don't in which case
2375 * the host is required to ask for the speaker arrangement via @ref VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
2376 * and may retry this op-code with different values.
2377 */
2379 /** @sa VST_EFFECT_OPCODE_2A */
2381
2382 /**
2383 * @todo
2384 */
2386
2387 /** Enable/Disable bypassing the effect.
2388 *
2389 * See @ref VST_EFFECT_OPCODE_SUPPORTS with @ref vst_effect_supports_t.bypass for more information.
2390 *
2391 * @note (VST 2.0+) Available from VST 2.0 onwards.
2392 * @param p_int2 Zero if bypassing the effect is disabled, otherwise 1.
2393 */
2395 /** @sa VST_EFFECT_OPCODE_2C */
2397
2398 /** Retrieve the effect name into the ptr buffer.
2399 *
2400 * @note (VST 2.0+) Available from VST 2.0 onwards.
2401 * @bug Various hosts only provide a buffer that is 32 bytes long.
2402 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_EFFECT_NAME.
2403 * @return Always 0, even on failure.
2404 */
2406 /** @sa VST_EFFECT_OPCODE_2D */
2408 /** @sa VST_EFFECT_OPCODE_2D */
2410 /** @sa VST_EFFECT_OPCODE_2D */
2412
2413 /** Translate an error code to a string.
2414 *
2415 * @bug Some hosts provide unexpected data in p_ptr.
2416 * @note (VST 2.0+) Available from VST 2.0 onwards.
2417 * @deprecated (VST 2.4+) Fairly sure this is deprecated in VST 2.4 and later.
2418 * @param p_ptr A zero terminated char buffer with undefined size.
2419 * @return @ref VST_STATUS_TRUE if we could translate the error, @ref VST_STATUS_FALSE if not.
2420 */
2422 /** @sa VST_EFFECT_OPCODE_2E */
2424
2425 /** Retrieve the vendor name into the ptr buffer.
2426 *
2427 * @note (VST 2.0+) Available from VST 2.0 onwards.
2428 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_VENDOR_NAME.
2429 */
2431 /** @sa VST_EFFECT_OPCODE_2F */
2433 /** @sa VST_EFFECT_OPCODE_2F */
2435
2436 /** Retrieve the product name into the ptr buffer.
2437 *
2438 * @note (VST 2.0+) Available from VST 2.0 onwards.
2439 * @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_PRODUCT_NAME.
2440 */
2442 /** @sa VST_EFFECT_OPCODE_30 */
2444 /** @sa VST_EFFECT_OPCODE_30 */
2446
2447 /** Retrieve the vendor version in return value.
2448 *
2449 * @note (VST 2.0+) Available from VST 2.0 onwards.
2450 * @return Version.
2451 */
2453 /** @sa VST_EFFECT_OPCODE_31 */
2455 /** @sa VST_EFFECT_OPCODE_31 */
2457
2458 /** User-defined Op-Code for VST extensions.
2459 *
2460 * @note (VST 2.0+) Available from VST 2.0 onwards.
2461 * All parameters are undefined by the standard and left up to the host/plug-in. Use @ref VST_EFFECT_OPCODE_SUPPORTS
2462 * and @ref VST_EFFECT_OPCODE_VENDOR_NAME + @ref VST_EFFECT_OPCODE_VENDOR_VERSION to check if the plug-in is
2463 * compatible with your expected format.
2464 */
2466 /** @sa VST_EFFECT_OPCODE_32 */
2468
2469 /** Test for support of a specific named feature.
2470 *
2471 * @note (VST 2.0+) Available from VST 2.0 onwards.
2472 * @param p_ptr A zero terminated char buffer of undefined size containing the feature name.
2473 * @return @ref VST_STATUS_YES if the feature is supported, @ref VST_STATUS_NO if the feature is not supported,
2474 * @ref VST_STATUS_UNKNOWN in all other cases.
2475 */
2477 /** @sa VST_EFFECT_OPCODE_33 */
2479
2480 /** Number of samples that are at the tail at the end of playback.
2481 *
2482 * @note (VST 2.0+) Available from VST 2.0 onwards.
2483 * @return @ref VST_STATUS_UNKNOWN for automatic tail size, @ref VST_STATUS_TRUE for no tail, any other number above
2484 * 1 for the number of samples the tail has.
2485 */
2487 /** @sa VST_EFFECT_OPCODE_34 */
2489 /** @sa VST_EFFECT_OPCODE_34 */
2491
2492 /** Notify effect that it is idle?
2493 *
2494 * @note (VST 2.0+) Available from VST 2.0 onwards.
2495 * @deprecated (VST 2.4+) As of VST 2.4 the default behavior is @ref VST_EFFECT_OPCODE_PROCESS_BEGIN and
2496 * @ref VST_EFFECT_OPCODE_PROCESS_END which allows cleaner control flows.
2497 * @sa vst_host_supports.startStopProcess
2498 */
2500 /** @sa VST_EFFECT_OPCODE_35 */
2502
2503 /**
2504 *
2505 *
2506 * @note (VST 2.0+) Available from VST 2.0 onwards.
2507 * @deprecated (VST 2.4) Invalid in all VST 2.4 and later hosts.
2508 * @todo
2509 */
2511
2512 /**
2513 *
2514 *
2515 * @note (VST 2.0+) Available from VST 2.0 onwards.
2516 * @deprecated (VST 2.4) Invalid in all VST 2.4 and later hosts.
2517 * @todo
2518 */
2520
2521 /** Parameter Properties
2522 *
2523 * @note (VST 2.0+) Available from VST 2.0 onwards.
2524 * @param p_int1 Parameter index to get properties for.
2525 * @param p_ptr Pointer to @ref vst_parameter_properties_t for the given parameter.
2526 * @return @ref VST_STATUS_YES if supported, otherwise @ref VST_STATUS_NO.
2527 */
2529 /** @sa VST_EFFECT_OPCODE_38 */
2531 /** @sa VST_EFFECT_OPCODE_38 */
2533
2534 /**
2535 *
2536 * @note (VST 2.0+) Available from VST 2.0 onwards.
2537 * @deprecated (VST 2.4) Invalid in all VST 2.4 and later hosts.
2538 * @todo
2539 */
2541
2542 /** Retrieve the VST Version supported.
2543 *
2544 * @note (VST 2.0+) Available from VST 2.0 onwards.
2545 * @sa VST_VERSION
2546 * @return One of the valid enums in @ref VST_VERSION
2547 */
2549 /** @sa VST_EFFECT_OPCODE_3A */
2551
2552 //--------------------------------------------------------------------------------
2553 // VST 2.1
2554 //--------------------------------------------------------------------------------
2555
2556 /** Editor Virtual Key Down Input
2557 *
2558 * @note (VST 2.1+) Available from VST 2.1 onwards.
2559 * @param p_int1 ASCII character that represents the virtual key code.
2560 * @param p_int2 See @ref VST_VKEY for the full list.
2561 * @param p_float A bitfield with any of @ref VST_VKEY_MODIFIER.
2562 * @return @ref VST_STATUS_TRUE if we used the input, otherwise @ref VST_STATUS_FALSE
2563 */
2565 /** @sa VST_EFFECT_OPCODE_3B */
2567
2568 /** Editor Virtual Key Up Event
2569 *
2570 * @note (VST 2.1+) Available from VST 2.1 onwards.
2571 * @param p_int1 ASCII character that represents the virtual key code.
2572 * @param p_int2 See @ref VST_VKEY for the full list.
2573 * @param p_float A bitfield with any of @ref VST_VKEY_MODIFIER.
2574 * @return @ref VST_STATUS_TRUE if we used the input, otherwise @ref VST_STATUS_FALSE
2575 */
2577 /** @sa VST_EFFECT_OPCODE_3C */
2579
2580 /**
2581 *
2582 * @note (VST 2.1+) Available from VST 2.1 onwards.
2583 * @param p_int2 A value between 0 and 2.
2584 * @todo
2585 */
2587
2588 /**
2589 *
2590 * Midi related
2591 * @note (VST 2.1+) Available from VST 2.1 onwards.
2592 * @todo
2593 */
2595
2596 /**
2597 *
2598 * Midi related
2599 * @note (VST 2.1+) Available from VST 2.1 onwards.
2600 * @todo
2601 */
2603
2604 /**
2605 *
2606 * Midi related
2607 * @note (VST 2.1+) Available from VST 2.1 onwards.
2608 * @todo
2609 */
2611
2612 /**
2613 *
2614 * Midi related
2615 * @note (VST 2.1+) Available from VST 2.1 onwards.
2616 * @todo
2617 */
2619
2620 /**
2621 *
2622 * Midi related
2623 * @note (VST 2.1+) Available from VST 2.1 onwards.
2624 * @todo
2625 */
2627
2628 /** Host is starting to set up a program.
2629 * Emitted prior to the host loading a program.
2630 *
2631 * @note (VST 2.1+) Available from VST 2.1 onwards.
2632 * @return @ref VST_STATUS_TRUE if we understood the notification, or @ref VST_STATUS_FALSE if not.
2633 */
2635 /** @sa VST_EFFECT_OPCODE_43 */
2637
2638 /** Host is done setting up a program.
2639 * Emitted after the host finished loading a program.
2640 *
2641 * @note (VST 2.1+) Available from VST 2.1 onwards.
2642 * @return @ref VST_STATUS_TRUE if we understood the notification, or @ref VST_STATUS_FALSE if not.
2643 */
2645 /** @sa VST_EFFECT_OPCODE_44 */
2647
2648 //--------------------------------------------------------------------------------
2649 // VST 2.3
2650 //--------------------------------------------------------------------------------
2651
2652 /** Host wants to know the current speaker arrangement.
2653 *
2654 * @note (VST 2.3+) Available from VST 2.3 onwards.
2655 * @param p_int2 Pointer to a @ref vst_speaker_arrangement_t pointer.
2656 * @param p_ptr Pointer to a @ref vst_speaker_arrangement_t pointer.
2657 * @return @ref VST_STATUS_TRUE if we were successful, otherwise @ref VST_STATUS_FALSE.
2658 */
2660 /** @sa VST_EFFECT_OPCODE_45 */
2662
2663 /** Get the next effect contained in this effect.
2664 * This returns the next effect based on an effect internal counter, the host does not provide any index.
2665 *
2666 * Used in combination with @ref VST_EFFECT_CATEGORY_CONTAINER.
2667 *
2668 * @note (VST 2.3+) Available from VST 2.3 onwards.
2669 * @param p_ptr Pointer to a char buffer of size @ref VST_BUFFER_SIZE_EFFECT_NAME to store the name of the next effect.
2670 * @return Next effects unique_id
2671 */
2673 /** @sa VST_EFFECT_OPCODE_46 */
2675
2676 /** Begin processing of audio.
2677 *
2678 * Host is requesting that we prepare for a new section of audio separate from the previous section.
2679 * @note (VST 2.3+) Available from VST 2.3 onwards.
2680 */
2682 /** @sa VST_EFFECT_OPCODE_47 */
2684
2685 /** End processing of audio.
2686 *
2687 * Host is requesting that we stop processing audio and go into idle instead.
2688 * @note (VST 2.3+) Available from VST 2.3 onwards.
2689 */
2691 /** @sa VST_EFFECT_OPCODE_48 */
2693
2694 /**
2695 *
2696 *
2697 * @note (VST 2.3+) Available from VST 2.3 onwards.
2698 * @todo
2699 */
2701
2702 /**
2703 *
2704 * @note (VST 2.3+) Available from VST 2.3 onwards.
2705 * @sa VST_EFFECT_CATEGORY_SPATIAL
2706 * @param p_int2 Unknown meaning.
2707 * @param p_float Unknown meaning, usually 1.0
2708 * @todo
2709 */
2711
2712 /** Host wants to know if we can load the provided bank data.
2713 * Should be emitted prior to @ref VST_EFFECT_OPCODE_SET_CHUNK_DATA by the host.
2714 *
2715 * @note (VST 2.3+) Available from VST 2.3 onwards.
2716 * @param p_ptr Unknown structured data.
2717 * @return @ref VST_STATUS_NO if we can't load the data, @ref VST_STATUS_YES if we can load the data,
2718 * @ref VST_STATUS_UNKNOWN if this isn't supported.
2719 * @todo
2720 */
2722 /** @sa VST_EFFECT_OPCODE_4B */
2724
2725 /** Host wants to know if we can load the provided program data.
2726 * Should be emitted prior to @ref VST_EFFECT_OPCODE_PROGRAM_SET_BEGIN by the host.
2727 *
2728 * @note (VST 2.3+) Available from VST 2.3 onwards.
2729 * @param p_ptr Unknown structured data.
2730 * @return @ref VST_STATUS_NO if we can't load the data, @ref VST_STATUS_YES if we can load the data,
2731 * @ref VST_STATUS_UNKNOWN if this isn't supported.
2732 * @todo
2733 */
2735 /** @sa VST_EFFECT_OPCODE_4C */
2737
2738 //--------------------------------------------------------------------------------
2739 // VST 2.4
2740 //--------------------------------------------------------------------------------
2741
2742 /**
2743 *
2744 *
2745 * @note (VST 2.4+) Available from VST 2.4 onwards.
2746 * @todo
2747 */
2749
2750 /**
2751 *
2752 *
2753 * @note (VST 2.4+) Available from VST 2.4 onwards.
2754 * @todo
2755 */
2757
2758 /**
2759 *
2760 *
2761 * @note (VST 2.4+) Available from VST 2.4 onwards.
2762 * @todo
2763 */
2765
2766 /** @private Highest known OPCODE. */
2767 VST_EFFECT_OPCODE_MAX,
2768
2769 /** @private Force as 32-bit unsigned integer in compatible compilers. */
2770 _VST_EFFECT_OPCODE_PAD = (-1l)
2771};
2772
2773#if (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 202002L)
2774/** Host to Plug-in support checks
2775 *
2776 * Provided as `char* p_ptr` in the VST_EFFECT_OPCODE_SUPPORTS op code.
2777 *
2778 * Harvested via strings command and just checking what plug-ins actually responded to.
2779 *
2780 * @important These are only available with a C99 or a C++20 or newer compiler.
2781 */
2782struct vst_effect_supports_t {
2783 /** Effect supports alternative bypass.
2784 * The alternative bypass still has the host call process/process_float/process_double and expects us to compensate
2785 * for our delay/latency, copy inputs to outputs, and do minimal work. If we don't support it the host will not call
2786 * process/process_float/process_double at all while bypass is enabled.
2787 *
2788 * @note VST 2.3 or later only.
2789 * @return VST_STATUS_TRUE if we support this, otherwise VST_STATUS_FALSE.
2790 */
2791 const char* bypass;
2792
2793 /** Plug-in can send events to host.
2794 *
2795 * @sa vst_host_supports_t.receiveVstEvents
2796 * @sa VST_HOST_OPCODE_EVENT
2797 * @note (VST 2.0+) Available from VST 2.0 onwards.
2798 */
2799 const char* sendVstEvents;
2800
2801 /** Plug-in can receive events from host.
2802 *
2803 * @sa vst_host_supports_t.sendVstEvents
2804 * @sa VST_EFFECT_OPCODE_EVENT
2805 * @note (VST 2.0+) Available from VST 2.0 onwards.
2806 */
2807 const char* receiveVstEvents;
2808
2809 /** Host can send MIDI events to plug-in.
2810 *
2811 * @sa vst_effect_supports_t.receiveVstMidiEvents
2812 * @sa VST_EFFECT_OPCODE_EVENT
2813 * @sa vst_effect_midi_t
2814 * @sa vst_effect_midi_sysex_t
2815 * @note (VST 2.0+) Available from VST 2.0 onwards.
2816 */
2817 const char* sendVstMidiEvent;
2818
2819 /** Plug-in can receive MIDI events from host.
2820 *
2821 * @sa vst_host_supports_t.sendVstMidiEvents
2822 * @sa VST_HOST_OPCODE_EVENT
2823 * @sa vst_effect_midi_t
2824 * @sa vst_effect_midi_sysex_t
2825 * @note (VST 2.0+) Available from VST 2.0 onwards.
2826 */
2827 const char* receiveVstMidiEvent;
2828
2829 /** Plug-in wants to use @ref VST_HOST_OPCODE_EDITOR_RESIZE.
2830 * Only necessary for legacy host compatibility.
2831 *
2832 * @sa vst_host_supports_t.sizeWindow
2833 * @note (VST 2.1+) Available from VST 2.1 onwards.
2834 * @deprecated (VST 2.4+) Deprecated from VST 2.4 onwards as the same check already exists on the host side.
2835 * @return @ref VST_STATUS_TRUE if you want to use @ref VST_HOST_OPCODE_EDITOR_RESIZE, otherwise @ref VST_STATUS_FALSE.
2836 */
2837 const char* conformsToWindowRules;
2838
2839 const char* midiProgramNames; // VST 2.1 or later.
2840 const char* receiveVstTimeInfo;
2841 const char* offline;
2842 // The following were only found in VST 2.3 plug-ins
2843 const char* plugAsChannelInsert;
2844 const char* plugAsSend;
2845 const char* mixDryWet;
2846 const char* noRealTime;
2847 const char* multipass;
2848 const char* metapass;
2849 const char* _1in1out;
2850 const char* _1in2out;
2851 const char* _2in1out;
2852 const char* _2in2out;
2853 const char* _2in4out;
2854 const char* _4in2out;
2855 const char* _4in4out;
2856 const char* _4in8out;
2857 const char* _8in4out;
2858 const char* _8in8out;
2859} /** @private */ vst_effect_supports = {
2860 .bypass = "bypass",
2861 .sendVstEvents = "sendVstEvents",
2862 .receiveVstEvents = "receiveVstEvents",
2863 .sendVstMidiEvent = "sendVstMidiEvent",
2864 .receiveVstMidiEvent = "receiveVstMidiEvent",
2865 .conformsToWindowRules = "conformsToWindowRules",
2866 .midiProgramNames = "midiProgramNames",
2867 .receiveVstTimeInfo = "receiveVstTimeInfo",
2868 .offline = "offline",
2869 .plugAsChannelInsert = "plugAsChannelInsert",
2870 .plugAsSend = "plugAsSend",
2871 .mixDryWet = "mixDryWet",
2872 .noRealTime = "noRealTime",
2873 .multipass = "multipass",
2874 .metapass = "metapass",
2875 ._1in1out = "1in1out",
2876 ._1in2out = "1in2out",
2877 ._2in1out = "2in1out",
2878 ._2in2out = "2in2out",
2879 ._2in4out = "2in4out",
2880 ._4in2out = "4in2out",
2881 ._4in4out = "4in4out",
2882 ._4in8out = "4in8out",
2883 ._8in4out = "8in4out",
2884 ._8in8out = "8in8out",
2885};
2886#endif
2887
2888/** Control the VST through an opcode and up to four parameters.
2889 *
2890 * @sa VST_EFFECT_OPCODE
2891 *
2892 * @param self Pointer to the effect itself.
2893 * @param opcode The opcode to run, see @ref VST_EFFECT_OPCODE.
2894 * @param p_int1 Parameter, see @ref VST_EFFECT_OPCODE.
2895 * @param p_int2 Parameter, see @ref VST_EFFECT_OPCODE.
2896 * @param p_ptr Parameter, see @ref VST_EFFECT_OPCODE.
2897 * @param p_float Parameter, see @ref VST_EFFECT_OPCODE.
2898 */
2899typedef 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);
2900
2901/** Process the given number of samples in inputs and outputs.
2902 *
2903 * Used to handle input data and provides output data. We seem to be the ones that provide the output buffer?
2904 *
2905 * @param self Pointer to the effect itself.
2906 * @param inputs Pointer to an array of 'const float[samples]' with size @ref vst_effect_t.num_inputs.
2907 * @param outputs Pointer to an array of 'float[samples]' with size @ref vst_effect_t.num_outputs.
2908 * @param samples Number of samples per channel in inputs and outputs.
2909 */
2910typedef void (VST_FUNCTION_INTERFACE* vst_effect_process_t) (struct vst_effect_t* self, const float* const* inputs, float** outputs, int32_t samples);
2911
2912/** Updates the value for the parameter at the given index, or does nothing if out of bounds.
2913 *
2914 * @param self Pointer to the effect itself.
2915 * @param index Parameter index.
2916 * @param value New value for the parameter.
2917 */
2918typedef void(VST_FUNCTION_INTERFACE* vst_effect_set_parameter_t)(struct vst_effect_t* self, uint32_t index, float value);
2919
2920/** Retrieve the current value of the parameter at the given index, or do nothing if out of bounds.
2921 *
2922 * @param self Pointer to the effect itself.
2923 * @param index Parameter index.
2924 * @return Current value of the parameter.
2925 */
2926typedef float(VST_FUNCTION_INTERFACE* vst_effect_get_parameter_t)(struct vst_effect_t* self, uint32_t index);
2927
2928/** Process the given number of single samples in inputs and outputs.
2929 *
2930 * Process input and overwrite the output in place. Host provides output buffers.
2931 *
2932 * @important Not thread-safe on MacOS for some reason or another.
2933 *
2934 * @param self Pointer to the effect itself.
2935 * @param inputs Pointer to an array of 'const float[samples]' with size numInputs.
2936 * @param outputs Pointer to an array of 'float[samples]' with size numOutputs.
2937 * @param samples Number of samples per channel in inputs.
2938 */
2939typedef void(VST_FUNCTION_INTERFACE* vst_effect_process_float_t)(struct vst_effect_t* self, const float* const* inputs, float** outputs, int32_t samples);
2940
2941/** Process the given number of double samples in inputs and outputs.
2942 *
2943 * Process input and overwrite the output in place. Host provides output buffers.
2944 *
2945 * @note (VST 2.4+) Available from VST 2.4 and later.
2946 *
2947 * @param self Pointer to the effect itself.
2948 * @param inputs Pointer to an array of 'const double[samples]' with size numInputs.
2949 * @param outputs Pointer to an array of 'double[samples]' with size numOutputs.
2950 * @param samples Number of samples per channel in inputs.
2951 */
2952typedef void (VST_FUNCTION_INTERFACE* vst_effect_process_double_t)(struct vst_effect_t* self, const double* const* inputs, double** outputs, int32_t samples);
2953
2954/** Plug-in Effect definition
2955 */
2957 /** VST Magic Number
2958 *
2959 * Should always be VST_FOURCC('VstP')
2960 *
2961 * @sa VST_MAGICNUMBER
2962 */
2964
2965 /** Control Function
2966 * @sa vst_effect_control_t
2967 * @sa VST_EFFECT_OPCODE
2968 */
2969 vst_effect_control_t control;
2970
2971 /** Process Function
2972 * @sa vst_effect_process_t
2973 * @deprecated (VST 2.4+) Deprecated and practically unsupported in all VST 2.4 compatible hosts and may treat it
2974 * as just another @ref vst_effect_t.process_float.
2975 */
2977
2978 /** Set Parameter Function
2979 * @sa vst_effect_set_parameter_t
2980 */
2982
2983 /** Get Parameter Function
2984 * @sa vst_effect_get_parameter_t
2985 */
2987
2988 /** Number of available pre-defined programs.
2989 *
2990 * @sa VST_EFFECT_OPCODE_PROGRAM_LOAD
2991 * @sa VST_EFFECT_OPCODE_PROGRAM_SET_BEGIN
2992 * @sa VST_EFFECT_OPCODE_PROGRAM_SET
2993 * @sa VST_EFFECT_OPCODE_PROGRAM_SET_NAME
2994 * @sa VST_EFFECT_OPCODE_PROGRAM_SET_END
2995 * @sa VST_EFFECT_OPCODE_PROGRAM_GET
2996 * @sa VST_EFFECT_OPCODE_PROGRAM_GET_NAME
2997 * @sa VST_EFFECT_FLAG_CHUNKS
2998 * @sa VST_EFFECT_OPCODE_SET_CHUNK_DATA
2999 * @sa VST_EFFECT_OPCODE_GET_CHUNK_DATA
3000 */
3002
3003 /** Number of available parameters.
3004 * All programs must have at least this many parameters.
3005 *
3006 * @sa VST_HOST_OPCODE_IO_MODIFIED
3007 */
3008 int32_t num_params;
3009
3010 /** Number of available input streams.
3011 *
3012 *
3013 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
3014 * @sa VST_EFFECT_OPCODE_INPUT_GET_PROPERTIES
3015 * @sa VST_HOST_OPCODE_IO_MODIFIED
3016 */
3017 int32_t num_inputs;
3018
3019 /** Number of available output streams.
3020 *
3021 * @sa VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
3022 * @sa VST_EFFECT_OPCODE_OUTPUT_GET_PROPERTIES
3023 * @sa VST_HOST_OPCODE_IO_MODIFIED
3024 */
3026
3027 /** Effect Flags
3028 *
3029 * @sa VST_EFFECT_FLAGS
3030 */
3031 int32_t flags;
3032
3033 /** @todo */
3034 void* _unknown_00; // Must be zero when created. Reserved for host?
3035
3036 /** @todo */
3037 void* _unknown_01; // Must be zero when created. Reserved for host?
3038
3039 /** Initial delay before processing of samples can actually begin in Samples.
3040 *
3041 * @note The host can modify this at runtime so it is not safe.
3042 * @note Should be reinitialized when the effect is resumed.
3043 *
3044 * @sa VST_HOST_OPCODE_IO_MODIFIED
3045 */
3046 int32_t delay;
3047
3048 /** @todo */
3049 int32_t _unknown_02; // Unknown int32_t values.
3050
3051 /** @todo */
3053
3054 /** Ratio of Input to Output production
3055 * Defines how much output data is produced relative to input data when using 'process' instead of 'processFloat'.
3056 * Example: A ratio of 2.0 means we produce twice as much output as we receive input.
3057 *
3058 * Range: >0.0 to Infinity
3059 * Default: 1.0
3060 * @note Ignored in VST 2.4 or with VST_EFFECT_FLAG_SUPPORTS_FLOAT.
3061 */
3063
3064 /** Effect Internal Pointer
3065 *
3066 * You can freely set this to point at some sort of class or similar for use in your own effect. The host must
3067 * never modify this or the data available through this.
3068 */
3070
3071 /** Host Internal Pointer
3072 *
3073 * The host may set this to point at data related to your effect instance that the host needs. The effect must
3074 * never modify this or the data available through this.
3075 */
3076 void* host_internal; // Pointer to Host internal data.
3077
3078 /** Id of the plugin.
3079 *
3080 * Due to this not being enough for uniqueness, it should not be used alone for indexing.
3081 * Ideally you want to index like this:
3082 * [unique_id][module_name][version][flags]
3083 * If any of the checks after unique_id fail, you default to the first possible choice.
3084 *
3085 * Used in combination with @ref VST_EFFECT_CATEGORY_CONTAINER.
3086 *
3087 * BUG: Some broken hosts rely on this alone to save information about VST plug-ins.
3088 */
3089 int32_t unique_id;
3090
3091 /** Plugin version
3092 *
3093 * Unrelated to the minimum VST Version, but often the same.
3094 */
3095 int32_t version;
3096
3097 //--------------------------------------------------------------------------------
3098 // VST 2.x starts here.
3099 //--------------------------------------------------------------------------------
3100
3101 /** Process function for in-place single (32-bit float) processiong.
3102 * @sa vst_effect_process_single_t
3103 * @note (VST 2.0+) Available from VST 2.0 and later.
3104 */
3106
3107 //--------------------------------------------------------------------------------
3108 // VST 2.4 starts here.
3109 //--------------------------------------------------------------------------------
3110
3111 /** Process function for in-place double (64-bit float) processiong.
3112 * @sa vst_effect_process_double_t
3113 * @note (VST 2.4+) Available from VST 2.4 and later.
3114 */
3116
3117 // Everything after this is unknown and was present in reacomp-standalone.dll.
3118 uint8_t _unknown[56]; // 56-bytes of something. Could also just be 52-bytes.
3119};
3120
3121/** VST 2.x Entry Point for all platforms
3122 *
3123 * Must be present in VST 2.x plug-ins but must not be present in VST 1.x plug-ins.
3124 *
3125 * @return A new instance of the VST 2.x effect.
3126 */
3127#define VST_ENTRYPOINT
3128 vst_effect_t* VSTPluginMain(vst_host_callback_t callback)
3129
3130/** [DEPRECATED] VST 1.x Entry Point for Windows
3131 *
3132 * Do not implement in VST 2.1 or later plug-ins!
3133 *
3134 * @return A new instance of the VST 1.x effect.
3135 */
3136#define VST_ENTRYPOINT_WINDOWS
3137 vst_effect_t* MAIN(vst_host_callback_t callback) { return VSTPluginMain(callback); }
3138
3139/** [DEPRECATED] VST 1.x Entry Point for MacOS
3140 *
3141 * Do not implement in VST 2.1 or later plug-ins!
3142 *
3143 * @return A new instance of the VST 1.x effect.
3144 */
3145#define VST_ENTRYPOINT_MACOS
3146 vst_effect_t* main_macho(vst_host_callback_t callback) { return VSTPluginMain(callback); }
3147
3148/** [DEPRECATED] VST 2.3 Entry Point for PowerPC
3149 *
3150 * Present in some VST 2.3 and earlier compatible plug-ins that support MacOS.
3151 *
3152 * @return A new instance of the VST 2.x effect.
3153 */
3154#define VST_ENTRYPOINT_MACOS_POWERPC
3155 vst_effect_t* main(vst_host_callback_t callback) { return VSTPluginMain(callback); }
3156
3157#ifdef __cplusplus
3158}
3159#endif
3160#pragma pack(pop)
3161#endif
Plug-in Effect definition.
Definition vst.h:2956
int32_t num_outputs
Number of available output streams.
Definition vst.h:3025
int32_t magic_number
VST Magic Number.
Definition vst.h:2963
vst_effect_process_double_t process_double
Process function for in-place double (64-bit float) processiong.
Definition vst.h:3115
int32_t _unknown_02
Definition vst.h:3049
int32_t unique_id
Id of the plugin.
Definition vst.h:3089
vst_effect_process_t process
Process Function.
Definition vst.h:2976
int32_t flags
Effect Flags.
Definition vst.h:3031
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:3062
int32_t num_programs
Number of available pre-defined programs.
Definition vst.h:3001
vst_effect_process_float_t process_float
Process function for in-place single (32-bit float) processiong.
Definition vst.h:3105
int32_t version
Plugin version.
Definition vst.h:3095
void * host_internal
Host Internal Pointer.
Definition vst.h:3076
vst_effect_set_parameter_t set_parameter
Set Parameter Function.
Definition vst.h:2981
uint8_t _unknown[56]
Definition vst.h:3118
void * _unknown_01
Definition vst.h:3037
int32_t _unknown_03
Definition vst.h:3052
int32_t num_params
Number of available parameters.
Definition vst.h:3008
void * effect_internal
Effect Internal Pointer.
Definition vst.h:3069
vst_effect_get_parameter_t get_parameter
Get Parameter Function.
Definition vst.h:2986
int32_t delay
Initial delay before processing of samples can actually begin in Samples.
Definition vst.h:3046
int32_t num_inputs
Number of available input streams.
Definition vst.h:3017
void * _unknown_00
Definition vst.h:3034
vst_effect_control_t control
Control Function.
Definition vst.h:2969
A generic event.
Definition vst.h:855
int32_t type
What event type was triggered? Any of VST_EVENT_TYPE.
Definition vst.h:859
int32_t offset
Offset of the event relative to some position.
Definition vst.h:875
int32_t size
Content size in bytes.
Definition vst.h:869
A collection of events.
Definition vst.h:985
struct vst_event_t ** events
An array of pointers to valid vst_event_t structures.
Definition vst.h:997
int32_t count
Number of events stored in vst_events_t::events.
Definition vst.h:988
Information about a parameter.
Definition vst.h:463
char label[VST_BUFFER_SIZE_PARAM_LABEL]
Short Human-readable label for this parameter.
Definition vst.h:531
char category_label[VST_BUFFER_SIZE_CATEGORY_LABEL]
Human-readable name for the category this parameter is in.
Definition vst.h:565
uint32_t flags
Parameter Flags.
Definition vst.h:503
uint16_t category
Category index.
Definition vst.h:547
int32_t max_value_i32
Maximum Integer value.
Definition vst.h:517
char name[VST_BUFFER_SIZE_PARAM_LONG_NAME]
Human-readable name for this parameter.
Definition vst.h:497
float step_f32
Float Step value.
Definition vst.h:471
float step_large_f32
Float large step value This is used for "huge" changes.
Definition vst.h:491
int32_t step_i32
Integer Step value.
Definition vst.h:524
uint16_t index
Display order index.
Definition vst.h:538
int32_t min_value_i32
Minimum Integer value.
Definition vst.h:510
float step_small_f32
Float small step value This is used for "tiny" changes.
Definition vst.h:481
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:555
Window/Editor Rectangle.
Definition vst.h:173
int16_t left
Definition vst.h:175
int16_t top
Definition vst.h:174
int16_t bottom
Definition vst.h:176
int16_t right
Definition vst.h:177
Speaker arrangement definition.
Definition vst.h:735
struct vst_speaker_properties_t speakers[VST_MAX_CHANNELS]
Array of vst_speaker_properties_t with size channels.
Definition vst.h:751
int32_t channels
Number of channels used in speakers.
Definition vst.h:745
int32_t type
Any of VST_SPEAKER_ARRANGEMENT_TYPE.
Definition vst.h:739
Speaker properties.
Definition vst.h:639
int32_t type
The type of the speaker.
Definition vst.h:678
float azimuth
Azimuth in Radians Range: -PI (Left) through 0.0 (Right) to PI (Left)
Definition vst.h:645
float distance
Distance in Meters range: 0 to +-Infinity.
Definition vst.h:659
float altitude
Altitude in Radians Range: -PI/2 (Bottom) to PI/2 (Top)
Definition vst.h:652
char name[VST_BUFFER_SIZE_SPEAKER_NAME]
Human readable name for this speaker.
Definition vst.h:669
int32_t type
Stream arrangement (optional) See VST_SPEAKER_ARRANGEMENT_TYPE.
Definition vst.h:791
int32_t flags
Stream flags Any combination of VST_STREAM_FLAG.
Definition vst.h:786
char label[VST_BUFFER_SIZE_STREAM_LABEL]
Human-readable label for this stream.
Definition vst.h:795
char name[VST_BUFFER_SIZE_STREAM_NAME]
Human-readable name for this stream.
Definition vst.h:781
A MIDI SysEx event.
Definition vst.h:949
struct vst_event_t event
Shared event structure.
Definition vst.h:951
char * data
Zero terminated buffer of size size.
Definition vst.h:968
int32_t size
Size (in bytes) of the SysEx event.
Definition vst.h:959
A MIDI event.
Definition vst.h:890
char data[4]
Zero terminated array containing up to 3 bytes of MIDI information.
Definition vst.h:918
int32_t is_real_time
Is this note played in real time (played live)? Can only ever be 0 (sequencer) or 1 (live).
Definition vst.h:904
int32_t length
Note Length (in samples/frames) of the played note if available.
Definition vst.h:908
struct vst_event_t event
Shared event structure.
Definition vst.h:892
int8_t tune
Tune (in cents) for anything that isn't the default scale.
Definition vst.h:924
int32_t offset
Some kind of offset (in samples/frames).
Definition vst.h:912
int8_t velocity
Note velocity.
Definition vst.h:931
VST_SPEAKER_ARRANGEMENT_TYPE
Known default speaker arrangements.
Definition vst.h:688
@ VST_SPEAKER_ARRANGEMENT_TYPE_7_1
7.1 (Full Surround)
Definition vst.h:727
@ VST_SPEAKER_ARRANGEMENT_TYPE_UNKNOWN
Unknown/Empty speaker layout.
Definition vst.h:697
@ _VST_SPEAKER_ARRANGEMENT_TYPE_PAD
Definition vst.h:730
@ VST_SPEAKER_ARRANGEMENT_TYPE_5_1
5.1 (Old Surround)
Definition vst.h:721
@ VST_SPEAKER_ARRANGEMENT_TYPE_CUSTOM
Custom speaker arrangement.
Definition vst.h:693
@ VST_SPEAKER_ARRANGEMENT_TYPE_MONO
Mono.
Definition vst.h:701
@ VST_SPEAKER_ARRANGEMENT_TYPE_STEREO
Stereo.
Definition vst.h:705
@ VST_SPEAKER_ARRANGEMENT_TYPE_5_0
5.0 (Old Surround)
Definition vst.h:715
@ VST_SPEAKER_ARRANGEMENT_TYPE_4_0
Quadraphonic.
Definition vst.h:709
#define VST_FOURCC(a, b, c, d)
Convert four numbers into a FourCC.
Definition vst.h:60
VST_EVENT_TYPE
Available event types.
Definition vst.h:809
@ VST_EVENT_TYPE_INVALID
Definition vst.h:816
@ VST_EVENT_TYPE_05
Definition vst.h:835
@ VST_EVENT_TYPE_02
Definition vst.h:826
@ VST_EVENT_TYPE_04
Definition vst.h:831
@ VST_EVENT_TYPE_01
MIDI Event.
Definition vst.h:822
@ VST_EVENT_TYPE_00
Invalid event.
Definition vst.h:814
@ VST_EVENT_TYPE_03
Definition vst.h:827
@ VST_EVENT_TYPE_MIDI_SYSEX
MIDI SysEx Event.
Definition vst.h:842
@ VST_EVENT_TYPE_MIDI
Definition vst.h:824
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:140
@ VST_VERSION_1_1_0_0
SDK Version 1.1.
Definition vst.h:149
@ VST_VERSION_2_1_0_0
SDK Version 2.1.
Definition vst.h:158
@ VST_VERSION_2_0_0_0
SDK Version 2.0.
Definition vst.h:156
@ _VST_VERSION_PAD
Definition vst.h:167
@ VST_VERSION_2
Private SDK Version 2.0.
Definition vst.h:154
@ VST_VERSION_2_2_0_0
SDK Version 2.2.
Definition vst.h:160
@ VST_VERSION_2_3_0_0
SDK Version 2.3.
Definition vst.h:162
@ VST_VERSION_2_4_0_0
SDK Version 2.4.
Definition vst.h:164
@ VST_VERSION_1_0_0_0
SDK Version 1.0.
Definition vst.h:147
@ VST_VERSION_1
Private SDK Version 1.0.
Definition vst.h:145
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:2910
#define VST_MAX_CHANNELS
Maximum number of channels/streams/inputs/outputs supported by VST 2.x Couldn't find any audio editin...
Definition vst.h:56
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:2918
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:1044
@ VST_HOST_OPCODE_LANGUAGE
Definition vst.h:1333
@ VST_HOST_OPCODE_EVENT
Definition vst.h:1121
@ VST_HOST_OPCODE_28
Crash the host if p_ptr isn't nullptr.
Definition vst.h:1343
@ VST_HOST_OPCODE_04
Definition vst.h:1086
@ VST_HOST_OPCODE_18
Definition vst.h:1247
@ VST_HOST_OPCODE_EDITOR_UPDATE
Definition vst.h:1364
@ VST_HOST_OPCODE_CURRENT_EFFECT_ID
Definition vst.h:1075
@ VST_HOST_OPCODE_PARAM_START_EDIT
Definition vst.h:1380
@ VST_HOST_OPCODE_PARAM_STOP_EDIT
Definition vst.h:1394
@ VST_HOST_OPCODE_06
Definition vst.h:1096
@ VST_HOST_OPCODE_1A
Definition vst.h:1253
@ VST_HOST_OPCODE_OUTPUT_STREAM_GET_ATTACHED_EFFECT
Definition vst.h:1230
@ VST_HOST_OPCODE_EDITOR_RESIZE
Definition vst.h:1162
@ VST_HOST_OPCODE_0F
Request that the host changes the size of the containing window.
Definition vst.h:1160
@ VST_HOST_OPCODE_2F
Crash the host depending on what p_ptr is pointing at.
Definition vst.h:1415
@ VST_HOST_OPCODE_IO_MODIFIED
Definition vst.h:1144
@ VST_HOST_OPCODE_1B
Definition vst.h:1256
@ VST_HOST_OPCODE_GET_SAMPLE_RATE
Definition vst.h:1173
@ VST_HOST_OPCODE_12
Current input latency.
Definition vst.h:1192
@ VST_HOST_OPCODE_KEEPALIVE_OR_IDLE
Definition vst.h:1083
@ VST_HOST_OPCODE_07
Definition vst.h:1099
@ VST_HOST_OPCODE_OUTPUT_GET_SPEAKER_ARRANGEMENT
Definition vst.h:1282
@ VST_HOST_OPCODE_1C
Definition vst.h:1259
@ VST_HOST_OPCODE_08
Definition vst.h:1102
@ VST_HOST_OPCODE_27
Crash the host if p_ptr isn't nullptr.
Definition vst.h:1338
@ VST_HOST_OPCODE_20
Retrieve the vendor name into the ptr buffer.
Definition vst.h:1288
@ VST_HOST_OPCODE_INPUT_GET_SPEAKER_ARRANGEMENT
Definition vst.h:1449
@ VST_HOST_OPCODE_OUTPUT_LATENCY
Definition vst.h:1204
@ VST_HOST_OPCODE_2B
Notify host that a parameter is being edited.
Definition vst.h:1378
@ VST_HOST_OPCODE_16
Definition vst.h:1233
@ VST_HOST_OPCODE_25
Check if the host supports a certain feature.
Definition vst.h:1323
@ VST_HOST_OPCODE_1D
Definition vst.h:1262
@ VST_HOST_OPCODE_GET_BLOCK_SIZE
Definition vst.h:1184
@ VST_HOST_OPCODE_PARAM_LOCK
Definition vst.h:1382
@ VST_HOST_OPCODE_23
User defined OP Code, for custom interaction.
Definition vst.h:1311
@ VST_HOST_OPCODE_15
Get which effect is attached to the indexed output stream.
Definition vst.h:1226
@ VST_HOST_OPCODE_24
Definition vst.h:1316
@ VST_HOST_OPCODE_19
Definition vst.h:1250
@ VST_HOST_OPCODE_05
Definition vst.h:1093
@ VST_HOST_OPCODE_1E
Definition vst.h:1265
@ VST_HOST_OPCODE_31
Retrieve the hosts input speaker arrangement.
Definition vst.h:1445
@ VST_HOST_OPCODE_29
Retrieve the directory of the effect that emitted this.
Definition vst.h:1352
@ VST_HOST_OPCODE_01
Retrieve the Hosts VST Version.
Definition vst.h:1063
@ VST_HOST_OPCODE_AUTOMATE
Definition vst.h:1055
@ VST_HOST_OPCODE_INPUT_STREAM_GET_ATTACHED_EFFECT
Definition vst.h:1217
@ VST_HOST_OPCODE_0A
Definition vst.h:1124
@ VST_HOST_OPCODE_26
What language is the host in?
Definition vst.h:1331
@ VST_HOST_OPCODE_11
Get the current block size for the effect.
Definition vst.h:1182
@ VST_HOST_OPCODE_0C
Definition vst.h:1130
@ VST_HOST_OPCODE_10
Get the current sample rate the effect should be running at.
Definition vst.h:1171
@ VST_HOST_OPCODE_GET_ACTIVE_THREAD
Definition vst.h:1244
@ VST_HOST_OPCODE_2C
Notify host that parameter is no longer being edited.
Definition vst.h:1392
@ VST_HOST_OPCODE_13
Current output latency.
Definition vst.h:1202
@ VST_HOST_OPCODE_INPUT_LATENCY
Definition vst.h:1194
@ VST_HOST_OPCODE_0E
Definition vst.h:1147
@ VST_HOST_OPCODE_2D
Crash the host depending on what p_ptr is pointing at.
Definition vst.h:1401
@ VST_HOST_OPCODE_0D
Notify the host that numInputs/numOutputs/delay/numParams has changed.
Definition vst.h:1142
@ VST_HOST_OPCODE_00
Update automation for a given Parameter.
Definition vst.h:1053
@ VST_HOST_OPCODE_17
Which thread is the host currently processing this call from? Useful for memory and thread safety sin...
Definition vst.h:1242
@ VST_HOST_OPCODE_03
Some sort of idle keep-alive?
Definition vst.h:1081
@ VST_HOST_OPCODE_PRODUCT_NAME
Definition vst.h:1298
@ VST_HOST_OPCODE_2A
Refresh everything related to the effect that called this.
Definition vst.h:1362
@ VST_HOST_OPCODE_02
Get the currently selected effect id in container plug-ins.
Definition vst.h:1073
@ VST_HOST_OPCODE_GET_OUTPUT_SPEAKER_ARRANGEMENT
Definition vst.h:1280
@ VST_HOST_OPCODE_VENDOR_VERSION
Definition vst.h:1306
@ VST_HOST_OPCODE_14
Get which effect is attached to the indexed input stream.
Definition vst.h:1213
@ VST_HOST_OPCODE_VENDOR_NAME
Definition vst.h:1290
@ VST_HOST_OPCODE_2E
Crash the host depending on what p_ptr is pointing at.
Definition vst.h:1410
@ VST_HOST_OPCODE_22
Retrieve the vendor version in return value.
Definition vst.h:1304
@ VST_HOST_OPCODE_GET_INPUT_SPEAKER_ARRANGEMENT
Definition vst.h:1447
@ VST_HOST_OPCODE_21
Retrieve the product name into the ptr buffer.
Definition vst.h:1296
@ VST_HOST_OPCODE_VST_VERSION
Definition vst.h:1065
@ VST_HOST_OPCODE_GET_EFFECT_DIRECTORY
Definition vst.h:1354
@ VST_HOST_OPCODE_PARAM_UNLOCK
Definition vst.h:1396
@ VST_HOST_OPCODE_SUPPORTS
Definition vst.h:1325
@ VST_HOST_OPCODE_CUSTOM
Definition vst.h:1313
@ VST_HOST_OPCODE_PARAM_UPDATE
Definition vst.h:1057
@ VST_HOST_OPCODE_30
When queried by the plug-in shortly after VST_EFFECT_OPCODE_PROGRAM_LOAD it often crashes compatible ...
Definition vst.h:1428
@ VST_HOST_OPCODE_1F
Retrieve the hosts output speaker arrangement.
Definition vst.h:1278
@ VST_HOST_OPCODE_INPUT_GET_ATTACHED_EFFECT
Definition vst.h:1215
@ VST_HOST_OPCODE_0B
Definition vst.h:1127
@ VST_HOST_OPCODE_REFRESH
Definition vst.h:1366
@ VST_HOST_OPCODE_09
Send events from plug-in to host.
Definition vst.h:1119
@ VST_HOST_OPCODE_OUTPUT_GET_ATTACHED_EFFECT
Definition vst.h:1228
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:2952
VST_STATUS
Known Status Codes.
Definition vst.h:64
@ VST_STATUS_ERROR
Definition vst.h:75
@ VST_STATUS_0
Unknown / False We either don't know the answer or we can't handle the data/notification.
Definition vst.h:71
@ VST_STATUS_YES
Definition vst.h:91
@ VST_STATUS_m1
No We're unable to handle the data/notification.
Definition vst.h:99
@ VST_STATUS_1
Yes / True We've handled the data/notification.
Definition vst.h:85
@ _VST_STATUS_PAD
Definition vst.h:103
@ VST_STATUS_TRUE
Definition vst.h:87
@ VST_STATUS_SUCCESS
Definition vst.h:89
@ VST_STATUS_FALSE
Definition vst.h:73
@ VST_STATUS_UNKNOWN
Definition vst.h:77
@ VST_STATUS_NO
Definition vst.h:101
VST_SPEAKER_TYPE
Default speaker types.
Definition vst.h:579
@ VST_SPEAKER_TYPE_RIGHT_REAR
Rear/Surround Right.
Definition vst.h:593
@ _VST_SPEAKER_TYPE_PAD
Definition vst.h:634
@ VST_SPEAKER_TYPE_RIGHT
(Front) Right
Definition vst.h:585
@ VST_SPEAKER_TYPE_CENTER
(Front) Center
Definition vst.h:587
@ VST_SPEAKER_TYPE_LFE
LFE / Subwoofer.
Definition vst.h:589
@ VST_SPEAKER_TYPE_USER_09
Definition vst.h:622
@ VST_SPEAKER_TYPE_USER_25
Definition vst.h:606
@ VST_SPEAKER_TYPE_MONO
Mono.
Definition vst.h:581
@ VST_SPEAKER_TYPE_USER_04
Definition vst.h:627
@ VST_SPEAKER_TYPE_USER_11
Definition vst.h:620
@ VST_SPEAKER_TYPE_USER_10
Definition vst.h:621
@ VST_SPEAKER_TYPE_USER_12
Definition vst.h:619
@ VST_SPEAKER_TYPE_USER_30
Definition vst.h:601
@ VST_SPEAKER_TYPE_USER_32
Definition vst.h:599
@ VST_SPEAKER_TYPE_USER_20
Definition vst.h:611
@ VST_SPEAKER_TYPE_USER_15
Definition vst.h:616
@ VST_SPEAKER_TYPE_RIGHT_SIDE
Side Right.
Definition vst.h:597
@ VST_SPEAKER_TYPE_LEFT_SIDE
Side Left.
Definition vst.h:595
@ VST_SPEAKER_TYPE_USER_13
Definition vst.h:618
@ VST_SPEAKER_TYPE_USER_02
Definition vst.h:629
@ VST_SPEAKER_TYPE_USER_23
Definition vst.h:608
@ VST_SPEAKER_TYPE_USER_28
Definition vst.h:603
@ VST_SPEAKER_TYPE_USER_05
Definition vst.h:626
@ VST_SPEAKER_TYPE_USER_01
Definition vst.h:630
@ VST_SPEAKER_TYPE_LEFT
(Front) Left
Definition vst.h:583
@ VST_SPEAKER_TYPE_USER_07
Definition vst.h:624
@ VST_SPEAKER_TYPE_USER_27
Definition vst.h:604
@ VST_SPEAKER_TYPE_USER_18
Definition vst.h:613
@ VST_SPEAKER_TYPE_USER_29
Definition vst.h:602
@ VST_SPEAKER_TYPE_USER_21
Definition vst.h:610
@ VST_SPEAKER_TYPE_USER_06
Definition vst.h:625
@ VST_SPEAKER_TYPE_USER_26
Definition vst.h:605
@ VST_SPEAKER_TYPE_USER_19
Definition vst.h:612
@ VST_SPEAKER_TYPE_USER_31
Definition vst.h:600
@ VST_SPEAKER_TYPE_USER_24
Definition vst.h:607
@ VST_SPEAKER_TYPE_USER_22
Definition vst.h:609
@ VST_SPEAKER_TYPE_USER_17
Definition vst.h:614
@ VST_SPEAKER_TYPE_USER_08
Definition vst.h:623
@ VST_SPEAKER_TYPE_LEFT_REAR
Rear/Surround Left.
Definition vst.h:591
@ VST_SPEAKER_TYPE_USER_14
Definition vst.h:617
@ VST_SPEAKER_TYPE_USER_16
Definition vst.h:615
@ VST_SPEAKER_TYPE_USER_03
Definition vst.h:628
VST_EFFECT_CATEGORY
Plug-in Categories Pre-defined category grouping that also affect host behavior when handling the plu...
Definition vst.h:1618
@ VST_EFFECT_CATEGORY_0A
Container Plug-in This plug-in contains multiple effects in one and requires special handling on both...
Definition vst.h:1781
@ VST_EFFECT_CATEGORY_EFFECT
Definition vst.h:1628
@ VST_EFFECT_CATEGORY_02
Instruments Examples: Instruments, Synths, Samplers, ...
Definition vst.h:1635
@ VST_EFFECT_CATEGORY_METERING
Definition vst.h:1647
@ VST_EFFECT_CATEGORY_01
Generic Effects Examples: Distortion, Pitch Shift, ...
Definition vst.h:1626
@ VST_EFFECT_CATEGORY_08
Restoration Examples: Noise Filtering, Upsamplers, ...
Definition vst.h:1691
@ VST_EFFECT_CATEGORY_WAVEGENERATOR
Definition vst.h:1795
@ VST_EFFECT_CATEGORY_09
Offline Processing Examples: Nothing Supports: Nothing.
Definition vst.h:1699
@ VST_EFFECT_CATEGORY_SPATIAL
Definition vst.h:1665
@ VST_EFFECT_CATEGORY_07
External Processing.
Definition vst.h:1681
@ VST_EFFECT_CATEGORY_06
Delay/Echo Examples: Echo, Reverb, Room Simulation, Delay, ...
Definition vst.h:1672
@ VST_EFFECT_CATEGORY_EXTERNAL
Definition vst.h:1683
@ VST_EFFECT_CATEGORY_OFFLINE
Definition vst.h:1701
@ VST_EFFECT_CATEGORY_0B
Waveform Generators Examples: Sine Wave Generator, ... Supports: Delay, Tail Samples.
Definition vst.h:1793
@ VST_EFFECT_CATEGORY_05
Spatializers Examples: Channel Panning, Expanders, ...
Definition vst.h:1663
@ VST_EFFECT_CATEGORY_MASTERING
Definition vst.h:1656
@ VST_EFFECT_CATEGORY_RESTORATION
Definition vst.h:1693
@ VST_EFFECT_CATEGORY_UNCATEGORIZED
Definition vst.h:1619
@ VST_EFFECT_CATEGORY_03
Metering Examples: Loudness Meters, Volume Analysis, ...
Definition vst.h:1645
@ VST_EFFECT_CATEGORY_INSTRUMENT
Definition vst.h:1637
@ VST_EFFECT_CATEGORY_DELAY_OR_ECHO
Definition vst.h:1674
@ VST_EFFECT_CATEGORY_04
Mastering Examples: Compressors, Limiters, ...
Definition vst.h:1654
@ VST_EFFECT_CATEGORY_CONTAINER
Definition vst.h:1783
VST_VKEY
Virtual Key codes.
Definition vst.h:184
@ VST_VKEY_F5
Definition vst.h:311
@ VST_VKEY_47
Definition vst.h:319
@ VST_VKEY_ARROW_UP
Definition vst.h:219
@ VST_VKEY_26
Definition vst.h:257
@ VST_VKEY_07
Definition vst.h:204
@ VST_VKEY_NUMPAD_4
Definition vst.h:264
@ VST_VKEY_F1
Definition vst.h:299
@ VST_VKEY_11
Definition vst.h:215
@ VST_VKEY_18
Definition vst.h:235
@ VST_VKEY_27
Definition vst.h:260
@ VST_VKEY_63
Definition vst.h:355
@ VST_VKEY_NUMPAD_MULTIPLY
Definition vst.h:282
@ VST_VKEY_02
Definition vst.h:190
@ VST_VKEY_36
Definition vst.h:287
@ VST_VKEY_62
Definition vst.h:354
@ VST_VKEY_NUMPAD_COMMA_OR_DOT
Definition vst.h:288
@ VST_VKEY_F8
Definition vst.h:320
@ VST_VKEY_12
Definition vst.h:218
@ VST_VKEY_ESCAPE
Definition vst.h:202
@ VST_VKEY_32
Definition vst.h:275
@ VST_VKEY_03
Definition vst.h:193
@ VST_VKEY_06
Definition vst.h:201
@ VST_VKEY_41
Definition vst.h:301
@ VST_VKEY_PAUSE
Definition vst.h:199
@ VST_VKEY_21
Definition vst.h:243
@ VST_VKEY_NUMPAD_1
Definition vst.h:255
@ VST_VKEY_69
Definition vst.h:361
@ VST_VKEY_01
Definition vst.h:187
@ VST_VKEY_56
Definition vst.h:346
@ VST_VKEY_CONTROL
Definition vst.h:344
@ VST_VKEY_F6
Definition vst.h:314
@ VST_VKEY_53
Definition vst.h:337
@ VST_VKEY_NUMPAD_ADD
Definition vst.h:285
@ VST_VKEY_F10
Definition vst.h:326
@ VST_VKEY_16
Definition vst.h:230
@ VST_VKEY_F11
Definition vst.h:329
@ VST_VKEY_66
Definition vst.h:358
@ VST_VKEY_10
Definition vst.h:212
@ VST_VKEY_F3
Definition vst.h:305
@ VST_VKEY_51
Definition vst.h:331
@ VST_VKEY_NUMPAD_0
Definition vst.h:252
@ VST_VKEY_17
Definition vst.h:233
@ VST_VKEY_ALT
Definition vst.h:347
@ VST_VKEY_61
Definition vst.h:353
@ VST_VKEY_28
Definition vst.h:263
@ VST_VKEY_NUMPAD_3
Definition vst.h:261
@ VST_VKEY_60
Definition vst.h:352
@ VST_VKEY_33
Definition vst.h:278
@ VST_VKEY_39
Definition vst.h:295
@ VST_VKEY_58
Definition vst.h:350
@ VST_VKEY_14
Definition vst.h:224
@ VST_VKEY_57
Definition vst.h:349
@ VST_VKEY_F2
Definition vst.h:302
@ VST_VKEY_00
Definition vst.h:185
@ VST_VKEY_40
Definition vst.h:298
@ VST_VKEY_SPACE
Definition vst.h:205
@ VST_VKEY_INSERT
Definition vst.h:244
@ VST_VKEY_29
Definition vst.h:266
@ VST_VKEY_PAGE_UP
Definition vst.h:228
@ VST_VKEY_49
Definition vst.h:325
@ VST_VKEY_31
Definition vst.h:272
@ VST_VKEY_54
Definition vst.h:340
@ VST_VKEY_59
Definition vst.h:351
@ VST_VKEY_50
Definition vst.h:328
@ VST_VKEY_30
Definition vst.h:269
@ VST_VKEY_19
Definition vst.h:238
@ VST_VKEY_67
Definition vst.h:359
@ VST_VKEY_RETURN
Definition vst.h:196
@ VST_VKEY_52
Definition vst.h:334
@ VST_VKEY_NUMPAD_SUBTRACT
Definition vst.h:291
@ VST_VKEY_F7
Definition vst.h:317
@ VST_VKEY_68
Definition vst.h:360
@ VST_VKEY_15
Definition vst.h:227
@ VST_VKEY_13
Definition vst.h:221
@ VST_VKEY_NUMPAD_9
Definition vst.h:279
@ VST_VKEY_24
Definition vst.h:251
@ VST_VKEY_END
Definition vst.h:210
@ VST_VKEY_PAGE_DOWN
Definition vst.h:231
@ VST_VKEY_23
Definition vst.h:249
@ VST_VKEY_48
Definition vst.h:322
@ VST_VKEY_NUMPAD_7
Definition vst.h:273
@ VST_VKEY_09
Definition vst.h:209
@ VST_VKEY_SHIFT
Definition vst.h:341
@ VST_VKEY_BACKSPACE
Definition vst.h:188
@ VST_VKEY_F4
Definition vst.h:308
@ VST_VKEY_20
Definition vst.h:241
@ VST_VKEY_NUMPAD_DIVIDE
Definition vst.h:296
@ VST_VKEY_NUMPAD_8
Definition vst.h:276
@ VST_VKEY_HOME
Definition vst.h:213
@ VST_VKEY_TAB
Definition vst.h:191
@ VST_VKEY_04
Definition vst.h:195
@ VST_VKEY_ARROW_DOWN
Definition vst.h:225
@ VST_VKEY_DELETE
Definition vst.h:247
@ VST_VKEY_05
Definition vst.h:198
@ VST_VKEY_35
Definition vst.h:284
@ VST_VKEY_44
Definition vst.h:310
@ VST_VKEY_46
Definition vst.h:316
@ VST_VKEY_ARROW_RIGHT
Definition vst.h:222
@ VST_VKEY_38
Definition vst.h:293
@ VST_VKEY_45
Definition vst.h:313
@ VST_VKEY_F9
Definition vst.h:323
@ VST_VKEY_NUMLOCK
Definition vst.h:335
@ VST_VKEY_SCROLLLOCK
Definition vst.h:338
@ VST_VKEY_ARROW_LEFT
Definition vst.h:216
@ VST_VKEY_22
Definition vst.h:246
@ VST_VKEY_34
Definition vst.h:281
@ VST_VKEY_08
Definition vst.h:207
@ VST_VKEY_42
Definition vst.h:304
@ VST_VKEY_NUMPAD_6
Definition vst.h:270
@ VST_VKEY_43
Definition vst.h:307
@ VST_VKEY_NUMPAD_2
Definition vst.h:258
@ VST_VKEY_37
Definition vst.h:290
@ VST_VKEY_65
Definition vst.h:357
@ VST_VKEY_F12
Definition vst.h:332
@ VST_VKEY_NUMPAD_5
Definition vst.h:267
@ VST_VKEY_25
Definition vst.h:254
@ VST_VKEY_55
Definition vst.h:343
@ VST_VKEY_64
Definition vst.h:356
@ VST_VKEY_PRINT
Definition vst.h:236
@ VST_VKEY_NUMPAD_ENTER
Definition vst.h:239
VST_EFFECT_FLAG
Effect Flags.
Definition vst.h:1806
@ VST_EFFECT_FLAG_SILENT_TAIL
Definition vst.h:1874
@ VST_EFFECT_FLAG_1ls9
Effect does not produce tail samples when the input is silent.
Definition vst.h:1872
@ VST_EFFECT_FLAG_CHUNKS
Definition vst.h:1852
@ VST_EFFECT_FLAG_1ls4
Effect uses process_float.
Definition vst.h:1840
@ VST_EFFECT_FLAG_1ls5
Effect supports saving/loading programs/banks from unformatted chunk data.
Definition vst.h:1850
@ VST_EFFECT_FLAG_EDITOR
Definition vst.h:1828
@ VST_EFFECT_FLAG_SUPPORTS_FLOAT
Definition vst.h:1842
@ VST_EFFECT_FLAG_1ls0
Effect provides a custom editor.
Definition vst.h:1826
@ VST_EFFECT_FLAG_INSTRUMENT
Definition vst.h:1864
@ VST_EFFECT_FLAG_1ls12
Effect supports process_double.
Definition vst.h:1886
@ VST_EFFECT_FLAG_1ls8
Effect is an Instrument/Generator.
Definition vst.h:1862
@ VST_EFFECT_FLAG_SUPPORTS_DOUBLE
Definition vst.h:1888
VST_VKEY_MODIFIER
Definition vst.h:364
@ VST_VKEY_MODIFIER_1ls1
One of the alt keys is held down.
Definition vst.h:371
@ VST_VKEY_MODIFIER_1ls0
One of the shift keys is held down.
Definition vst.h:366
@ VST_VKEY_MODIFIER_SHIFT
Definition vst.h:368
@ VST_VKEY_MODIFIER_SYSTEM
Definition vst.h:381
@ VST_VKEY_MODIFIER_ALT
Definition vst.h:373
@ VST_VKEY_MODIFIER_CONTROL
Definition vst.h:389
@ VST_VKEY_MODIFIER_1ls2
Control on MacOS, System (Windows Logo) on Windows.
Definition vst.h:379
@ VST_VKEY_MODIFIER_1ls3
Control on PC, System (Apple Logo) on Mac OS.
Definition vst.h:387
VST_BUFFER_SIZE
Known Buffer Sizes.
Definition vst.h:108
@ VST_BUFFER_SIZE_SPEAKER_NAME
Definition vst.h:118
@ VST_BUFFER_SIZE_STREAM_NAME
Definition vst.h:119
@ VST_BUFFER_SIZE_PARAM_VALUE
Definition vst.h:111
@ VST_BUFFER_SIZE_STREAM_LABEL
Definition vst.h:112
@ VST_BUFFER_SIZE_PARAM_LABEL
Definition vst.h:109
@ VST_BUFFER_SIZE_VENDOR_NAME
Definition vst.h:120
@ VST_BUFFER_SIZE_PARAM_NAME
Definition vst.h:110
@ VST_BUFFER_SIZE_PROGRAM_NAME
Definition vst.h:114
@ VST_BUFFER_SIZE_CATEGORY_LABEL
Definition vst.h:113
@ VST_BUFFER_SIZE_EFFECT_NAME
Definition vst.h:115
@ VST_BUFFER_SIZE_PARAM_LONG_NAME
Definition vst.h:116
@ VST_BUFFER_SIZE_PRODUCT_NAME
Definition vst.h:117
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:2939
VST_PARAMETER_FLAG
Flags for parameters.
Definition vst.h:399
@ VST_PARAMETER_FLAG_SWITCH
Definition vst.h:406
@ VST_PARAMETER_FLAG_1ls6
Parameter can be gradually increased/decreased.
Definition vst.h:452
@ VST_PARAMETER_FLAG_1ls5
Parameter has a category for the default editor.
Definition vst.h:444
@ VST_PARAMETER_FLAG_1ls4
Parameter has an display order index for the default editor.
Definition vst.h:436
@ VST_PARAMETER_FLAG_1ls2
Parameter uses float steps.
Definition vst.h:420
@ VST_PARAMETER_FLAG_INTEGER_LIMITS
Definition vst.h:414
@ VST_PARAMETER_FLAG_STEP_FLOAT
Definition vst.h:422
@ VST_PARAMETER_FLAG_INDEX
Definition vst.h:438
@ VST_PARAMETER_FLAG_CATEGORY
Definition vst.h:446
@ VST_PARAMETER_FLAG_RAMPING
Definition vst.h:454
@ VST_PARAMETER_FLAG_1ls3
Parameter uses integer steps.
Definition vst.h:428
@ VST_PARAMETER_FLAG_1ls0
Parameter is an on/off switch.
Definition vst.h:404
@ VST_PARAMETER_FLAG_STEP_INT
Definition vst.h:430
@ VST_PARAMETER_FLAG_1ls1
Parameter limits are set as integers.
Definition vst.h:412
@ _VST_PARAMETER_FLAG_PAD
Definition vst.h:456
#define VST_FUNCTION_INTERFACE
Standard calling convention across plug-ins and hosts.
Definition vst.h:49
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:1894
@ VST_EFFECT_OPCODE_WINDOW_MOUSE
Definition vst.h:2105
@ VST_EFFECT_OPCODE_2A
Host wants to change the speaker arrangement.
Definition vst.h:2378
@ VST_EFFECT_OPCODE_GETVENDORVERSION
Definition vst.h:2454
@ VST_EFFECT_OPCODE_20
Input disconnected.
Definition vst.h:2279
@ VST_EFFECT_OPCODE_14
Window Focus Event?
Definition vst.h:2141
@ VST_EFFECT_OPCODE_PARAM_VALUE_TO_STRING
Definition vst.h:1983
@ VST_EFFECT_OPCODE_PARAM_GETLABEL
Definition vst.h:1963
@ VST_EFFECT_OPCODE_4E
Definition vst.h:2756
@ VST_EFFECT_OPCODE_43
Host is starting to set up a program.
Definition vst.h:2634
@ VST_EFFECT_OPCODE_3E
Midi related.
Definition vst.h:2594
@ VST_EFFECT_OPCODE_32
User-defined Op-Code for VST extensions.
Definition vst.h:2465
@ VST_EFFECT_OPCODE_03
Get currently selected program number.
Definition vst.h:1929
@ VST_EFFECT_OPCODE_SET_CHUNK_DATA
Definition vst.h:2189
@ VST_EFFECT_OPCODE_21
Retrieve properties for the given input index.
Definition vst.h:2288
@ VST_EFFECT_OPCODE_PRODUCT_NAME
Definition vst.h:2445
@ VST_EFFECT_OPCODE_4B
Host wants to know if we can load the provided bank data.
Definition vst.h:2721
@ VST_EFFECT_OPCODE_PARAM_NAME
Definition vst.h:1997
@ VST_EFFECT_OPCODE_1C
Definition vst.h:2247
@ VST_EFFECT_OPCODE_41
Midi related.
Definition vst.h:2618
@ VST_EFFECT_OPCODE_SET_SAMPLE_RATE
Definition vst.h:2014
@ VST_EFFECT_OPCODE_CREATE
Definition vst.h:1901
@ VST_EFFECT_OPCODE_EDITOR_GET_RECT
Definition vst.h:2054
@ VST_EFFECT_OPCODE_SET_SPEAKER_ARRANGEMENT
Definition vst.h:2380
@ VST_EFFECT_OPCODE_PARAM_GETVALUE
Definition vst.h:1977
@ VST_EFFECT_OPCODE_PROGRAM_SET_NAME
Definition vst.h:1943
@ VST_EFFECT_OPCODE_06
Get the value? label for the parameter.
Definition vst.h:1961
@ VST_EFFECT_OPCODE_0A
Set the new sample rate for the plugin to use.
Definition vst.h:2010
@ VST_EFFECT_OPCODE_10
Window Draw Event?
Definition vst.h:2087
@ VST_EFFECT_OPCODE_2F
Retrieve the vendor name into the ptr buffer.
Definition vst.h:2430
@ VST_EFFECT_OPCODE_PROGRAM_GET
Definition vst.h:1933
@ VST_EFFECT_OPCODE_28
Seen in plug-ins with VST_EFFECT_CATEGORY_OFFLINE.
Definition vst.h:2356
@ VST_EFFECT_OPCODE_4D
Definition vst.h:2748
@ VST_EFFECT_OPCODE_01
Destroy the effect (if there is any) and free its memory.
Definition vst.h:1911
@ VST_EFFECT_OPCODE_3C
Editor Virtual Key Up Event.
Definition vst.h:2576
@ VST_EFFECT_OPCODE_1B
Set Parameter value from string representation.
Definition vst.h:2235
@ VST_EFFECT_OPCODE_SET_BLOCK_SIZE
Definition vst.h:2024
@ VST_EFFECT_OPCODE_IDLE
Definition vst.h:2501
@ VST_EFFECT_OPCODE_33
Test for support of a specific named feature.
Definition vst.h:2476
@ VST_EFFECT_OPCODE_04
Set the name of the currently selected program.
Definition vst.h:1939
@ VST_EFFECT_OPCODE_09
Definition vst.h:2004
@ VST_EFFECT_OPCODE_PARAM_GET_NAME
Definition vst.h:1995
@ VST_EFFECT_OPCODE_OUTPUT_STREAM_GET_PROPERTIES
Definition vst.h:2305
@ VST_EFFECT_OPCODE_INPUT_STREAM_GET_PROPERTIES
Definition vst.h:2292
@ VST_EFFECT_OPCODE_BANK_LOAD
Definition vst.h:2723
@ VST_EFFECT_OPCODE_EDITOR_MOUSE
Definition vst.h:2107
@ VST_EFFECT_OPCODE_WINDOW_CREATE
Definition vst.h:2063
@ 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:2020
@ VST_EFFECT_OPCODE_PARAM_GET_VALUE
Definition vst.h:1979
@ VST_EFFECT_OPCODE_39
Definition vst.h:2540
@ VST_EFFECT_OPCODE_05
Get the name of the currently selected program.
Definition vst.h:1949
@ VST_EFFECT_OPCODE_1A
Can the parameter be automated?
Definition vst.h:2220
@ VST_EFFECT_OPCODE_19
Send events from host to plug-in.
Definition vst.h:2210
@ VST_EFFECT_OPCODE_PROGRAM_SET_END
Definition vst.h:2646
@ VST_EFFECT_OPCODE_GET_PROGRAM
Definition vst.h:1931
@ VST_EFFECT_OPCODE_12
Window Keyboard Event?
Definition vst.h:2119
@ VST_EFFECT_OPCODE_42
Midi related.
Definition vst.h:2626
@ VST_EFFECT_OPCODE_EFFECT_CATEGORY
Definition vst.h:2314
@ VST_EFFECT_OPCODE_PARAM_IS_AUTOMATABLE
Definition vst.h:2224
@ VST_EFFECT_OPCODE_WINDOW_DRAW
Definition vst.h:2089
@ VST_EFFECT_OPCODE_DESTROY
Definition vst.h:1913
@ VST_EFFECT_OPCODE_SETBLOCKSIZE
Definition vst.h:2022
@ VST_EFFECT_OPCODE_02
Set which program number is currently select.
Definition vst.h:1919
@ VST_EFFECT_OPCODE_48
End processing of audio.
Definition vst.h:2690
@ VST_EFFECT_OPCODE_GETNAME2
Definition vst.h:2443
@ VST_EFFECT_OPCODE_CUSTOM
Definition vst.h:2467
@ VST_EFFECT_OPCODE_2E
Translate an error code to a string.
Definition vst.h:2421
@ VST_EFFECT_OPCODE_3D
Definition vst.h:2586
@ VST_EFFECT_OPCODE_EDITOR_KEEP_ALIVE
Definition vst.h:2131
@ VST_EFFECT_OPCODE_PARAM_PROPERTIES
Definition vst.h:2532
@ VST_EFFECT_OPCODE_TAIL_SAMPLES
Definition vst.h:2490
@ VST_EFFECT_OPCODE_30
Retrieve the product name into the ptr buffer.
Definition vst.h:2441
@ VST_EFFECT_OPCODE_PARAM_VALUE
Definition vst.h:1981
@ VST_EFFECT_OPCODE_35
Notify effect that it is idle?
Definition vst.h:2499
@ VST_EFFECT_OPCODE_PROGRAM_GET_NAME
Definition vst.h:1953
@ VST_EFFECT_OPCODE_0D
Retrieve the client rect size of the plugins window.
Definition vst.h:2048
@ VST_EFFECT_OPCODE_1E
Definition vst.h:2263
@ VST_EFFECT_OPCODE_PROGRAM_LOAD
Definition vst.h:2736
@ VST_EFFECT_OPCODE_23
Retrieve category of this effect.
Definition vst.h:2312
@ VST_EFFECT_OPCODE_VST_VERSION
Definition vst.h:2550
@ VST_EFFECT_OPCODE_36
Definition vst.h:2510
@ VST_EFFECT_OPCODE_CATEGORY
Definition vst.h:2316
@ VST_EFFECT_OPCODE_EDITOR_OPEN
Definition vst.h:2065
@ VST_EFFECT_OPCODE_EDITOR_VKEY_DOWN
Definition vst.h:2566
@ VST_EFFECT_OPCODE_00
Create/Initialize the effect (if it has not been created already).
Definition vst.h:1899
@ VST_EFFECT_OPCODE_2B
Definition vst.h:2385
@ VST_EFFECT_OPCODE_SUSPEND_RESUME
Definition vst.h:2038
@ VST_EFFECT_OPCODE_24
Definition vst.h:2324
@ VST_EFFECT_OPCODE_PARAM_LABEL
Definition vst.h:1967
@ VST_EFFECT_OPCODE_40
Midi related.
Definition vst.h:2610
@ VST_EFFECT_OPCODE_22
Retrieve properties for the given output index.
Definition vst.h:2301
@ VST_EFFECT_OPCODE_4F
Definition vst.h:2764
@ VST_EFFECT_OPCODE_47
Begin processing of audio.
Definition vst.h:2681
@ VST_EFFECT_OPCODE_38
Parameter Properties.
Definition vst.h:2528
@ VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT
Definition vst.h:2661
@ VST_EFFECT_OPCODE_0E
Create the window for the plugin.
Definition vst.h:2061
@ VST_EFFECT_OPCODE_3B
Editor Virtual Key Down Input.
Definition vst.h:2564
@ VST_EFFECT_OPCODE_BYPASS
Definition vst.h:2396
@ VST_EFFECT_OPCODE_EDITOR_KEYBOARD
Definition vst.h:2123
@ VST_EFFECT_OPCODE_INPUT_GET_PROPERTIES
Definition vst.h:2290
@ VST_EFFECT_OPCODE_VENDOR_NAME
Definition vst.h:2434
@ VST_EFFECT_OPCODE_PARAM_ISAUTOMATABLE
Definition vst.h:2222
@ VST_EFFECT_OPCODE_WINDOW_KEYBOARD
Definition vst.h:2121
@ VST_EFFECT_OPCODE_GET_PROGRAM_NAME
Definition vst.h:1951
@ VST_EFFECT_OPCODE_17
Get Chunk Data.
Definition vst.h:2173
@ VST_EFFECT_OPCODE_31
Retrieve the vendor version in return value.
Definition vst.h:2452
@ VST_EFFECT_OPCODE_2D
Retrieve the effect name into the ptr buffer.
Definition vst.h:2405
@ VST_EFFECT_OPCODE_07
Get the string representing the value for the parameter.
Definition vst.h:1975
@ VST_EFFECT_OPCODE_EVENT
Definition vst.h:2212
@ VST_EFFECT_OPCODE_PROCESS_END
Definition vst.h:2692
@ VST_EFFECT_OPCODE_SET_PROGRAM
Definition vst.h:1921
@ VST_EFFECT_OPCODE_27
Seen in plug-ins with VST_EFFECT_CATEGORY_OFFLINE.
Definition vst.h:2348
@ VST_EFFECT_OPCODE_EDITOR_DRAW
Definition vst.h:2091
@ VST_EFFECT_OPCODE_15
Window Unfocus Event?
Definition vst.h:2151
@ VST_EFFECT_OPCODE_49
Definition vst.h:2700
@ VST_EFFECT_OPCODE_NAME
Definition vst.h:2411
@ VST_EFFECT_OPCODE_EDITOR_CLOSE
Definition vst.h:2075
@ VST_EFFECT_OPCODE_29
Seen in plug-ins with VST_EFFECT_CATEGORY_OFFLINE.
Definition vst.h:2364
@ VST_EFFECT_OPCODE_3A
Retrieve the VST Version supported.
Definition vst.h:2548
@ VST_EFFECT_OPCODE_11
Window Mouse Event?
Definition vst.h:2103
@ VST_EFFECT_OPCODE_PARAM_GET_LABEL
Definition vst.h:1965
@ VST_EFFECT_OPCODE_SETSAMPLERATE
Definition vst.h:2012
@ VST_EFFECT_OPCODE_0F
Destroy the plugins window.
Definition vst.h:2071
@ VST_EFFECT_OPCODE_GET_CHUNK_DATA
Definition vst.h:2175
@ VST_EFFECT_OPCODE_INITIALIZE
Definition vst.h:1903
@ VST_EFFECT_OPCODE_GETTAILSAMPLES
Definition vst.h:2488
@ VST_EFFECT_OPCODE_18
Set Chunk Data.
Definition vst.h:2187
@ VST_EFFECT_OPCODE_EFFECT_NAME
Definition vst.h:2409
@ VST_EFFECT_OPCODE_GET_PARAMETER_PROPERTIES
Definition vst.h:2530
@ VST_EFFECT_OPCODE_PARAM_AUTOMATABLE
Definition vst.h:2226
@ VST_EFFECT_OPCODE_PARAM_GETNAME
Definition vst.h:1993
@ VST_EFFECT_OPCODE_4A
Definition vst.h:2710
@ VST_EFFECT_OPCODE_08
Get the name for the parameter.
Definition vst.h:1991
@ VST_EFFECT_OPCODE_13
Window/Editor Idle/Keep-Alive Callback?
Definition vst.h:2129
@ VST_EFFECT_OPCODE_45
Host wants to know the current speaker arrangement.
Definition vst.h:2659
@ VST_EFFECT_OPCODE_WINDOW_GETRECT
Definition vst.h:2050
@ VST_EFFECT_OPCODE_OUTPUT_GET_PROPERTIES
Definition vst.h:2303
@ VST_EFFECT_OPCODE_PARAM_VALUE_FROM_STRING
Definition vst.h:2239
@ VST_EFFECT_OPCODE_GETVENDOR
Definition vst.h:2432
@ VST_EFFECT_OPCODE_PROCESS_BEGIN
Definition vst.h:2683
@ VST_EFFECT_OPCODE_1D
Definition vst.h:2255
@ VST_EFFECT_OPCODE_PAUSE_UNPAUSE
Definition vst.h:2036
@ VST_EFFECT_OPCODE_4C
Host wants to know if we can load the provided program data.
Definition vst.h:2734
@ VST_EFFECT_OPCODE_26
Seen in plug-ins with VST_EFFECT_CATEGORY_OFFLINE.
Definition vst.h:2340
@ VST_EFFECT_OPCODE_CONTAINER_NEXT_EFFECT_ID
Definition vst.h:2674
@ VST_EFFECT_OPCODE_GETNAME
Definition vst.h:2407
@ VST_EFFECT_OPCODE_VENDOR_VERSION
Definition vst.h:2456
@ VST_EFFECT_OPCODE_46
Get the next effect contained in this effect.
Definition vst.h:2672
@ VST_EFFECT_OPCODE_SET_PROGRAM_NAME
Definition vst.h:1941
@ VST_EFFECT_OPCODE_FOURCC
Definition vst.h:2161
@ VST_EFFECT_OPCODE_37
Definition vst.h:2519
@ VST_EFFECT_OPCODE_44
Host is done setting up a program.
Definition vst.h:2644
@ VST_EFFECT_OPCODE_3F
Midi related.
Definition vst.h:2602
@ VST_EFFECT_OPCODE_WINDOW_DESTROY
Definition vst.h:2073
@ VST_EFFECT_OPCODE_EDITOR_VKEY_UP
Definition vst.h:2578
@ VST_EFFECT_OPCODE_1F
Input connected.
Definition vst.h:2271
@ VST_EFFECT_OPCODE_34
Number of samples that are at the tail at the end of playback.
Definition vst.h:2486
@ VST_EFFECT_OPCODE_2C
Enable/Disable bypassing the effect.
Definition vst.h:2394
@ VST_EFFECT_OPCODE_PROGRAM_SET
Definition vst.h:1923
@ VST_EFFECT_OPCODE_SUPPORTS
Definition vst.h:2478
@ VST_EFFECT_OPCODE_PROGRAM_SET_BEGIN
Definition vst.h:2636
@ VST_EFFECT_OPCODE_16
Definition vst.h:2159
@ VST_EFFECT_OPCODE_TRANSLATE_ERROR
Definition vst.h:2423
@ VST_EFFECT_OPCODE_EDITOR_RECT
Definition vst.h:2052
@ VST_EFFECT_OPCODE_25
Definition vst.h:2332
@ VST_EFFECT_OPCODE_PARAM_SET_VALUE
Definition vst.h:2237
@ VST_EFFECT_OPCODE_SUSPEND
Definition vst.h:2040
@ VST_EFFECT_OPCODE_0C
Effect processing should be suspended/paused or resumed/unpaused.
Definition vst.h:2034
VST_STREAM_FLAG
Definition vst.h:758
@ VST_STREAM_FLAG_STEREO
Definition vst.h:768
@ VST_STREAM_FLAG_1ls2
Stream is defined by VST_SPEAKER_ARRANGEMENT_TYPE.
Definition vst.h:774
@ VST_STREAM_FLAG_1ls0
Ignored?
Definition vst.h:761
@ VST_STREAM_FLAG_1ls1
Stream is in Stereo.
Definition vst.h:767
@ VST_STREAM_FLAG_USE_TYPE
Definition vst.h:775
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:2926
VST_HOST_ACTIVE_THREAD
Definition vst.h:1010
@ VST_HOST_ACTIVE_THREAD_UNKNOWN
The active thread has no special usage assigned.
Definition vst.h:1013
@ VST_HOST_ACTIVE_THREAD_INTERFACE
The active thread is used for user interface work.
Definition vst.h:1017
@ VST_HOST_ACTIVE_THREAD_EVENT
The active thread is related to events and event handling.
Definition vst.h:1028
@ VST_HOST_ACTIVE_THREAD_AUDIO
The active thread is used for audio processing.
Definition vst.h:1021
@ VST_HOST_ACTIVE_THREAD_USER
The active thread was created by an effect.
Definition vst.h:1032