Fix some confusion over getting parameter details from
authorCarl Hetherington <carl@carlh.net>
Wed, 23 Nov 2011 22:46:43 +0000 (22:46 +0000)
committerCarl Hetherington <carl@carlh.net>
Wed, 23 Nov 2011 22:46:43 +0000 (22:46 +0000)
VSTs.

git-svn-id: svn://localhost/ardour2/branches/3.0@10814 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/vestige/aeffectx.h
libs/ardour/vst_plugin.cc

index 29fdb9a145872e17d236a66be46b972a072ee84c..5238df1c75a6a0ec318e96427a8312171cbae4ee 100755 (executable)
 #define effEditTop 20
 #define effProcessEvents 25
 #define effGetEffectName 45
-#define effGetParameterProperties 47 // missing
 #define effGetVendorString 47
 #define effGetProductString 48
 #define effGetVendorVersion 49
 #define effCanDo 51 // currently unused
+/* from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
+#define effGetParameterProperties 56
 #define effGetVstVersion 58 // currently unused
 
 #define kEffectMagic (CCONST( 'V', 's', 't', 'P' ))
 #define kVstLangEnglish 1
 #define kVstMidiType 1
-#define kVstParameterUsesFloatStep (1 << 2)
 #define kVstTempoValid (1 << 10)
 #define kVstTransportPlaying (1 << 1)
 
@@ -177,23 +177,35 @@ struct _VstEvents
 
 typedef struct _VstEvents VstEvents;
 
-// Not finished, neither really used
+/* this struct taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
 struct _VstParameterProperties
 {
        float stepFloat;
+       float smallStepFloat;
+       float largeStepFloat;
        char label[64];
-       int flags;
-       int minInteger;
-       int maxInteger;
-       int stepInteger;
+       int32_t flags;
+       int32_t minInteger;
+       int32_t maxInteger;
+       int32_t stepInteger;
+       int32_t largeStepInteger;
        char shortLabel[8];
-       int category;
-       char categoryLabel[24];
-       char empty[128];
 };
 
 typedef struct _VstParameterProperties VstParameterProperties;
 
+/* this enum taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
+enum VstParameterFlags
+{
+       kVstParameterIsSwitch                = 1 << 0,  /* parameter is a switch (on/off) */
+       kVstParameterUsesIntegerMinMax       = 1 << 1,  /* minInteger, maxInteger valid */
+       kVstParameterUsesFloatStep           = 1 << 2,  /* stepFloat, smallStepFloat, largeStepFloat valid */
+       kVstParameterUsesIntStep             = 1 << 3,  /* stepInteger, largeStepInteger valid */
+       kVstParameterSupportsDisplayIndex    = 1 << 4,  /* displayIndex valid */
+       kVstParameterSupportsDisplayCategory = 1 << 5,  /* category, etc. valid */
+       kVstParameterCanRamp                 = 1 << 6   /* set if parameter value can ramp up/down */
+};
+
 struct _AEffect
 {
        // Never use virtual functions!!!
index 2d1a24ae93d420bb050b2d91cd3ed2d329b48964..1afc496b1697e7d5cc5c5bb4093cc6a27af89733 100644 (file)
@@ -234,8 +234,6 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
 
        if (_plugin->dispatcher (_plugin, effGetParameterProperties, which, 0, &prop, 0)) {
 
-#ifdef VESTIGE_COMPLETE
-
                /* i have yet to find or hear of a VST plugin that uses this */
 
                if (prop.flags & kVstParameterUsesIntegerMinMax) {
@@ -271,7 +269,6 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
                desc.logarithmic = false;
                desc.sr_dependent = false;
                desc.label = prop.label;
-#endif
 
        } else {