ASPiK SDK
pluginparameter.h
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------
2 // ASPiK Plugin Kernel File: pluginparameter.h
3 //
12 // -----------------------------------------------------------------------------
13 #ifndef _PluginParameter_H_
14 #define _PluginParameter_H_
15 
16 #include <string>
17 #include <vector>
18 #include <sstream>
19 #include <atomic>
20 #include <map>
21 #include <iomanip>
22 #include <iostream>
23 
24 #include <math.h>
25 #include "pluginstructures.h"
26 #include "guiconstants.h"
27 
28 
52 {
53 public:
55  PluginParameter(int _controlID, const char* _controlName, const char* _controlUnits,
56  controlVariableType _controlType, double _minValue, double _maxValue, double _defaultValue,
57  taper _controlTaper = taper::kLinearTaper, uint32_t _displayPrecision = 2);
58 
60  PluginParameter(int _controlID, const char* _controlName, std::vector<std::string> _stringList, std::string _defaultString);
61 
63  PluginParameter(int _controlID, const char* _controlName, const char* _commaSeparatedList, std::string _defaultString);
64 
66  PluginParameter(int _controlID, const char* _controlName, double _meterAttack_ms, double _meterRelease_ms,
67  uint32_t _detectorMode, meterCal _meterCal = meterCal::kLinearMeter);
68 
70  PluginParameter(int _controlID, const char* _controlName = "", controlVariableType _controlType = controlVariableType::kNonVariableBoundControl);
71 
74 
76  PluginParameter(const PluginParameter& initGuiControl);
77 
79  virtual ~PluginParameter();
80 
81  uint32_t getControlID() { return controlID; }
82  void setControlID(uint32_t cid) { controlID = cid; }
83 
84  const char* getControlName() { return controlName.c_str(); }
85  void setControlName(const char* name) { controlName.assign(name); }
86 
87  const char* getControlUnits() { return controlUnits.c_str(); }
88  void setControlUnits(const char* units) { controlUnits.assign(units); }
89 
91  void setControlVariableType(controlVariableType ctrlVarType) { controlType = ctrlVarType; }
92 
93  double getMinValue() { return minValue; }
94  void setMinValue(double value) { minValue = value; }
95 
96  double getMaxValue() { return maxValue; }
97  void setMaxValue(double value) { maxValue = value; }
98 
99  double getDefaultValue() { return defaultValue; }
100  void setDefaultValue(double value) { defaultValue = value; }
101 
103  void setIsDiscreteSwitch(bool _isDiscreteSwitch) { isDiscreteSwitch = _isDiscreteSwitch; }
104 
106  void setControlTaper(taper ctrlTaper) { controlTaper = ctrlTaper; }
107 
108  // -- taper getters
109  bool isLinearTaper() { return controlTaper == taper::kLinearTaper ? true : false; }
110  bool isLogTaper() { return controlTaper == taper::kLogTaper ? true : false; }
111  bool isAntiLogTaper() { return controlTaper == taper::kAntiLogTaper ? true : false; }
112  bool isVoltOctaveTaper() { return controlTaper == taper::kVoltOctaveTaper ? true : false; }
113 
114  // --- control type getters
115  bool isMeterParam() { return controlType == controlVariableType::kMeter ? true : false; }
116  bool isStringListParam() { return controlType == controlVariableType::kTypedEnumStringList ? true : false; }
117  bool isFloatParam() { return controlType == controlVariableType::kFloat ? true : false; }
118  bool isDoubleParam() { return controlType == controlVariableType::kDouble ? true : false; }
119  bool isIntParam() { return controlType == controlVariableType::kInt ? true : false; }
120  bool isNonVariableBoundParam() { return controlType == controlVariableType::kNonVariableBoundControl ? true : false; }
121 
122  uint32_t getDisplayPrecision() { return displayPrecision; }
123  void setDisplayPrecision(uint32_t precision) { displayPrecision = precision; }
124 
125  double getMeterAttack_ms() { return meterAttack_ms;}
126  void setMeterAttack_ms(double value) { meterAttack_ms = value; }
127 
128  double getMeterRelease_ms() { return meterRelease_ms; }
129  void setMeterRelease_ms(double value) { meterRelease_ms = value; }
130 
131  uint32_t getDetectorMode() { return detectorMode; }
132  void setMeterDetectorMode(uint32_t value) { detectorMode = value; }
133 
134  bool getLogMeter() { return logMeter; }
135  void setLogMeter(bool value) { logMeter = value; }
136 
137  bool getInvertedMeter() { return invertedMeter; }
138  void setInvertedMeter(bool value) { invertedMeter = value; }
139 
140  bool isProtoolsGRMeter() { return protoolsGRMeter; }
141  void setIsProtoolsGRMeter(bool value) { protoolsGRMeter = value; }
142 
144  void setParameterSmoothing(bool value) { useParameterSmoothing = value; }
145 
147  void setSmoothingTimeMsec(double value) { smoothingTimeMsec = value; }
148 
151 
152  bool getIsWritable() { return isWritable; }
153  void setIsWritable(bool value) { isWritable = value; }
154 
157 
158  // --- for aux attributes
159  AuxParameterAttribute* getAuxAttribute(uint32_t attributeID);
160  uint32_t setAuxAttribute(uint32_t attributeID, const AuxParameterAttribute& auxParameterAtribute);
161 
167  inline double getControlValue() { return getAtomicControlValueDouble(); }
168 
175  inline void setControlValue(double actualParamValue, bool ignoreSmoothing = false)
176  {
177  if (controlType == controlVariableType::kDouble ||
178  controlType == controlVariableType::kFloat)
179  {
180  if (useParameterSmoothing && !ignoreSmoothing)
181  setSmoothedTargetValue(actualParamValue);
182  else
183  setAtomicControlValueDouble(actualParamValue);
184  }
185  else
186  setAtomicControlValueDouble(actualParamValue);
187  }
188 
196  inline double setControlValueNormalized(double normalizedValue, bool applyTaper = true, bool ignoreParameterSmoothing = false)
197  {
198  // --- set according to smoothing option
199  double actualParamValue = getControlValueWithNormalizedValue(normalizedValue, applyTaper);
200 
201  if (controlType == controlVariableType::kDouble ||
202  controlType == controlVariableType::kFloat)
203  {
204  if (useParameterSmoothing && !ignoreParameterSmoothing)
205  setSmoothedTargetValue(actualParamValue);
206  else
207  setAtomicControlValueDouble(actualParamValue);
208  }
209  else
210  setAtomicControlValueDouble(actualParamValue);
211 
212  return actualParamValue;
213  }
214 
220  std::string getControlValueAsString();
221 
227  size_t getStringCount(){return stringList.size();}
228 
235 
240 
244  void setStringList(std::vector<std::string> _stringList) {stringList = _stringList;}
245 
247  std::string getStringByIndex(uint32_t index);
248 
254  {
255  // --- apply taper as needed
256  switch (controlTaper)
257  {
258  case taper::kLinearTaper:
259  return getNormalizedDefaultValue();
260 
261  case taper::kLogTaper:
263 
264  case taper::kAntiLogTaper:
266 
267  case taper::kVoltOctaveTaper:
269 
270  default:
271  return 0.0;
272  }
273  }
274 
280  {
281  // --- apply taper as needed
282  switch (controlTaper)
283  {
284  case taper::kLinearTaper:
285  return getNormalizedControlValue();
286 
287  case taper::kLogTaper:
289 
290  case taper::kAntiLogTaper:
292 
293  case taper::kVoltOctaveTaper:
295 
296  default:
297  return 0.0;
298  }
299  }
300 
305  inline double getControlValueWithNormalizedValue(double normalizedValue, bool applyTaper = true)
306  {
307  if(!applyTaper)
308  return getControlValueFromNormalizedValue(normalizedValue);
309 
310  double newValue = 0;
311 
312  // --- apply taper as needed
313  switch (controlTaper)
314  {
315  case taper::kLinearTaper:
316  newValue = getControlValueFromNormalizedValue(normalizedValue);
317  break;
318 
319  case taper::kLogTaper:
320  newValue = getControlValueFromNormalizedValue(normToLogNorm(normalizedValue));
321  break;
322 
323  case taper::kAntiLogTaper:
324  newValue = getControlValueFromNormalizedValue(normToAntiLogNorm(normalizedValue));
325  break;
326 
327  case taper::kVoltOctaveTaper:
328  newValue = getVoltOctaveControlValueFromNormValue(normalizedValue);
329  break;
330 
331  default:
332  break; // --- no update
333  }
334 
335  return newValue;
336  }
337 
342  inline double getNormalizedControlValueWithActualValue(double actualValue) { return getNormalizedControlValueWithActual(actualValue); }
343 
345  double getGUIMin() { return 0.0; }
346 
348  double getGUIMax()
349  {
350  if(controlType == controlVariableType::kTypedEnumStringList)
351  return (double)getStringCount() - 1;
352 
353  return 1.0;
354  }
355 
361  int findStringIndex(std::string searchString)
362  {
363  auto it = std::find(stringList.begin (), stringList.end (), searchString);
364 
365  if (it == stringList.end())
366  {
367  return -1;
368  }
369  else
370  {
371  return (int)std::distance(stringList.begin(), it);
372  }
373 
374  return -1;
375  }
376 
378  inline double normToLogNorm(double normalizedValue)
379  {
380  return 1.0 + kCTCoefficient*log10(normalizedValue);
381  }
382 
384  inline double logNormToNorm(double logNormalizedValue)
385  {
386  return pow(10.0, (logNormalizedValue - 1.0) / kCTCoefficient);
387  }
388 
390  inline double normToAntiLogNorm(double normalizedValue)
391  {
392  if (normalizedValue == 1.0)
393  return 1.0;
394 
395  double aln = -kCTCoefficient*log10(1.0 - normalizedValue);
396  aln = fmin(1.0, aln);
397  return aln;
398  }
399 
401  inline double antiLogNormToNorm(double aLogNormalizedValue)
402  {
403  return -pow(10.0, (-aLogNormalizedValue / kCTCoefficient)) + 1.0;
404  }
405 
411  void initParamSmoother(double sampleRate)
412  {
414  sampleRate,
416  minValue,
417  maxValue,
418  smoothingType);
419  }
420 
426  void updateSampleRate(double sampleRate)
427  {
428  paramSmoother.setSampleRate(sampleRate);
429  }
430 
437  {
438  if(!useParameterSmoothing) return false;
439  double smoothedValue = 0.0;
440  bool smoothed = paramSmoother.smoothParameter(getSmoothedTargetValue(), smoothedValue);
441  if(smoothed)
442  setAtomicControlValueDouble(smoothedValue);
443  return smoothed;
444  }
445 
452  void setBoundVariable(void* boundVariable, boundVariableType dataType)
453  {
454  boundVariableDataType = dataType;
455 
456  if(dataType == boundVariableType::kDouble)
457  boundVariableDouble = (double*)boundVariable;
458  else if(dataType == boundVariableType::kFloat)
459  boundVariableFloat = (float*)boundVariable;
460  else if(dataType == boundVariableType::kInt)
461  boundVariableInt = (int*)boundVariable;
462  else if(dataType == boundVariableType::kUInt)
463  boundVariableUInt = (uint32_t*)boundVariableUInt;
464 
465  // --- initialize it
467  }
468 
475 
482  {
483  if (boundVariableUInt)
484  {
485  *boundVariableUInt = (uint32_t)getControlValue();
486  return true;
487  }
488  else if (boundVariableInt)
489  {
490  *boundVariableInt = (int)getControlValue();
491  return true;
492  }
493  else if (boundVariableFloat)
494  {
495  *boundVariableFloat = (float)getControlValue();
496  return true;
497  }
498  else if (boundVariableDouble)
499  {
500  *boundVariableDouble = getControlValue();
501  return true;
502  }
503  return false;
504  }
505 
512  {
513  if (boundVariableUInt)
514  {
515  setControlValue((double)*boundVariableUInt);
516  return true;
517  }
518  else if (boundVariableInt)
519  {
520  setControlValue((double)*boundVariableInt);
521  return true;
522  }
523  else if (boundVariableFloat)
524  {
525  setControlValue((double)*boundVariableFloat);
526  return true;
527  }
528  else if (boundVariableDouble)
529  {
530  setControlValue(*boundVariableDouble);
531  return true;
532  }
533  return false;
534  }
535 
541  void setParameterUpdateQueue(IParameterUpdateQueue* _parameterUpdateQueue) { parameterUpdateQueue = _parameterUpdateQueue; }
542 
548  IParameterUpdateQueue* getParameterUpdateQueue() { return parameterUpdateQueue; } // may be NULL - that is OK
549 
551  PluginParameter& operator=(const PluginParameter& aPluginParameter) // need this override for collections to work
552  {
553  if (this == &aPluginParameter)
554  return *this;
555 
556  controlID = aPluginParameter.controlID;
557  controlName = aPluginParameter.controlName;
558  controlUnits = aPluginParameter.controlUnits;
560  controlType = aPluginParameter.controlType;
561  minValue = aPluginParameter.minValue;
562  maxValue = aPluginParameter.maxValue;
563  defaultValue = aPluginParameter.defaultValue;
564  controlTaper = aPluginParameter.controlTaper;
565  controlValueAtomic = aPluginParameter.getAtomicControlValueFloat();
566  displayPrecision = aPluginParameter.displayPrecision;
567  stringList = aPluginParameter.stringList;
568  useParameterSmoothing = aPluginParameter.useParameterSmoothing;
569  smoothingType = aPluginParameter.smoothingType;
570  smoothingTimeMsec = aPluginParameter.smoothingTimeMsec;
571  meterAttack_ms = aPluginParameter.meterAttack_ms;
572  meterRelease_ms = aPluginParameter.meterRelease_ms;
573  detectorMode = aPluginParameter.detectorMode;
574  logMeter = aPluginParameter.logMeter;
575  isWritable = aPluginParameter.isWritable;
576  isDiscreteSwitch = aPluginParameter.isDiscreteSwitch;
577  invertedMeter = aPluginParameter.invertedMeter;
578 
579  return *this;
580  }
581 
582 protected:
583  int controlID = -1;
584  std::string controlName = "ControlName";
585  std::string controlUnits = "Units";
586  controlVariableType controlType = controlVariableType::kDouble;
587 
588  // --- min/max/def
589  double minValue = 0.0;
590  double maxValue = 1.0;
591  double defaultValue = 0.0;
592 
593  // --- *the* control value
594  // --- atomic float as control value
595  // atomic double will not behave properly between 32/64 bit
596  std::atomic<float> controlValueAtomic;
597 
598  float getAtomicControlValueFloat() const { return controlValueAtomic.load(std::memory_order_relaxed); }
599  void setAtomicControlValueFloat(float value) { controlValueAtomic.store(value, std::memory_order_relaxed); }
600 
601  double getAtomicControlValueDouble() const { return (double)controlValueAtomic.load(std::memory_order_relaxed); }
602  void setAtomicControlValueDouble(double value) { controlValueAtomic.store((float)value, std::memory_order_relaxed); }
603 
604  std::atomic<float> smoothedTargetValueAtomic;
605  void setSmoothedTargetValue(double value){ smoothedTargetValueAtomic.store((float)value); }
606  double getSmoothedTargetValue() const { return (double)smoothedTargetValueAtomic.load(); }
607 
608  // --- control tweakers
609  taper controlTaper = taper::kLinearTaper;
610  uint32_t displayPrecision = 2;
611 
612  // --- for enumerated string list
613  std::vector<std::string> stringList;
615 
616  // --- gui specific
617  bool appendUnits = true;
618  bool isWritable = false;
619  bool isDiscreteSwitch = false;
620 
621  // --- for VU meters
622  double meterAttack_ms = 10.0;
623  double meterRelease_ms = 500.0;
625  bool logMeter = false;
626  bool invertedMeter = false;
627  bool protoolsGRMeter = false;
628 
629  // --- parameter smoothing
630  bool useParameterSmoothing = false;
631  smoothingMethod smoothingType = smoothingMethod::kLPFSmoother;
632  double smoothingTimeMsec = 100.0;
634 
635  // --- variable binding
636  boundVariableType boundVariableDataType = boundVariableType::kFloat;
637 
638  // --- our sample accurate interface for VST3
640 
641  // --- default is enabled; you can disable this for controls that have a long postUpdate cooking time
643 
650  inline double getVoltOctaveControlValueFromNormValue(double normalizedValue)
651  {
652  double octaves = log2(maxValue / minValue);
653  if (normalizedValue == 0)
654  return minValue;
655 
656  return minValue*pow(2.0, normalizedValue*octaves);
657  }
658 
664  {
666  }
667 
673  {
675  }
676 
682  {
683  if (minValue == 0)
685 
686  return log2(getAtomicControlValueDouble() / minValue) / (log2(maxValue / minValue));
687  }
688 
695  inline double getNormalizedControlValueWithActual(double actualValue)
696  {
697  // --- calculate normalized value from actual
698  return (actualValue - minValue) / (maxValue - minValue);
699  }
700 
706  {
707  // --- calculate normalized value from actual
708  //double d = (getAtomicControlValueDouble() - minValue) / (maxValue - minValue);
710  }
711 
718  inline double getControlValueFromNormalizedValue(double normalizedValue)
719  {
720  // --- calculate the control Value using normalized input
721  //double d = (maxValue - minValue)*normalizedValue + minValue;
722  return (maxValue - minValue)*normalizedValue + minValue;
723  }
724 
731  {
732  // --- calculate normalized value from actual
733  //double d = (defaultValue - minValue) / (maxValue - minValue);
734  return (defaultValue - minValue) / (maxValue - minValue);
735  }
736 
743  {
745  }
746 
753  {
755  }
756 
763  {
764  if (minValue == 0)
765  return defaultValue;
766 
767  return log2(defaultValue / minValue) / (log2(maxValue / minValue));
768  }
769 
770 private:
771  // --- for variable-binding support
772  uint32_t* boundVariableUInt = nullptr;
773  int* boundVariableInt = nullptr;
774  float* boundVariableFloat = nullptr;
775  double* boundVariableDouble = nullptr;
776 
777  typedef std::map<uint32_t, AuxParameterAttribute*> auxParameterAttributeMap;
778  auxParameterAttributeMap auxAttributeMap;
779 
780 };
781 
782 #endif
783 
void setAtomicControlValueFloat(float value)
get atomic variable as float
Definition: pluginparameter.h:599
double getNormalizedVoltOctaveDefaultValue()
get volt/octave default value in normalized form
Definition: pluginparameter.h:762
bool getParameterSmoothing()
query parameter smoothing flag
Definition: pluginparameter.h:143
double getControlValue()
the main function to access the underlying atomic double value
Definition: pluginparameter.h:167
bool isMeterParam()
query: meter param?
Definition: pluginparameter.h:115
void setParameterSmoothing(bool value)
set inverted meter flag
Definition: pluginparameter.h:144
void setSmoothedTargetValue(double value)
set atomic TARGET smoothing variable with double
Definition: pluginparameter.h:605
void setControlVariableType(controlVariableType ctrlVarType)
set variable type associated with parameter
Definition: pluginparameter.h:91
uint32_t detectorMode
meter detector mode
Definition: pluginparameter.h:624
double setControlValueNormalized(double normalizedValue, bool applyTaper=true, bool ignoreParameterSmoothing=false)
the main function to set the underlying atomic double value using a normalized value; this is the ope...
Definition: pluginparameter.h:196
double minValue
the min for the parameter
Definition: pluginparameter.h:589
bool isDiscreteSwitch
flag for switches (not currently used in ASPiK)
Definition: pluginparameter.h:619
std::atomic< float > controlValueAtomic
the underlying atomic variable
Definition: pluginparameter.h:596
AuxParameterAttribute * getAuxAttribute(uint32_t attributeID)
get aux data
Definition: pluginparameter.cpp:331
double getVoltOctaveControlValueFromNormValue(double normalizedValue)
get volt/octave control value from a normalized value
Definition: pluginparameter.h:650
double getSmoothingTimeMsec()
query smoothing time
Definition: pluginparameter.h:146
bool protoolsGRMeter
meter is a Pro Tools gain reduction meter
Definition: pluginparameter.h:627
Interface for VST3 parameter value update queue (sample accurate automation)
Definition: pluginstructures.h:1329
bool isLinearTaper()
query: linear taper
Definition: pluginparameter.h:109
void initParamSmoother(T smoothingTimeInMs, T samplingRate, T initValue, T minControlValue, T maxControlValue, smoothingMethod smoother=smoothingMethod::kLPFSmoother)
Definition: guiconstants.h:329
double getMaxValue()
get maximum value
Definition: pluginparameter.h:96
std::atomic< float > smoothedTargetValueAtomic
the underlying atomic variable TARGET for smoothing
Definition: pluginparameter.h:604
bool smoothParameter(T in, T &out)
Definition: guiconstants.h:353
bool getInvertedMeter()
query inverted meter flag
Definition: pluginparameter.h:137
void setEnableVSTSampleAccurateAutomation(bool value)
set VST3 sample accurate automation
Definition: pluginparameter.h:156
smoothingMethod smoothingType
param smoothing type
Definition: pluginparameter.h:631
double antiLogNormToNorm(double aLogNormalizedValue)
Definition: pluginparameter.h:401
int findStringIndex(std::string searchString)
find a string in the list of a string-list parameter
Definition: pluginparameter.h:361
double getControlValueNormalized()
get control value as normalied value
Definition: pluginparameter.h:279
bool getIsWritable()
query writable control (meter)
Definition: pluginparameter.h:152
void setBoundVariable(void *boundVariable, boundVariableType dataType)
save the variable for binding operation
Definition: pluginparameter.h:452
void setIsDiscreteSwitch(bool _isDiscreteSwitch)
get is switch (not used)
Definition: pluginparameter.h:103
double logNormToNorm(double logNormalizedValue)
Definition: pluginparameter.h:384
std::string controlUnits
the units string for the parameter
Definition: pluginparameter.h:585
double getNormalizedVoltOctaveControlValue()
get get volt/octave control value in normalized form
Definition: pluginparameter.h:681
uint32_t getControlID()
get ID value
Definition: pluginparameter.h:81
bool appendUnits
flag to append units in GUI controls (use with several built-in custom views)
Definition: pluginparameter.h:617
smoothingMethod
Use this strongly typed enum to easily set the smoothing type.
Definition: guiconstants.h:222
bool isLogTaper()
query: log taper
Definition: pluginparameter.h:110
std::string getControlValueAsString()
the main function to access the underlying atomic double value as a string
Definition: pluginparameter.cpp:227
bool getIsDiscreteSwitch()
set is switch (not used)
Definition: pluginparameter.h:102
uint32_t displayPrecision
sig digits for display
Definition: pluginparameter.h:610
double getGUIMin()
Definition: pluginparameter.h:345
void setSmoothingTimeMsec(double value)
set inverted meter flag
Definition: pluginparameter.h:147
void setMeterAttack_ms(double value)
set meter attack time (ballistics)
Definition: pluginparameter.h:126
PluginParameter()
simple constructor - you can always use this and then use the massive number of get/set functions to ...
Definition: pluginparameter.cpp:169
double normToAntiLogNorm(double normalizedValue)
Definition: pluginparameter.h:390
void setControlID(uint32_t cid)
set ID value
Definition: pluginparameter.h:82
double normToLogNorm(double normalizedValue)
Definition: pluginparameter.h:378
globally utilized structures and enumerations
boundVariableType boundVariableDataType
bound data type
Definition: pluginparameter.h:636
meterCal
Use this strongly typed enum to easily set meter calibration.
Definition: guiconstants.h:252
bool updateInBoundVariable()
perform the variable binding update (change the value)
Definition: pluginparameter.h:481
uint32_t getDetectorMode()
get meter detect mode
Definition: pluginparameter.h:131
bool isAntiLogTaper()
query: antilog taper
Definition: pluginparameter.h:111
void setDisplayPrecision(uint32_t precision)
set sig digits
Definition: pluginparameter.h:123
double getSmoothedTargetValue() const
set atomic TARGET smoothing variable with double
Definition: pluginparameter.h:606
void setControlTaper(taper ctrlTaper)
set taper
Definition: pluginparameter.h:106
double getNormalizedControlValue()
get control value as normalized value (helper)
Definition: pluginparameter.h:705
bool isDoubleParam()
query: double param?
Definition: pluginparameter.h:118
PluginParameter & operator=(const PluginParameter &aPluginParameter)
Definition: pluginparameter.h:551
void initParamSmoother(double sampleRate)
initialize or reset the parameter smoother object
Definition: pluginparameter.h:411
uint32_t setAuxAttribute(uint32_t attributeID, const AuxParameterAttribute &auxParameterAtribute)
set aux data
Definition: pluginparameter.cpp:314
double getNormalizedDefaultValue()
get default value as a normalized value (helper)
Definition: pluginparameter.h:730
bool isVoltOctaveTaper()
query: volt/octave taper
Definition: pluginparameter.h:112
void setControlUnits(const char *units)
set units as const char*
Definition: pluginparameter.h:88
std::string getStringByIndex(uint32_t index)
get string-list string by index
Definition: pluginparameter.cpp:281
bool enableVSTSampleAccurateAutomation
VST3 sample accurate flag.
Definition: pluginparameter.h:642
double getDefaultValue()
get default value
Definition: pluginparameter.h:99
ParamSmoother< double > paramSmoother
param smoothing object
Definition: pluginparameter.h:633
void setCommaSeparatedStringList()
convert the string-list into a comma-separated list (during construction)
Definition: pluginparameter.cpp:293
controlVariableType
Use this strongly typed enum to easily set the control&#39;s behavior; this tells the PluginParameter obj...
Definition: guiconstants.h:270
double getMinValue()
get minimum value
Definition: pluginparameter.h:93
double getNormalizedAntiLogDefaultValue()
get anti-log default value in normalized form
Definition: pluginparameter.h:752
boundVariableType getBoundVariableType()
get the datatype of the bound variable
Definition: pluginparameter.h:474
bool isProtoolsGRMeter()
query pro tools GR meter flag
Definition: pluginparameter.h:140
double getControlValueWithNormalizedValue(double normalizedValue, bool applyTaper=true)
get the new control value as if it were set with a normalized value
Definition: pluginparameter.h:305
bool logMeter
meter is log
Definition: pluginparameter.h:625
bool updateOutBoundVariable()
perform the variable binding update on meter data
Definition: pluginparameter.h:511
std::vector< std::string > stringList
string list
Definition: pluginparameter.h:613
double meterAttack_ms
meter attack time in milliseconds
Definition: pluginparameter.h:622
smoothingMethod getSmoothingMethod()
query smoothing method
Definition: pluginparameter.h:149
void setInvertedMeter(bool value)
set inverted meter flag
Definition: pluginparameter.h:138
bool useParameterSmoothing
enable param smoothing
Definition: pluginparameter.h:630
double getMeterRelease_ms()
get meter release time (ballistics)
Definition: pluginparameter.h:128
IParameterUpdateQueue * getParameterUpdateQueue()
retrieves the update queue for VST3 sample accuate automation; note this is only used during actual D...
Definition: pluginparameter.h:548
double getControlValueFromNormalizedValue(double normalizedValue)
get control value with a normalized value (helper)
Definition: pluginparameter.h:718
bool isFloatParam()
query: float param?
Definition: pluginparameter.h:117
const double kCTCoefficient
concave and/or convex transform correction factor
Definition: guiconstants.h:117
const char * getControlName()
get name as const char*
Definition: pluginparameter.h:84
bool isNonVariableBoundParam()
query: non-bound param?
Definition: pluginparameter.h:120
size_t getStringCount()
get the number of individual strings in a string-list control
Definition: pluginparameter.h:227
std::string commaSeparatedStringList
string list a somma separated string
Definition: pluginparameter.h:614
void setControlValue(double actualParamValue, bool ignoreSmoothing=false)
the main function to set the underlying atomic double value
Definition: pluginparameter.h:175
bool invertedMeter
meter is inverted
Definition: pluginparameter.h:626
double getGUIMax()
Definition: pluginparameter.h:348
taper getControlTaper()
get taper
Definition: pluginparameter.h:105
void setParameterUpdateQueue(IParameterUpdateQueue *_parameterUpdateQueue)
stores the update queue for VST3 sample accuate automation; note this is only used during actual DAW ...
Definition: pluginparameter.h:541
double getDefaultValueNormalized()
get default value as normalied value
Definition: pluginparameter.h:253
void updateSampleRate(double sampleRate)
change any sample-rate dependent members
Definition: pluginparameter.h:426
bool isIntParam()
query: int param?
Definition: pluginparameter.h:119
globally utilized constants and enumerations
boundVariableType
Use this strongly typed enum to easily set the control&#39;s linked variable datatype (for automatic vari...
Definition: guiconstants.h:286
controlVariableType getControlVariableType()
get variable type associated with parameter
Definition: pluginparameter.h:90
void setIsProtoolsGRMeter(bool value)
set inverted meter flag
Definition: pluginparameter.h:141
double maxValue
the max for the parameter
Definition: pluginparameter.h:590
void setDefaultValue(double value)
set default value
Definition: pluginparameter.h:100
double getAtomicControlValueDouble() const
set atomic variable with double
Definition: pluginparameter.h:601
void setAtomicControlValueDouble(double value)
get atomic variable as double
Definition: pluginparameter.h:602
Information about auxilliary parameter details - purely customizeable. This uses the attributeValue u...
Definition: pluginstructures.h:688
void setStringList(std::vector< std::string > _stringList)
set the string-list using a vector of strings
Definition: pluginparameter.h:244
virtual ~PluginParameter()
only need to clean out the aux parameters - everything else is self deleting
Definition: pluginparameter.cpp:211
void setSmoothingMethod(smoothingMethod smoothingMethod)
set smoothing method
Definition: pluginparameter.h:150
controlVariableType controlType
the control type
Definition: pluginparameter.h:586
bool smoothParameterValue()
perform smoothing operation on data
Definition: pluginparameter.h:436
void setMinValue(double value)
set minimum value
Definition: pluginparameter.h:94
The PluginParameter object stores all of the data needed for any type of plugin parameter. It is a large object, but it is not complex as it really just stores LOTS of information about plugin parameters.
Definition: pluginparameter.h:51
int controlID
the ID value for the parameter
Definition: pluginparameter.h:583
void setMaxValue(double value)
set maximum value
Definition: pluginparameter.h:97
double getNormalizedControlValueWithActual(double actualValue)
convert actual control value into normalized value (helper)
Definition: pluginparameter.h:695
const char * getControlUnits()
get units as const char*
Definition: pluginparameter.h:87
float getAtomicControlValueFloat() const
set atomic variable with float
Definition: pluginparameter.h:598
std::string controlName
the name string for the parameter
Definition: pluginparameter.h:584
const char * getCommaSeparatedStringList()
get the strings in a string-list control as a comma separated list
Definition: pluginparameter.h:234
IParameterUpdateQueue * parameterUpdateQueue
interface for VST3 sample accurate updates
Definition: pluginparameter.h:639
bool isStringListParam()
query: string list para,?
Definition: pluginparameter.h:116
double getNormalizedControlValueWithActualValue(double actualValue)
get the new normalized control value as if it were set with an actual value
Definition: pluginparameter.h:342
double getNormalizedLogDefaultValue()
get log default value in normalized form
Definition: pluginparameter.h:742
double getNormalizedAntiLogControlValue()
get get anti-log control value in normalized form
Definition: pluginparameter.h:672
void setControlName(const char *name)
set name as const char*
Definition: pluginparameter.h:85
void setLogMeter(bool value)
set log meter flag
Definition: pluginparameter.h:135
double getMeterAttack_ms()
get meter attack time (ballistics)
Definition: pluginparameter.h:125
bool getLogMeter()
query log meter flag
Definition: pluginparameter.h:134
void setSampleRate(T samplingRate)
Definition: guiconstants.h:309
double getNormalizedLogControlValue()
get get log control value in normalized form
Definition: pluginparameter.h:663
const uint32_t ENVELOPE_DETECT_MODE_RMS
SQRT((1/N)|x|^2)
Definition: guiconstants.h:183
bool getEnableVSTSampleAccurateAutomation()
query VST3 sample accurate automation
Definition: pluginparameter.h:155
void setMeterRelease_ms(double value)
set meter release time (ballistics)
Definition: pluginparameter.h:129
double smoothingTimeMsec
param smoothing time
Definition: pluginparameter.h:632
void setIsWritable(bool value)
set writable control (meter)
Definition: pluginparameter.h:153
bool isWritable
flag for meter variables
Definition: pluginparameter.h:618
uint32_t getDisplayPrecision()
get sig digits
Definition: pluginparameter.h:122
void setMeterDetectorMode(uint32_t value)
set meter detect mode
Definition: pluginparameter.h:132
taper controlTaper
the taper
Definition: pluginparameter.h:609
double defaultValue
the default value for the parameter
Definition: pluginparameter.h:591
double meterRelease_ms
meter release time in milliseconds
Definition: pluginparameter.h:623
taper
Use this strongly typed enum to easily set the control taper.
Definition: guiconstants.h:237