33 Commits

Author SHA1 Message Date
Xaymar 339d4f3159 Add documentation to VST_EVENT_TYPE_04 and VST_EVENT_TYPE_05 2025-08-08 06:24:25 +02:00
Xaymar ac2d40ebce vst_event_midi_sysex_t is event type 6 not 5 2025-08-08 06:24:24 +02:00
Xaymar 22bb104943 Strip out old vst3sdk support as it's unsupported by Steinberg now
Seems like the functionality to make a VST 3.x + 2.x plug-in is now no longer in their SDK or at least I can't find it. Since that code likely relied on things that were GPLv3 or Steinberg Proprietary licensed, it's better if I remove it.
2025-08-08 06:24:24 +02:00
Xaymar 779b6c55de Update README.md 2025-08-08 06:16:15 +02:00
Xaymar 7593071b9e Add modern C++ style C header include
It does the exact same as all the modern C header includes!
2025-08-08 05:34:16 +02:00
Xaymar ce82058d69 Clean and proper directory structure 2025-08-08 05:33:54 +02:00
Xaymar f32ac9b385 Minor documentation improvements 2025-08-08 05:27:59 +02:00
Xaymar a17e62c097 Support for C98 and C++98
This omits the definition for vst_host_supports_t and vst_effect_supports_t if the compiler doesn't support it. I may replace these with #define's in the future for universal compiler support.
2025-08-08 05:18:23 +02:00
Xaymar 0c87491e6f Document vst_effect_supports_t.conformsToWindowRules 2025-08-08 04:57:34 +02:00
Xaymar cb3952b5f1 Empty field in vst_events_t is likely padding
Based on where things are in the structure this is likely to be a remnant of the past. Can't verify that though.
2025-08-08 04:47:06 +02:00
Xaymar a76aa75260 Define "External" category (#5) 2025-08-08 04:42:50 +02:00
Xaymar 4246e8442c Use README.md as the documentation main page 2025-08-08 04:40:12 +02:00
Xaymar 00a9f2dc53 Effect 0x3B/0x3C: Define virtual key codes
These are probably not all but they are the ones that I could actually make happen.
2025-08-08 04:38:13 +02:00
Xaymar 4b00c75a3f Some documentation updates 2025-08-08 04:15:18 +02:00
Xaymar 93bc195dea 'cinttypes' doesn't exist prior to C++11 2025-08-08 04:09:52 +02:00
Xaymar 45194f82b9 Add @todo tags to anything that needs work 2025-08-08 04:09:12 +02:00
Xaymar bc16fce699 Fix up C99 support again
We still require a C++ compiler that treats C header files as actual C code.
2025-08-08 03:59:29 +02:00
Xaymar 6576c95a74 Add MIDI and MIDI SysEx event structures (#2, #3)
Thanks to a cheap MIDI keyboard I was able to figure out most of the structure with ease.
2025-08-08 03:55:12 +02:00
Xaymar de16483b55 Host 0x17: Query which thread is currently active
Quite useful for threading and memory safety.
2025-08-08 02:54:42 +02:00
Xaymar b5310b8922 Host 0x2D/0x2E/0x2F: Controllable crash/memory corruption via p_ptr
Doesn't appear useful so far.
2025-08-08 02:54:37 +02:00
Xaymar 098f059834 Host 0x1F/0x31: Query current input/output speaker arrangement
Seems to be completely unsupported in VST 2.4 hosts and all prior hosts seem to just return the exact data we output from VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT.
2025-08-08 02:54:36 +02:00
Xaymar ca9d9de24e Host 0x15/0x16: Query which vst_effect_t is attached to an input/output stream
Basically unsupported in almost all hosts so not very useful for optimization purposes.
2025-08-08 02:54:36 +02:00
Xaymar 596cf21b71 Host 0x13/0x14: Current input/output sample latency 2025-08-08 02:54:35 +02:00
Xaymar 8204f06ca7 Host 0x11/0x12: Current effect sample rate and block size
Some hosts can randomly "forget" to send these updates to the effect and that's why we can ask the host for them. Most modern ones though do properly handle all of this.
2025-08-08 02:54:35 +02:00
Xaymar 64ddb953db Host 0x27: Query current host language
Seems to use a custom format instead of something like ISO 639 which predates VST 2.x by quite a long time. Reinventing the wheel goes back a long time it seems.
2025-08-08 02:54:34 +02:00
Xaymar 5cef1f300a Host 0x29: Retrieves the path of the currently loaded effect
Unsure what this does with container plug-ins. Does it return the container file?
2025-08-08 02:54:34 +02:00
Xaymar 9f1a61b603 Host 0x30: Some kind of path query related programs and banks
Mostly just crashes hosts but in rare cases actually works to retrieve a path to something.
2025-08-08 02:54:33 +02:00
Xaymar ac4572eff4 Host 0x2A: Plug-in requests a full refresh of information
A plug-in may call this if they believe important information has changed such as the number of parameters. This seems to work together with VST_HOST_OPCODE_IO_MODIFIED.
2025-08-08 02:54:33 +02:00
Xaymar 14688491dc Host 0x2B/0x2C: Intended behavior appears to be locking/unlocking
These calls seem to prevent compatible hosts from emitting parameter changes entirely. This is like a file lock where it prevents other processes from modifying things they shouldn't.
2025-08-08 02:54:32 +02:00
Xaymar a140b58016 Initial work towards event handling support (#3)
The VST 2.x API seems to support some sort of event handling functionality used to implement MIDI (#2) and External Processing (#5). The vst_event_t structure is currently unclear.
2025-08-08 02:54:31 +02:00
Xaymar 2551d06b0c Add "editFile" to vst_host_supports_t
This one looked like a function lookup for a LoadLibrary call. Turns out it's an actual support query!
2025-08-08 02:54:31 +02:00
Xaymar e81a1f91e2 Host 0x1E: Request a resize of the window containing our custom editor
The host is not required to accept our request and may ignore it.
2025-08-08 02:54:30 +02:00
Xaymar 0b608bec1f Slightly improve overall documentation 2025-08-08 02:54:30 +02:00
+149 -88
View File
@@ -19,9 +19,9 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// Please refer to README.md and LICENSE for further information.
/* Please refer to README.md and LICENSE for further information. */
// Protect against double inclusion in practically every compiler available.
/* Protect against double inclusion in practically every compiler available. */
#pragma once
#ifndef VST2SDK_VST_H
#define VST2SDK_VST_H
@@ -100,7 +100,7 @@ enum VST_STATUS {
/** @sa VST_STATUS_m1 */
VST_STATUS_NO = -1,
_VST_STATUS_PAD = 0xFFFFFFFFul,
_VST_STATUS_PAD = (-1l)
};
/** Known Buffer Sizes
@@ -117,8 +117,8 @@ enum VST_BUFFER_SIZE {
VST_BUFFER_SIZE_PRODUCT_NAME = 64,
VST_BUFFER_SIZE_SPEAKER_NAME = 64,
VST_BUFFER_SIZE_STREAM_NAME = 64,
VST_BUFFER_SIZE_VENDOR_NAME = 64,
}; // This is an enum because I started to dislike macros.
VST_BUFFER_SIZE_VENDOR_NAME = 64
};
/** Valid VST 1.x and 2.x versions
* The format is either a single digit or four digits in Base10 format.
@@ -138,18 +138,33 @@ enum VST_BUFFER_SIZE {
* @endcode
*/
enum VST_VERSION {
VST_VERSION_1 = 0, // Anything before 2.0, used by official plug-ins.
VST_VERSION_1_0_0_0 = 1000, // 1.0, used by some third-party plug-ins.
VST_VERSION_1_1_0_0 = 1100, // 1.1, used by some third-party plug-ins.
VST_VERSION_2 = 2, // 2.0, used by official plug-ins.
VST_VERSION_2_0_0_0 = 2000, // 2.0, used by some third-party plug-ins.
VST_VERSION_2_1_0_0 = 2100, // 2.1
VST_VERSION_2_2_0_0 = 2200, // 2.2
VST_VERSION_2_3_0_0 = 2300, // 2.3
VST_VERSION_2_4_0_0 = 2400, // 2.4
/** Private SDK Version 1.0
*
* Many types likely won't quite match up with what we expect.
*/
VST_VERSION_1 = 0,
/** SDK Version 1.0. */
VST_VERSION_1_0_0_0 = 1000,
/** SDK Version 1.1. */
VST_VERSION_1_1_0_0 = 1100,
/** Private SDK Version 2.0
*
* Many types likely won't quite match up with what we expect.
*/
VST_VERSION_2 = 2,
/** SDK Version 2.0 */
VST_VERSION_2_0_0_0 = 2000,
/** SDK Version 2.1 */
VST_VERSION_2_1_0_0 = 2100,
/** SDK Version 2.2 */
VST_VERSION_2_2_0_0 = 2200,
/** SDK Version 2.3 */
VST_VERSION_2_3_0_0 = 2300,
/** SDK Version 2.4 */
VST_VERSION_2_4_0_0 = 2400,
// Pad to force 32-bit number.
_VST_VERSION_PAD = 0xFFFFFFFFul,
/* @private Pad to 32-bit. */
_VST_VERSION_PAD = (-1l)
};
/** Window/Editor Rectangle.
@@ -178,7 +193,7 @@ enum VST_VKEY {
VST_VKEY_03 = 3,
VST_VKEY_04 = 4,
VST_VKEY_RETURN = 4, // The big one left of the arrow keys.
VST_VKEY_RETURN = 4,
VST_VKEY_05 = 5,
VST_VKEY_PAUSE = 5,
@@ -323,13 +338,13 @@ enum VST_VKEY {
VST_VKEY_SCROLLLOCK = 53,
VST_VKEY_54 = 54,
VST_VKEY_SHIFT = 54, // Left or Right
VST_VKEY_SHIFT = 54,
VST_VKEY_55 = 55,
VST_VKEY_CONTROL = 55, // Left or Right
VST_VKEY_CONTROL = 55,
VST_VKEY_56 = 56,
VST_VKEY_ALT = 56, // Left or Right
VST_VKEY_ALT = 56,
VST_VKEY_57 = 57,
VST_VKEY_58 = 58,
@@ -343,7 +358,7 @@ enum VST_VKEY {
VST_VKEY_66 = 66,
VST_VKEY_67 = 67,
VST_VKEY_68 = 68,
VST_VKEY_69 = 69,
VST_VKEY_69 = 69
};
enum VST_VKEY_MODIFIER {
@@ -371,12 +386,12 @@ enum VST_VKEY_MODIFIER {
*/
VST_VKEY_MODIFIER_1ls3 = 1 << 3,
/** @sa VST_VKEY_MODIFIER_1ls3 */
VST_VKEY_MODIFIER_CONTROL = 1 << 3,
VST_VKEY_MODIFIER_CONTROL = 1 << 3
};
//------------------------------------------------------------------------------------------------------------------------
// VST Parameters
//------------------------------------------------------------------------------------------------------------------------
/*------------------------------------------------------------------------------------------------------------------------*/
/* VST Parameters */
/*------------------------------------------------------------------------------------------------------------------------*/
/** Flags for parameters.
* @sa vst_parameter_properties_t
@@ -438,7 +453,7 @@ enum VST_PARAMETER_FLAG {
/** @sa VST_PARAMETER_FLAG_1ls6 */
VST_PARAMETER_FLAG_RAMPING = 1 << 6,
_VST_PARAMETER_FLAG_PAD = 0xFFFFFFFFul,
_VST_PARAMETER_FLAG_PAD = (-1l)
};
/** Information about a parameter.
@@ -539,7 +554,8 @@ struct vst_parameter_properties_t {
*/
uint16_t num_parameters_in_category;
uint16_t _unknown_00; // Must be set to 0.
/** @private Must be zero anyway. */
uint16_t _unknown_00;
/** Human-readable name for the category this parameter is in.
*
@@ -548,38 +564,38 @@ struct vst_parameter_properties_t {
*/
char category_label[VST_BUFFER_SIZE_CATEGORY_LABEL];
char _reserved[16]; // Reserved for future expansions?
/** @private Reserved for future expansion? */
char _reserved[16];
};
//------------------------------------------------------------------------------------------------------------------------
// VST Input Microphones/Output Speakers
//------------------------------------------------------------------------------------------------------------------------
/*------------------------------------------------------------------------------------------------------------------------*/
/* VST Input Microphones/Output Speakers */
/*------------------------------------------------------------------------------------------------------------------------*/
/** Default speaker types.
*
* @todo Are there more?
*/
enum VST_SPEAKER_TYPE {
// Default Types
/** Mono */
VST_SPEAKER_TYPE_MONO = 0,
/** (Front) Left */
VST_SPEAKER_TYPE_LEFT = 1,
/** (Front) Right */
VST_SPEAKER_TYPE_RIGHT = 2,
/** (Front) Center */
VST_SPEAKER_TYPE_CENTER = 3,
/** LFE / Subwoofer */
VST_SPEAKER_TYPE_LFE = 4,
VST_SPEAKER_TYPE_LEFT_REAR = 5, // Rear/Surround Left
VST_SPEAKER_TYPE_RIGHT_REAR = 6, // Rear/Surround Right
// 7
// 8
// 9
VST_SPEAKER_TYPE_LEFT_SIDE = 10, // Side Left
VST_SPEAKER_TYPE_RIGHT_SIDE = 11, // Side Right
// 12
// 13
// 14
// 15
// ...
/** Rear/Surround Left */
VST_SPEAKER_TYPE_LEFT_REAR = 5,
/** Rear/Surround Right */
VST_SPEAKER_TYPE_RIGHT_REAR = 6,
/** Side Left */
VST_SPEAKER_TYPE_LEFT_SIDE = 10,
/** Side Right */
VST_SPEAKER_TYPE_RIGHT_SIDE = 11,
// User Types (seen rarely, but never exceeds -32)
VST_SPEAKER_TYPE_USER_32 = -32,
VST_SPEAKER_TYPE_USER_31,
VST_SPEAKER_TYPE_USER_30,
@@ -614,8 +630,8 @@ enum VST_SPEAKER_TYPE {
VST_SPEAKER_TYPE_USER_01,
// Pad to force 32-bit number.
_VST_SPEAKER_TYPE_PAD = 0xFFFFFFFFul,
/* @private Pad to 32-bit. */
_VST_SPEAKER_TYPE_PAD = (-1l)
};
/** Speaker properties.
@@ -642,7 +658,8 @@ struct vst_speaker_properties_t {
*/
float distance;
float _unknown_00; // Must be set to 0
/** @private Must be zero. */
float _unknown_00;
/** Human readable name for this speaker.
*
@@ -660,7 +677,8 @@ struct vst_speaker_properties_t {
*/
int32_t type;
uint8_t _reserved[28]; // Reserved for future expansions?
/** @private Reserved for future expansion? */
uint8_t _reserved[28];
};
/** Known default speaker arrangements.
@@ -708,8 +726,8 @@ enum VST_SPEAKER_ARRANGEMENT_TYPE {
*/
VST_SPEAKER_ARRANGEMENT_TYPE_7_1 = 0x17,
// Pad to force 32-bit number.
_VST_SPEAKER_ARRANGEMENT_TYPE_PAD = 0xFFFFFFFFul,
/* @private Pad to 32-bit. */
_VST_SPEAKER_ARRANGEMENT_TYPE_PAD = (-1l)
};
/** Speaker arrangement definition.
@@ -724,7 +742,7 @@ struct vst_speaker_arrangement_t {
*
* Appears to be limited to @ref VST_MAX_CHANNELS.
*/
int32_t channels; // Number of channels in this arrangement.
int32_t channels;
/** Array of @ref vst_speaker_properties_t with size @ref channels.
*
@@ -733,9 +751,9 @@ struct vst_speaker_arrangement_t {
struct vst_speaker_properties_t speakers[VST_MAX_CHANNELS];
};
//------------------------------------------------------------------------------------------------------------------------
// VST Input/Output Streams
//------------------------------------------------------------------------------------------------------------------------
/*------------------------------------------------------------------------------------------------------------------------*/
/* VST Input/Output Streams */
/*------------------------------------------------------------------------------------------------------------------------*/
enum VST_STREAM_FLAG {
/** Ignored?
@@ -754,7 +772,7 @@ enum VST_STREAM_FLAG {
* Can't be used with VST_STREAM_FLAG_STEREO.
*/
VST_STREAM_FLAG_1ls2 = 1 << 2,
VST_STREAM_FLAG_USE_TYPE = 1 << 2,
VST_STREAM_FLAG_USE_TYPE = 1 << 2
};
struct vst_stream_properties_t {
@@ -776,12 +794,13 @@ struct vst_stream_properties_t {
*/
char label[VST_BUFFER_SIZE_STREAM_LABEL];
uint8_t _reserved[48]; // 48 bytes of uninitialized data, always.
/** @private Reserved for future expansion? */
uint8_t _reserved[48];
};
//------------------------------------------------------------------------------------------------------------------------
// VST Events
//------------------------------------------------------------------------------------------------------------------------
/*------------------------------------------------------------------------------------------------------------------------*/
/* VST Events */
/*------------------------------------------------------------------------------------------------------------------------*/
/** Available event types.
*
@@ -911,8 +930,8 @@ union vst_event_midi_t {
*/
int8_t velocity;
/** @private */
char _pad[2]; // Padding
/** @private Padding */
char _pad_01[2];
} midi;
};
@@ -978,11 +997,12 @@ struct vst_events_t {
struct vst_event_t** events;
};
//------------------------------------------------------------------------------------------------------------------------
// VST Host related Things
//------------------------------------------------------------------------------------------------------------------------
/*------------------------------------------------------------------------------------------------------------------------*/
/* VST Host related Things */
/*------------------------------------------------------------------------------------------------------------------------*/
struct vst_effect_t; // Pre-define vst_effect_t so we can use it below.
/* Pre-define vst_effect_t so we can use it below. */
struct vst_effect_t;
/**
* @sa VST_HOST_OPCODE_ACTIVE_THREAD
@@ -1014,7 +1034,7 @@ enum VST_HOST_ACTIVE_THREAD {
/** @private */
VST_HOST_ACTIVE_THREAD_MAX,
/** @private */
_VST_HOST_ACTIVE_THREAD_PAD = 0xFFFFFFFFul,
_VST_HOST_ACTIVE_THREAD_PAD = (-1l)
};
/** Plug-in to Host Op-Codes
@@ -1030,7 +1050,7 @@ enum VST_HOST_OPCODE {
* @param p_float Parameter Value
* @return Expected to return... something.
*/
VST_HOST_OPCODE_00 = 0x00, // cb(vst, 0x00, ?, 0, 0);
VST_HOST_OPCODE_00 = 0x00,
/** @sa VST_HOST_OPCODE_00 */
VST_HOST_OPCODE_AUTOMATE = 0x00,
/** @sa VST_HOST_OPCODE_00 */
@@ -1050,7 +1070,7 @@ enum VST_HOST_OPCODE {
*
* @return The currently selected unique effect id in this container.
*/
VST_HOST_OPCODE_02 = 0x02, // bool cb(0, 0x02, 0, 0, 0);
VST_HOST_OPCODE_02 = 0x02,
/** @sa VST_HOST_OPCODE_02 */
VST_HOST_OPCODE_CURRENT_EFFECT_ID = 0x02,
@@ -1065,9 +1085,9 @@ enum VST_HOST_OPCODE {
/** @todo */
VST_HOST_OPCODE_04 = 0x04,
//--------------------------------------------------------------------------------
// VST 2.x starts here.
//--------------------------------------------------------------------------------
/*-------------------------------------------------------------------------------- */
/* VST 2.0 */
/*--------------------------------------------------------------------------------*/
/** @todo */
VST_HOST_OPCODE_05 = 0x05,
@@ -1183,9 +1203,31 @@ enum VST_HOST_OPCODE {
/** @sa VST_HOST_OPCODE_13 */
VST_HOST_OPCODE_OUTPUT_LATENCY = 0x13,
/** Get which effect is attached to the indexed input stream.
*
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @deprecated (VST 2.4+) Non-functional from VST 2.4 onwards and unimplemented in many earlier hosts.
* @param p_int1 Which input stream should be queried?
* @return Pointer to a valid @ref vst_effect_t structure or 0.
*/
VST_HOST_OPCODE_14 = 0x14,
/** @sa VST_HOST_OPCODE_14 */
VST_HOST_OPCODE_INPUT_GET_ATTACHED_EFFECT = 0x14,
/** @sa VST_HOST_OPCODE_14 */
VST_HOST_OPCODE_INPUT_STREAM_GET_ATTACHED_EFFECT = 0x14,
/** Get which effect is attached to the indexed output stream.
*
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @deprecated (VST 2.4+) Non-functional from VST 2.4 onwards and unimplemented in many earlier hosts.
* @param p_int1 Which output stream should be queried?
* @return Pointer to a valid @ref vst_effect_t structure or 0.
*/
VST_HOST_OPCODE_15 = 0x15,
/** @sa VST_HOST_OPCODE_15 */
VST_HOST_OPCODE_OUTPUT_GET_ATTACHED_EFFECT = 0x15,
/** @sa VST_HOST_OPCODE_15 */
VST_HOST_OPCODE_OUTPUT_STREAM_GET_ATTACHED_EFFECT = 0x15,
/** @todo */
VST_HOST_OPCODE_16 = 0x16,
@@ -1314,7 +1356,7 @@ enum VST_HOST_OPCODE {
/** Refresh everything related to the effect that called this.
* This includes things like parameters, programs, banks, windows, files, meters, streams, sample rate, block size,
* and a lot more. Anything that has to do with the effect should be refreshed when the effect calls this.
*
*
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_HOST_OPCODE_2A = 0x2A,
@@ -1323,9 +1365,9 @@ enum VST_HOST_OPCODE {
/** @sa VST_HOST_OPCODE_2A */
VST_HOST_OPCODE_REFRESH = 0x2A,
//--------------------------------------------------------------------------------
// VST 2.1
//--------------------------------------------------------------------------------
/*--------------------------------------------------------------------------------*/
/* VST 2.1 */
/*--------------------------------------------------------------------------------*/
/** Notify host that a parameter is being edited.
* "Locks" the parameter from being edited in compatible hosts.
@@ -1340,11 +1382,11 @@ enum VST_HOST_OPCODE {
VST_HOST_OPCODE_PARAM_LOCK = 0x2B,
/** Notify host that parameter is no longer being edited.
* "Unlocks" the parameter for further editing in compatible hosts. Remember to call the @ref VST_HOST_PARAM_UPDATE
* "Unlocks" the parameter for further editing in compatible hosts. Remember to call the @ref VST_HOST_OPCODE_PARAM_UPDATE
* op-code afterwards so that the host knows it needs to update its automation data.
*
* @note (VST 2.1+) Available from VST 2.1 onwards.
* @sa VST_HOST_PARAM_UPDATE
* @sa VST_HOST_OPCODE_PARAM_UPDATE
* @param p_int1 Parameter index.
*/
VST_HOST_OPCODE_2C = 0x2C,
@@ -1358,9 +1400,9 @@ enum VST_HOST_OPCODE {
*/
VST_HOST_OPCODE_2D = 0x2D,
//--------------------------------------------------------------------------------
// VST 2.2
//--------------------------------------------------------------------------------
/*--------------------------------------------------------------------------------*/
/* VST 2.2 */
/*--------------------------------------------------------------------------------*/
/** Crash the host depending on what p_ptr is pointing at.
* @todo
@@ -1385,9 +1427,9 @@ enum VST_HOST_OPCODE {
*/
VST_HOST_OPCODE_30 = 0x30,
//--------------------------------------------------------------------------------
// VST 2.3
//--------------------------------------------------------------------------------
/*--------------------------------------------------------------------------------*/
/* VST 2.3 */
/*--------------------------------------------------------------------------------*/
/** Retrieve the hosts input speaker arrangement.
* Seems to always reply with the data provided in @ref VST_EFFECT_OPCODE_GET_SPEAKER_ARRANGEMENT p_int2.
@@ -1410,9 +1452,10 @@ enum VST_HOST_OPCODE {
VST_HOST_OPCODE_MAX,
/** @private Force as 32-bit unsigned integer in compatible compilers. */
_VST_HOST_OPCODE_PAD = 0xFFFFFFFFul,
_VST_HOST_OPCODE_PAD = (-1l)
};
#if (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 202002L)
/** Plug-in to Host support checks
*
* Provided as `char* p_ptr` in the VST_EFFECT_OPCODE_SUPPORTS op code.
@@ -1460,6 +1503,12 @@ struct vst_host_supports_t {
*/
const char* sizeWindow;
/** Host can send events to plug-in.
*
* @sa vst_effect_supports_t.receiveVstEvents
* @sa VST_EFFECT_OPCODE_EVENT
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
const char* sendVstEvents;
/** Host can receive events from plug-in.
@@ -1525,6 +1574,7 @@ struct vst_host_supports_t {
.openFileSelector = "openFileSelector",
.closeFileSelector = "closeFileSelector",
};
#endif
/** Plug-in to Host callback
*
@@ -1623,7 +1673,14 @@ enum VST_EFFECT_CATEGORY {
/** @sa VST_EFFECT_CATEGORY_06 */
VST_EFFECT_CATEGORY_DELAY_OR_ECHO = 0x06,
/** External Processing.
* This VST effect is an interface to an external device and requires special handling.
*
* @todo What does this actually support? Is it even still supported?
*/
VST_EFFECT_CATEGORY_07 = 0x07,
/** @sa VST_EFFECT_CATEGORY_07 */
VST_EFFECT_CATEGORY_EXTERNAL = 0x07,
/** Restoration
* Examples: Noise Filtering, Upsamplers, ...
@@ -1741,7 +1798,7 @@ enum VST_EFFECT_CATEGORY {
VST_EFFECT_CATEGORY_MAX, // Not part of specification, marks maximum category.
/** @private */
_VST_EFFECT_CATEGORY_PAD = 0xFFFFFFFFul,
_VST_EFFECT_CATEGORY_PAD = (-1l)
};
/** Effect Flags
@@ -1828,7 +1885,7 @@ enum VST_EFFECT_FLAG {
*/
VST_EFFECT_FLAG_1ls12 = 1 << 12,
/** @sa VST_EFFECT_FLAG_1ls12 */
VST_EFFECT_FLAG_SUPPORTS_DOUBLE = 1 << 12,
VST_EFFECT_FLAG_SUPPORTS_DOUBLE = 1 << 12
};
/** Host to Plug-in Op-Codes
@@ -2710,14 +2767,17 @@ enum VST_EFFECT_OPCODE {
VST_EFFECT_OPCODE_MAX,
/** @private Force as 32-bit unsigned integer in compatible compilers. */
_VST_EFFECT_OPCODE_PAD = 0xFFFFFFFFul,
_VST_EFFECT_OPCODE_PAD = (-1l)
};
#if (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 202002L)
/** Host to Plug-in support checks
*
* Provided as `char* p_ptr` in the VST_EFFECT_OPCODE_SUPPORTS op code.
*
* Harvested via strings command and just checking what plug-ins actually responded to.
*
* @important These are only available with a C99 or a C++20 or newer compiler.
*/
struct vst_effect_supports_t {
/** Effect supports alternative bypass.
@@ -2823,6 +2883,7 @@ struct vst_effect_supports_t {
._8in4out = "8in4out",
._8in8out = "8in8out",
};
#endif
/** Control the VST through an opcode and up to four parameters.
*