iPlug2 - C++ Audio Plug-in Framework
IPlugVST3_Parameter.h
1 /*
2  ==============================================================================
3 
4  This file is part of the iPlug 2 library. Copyright (C) the iPlug 2 developers.
5 
6  See LICENSE.txt for more info.
7 
8  ==============================================================================
9 */
10 
11 #pragma once
12 
13 #include "pluginterfaces/base/ustring.h"
14 #include "public.sdk/source/vst/vstparameters.h"
15 #include "base/source/fstring.h"
16 
17 #include "IPlugParameter.h"
18 
19 BEGIN_IPLUG_NAMESPACE
20 
22 class IPlugVST3Parameter : public Steinberg::Vst::Parameter
23 {
24 public:
25  IPlugVST3Parameter(IParam* pParam, Steinberg::Vst::ParamID tag, Steinberg::Vst::UnitID unitID)
26  : mIPlugParam(pParam)
27  {
28  Steinberg::UString(info.title, str16BufferSize(Steinberg::Vst::String128)).assign(pParam->GetName());
29  Steinberg::UString(info.units, str16BufferSize(Steinberg::Vst::String128)).assign(pParam->GetLabel());
30 
31  precision = pParam->GetDisplayPrecision();
32 
33  if (pParam->Type() != IParam::kTypeDouble)
34  info.stepCount = pParam->GetRange();
35  else
36  info.stepCount = 0; // continuous
37 
38  Steinberg::int32 flags = 0;
39 
40  if (pParam->GetCanAutomate()) flags |= Steinberg::Vst::ParameterInfo::kCanAutomate;
41  if (pParam->Type() == IParam::kTypeEnum) flags |= Steinberg::Vst::ParameterInfo::kIsList;
42 
43  info.defaultNormalizedValue = valueNormalized = pParam->ToNormalized(pParam->GetDefault());
44  info.flags = flags;
45  info.id = tag;
46  info.unitId = unitID;
47  }
48 
49  void toString(Steinberg::Vst::ParamValue valueNormalized, Steinberg::Vst::String128 string) const override
50  {
51  WDL_String display;
52  mIPlugParam->GetDisplay(valueNormalized, true, display);
53  Steinberg::UString(string, 128).fromAscii(display.Get());
54  }
55 
56  bool fromString(const Steinberg::Vst::TChar* string, Steinberg::Vst::ParamValue& valueNormalized) const override
57  {
58  Steinberg::String str((Steinberg::Vst::TChar*) string);
59  valueNormalized = mIPlugParam->ToNormalized(mIPlugParam->StringToValue(str.text8()));
60 
61  return true;
62  }
63 
64  Steinberg::Vst::ParamValue toPlain(Steinberg::Vst::ParamValue normValue) const override
65  {
66  return mIPlugParam->FromNormalized(normValue);
67  }
68 
69  Steinberg::Vst::ParamValue toNormalized(Steinberg::Vst::ParamValue plainValue) const override
70  {
71  return mIPlugParam->ToNormalized(plainValue);
72  }
73 
74  OBJ_METHODS(IPlugVST3Parameter, Parameter)
75 
76 protected:
77  IParam* mIPlugParam = nullptr;
78 };
79 
81 class IPlugVST3PresetParameter : public Steinberg::Vst::Parameter
82 {
83 public:
84  IPlugVST3PresetParameter(int nPresets)
85  : Steinberg::Vst::Parameter(STR16("Preset"), kPresetParam, STR16(""), 0, nPresets - 1, Steinberg::Vst::ParameterInfo::kIsProgramChange)
86  {}
87 
88  Steinberg::Vst::ParamValue toPlain(Steinberg::Vst::ParamValue valueNormalized) const override
89  {
90  return std::round(valueNormalized * info.stepCount);
91  }
92 
93  Steinberg::Vst::ParamValue toNormalized(Steinberg::Vst::ParamValue plainValue) const override
94  {
95  return plainValue / info.stepCount;
96  }
97 
98  OBJ_METHODS(IPlugVST3PresetParameter, Steinberg::Vst::Parameter)
99 };
100 
102 class IPlugVST3BypassParameter : public Steinberg::Vst::StringListParameter
103 {
104 public:
106  : Steinberg::Vst::StringListParameter(STR16("Bypass"), kBypassParam, 0, Steinberg::Vst::ParameterInfo::kCanAutomate | Steinberg::Vst::ParameterInfo::kIsBypass | Steinberg::Vst::ParameterInfo::kIsList)
107  {
108  appendString(STR16("off"));
109  appendString(STR16("on"));
110  }
111 
112  OBJ_METHODS(IPlugVST3BypassParameter, StringListParameter)
113 };
114 
115 END_IPLUG_NAMESPACE
116 
const char * GetName() const
Returns the parameter's name.
IPlug's parameter class.
int GetDisplayPrecision() const
Returns the parameter's precision.
IPlug's parameter class.
double GetRange() const
Returns the parameter's range.
bool GetCanAutomate() const
double GetDefault(bool normalized=false) const
Returns the parameter's default value.
const char * GetLabel() const
Returns the parameter's label.
VST3 preset parameter helper.
double ToNormalized(double nonNormalizedValue) const
Convert a real value to normalized value for this parameter.
VST3 bypass parameter helper.
EParamType Type() const
Get the parameter's type.