could you also please integrate that second extension:
effVendorSpecific(0xdeadbef0, parm, rangeptr, 0.0)
Queries the range of a parameter (allowing the plug-in to use more than the 0.0...1.0 range that VST defines). The host does something like:
if (effect->dispatcher(effect, effVendorSpecific, 0xdeadbef0, parm_index, range, 0.0)>=0xbeef)
// range..range is the range instead of 0..1
Or, to implement it on the plug-in side (in addition to responding to effCanDo/"hasCockosExtensions"):
if (index == 0xdeadbef0 && ptr && value>=0 && value<NUM_PARAMS)
((double *)ptr) = min_val;
((double *)ptr) = max_val;
Currently when editing envelope point values in REAPER (rightclick -> Set point value) your latest plugins still just report 0.000-1.000 range.
Would be cool to have the correct ranges in the edit field too. Thanks!
Seems to be a "strange" extension. Reaper could use that first extension to query extreme values. I find it this second extension a bit unstable, because it can't represent arbitrary values like compressor ratio "1:10".
Maybe you are not quite understood this extension. Voxengo (and most VST) plug-ins expect 0..1 automation values - while this extension seems to try to allow bigger range for some esoteric reason. I do not think it's related to representation of extreme values. I suggest you to ask Reaper folks to fix that 0.000 and 1.000 reading in Reaper - nothing stops them from getting real values.
Ok, I've posted that in the REAPER forums:
Let's see what they'll say ...
Here you go Aleksey:
So obviously you would need to implement this:
effVendorSpecific(effString2Parameter, parm, buf, val)
Converts the user's string to a normalized parameter value, without setting the parameter. Reaper uses this when the user is manually editing an envelope node, for example. Calling with buf="" is a test for function availability.
Example host-side implementation:
char buf, retbuf;
if (effect->dispatcher(effect,effVendorSpecific,effString2Parameter,parm_idx,retbuf,0.0)>=0xbeef && *retbuf)
double val = atof(retbuf);
printf("parm %d, string=%s is %f\n",parm_idx,buf,val);
Example plug-in-side implementation:
if (index == effGetParamDisplay && ptr)
if (value>=0 && value<NUM_PARAMS)
int ival = atoi(ptr);
float normval = (ival-minval)/(maxval-minval);
This topic was last updated 180 days ago, and thus it was archived. Replying is disabled for this topic.