commit 621843c94980be79c63e7c70aa9eb3010326a5e2
parent 61cb260a1e3a8ba92a60b69e07a59e95f6200cc5
Author: Michael Fabian 'Xaymar' Dirks <info@xaymar.com>
Date: Sun, 24 Jul 2022 23:28:38 +0200
Add discovered extra parameter information
Appears to be VST 2.0+ exclusive, not used in VST 1.x hosts.
Diffstat:
M | vst.h | | | 85 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- |
1 file changed, 77 insertions(+), 8 deletions(-)
diff --git a/vst.h b/vst.h
@@ -22,10 +22,23 @@
#define VST_ALIGNMENT 8
#define VST_MAGICNUMBER 'VstP'
-#define VST_VENDOR_BUFFER_SIZE 64 // Vendor
-#define VST_PRODUCT_BUFFER_SIZE 64 // Product
-#define VST_EFFECT_BUFFER_SIZE 32 // Effect
-#define VST_NAME_BUFFER_SIZE 64 // Names
+// Common VST buffer lengths:
+// 8: OpCodes(GetLabel, GetName, GetValue)
+#define VST_BUFFER_8 8
+// 16:
+#define VST_BUFFER_16 16
+// 24: OpCodes?
+#define VST_BUFFER_24 24
+// 32: OpCodes(EffectName)
+#define VST_BUFFER_32 32
+#define VST_EFFECT_BUFFER_SIZE 32
+// 64: OpCodes(ProductName, VendorName)
+#define VST_BUFFER_64 64
+#define VST_VENDOR_BUFFER_SIZE VST_BUFFER_64
+#define VST_PRODUCT_BUFFER_SIZE VST_BUFFER_64
+#define VST_NAME_BUFFER_SIZE VST_BUFFER_64
+// 100:
+#define VST_BUFFER_100 100
#define VST_MAX_CHANNELS 32 // Couldn't find any audio editing software which would attempt to add more channels.
@@ -474,11 +487,13 @@ enum VST_EFFECT_OPCODE {
*/
VST_EFFECT_OPCODE_38 = 0x38,
- /*
- *
+ /* Parameter Properties
*
+ * @param p_ptr vst_parameter_properties*
+ * @return 1 if supported, otherwise 0.
*/
- VST_EFFECT_OPCODE_39 = 0x39,
+ VST_EFFECT_OPCODE_39 = 0x39,
+ VST_EFFECT_OPCODE_GET_PARAMETER_PROPERTIES = VST_EFFECT_OPCODE_39,
/* Retrieve the VST Version supported.
*
@@ -743,6 +758,35 @@ enum VST_SPEAKER_TYPE {
_VST_SPEAKER_TYPE_PAD = 0xFFFFFFFFul,
};
+enum VST_PARAMETER_FLAGS {
+ /**
+ * Parameter is an on/off switch.
+ */
+ VST_PARAMETER_FLAGS_SWITCH = 1,
+ /**
+ * Limits defined by integers.
+ */
+ VST_PARAMETER_FLAGS_INTEGER_LIMITS = 1 << 1,
+ /**
+ * Uses float steps.
+ */
+ VST_PARAMETER_FLAGS_STEP_FLOAT = 1 << 2,
+ /**
+ * Uses integer steps.
+ */
+ VST_PARAMETER_FLAGS_STEP_INT = 1 << 3,
+ /**
+ * Respect index variable for display ordering.
+ */
+ VST_PARAMETER_FLAGS_INDEX = 1 << 4,
+ /**
+ * Respect category value and names.
+ */
+ VST_PARAMETER_FLAGS_CATEGORY = 1 << 5,
+ VST_PARAMETER_FLAGS_UNKNOWN6 = 1 << 6,
+ _VST_PARAMETER_FLAGS_PAD = 0xFFFFFFFFul,
+};
+
/*******************************************************************************
|* Structures
|*/
@@ -878,12 +922,37 @@ struct vst_effect {
uint8_t _unknown[56]; // 56-bytes of something. Could also just be 52-bytes.
};
+struct vst_parameter_properties {
+ float step_f32;
+ float step_small_f32;
+ float step_large_f32;
+
+ char name[VST_BUFFER_64];
+
+ uint32_t flags;
+ int32_t min_value_i32;
+ int32_t max_value_i32;
+ int32_t step_i32;
+
+ char label[VST_BUFFER_8];
+
+ uint16_t index;
+
+ uint16_t category;
+ uint16_t num_parameters_in_category;
+ uint16_t _unknown_00;
+
+ char category_label[VST_BUFFER_24];
+
+ char _unknown_01[VST_BUFFER_16];
+};
+
struct vst_speaker_properties {
float _unknown_00; // 10.0 if LFE, otherwise random? Never exceeds -PI to PI range.
float _unknown_04; // 10.0 if LFE, otherwise random? Never exceeds -PI to PI range.
float _unknown_08; // 0.0 if LFE, otherwise 1.0.
float _unknown_0C;
- char name[VST_NAME_BUFFER_SIZE];
+ char name[VST_BUFFER_64];
VST_SPEAKER_TYPE type;
uint8_t _unknown[28]; // Padding detected from testing.