24 #include <pluginterfaces/vst/vsttypes.h> 25 #include <pluginterfaces/vst/ivstparameterchanges.h> 26 #include <pluginterfaces/base/ustring.h> 27 #include <base/source/fstring.h> 28 #include <pluginterfaces/base/ftypes.h> 37 #include <type_traits> 42 using namespace Steinberg;
43 using namespace Steinberg::Vst;
58 virtual ParamValue normalize(ParamType
const &iValue)
const = 0;
59 virtual ParamType denormalize(ParamValue iNormalizedValue)
const = 0;
60 virtual void toString(
ParamType const &iValue, String128 iString, int32 iPrecision)
const { }
65 toString(iValue, s, iPrecision);
79 inline ParamValue
normalize(ParamValue
const &iValue)
const override 84 inline ParamValue
denormalize(ParamValue iNormalizedValue)
const override 89 inline void toString(ParamValue
const &iValue, String128 oString, int32 iPrecision)
const override 91 staticToString(iValue, oString, iPrecision);
94 static inline void staticToString(ParamValue
const &iValue, String128 oString, int32 iPrecision)
96 Steinberg::UString wrapper(oString, str16BufferSize(String128));
97 if(!wrapper.printFloat(iValue, iPrecision))
114 fFalseString{std::move(iFalseString)},
115 fTrueString{std::move(iTrueString)}
120 inline ParamValue
normalize(
bool const &iValue)
const override 122 return iValue ? 1.0 : 0;
125 inline bool denormalize(ParamValue iNormalizedValue)
const override 127 return toBoolean(iNormalizedValue);
130 inline void toString(
bool const &iValue, String128 oString, int32 )
const override 132 Steinberg::UString wrapper(oString, str16BufferSize(String128));
134 wrapper.assign(fTrueString.c_str());
136 wrapper.assign(fFalseString.c_str());
142 inline static bool toBoolean(ParamValue iNormalizedValue) {
return iNormalizedValue >= 0.5; }
164 inline ParamValue
normalize(
double const &iValue)
const override 169 inline double denormalize(ParamValue iNormalizedValue)
const override 174 inline void toString(
ParamType const &iValue, String128 oString, int32 iPrecision)
const override 176 Steinberg::UString wrapper(oString, str16BufferSize (String128));
177 wrapper.printFloat(iValue * 100, iPrecision);
178 wrapper.append(STR16(
"%"));
188 auto value = Utils::clamp<int32, int32>(iDiscreteValue, 0, iStepCount);
192 return value / static_cast<ParamValue>(iStepCount);
203 auto discreteValue = std::floor(std::min(static_cast<ParamValue>(iStepCount), value * (iStepCount + 1)));
204 return static_cast<int32>(discreteValue);
225 auto discreteValue = iValue + iIncrement;
232 while(discreteValue > iStepCount)
233 discreteValue -= iStepCount + 1;
237 while(discreteValue < 0)
238 discreteValue += iStepCount + 1;
247 return discreteValue;
260 template<
int32 StepCount,
typename IntType =
int32>
277 fToStringOffset{iToStringOffset}, fFormat{std::move(iFormat)} {}
281 fToStringValues(iToStringValues.cbegin(), iToStringValues.cend()) {}
298 Steinberg::UString wrapper(oString, str16BufferSize (String128));
302 s.printf(fFormat.c_str(), iValue + fToStringOffset);
303 wrapper.assign(s.text());
307 if(fToStringValues.empty())
309 if(!wrapper.printInt(iValue + fToStringOffset))
314 wrapper.assign(fToStringValues[iValue].c_str());
320 IntType fToStringOffset{};
322 std::vector<VstString16> fToStringValues{};
351 template<
typename T,
class Compare = std::less<T>>
357 using TMap = std::map<T, std::tuple<VstString16, ParamValue, int32>, Compare>;
365 using ConstructorType = std::initializer_list<std::pair<const T, VstString16>>
const &;
376 auto stepCount = static_cast<int32>(iInitList.size() - 1);
379 DCHECK_F(stepCount > 0);
382 for(
auto &pair : iInitList)
385 fMap[pair.first] = std::make_tuple(pair.second, paramValue, i);
386 fList.emplace_back(pair.first);
391 DCHECK_F(fList.size() == fMap.size());
395 inline int32
getStepCount()
const override {
return static_cast<int32>(fMap.size() - 1); }
400 auto iter = fMap.find(iValue);
401 if(iter != fMap.cend())
402 return std::get<1>(iter->second);
405 DLOG_F(WARNING,
"could not normalize value...");
420 auto iter = fMap.find(iValue);
421 if(iter != fMap.cend())
423 Steinberg::UString wrapper(oString, str16BufferSize (String128));
424 wrapper.assign(std::get<0>(iter->second).c_str());
440 template<
typename Enum, Enum MaxValue>
469 return fConverter.normalize(static_cast<IntType>(iDiscreteValue));
475 return static_cast<Enum>(fConverter.denormalize(iNormalizedValue));
481 fConverter.toString(static_cast<IntType>(iValue), oString, iPrecision);
int32 getStepCount() const override
Definition: ParamConverters.h:283
static T clamp(const U &iValue, const T &iLower, const T &iUpper)
Make sure that the value remains within its bounds.
Definition: Misc.h:33
void toString(ParamType const &iValue, String128 oString, int32 iPrecision) const override
Definition: ParamConverters.h:418
virtual void toString(ParamType const &iValue, String128 iString, int32 iPrecision) const
Definition: ParamConverters.h:60
std::initializer_list< std::pair< const T, VstString16 > > const & ConstructorType
Defines the type for the constructor argument.
Definition: ParamConverters.h:365
double denormalize(ParamValue iNormalizedValue) const override
Definition: ParamConverters.h:169
std::vector< T > TList
Defines the mapping: discrete value [0, stepCount] to T.
Definition: ParamConverters.h:361
int32 getStepCount() const override
Definition: ParamConverters.h:118
constexpr auto ZERO_INT32
Definition: Constants.h:24
DiscreteValueParamConverter(ConstructorType iToStringValues)
Definition: ParamConverters.h:280
Enum ParamType
Definition: ParamConverters.h:56
void toString(ParamType const &iValue, String128 oString, int32 iPrecision) const override
Definition: ParamConverters.h:479
std::underlying_type_t< Enum > IntType
Definition: ParamConverters.h:446
DiscreteValueParamConverter(VstString16 iFormat, IntType iToStringOffset=0)
Definition: ParamConverters.h:276
EnumParamConverter(ConstructorType iToStringValues)
Definition: ParamConverters.h:461
std::array< VstString16, MaxValue+1 > const & ConstructorType
Defines the type for the constructor argument.
Definition: ParamConverters.h:452
std::array< VstString16, StepCount+1 > const & ConstructorType
Defines the type for the constructor argument.
Definition: ParamConverters.h:270
DiscreteValueParamConverter(IntType iToStringOffset=0)
Definition: ParamConverters.h:273
DiscreteTypeParamConverter(ConstructorType iInitList)
This constructor will be called this way when initializing a vst or jmb parameter:
Definition: ParamConverters.h:374
void toString(bool const &iValue, String128 oString, int32) const override
Definition: ParamConverters.h:130
This converters maps a list of values of type T to discrete values.
Definition: ParamConverters.h:352
This parameter is just a no-op wrapper to the ParamValue to adapt it to the use of the ParamConverter...
Definition: ParamConverters.h:73
ParamValue normalize(ParamValue const &iValue) const override
Definition: ParamConverters.h:79
ParamValue normalize(double const &iValue) const override
Definition: ParamConverters.h:164
int32 getStepCount() const override
Definition: ParamConverters.h:395
A trivial percent converter.
Definition: ParamConverters.h:158
static void staticToString(ParamValue const &iValue, String128 oString, int32 iPrecision)
Definition: ParamConverters.h:94
ParamValue normalize(ParamType const &iDiscreteValue) const override
Definition: ParamConverters.h:467
EnumParamConverter(VstString16 iFormat, IntType iToStringOffset=0)
Definition: ParamConverters.h:458
ParamType denormalize(ParamValue iNormalizedValue) const override
Definition: ParamConverters.h:411
double Percent
Percent type represented by a double.
Definition: ParamConverters.h:152
void toString(ParamValue const &iValue, String128 oString, int32 iPrecision) const override
Definition: ParamConverters.h:89
std::basic_string< Steinberg::char16 > VstString16
Strings made of char16 characters are represented by the native C++11 type std::basic_string<Steinber...
Definition: Types.h:43
ParamValue normalize(bool const &iValue) const override
Definition: ParamConverters.h:120
ParamValue normalize(ParamType const &iValue) const override
Definition: ParamConverters.h:398
static bool toBoolean(ParamValue iNormalizedValue)
Converts a normalized value to a boolean according to the rule: false for [0.0, 0....
Definition: ParamConverters.h:142
int32 getStepCount() const override
Definition: ParamConverters.h:464
static ParamValue convertDiscreteValueToNormalizedValue(int32 iStepCount, int32 iDiscreteValue)
Implements the algorithm described in the VST documentation on how to interpret a discrete value into...
Definition: ParamConverters.h:186
VstString16 fTrueString
Definition: ParamConverters.h:146
bool denormalize(ParamValue iNormalizedValue) const override
Definition: ParamConverters.h:125
void toString(ParamType const &iValue, String128 oString, int32 iPrecision) const override
Definition: ParamConverters.h:174
Manages the very common case when a param represents a boolean value.
Definition: ParamConverters.h:107
static int32 convertNormalizedValueToDiscreteValue(int32 iStepCount, ParamValue iNormalizedValue)
Implements the algorithm described in the VST documentation on how to interpret a normalized value as...
Definition: ParamConverters.h:199
ParamType denormalize(ParamValue iNormalizedValue) const override
Definition: ParamConverters.h:473
A converter to deal with a discrete value which has StepCount steps.
Definition: ParamConverters.h:261
ParamValue denormalize(ParamValue iNormalizedValue) const override
Definition: ParamConverters.h:84
virtual int32 getStepCount() const
Definition: ParamConverters.h:57
Enum ParamType
Definition: ParamConverters.h:444
VstString16 fFalseString
Definition: ParamConverters.h:145
EnumParamConverter(IntType iToStringOffset=0)
Definition: ParamConverters.h:455
ParamType denormalize(ParamValue iNormalizedValue) const override
Definition: ParamConverters.h:290
DiscreteValueParamConverter< MaxValue, IntType > fConverter
Definition: ParamConverters.h:485
std::map< T, std::tuple< VstString16, ParamValue, int32 >, Compare > TMap
Maintains the map of possible values of T (defined in constructor)
Definition: ParamConverters.h:357
virtual std::string toString(ParamType const &iValue, int32 iPrecision) const
Definition: ParamConverters.h:61
BooleanParamConverter(VstString16 iFalseString=STR16("Off"), VstString16 iTrueString=STR16("On"))
Definition: ParamConverters.h:112
static int32 computeNextDiscreteValue(int32 iValue, int32 iStepCount, int32 iIncrement, bool iWrap)
Implements a standard behavior for what it means to increment (resp.
Definition: ParamConverters.h:217
A converter to deal with an enum (assumes that the enum is contiguous, starts at 0 and that MaxValue ...
Definition: ParamConverters.h:441
std::string toUT8String(VstString16 const &iString)
Converts a VstString16 to a regular std::string that is properly utf-8 encoded.
Definition: Utils.h:39
void toString(ParamType const &iValue, String128 oString, int32) const override
Definition: ParamConverters.h:296
ParamValue normalize(ParamType const &iDiscreteValue) const override
Definition: ParamConverters.h:285
A vst parameter is represented by a ParamValue type which is a double in the range [0,...
Definition: ParamConverters.h:53