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