|
- #include "engine/ParamQuantity.hpp"
- #include "app.hpp"
- #include "engine/Engine.hpp"
-
-
- namespace rack {
- namespace engine {
-
-
- engine::Param *ParamQuantity::getParam() {
- assert(module);
- return &module->params[paramId];
- }
-
- void ParamQuantity::setSmoothValue(float smoothValue) {
- if (!module)
- return;
- smoothValue = math::clampSafe(smoothValue, getMinValue(), getMaxValue());
- APP->engine->setSmoothParam(module, paramId, smoothValue);
- }
-
- float ParamQuantity::getSmoothValue() {
- if (!module)
- return 0.f;
- return APP->engine->getSmoothParam(module, paramId);
- }
-
- void ParamQuantity::setValue(float value) {
- if (!module)
- return;
- value = math::clampSafe(value, getMinValue(), getMaxValue());
- APP->engine->setParam(module, paramId, value);
- }
-
- float ParamQuantity::getValue() {
- if (!module)
- return 0.f;
- return APP->engine->getParam(module, paramId);
- }
-
- float ParamQuantity::getMinValue() {
- return minValue;
- }
-
- float ParamQuantity::getMaxValue() {
- return maxValue;
- }
-
- float ParamQuantity::getDefaultValue() {
- return defaultValue;
- }
-
- float ParamQuantity::getDisplayValue() {
- if (!module)
- return Quantity::getDisplayValue();
- float v = getSmoothValue();
- if (displayBase == 0.f) {
- // Linear
- // v is unchanged
- }
- else if (displayBase < 0.f) {
- // Logarithmic
- v = std::log(v) / std::log(-displayBase);
- }
- else {
- // Exponential
- v = std::pow(displayBase, v);
- }
- return v * displayMultiplier + displayOffset;
- }
-
- void ParamQuantity::setDisplayValue(float displayValue) {
- if (!module)
- return;
- float v = (displayValue - displayOffset) / displayMultiplier;
- if (displayBase == 0.f) {
- // Linear
- // v is unchanged
- }
- else if (displayBase < 0.f) {
- // Logarithmic
- v = std::pow(-displayBase, v);
- }
- else {
- // Exponential
- v = std::log(v) / std::log(displayBase);
- }
- setValue(v);
- }
-
- int ParamQuantity::getDisplayPrecision() {
- return Quantity::getDisplayPrecision();
- }
-
- std::string ParamQuantity::getDisplayValueString() {
- return Quantity::getDisplayValueString();
- }
-
- void ParamQuantity::setDisplayValueString(std::string s) {
- Quantity::setDisplayValueString(s);
- }
-
- std::string ParamQuantity::getLabel() {
- return label;
- }
-
- std::string ParamQuantity::getUnit() {
- return unit;
- }
-
-
- } // namespace engine
- } // namespace rack
|