8 Commits

Author SHA1 Message Date
Xaymar 87b3e2bcfc Hopefully fix documentation not updating on push 2025-08-06 05:19:28 +02:00
Xaymar 9dd8de817f Update README 2025-08-06 05:18:17 +02:00
Xaymar 41a24b0f07 Mac OS exclusivity isn't an important thing either 2025-08-06 04:21:22 +02:00
Xaymar 0049af4720 VST version changes aren't important enough to warrant red boxes 2025-08-06 04:17:56 +02:00
Xaymar 35125a732b Various fixes for documentation 2025-08-06 04:14:15 +02:00
Xaymar 21998dbbc0 Fix wrong reference to VST_HOST where we wanted VST_EFFECT 2025-08-06 04:07:08 +02:00
Xaymar fa02ffef09 Fix incorrect type definition in vst.hpp 2025-08-06 04:06:23 +02:00
Xaymar ce354e3824 Fix duplicate definition of VST_EFFECT_OPCODE_43 2025-08-06 04:05:31 +02:00
4 changed files with 119 additions and 97 deletions
+3 -1
View File
@@ -7,7 +7,9 @@ on:
- '!documentation'
paths:
- '.github/workflows/documentation.yml'
- 'LICENSE'
- 'vst.h'
- 'vst.hpp'
- 'Doxyfile'
jobs:
docs:
+15 -7
View File
@@ -1,9 +1,14 @@
# About the Project
This is a completely "clean room" untainted reverse engineered "SDK" for the VST 2.x interface. It was reverse engineered from binaries where no license restricting the reverse engineering was attached, or where the legal system explicitly allowed reverse engineering for the purpose of interoperability.
## As seen in
[DISTRHO Plugin Framework](https://github.com/DISTRHO/DPF), [StompTuner](https://github.com/brummer10/StompTuner), [DF Zita Rev1](https://github.com/SpotlightKid/dfzitarev1), [TonPlugIns](https://github.com/Vhonowslend/TonPlugIns), [ToneTwistPlugs](https://github.com/brummer10/ToneTwistPlugs), [DF JPverb](https://github.com/SpotlightKid/dfjpverb), [CChorus](https://github.com/SpotlightKid/cchorus), [Dynation](https://github.com/vertver/Dynation) and likely more.
*(Want to be listed here? Open an Issue or Pull Request!)*
# Frequently Asked Questions
## Is this legal? Can I use this in my own product?
**Disclaimer:** I am not a lawyer. The information presented below is purely from available copyright laws that I could find about this topic. You should always consult with a lawyer first before including this in your product.
**Disclaimer:** I am not a lawyer. Consult a real lawyer before including this in a paid product. The information presented below is purely from available copyright laws that I could find about this topic. You should always consult with a lawyer first before including this in your product.
As this only enables interoperability with existing VST 2.x programs and addons, it is considered to be reverse engineering in the name of interoperability. In most of the developed world, this is considered completely legal and is fine to be used by anyone, as long as it is not the only function of the product.
@@ -12,10 +17,13 @@ Note that this does not grant any patent licenses, nor does it grant you any rig
## Why recreate an SDK for something officially abandoned by the creators?
There is a ton of software that is only capable of loading VST2.x audio effects, and Steinberg has made no effort to create a VST3-to-VST2-adapter for that software. Notable software includes Audacity and OBS Studio, which both likely felt restricted by the license additions Steinberg added to the GPL license.
## How did you reverse engineer this?
The reverse engineering was done with various tools (mostly disassemblers to x86 assembly code), hooking into system APIs, attempting to mimic functionality through observation and testing, and other methods. Primarily Visual Studio Code was used to write the header files, and Visual Studio 2019 Express was used to create fake VST plugins/hosts to figure out actual behavior.
## What was used to create this clean room project?
**Disclaimer:** I am not a lawyer. Consult a real lawyer before including this in a paid product.
### Which binaries were disassembled?
* A fake VST2 host (using this header) was created to verify against existing plugins.
* A fake VST2 plugin (using this header) was created to verify against existing hosts.
* OBS Studio and Audacity were used to verify compatability between closed source and open source VST hosts.
The initial version was created through the best available legal clean room reverse engineering method available. The whole process went through several rounds of the "telephone" game involving external developers and lawyers before the final document arrived on my desk. This initial version was barely functional as a lot of context ended up missing resulting in quite basic functionality.
This version went through several development cycles before settling on what I've now labelled as `v0.1.1`. It was stable and worked for the most part but lacked a lot of features. I've used it as a base for my own plug-ins and had quite a bit of success with it but the incompleteness of the recreated SDK was noticable. Eventually I recreated VST 3.x SDK compatible headers using the VST 3.x SDK which caused the license to upgrade from BSD 2-clause to BSD 3-clause - now known as `v0.2.0`.
As of late July/early August 2025, I had a found a bit of interest in this SDK again and didn't want to leave it in the incomplete state it was. I've recreated the fake plug-in and host that I used before and decided to automate behavior scanning: What do hosts or plug-ins expect us to do? What do they call? Etc. This was then let loose on several thousand available plug-ins and has resulted in the `v0.3.0` update to the SDK. As far as I can tell the SDK now has almost all functionality that VST 2.x plug-ins and hosts could want.
There's still a bit of work to do but it won't be easy as almost all of it involves structured data for which I can only guess. Progress is being made, but it's so much slower compared to when I had pages of telephone game documentation to work off of. Still better than nothing!
+99 -87
View File
@@ -600,10 +600,12 @@ enum VST_HOST_OPCODE {
VST_HOST_OPCODE_0D = 0x0D,
/** Notify the host that numInputs/numOutputs/delay/numParams has changed.
* Only supported if the host replies @ref VST_STATUS_TRUE to @ref VST_HOST_OPCODE_SUPPORTS query for @ref vst_host_supports.acceptIOChanges.
* Only supported if the host replies @ref VST_STATUS_TRUE to @ref VST_HOST_OPCODE_SUPPORTS query for
* @ref vst_host_supports_t.acceptIOChanges.
*
* @note In VST 2.3 and earlier calling this outside of @ref VST_EFFECT_OPCODE_IDLE may result in a crash.
* @note In VST 2.3 and later this may only be called while between @ref VST_EFFECT_OPCODE_PROCESS_END and @ref VST_EFFECT_OPCODE_BEGIN.
* @note In VST 2.3 and later this may only be called while between @ref VST_EFFECT_OPCODE_PROCESS_END and
* @ref VST_EFFECT_OPCODE_PROCESS_BEGIN.
*
* @return @ref VST_STATUS_TRUE if supported and handled otherwise @ref VST_STATUS_FALSE.
*/
@@ -649,7 +651,7 @@ enum VST_HOST_OPCODE {
/** Retrieve the vendor name into the ptr buffer.
*
* @param p_ptr `char[VST_BUFFER_SIZE_VENDOR]` Zero terminated string.
* @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_VENDOR_NAME.
*/
VST_HOST_OPCODE_21 = 0x21,
/** @sa VST_HOST_OPCODE_21 */
@@ -657,7 +659,7 @@ enum VST_HOST_OPCODE {
/** Retrieve the product name into the ptr buffer.
*
* @param p_ptr `char[VST_BUFFER_SIZE_PRODUCT]` Zero terminated string.
* @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_PRODUCT_NAME.
*/
VST_HOST_OPCODE_22 = 0x22,
/** @sa VST_HOST_OPCODE_22 */
@@ -683,7 +685,7 @@ enum VST_HOST_OPCODE {
/** Check if the host supports a certain feature.
*
* @param p_ptr `char[...]` Zero terminated string for which feature we want to support.
* @return VST_STATUS_TRUE if the feature is supported otherwise VST_STATUS_FALSE.
* @return @ref VST_STATUS_TRUE if the feature is supported otherwise @ref VST_STATUS_FALSE.
*/
VST_HOST_OPCODE_26 = 0x26,
/** @sa VST_HOST_OPCODE_26 */
@@ -748,12 +750,12 @@ struct vst_host_supports_t {
const char* acceptIOChanges;
/** Is the host using process begin/end instead of idle?
* The host may opt to emit @ref VST_HOST_OPCODE_IDLE or @ref VST_HOST_OPCODE_PROCESS_BEGIN and
* @ref VST_HOST_OPCODE_PROCESS_END when running in VST 2.3 compatibility mode.
* The host may opt to emit @ref VST_EFFECT_OPCODE_IDLE or @ref VST_EFFECT_OPCODE_PROCESS_BEGIN and
* @ref VST_EFFECT_OPCODE_PROCESS_END when running in VST 2.3 compatibility mode.
*
* @sa VST_HOST_OPCODE_PROCESS_BEGIN
* @sa VST_HOST_OPCODE_PROCESS_END
* @sa VST_HOST_OPCODE_IDLE
* @sa VST_EFFECT_OPCODE_PROCESS_BEGIN
* @sa VST_EFFECT_OPCODE_PROCESS_END
* @sa VST_EFFECT_OPCODE_IDLE
* @deprecated (VST 2.4) This behavior is the default in VST 2.4 and later.
* @return @ref VST_STATUS_TRUE if it supports it.
*/
@@ -1076,7 +1078,7 @@ enum VST_EFFECT_FLAG {
/** Effect is an Instrument/Generator
*
* This must be set in addition to @ref VST_EFFECT_CATEGORY_INSTRUMENT otherwise instruments don't work right.
* @important (VST 2.x) Flag is new to VST 2.x and later.
* @note (VST 2.x) Flag is new to VST 2.x and later.
*/
VST_EFFECT_FLAG_1ls8 = 1 << 8,
/** @sa VST_EFFECT_FLAG_1ls8 */
@@ -1086,7 +1088,7 @@ enum VST_EFFECT_FLAG {
*
* Not to be confused with choosing to tell the host there is no tail.
* @sa VST_EFFECT_OPCODE_GET_TAIL_SAMPLES
* @important (VST 2.x) Flag is new to VST 2.x and later.
* @note (VST 2.x) Flag is new to VST 2.x and later.
*/
VST_EFFECT_FLAG_1ls9 = 1 << 9,
/** @sa VST_EFFECT_FLAG_1ls9 */
@@ -1098,7 +1100,7 @@ enum VST_EFFECT_FLAG {
/** Effect supports process_double.
* The host can freely choose between process_float and process_double as required.
*
* @important (VST 2.4) Available in VST 2.4 and later only.
* @note (VST 2.4) Available in VST 2.4 and later only.
* @sa vst_effect_t.process_double
* @sa vst_effect_process_double_t
*/
@@ -1297,7 +1299,9 @@ enum VST_EFFECT_OPCODE {
* Ocasionally called simultaneously as WM_DRAW on windows.
*
* @note Present in some VST 2.1 or earlier plugins.
* @important Appears to be Mac OS exclusive.
*
* @note Appears to be Mac OS exclusive.
*
* @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
*/
VST_EFFECT_OPCODE_10 = 0x10,
@@ -1311,7 +1315,9 @@ enum VST_EFFECT_OPCODE {
* Called at the same time mouse events happen.
*
* @note Present in some VST 2.1 or earlier plugins.
* @important Appears to be Mac OS exclusive.
*
* @note Appears to be Mac OS exclusive.
*
* @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
*/
VST_EFFECT_OPCODE_11 = 0x11,
@@ -1325,7 +1331,9 @@ enum VST_EFFECT_OPCODE {
* Called at the same time keyboard events happen.
*
* @note Present in some VST 2.1 or earlier plugins.
* @important Appears to be Mac OS exclusive.
*
* @note Appears to be Mac OS exclusive.
*
* @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
*/
VST_EFFECT_OPCODE_12 = 0x12,
@@ -1347,7 +1355,7 @@ enum VST_EFFECT_OPCODE {
* Sometimes called when the editor window goes back into focus.
*
* @note Present in some VST 2.1 or earlier plugins.
* @important Appears to be Mac OS exclusive.
* @note Appears to be Mac OS exclusive.
* @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
*/
VST_EFFECT_OPCODE_14 = 0x14,
@@ -1357,7 +1365,7 @@ enum VST_EFFECT_OPCODE {
* Sometimes called when the editor window goes out of focus.
*
* @note Present in some VST 2.1 or earlier plugins.
* @important Appears to be Mac OS exclusive.
* @note Appears to be Mac OS exclusive.
* @deprecated (VST 2.4+) Likely deprecated in VST 2.4 and later.
*/
VST_EFFECT_OPCODE_15 = 0x15,
@@ -1407,13 +1415,13 @@ enum VST_EFFECT_OPCODE {
/**
*
* Appears to be related to midi and audio events.
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_19 = 0x19,
/** Can the parameter be automated?
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_int1 Index of the parameter.
* @return 1 if the parameter can be automated, otherwise 0.
*/
@@ -1427,7 +1435,7 @@ enum VST_EFFECT_OPCODE {
/** Set Parameter value from string representation.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_int1 Index of the parameter.
* @param p_ptr `const char*` Zero terminated string representation of the value to set.
* @return 1 if it worked, otherwise 0.
@@ -1441,13 +1449,13 @@ enum VST_EFFECT_OPCODE {
/**
*
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_1C = 0x1C,
/**
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @sa VST_EFFECT_OPCODE_05
*/
VST_EFFECT_OPCODE_1D = 0x1D,
@@ -1455,27 +1463,27 @@ enum VST_EFFECT_OPCODE {
/**
*
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_1E = 0x1E,
/** Input connected.
*
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_1F = 0x1F,
/** Input disconnected.
*
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_20 = 0x20,
/** Retrieve properties for the given input index.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_int1 Index of the input to get the properties for.
* @param p_ptr Pointer to @ref vst_stream_properties_t for the selected input provided by the host.
* @return @ref VST_STATUS_TRUE if p_ptr is updated, @ref VST_STATUS_FALSE otherwise.
@@ -1486,7 +1494,7 @@ enum VST_EFFECT_OPCODE {
/** Retrieve properties for the given output index.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_int1 Index of the output to get the properties for.
* @param p_ptr Pointer to @ref vst_stream_properties_t for the selected output provided by the host.
* @return @ref VST_STATUS_TRUE if p_ptr is updated, @ref VST_STATUS_FALSE otherwise.
@@ -1497,8 +1505,8 @@ enum VST_EFFECT_OPCODE {
/** Retrieve category of this effect.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @return The category that this effect is in, see @ref VST_CATEGORY.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @return The category that this effect is in, see @ref VST_EFFECT_CATEGORY.
*/
VST_EFFECT_OPCODE_23 = 0x23,
/** @sa VST_EFFECT_OPCODE_23 */
@@ -1509,48 +1517,48 @@ enum VST_EFFECT_OPCODE {
/**
*
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_24 = 0x24,
/**
*
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_25 = 0x25,
/**
*
* Seen in plug-ins with VST_CATEGORY_OFFLINE.
* @important (VST 2.0+) Available from VST 2.0 onwards.
* Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_26 = 0x26,
/**
*
* Seen in plug-ins with VST_CATEGORY_OFFLINE.
* @important (VST 2.0+) Available from VST 2.0 onwards.
* Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_27 = 0x27,
/**
*
* Seen in plug-ins with VST_CATEGORY_OFFLINE.
* @important (VST 2.0+) Available from VST 2.0 onwards.
* Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_28 = 0x28,
/**
*
* Seen in plug-ins with VST_CATEGORY_OFFLINE.
* @important (VST 2.0+) Available from VST 2.0 onwards.
* Seen in plug-ins with @ref VST_EFFECT_CATEGORY_OFFLINE.
* @note (VST 2.0+) Available from VST 2.0 onwards.
*/
VST_EFFECT_OPCODE_29 = 0x29,
/** Host wants to change the speaker arrangement.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_int2 Pointer to a @ref vst_speaker_arrangement_t for the input.
* @param p_ptr Pointer to a @ref vst_speaker_arrangement_t for the output.
* @return @ref VST_STATUS_TRUE if we accept the new arrangement, @ref VST_STATUS_FALSE if we don't in which case
@@ -1572,9 +1580,9 @@ enum VST_EFFECT_OPCODE {
/** Enable/Disable bypassing the effect.
*
* See @ref VST_EFFECT_OPCODE_SUPPORTS with @ref vst_effect_supports.bypass for more information.
* See @ref VST_EFFECT_OPCODE_SUPPORTS with @ref vst_effect_supports_t.bypass for more information.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_int2 Zero if bypassing the effect is disabled, otherwise 1.
*/
VST_EFFECT_OPCODE_2C = 0x2C,
@@ -1583,7 +1591,7 @@ enum VST_EFFECT_OPCODE {
/** Retrieve the effect name into the ptr buffer.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @bug Various hosts only provide a buffer that is 32 bytes long.
* @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_EFFECT_NAME.
* @return Always 0, even on failure.
@@ -1599,10 +1607,10 @@ enum VST_EFFECT_OPCODE {
/** Translate an error code to a string.
*
* @bug Some hosts provide unexpected data in p_ptr.
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @deprecated (VST 2.4+) Fairly sure this is deprecated in VST 2.4 and later.
* @param p_ptr A zero terminated char buffer with undefined size.
* @return VST_STATUS_TRUE if we could translate the error, VST_STATUS_FALSE if not.
* @return @ref VST_STATUS_TRUE if we could translate the error, @ref VST_STATUS_FALSE if not.
*/
VST_EFFECT_OPCODE_2E = 0x2E,
/** @sa VST_EFFECT_OPCODE_2E */
@@ -1610,8 +1618,8 @@ enum VST_EFFECT_OPCODE {
/** Retrieve the vendor name into the ptr buffer.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @param p_ptr A zero terminated char buffer of @ref VST_BUFFER_SIZE_VENDOR size.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_VENDOR_NAME.
*/
VST_EFFECT_OPCODE_2F = 0x2F,
/** @sa VST_EFFECT_OPCODE_2F */
@@ -1621,8 +1629,8 @@ enum VST_EFFECT_OPCODE {
/** Retrieve the product name into the ptr buffer.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @param p_ptr A zero terminated char buffer of @ref VST_BUFFER_SIZE_PRODUCT size.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_ptr A zero terminated char buffer of size @ref VST_BUFFER_SIZE_PRODUCT_NAME.
*/
VST_EFFECT_OPCODE_30 = 0x30,
/** @sa VST_EFFECT_OPCODE_30 */
@@ -1632,7 +1640,7 @@ enum VST_EFFECT_OPCODE {
/** Retrieve the vendor version in return value.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @return Version.
*/
VST_EFFECT_OPCODE_31 = 0x31,
@@ -1643,7 +1651,7 @@ enum VST_EFFECT_OPCODE {
/** User-defined Op-Code for VST extensions.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* All parameters are undefined by the standard and left up to the host/plug-in. Use @ref VST_EFFECT_OPCODE_SUPPORTS
* and @ref VST_EFFECT_OPCODE_VENDOR_NAME + @ref VST_EFFECT_OPCODE_VENDOR_VERSION to check if the plug-in is
* compatible with your expected format.
@@ -1654,7 +1662,7 @@ enum VST_EFFECT_OPCODE {
/** Test for support of a specific named feature.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_ptr A zero terminated char buffer of undefined size containing the feature name.
* @return @ref VST_STATUS_YES if the feature is supported, @ref VST_STATUS_NO if the feature is not supported,
* @ref VST_STATUS_UNKNOWN in all other cases.
@@ -1665,7 +1673,7 @@ enum VST_EFFECT_OPCODE {
/** Number of samples that are at the tail at the end of playback.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @return @ref VST_STATUS_UNKNOWN for automatic tail size, @ref VST_STATUS_TRUE for no tail, any other number above
* 1 for the number of samples the tail has.
*/
@@ -1677,7 +1685,7 @@ enum VST_EFFECT_OPCODE {
/** Notify effect that it is idle?
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @deprecated (VST 2.4+) As of VST 2.4 the default behavior is @ref VST_EFFECT_OPCODE_PROCESS_BEGIN and
* @ref VST_EFFECT_OPCODE_PROCESS_END which allows cleaner control flows.
* @sa vst_host_supports.startStopProcess
@@ -1689,7 +1697,7 @@ enum VST_EFFECT_OPCODE {
/**
*
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @deprecated (VST 2.4) Invalid in all VST 2.4 and later hosts.
*/
VST_EFFECT_OPCODE_36 = 0x36,
@@ -1697,16 +1705,16 @@ enum VST_EFFECT_OPCODE {
/**
*
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @deprecated (VST 2.4) Invalid in all VST 2.4 and later hosts.
*/
VST_EFFECT_OPCODE_37 = 0x37,
/** Parameter Properties
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @param p_int1 Parameter index to get properties for.
* @param p_ptr Pointer to @ref vst_parameter_properties for the given parameter.
* @param p_ptr Pointer to @ref vst_parameter_properties_t for the given parameter.
* @return @ref VST_STATUS_YES if supported, otherwise @ref VST_STATUS_NO.
*/
VST_EFFECT_OPCODE_38 = 0x38,
@@ -1717,14 +1725,14 @@ enum VST_EFFECT_OPCODE {
/**
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @deprecated (VST 2.4) Invalid in all VST 2.4 and later hosts.
*/
VST_EFFECT_OPCODE_39 = 0x39,
/** Retrieve the VST Version supported.
*
* @important (VST 2.0+) Available from VST 2.0 onwards.
* @note (VST 2.0+) Available from VST 2.0 onwards.
* @sa VST_VERSION
* @return One of the valid enums in @ref VST_VERSION
*/
@@ -1738,7 +1746,7 @@ enum VST_EFFECT_OPCODE {
/** Editor Virtual Key Down Input
*
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
* @param p_int1 ASCII character that represents the virtual key code.
* @param p_int2 Virtual Key Code
* @param p_float Modifiers being held down (bitfield)
@@ -1750,7 +1758,7 @@ enum VST_EFFECT_OPCODE {
/** Editor Virtual Key Up Event
*
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
* @param p_int1 ASCII character that represents the virtual key code.
* @param p_int2 Virtual Key Code
* @param p_float Modifiers being held down (bitfield)
@@ -1762,7 +1770,7 @@ enum VST_EFFECT_OPCODE {
/**
*
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
* @param p_int2 A value between 0 and 2.
*/
VST_EFFECT_OPCODE_3D = 0x3D,
@@ -1770,42 +1778,42 @@ enum VST_EFFECT_OPCODE {
/**
*
* Midi related
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
*/
VST_EFFECT_OPCODE_3E = 0x3E,
/**
*
* Midi related
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
*/
VST_EFFECT_OPCODE_3F = 0x3F,
/**
*
* Midi related
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
*/
VST_EFFECT_OPCODE_40 = 0x40,
/**
*
* Midi related
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
*/
VST_EFFECT_OPCODE_41 = 0x41,
/**
*
* Midi related
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
*/
VST_EFFECT_OPCODE_42 = 0x42,
/** Host is starting to set up a program.
* Emitted prior to the host loading a program.
*
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
* @return @ref VST_STATUS_TRUE if we understood the notification, or @ref VST_STATUS_FALSE if not.
*/
VST_EFFECT_OPCODE_43 = 0x43,
@@ -1815,10 +1823,10 @@ enum VST_EFFECT_OPCODE {
/** Host is done setting up a program.
* Emitted after the host finished loading a program.
*
* @important (VST 2.1+) Available from VST 2.1 onwards.
* @note (VST 2.1+) Available from VST 2.1 onwards.
* @return @ref VST_STATUS_TRUE if we understood the notification, or @ref VST_STATUS_FALSE if not.
*/
VST_EFFECT_OPCODE_43 = 0x44,
VST_EFFECT_OPCODE_44 = 0x44,
/** @sa VST_EFFECT_OPCODE_44 */
VST_EFFECT_OPCODE_PROGRAM_SET_END = 0x44,
@@ -1828,7 +1836,7 @@ enum VST_EFFECT_OPCODE {
/** Host wants to know the current speaker arrangement.
*
* @important (VST 2.3+) Available from VST 2.3 onwards.
* @note (VST 2.3+) Available from VST 2.3 onwards.
* @param p_int2 Pointer to @ref vst_speaker_arrangement_t for the input.
* @param p_ptr Pointer to @ref vst_speaker_arrangement_t for the output.
* @return @ref VST_STATUS_TRUE if we were successful, otherwise @ref VST_STATUS_FALSE.
@@ -1842,7 +1850,7 @@ enum VST_EFFECT_OPCODE {
*
* Used in combination with @ref VST_EFFECT_CATEGORY_CONTAINER.
*
* @important (VST 2.3+) Available from VST 2.3 onwards.
* @note (VST 2.3+) Available from VST 2.3 onwards.
* @param p_ptr Pointer to a char buffer of size @ref VST_BUFFER_SIZE_EFFECT_NAME to store the name of the next effect.
* @return Next effects unique_id
*/
@@ -1853,7 +1861,7 @@ enum VST_EFFECT_OPCODE {
/** Begin processing of audio.
*
* Host is requesting that we prepare for a new section of audio separate from the previous section.
* @important (VST 2.3+) Available from VST 2.3 onwards.
* @note (VST 2.3+) Available from VST 2.3 onwards.
*/
VST_EFFECT_OPCODE_47 = 0x47,
/** @sa VST_EFFECT_OPCODE_47 */
@@ -1862,7 +1870,7 @@ enum VST_EFFECT_OPCODE {
/** End processing of audio.
*
* Host is requesting that we stop processing audio and go into idle instead.
* @important (VST 2.3+) Available from VST 2.3 onwards.
* @note (VST 2.3+) Available from VST 2.3 onwards.
*/
VST_EFFECT_OPCODE_48 = 0x48,
/** @sa VST_EFFECT_OPCODE_48 */
@@ -1871,13 +1879,13 @@ enum VST_EFFECT_OPCODE {
/**
*
*
* @important (VST 2.3+) Available from VST 2.3 onwards.
* @note (VST 2.3+) Available from VST 2.3 onwards.
*/
VST_EFFECT_OPCODE_49 = 0x49,
/**
*
* @important (VST 2.3+) Available from VST 2.3 onwards.
* @note (VST 2.3+) Available from VST 2.3 onwards.
* @sa VST_EFFECT_CATEGORY_SPATIAL
* @param p_int2 Unknown meaning.
* @param p_float Unknown meaning, usually 1.0
@@ -1887,7 +1895,7 @@ enum VST_EFFECT_OPCODE {
/** Host wants to know if we can load the provided bank data.
* Should be emitted prior to @ref VST_EFFECT_OPCODE_SET_CHUNK_DATA by the host.
*
* @important (VST 2.3+) Available from VST 2.3 onwards.
* @note (VST 2.3+) Available from VST 2.3 onwards.
* @param p_ptr Unknown structured data.
* @return @ref VST_STATUS_NO if we can't load the data, @ref VST_STATUS_YES if we can load the data,
* @ref VST_STATUS_UNKNOWN if this isn't supported.
@@ -1899,7 +1907,7 @@ enum VST_EFFECT_OPCODE {
/** Host wants to know if we can load the provided program data.
* Should be emitted prior to @ref VST_EFFECT_OPCODE_PROGRAM_SET_BEGIN by the host.
*
* @important (VST 2.3+) Available from VST 2.3 onwards.
* @note (VST 2.3+) Available from VST 2.3 onwards.
* @param p_ptr Unknown structured data.
* @return @ref VST_STATUS_NO if we can't load the data, @ref VST_STATUS_YES if we can load the data,
* @ref VST_STATUS_UNKNOWN if this isn't supported.
@@ -1915,21 +1923,21 @@ enum VST_EFFECT_OPCODE {
/**
*
*
* @important (VST 2.4+) Available from VST 2.4 onwards.
* @note (VST 2.4+) Available from VST 2.4 onwards.
*/
VST_EFFECT_OPCODE_4D = 0x4D,
/**
*
*
* @important (VST 2.4+) Available from VST 2.4 onwards.
* @note (VST 2.4+) Available from VST 2.4 onwards.
*/
VST_EFFECT_OPCODE_4E = 0x4E,
/**
*
*
* @important (VST 2.4+) Available from VST 2.4 onwards.
* @note (VST 2.4+) Available from VST 2.4 onwards.
*/
VST_EFFECT_OPCODE_4F = 0x4F,
@@ -2042,11 +2050,11 @@ typedef void (VST_FUNCTION_INTERFACE* vst_effect_process_t) (struct vst_effect_t
*/
typedef 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.
/** Retrieve the current value of the parameter at the given index, or do nothing if out of bounds.
*
* @param self Pointer to the effect itself.
* @param index Parameter index.
* @param value New value for the parameter.
* @return Current value of the parameter.
*/
typedef float(VST_FUNCTION_INTERFACE* vst_effect_get_parameter_t)(struct vst_effect_t* self, uint32_t index);
@@ -2054,7 +2062,7 @@ typedef float(VST_FUNCTION_INTERFACE* vst_effect_get_parameter_t)(struct vst_eff
*
* Process input and overwrite the output in place. Host provides output buffers.
*
* @note Not thread-safe on MacOS for some reason or another.
* @important Not thread-safe on MacOS for some reason or another.
*
* @param self Pointer to the effect itself.
* @param inputs Pointer to an array of 'const float[samples]' with size numInputs.
@@ -2067,7 +2075,7 @@ typedef void(VST_FUNCTION_INTERFACE* vst_effect_process_float_t)(struct vst_effe
*
* Process input and overwrite the output in place. Host provides output buffers.
*
* @note Not present and not called prior to VST 2.4.
* @note (VST 2.4+) Available from VST 2.4 and later.
*
* @param self Pointer to the effect itself.
* @param inputs Pointer to an array of 'const double[samples]' with size numInputs.
@@ -2095,6 +2103,8 @@ struct vst_effect_t {
/** Process Function
* @sa vst_effect_process_t
* @deprecated (VST 2.4+) Deprecated and practically unsupported in all VST 2.4 compatible hosts and may treat it
* as just another @ref vst_effect_t.process_float.
*/
vst_effect_process_t process;
@@ -2217,6 +2227,7 @@ struct vst_effect_t {
/** Process function for in-place single (32-bit float) processiong.
* @sa vst_effect_process_single_t
* @note (VST 2.0+) Available from VST 2.0 and later.
*/
vst_effect_process_float_t process_float;
@@ -2226,6 +2237,7 @@ struct vst_effect_t {
/** Process function for in-place double (64-bit float) processiong.
* @sa vst_effect_process_double_t
* @note (VST 2.4+) Available from VST 2.4 and later.
*/
vst_effect_process_double_t process_double;
+2 -2
View File
@@ -31,8 +31,8 @@
// Variable size variant of vst_speaker_arrangement.
template<size_t T>
struct vst_speaker_arrangement_dynamic_t {
VST_ARRANGEMENT_TYPE type; // See VST_SPEAKER_ARRANGEMENT_TYPE
int32_t channels; // Number of channels in speakers.
VST_SPEAKER_ARRANGEMENT_TYPE type; // See VST_SPEAKER_ARRANGEMENT_TYPE
int32_t channels; // Number of channels in speakers.
vst_speaker_properties_t speakers[T]; // Array of speaker properties, actual size defined by channels.
};