19 using DecimalWithoutScrolling::DecimalWithoutScrolling;
21 uint64_t value = getCompressorValue();
22 this->setValue(value >> 24);
24 void writeCurrentValue() final {
25 auto value = this->getValue();
26 if (value >= kMaxKnobPos) {
27 value = kMaxKnobPos - 1;
29 q31_t knobPos = lshiftAndSaturate<24>(value);
32 if (currentUIMode == UI_MODE_HOLDING_AFFECT_ENTIRE_IN_SOUND_EDITOR && soundEditor.editingKitRow()) {
34 Kit* kit = getCurrentKit();
36 for (
Drum* thisDrum = kit->firstDrum; thisDrum !=
nullptr; thisDrum = thisDrum->next) {
37 if (thisDrum->type == DrumType::SOUND) {
38 auto* soundDrum =
static_cast<SoundDrum*
>(thisDrum);
40 setCompressorValue(knobPos, &soundDrum->compressor);
46 setCompressorValue(knobPos, &soundEditor.currentModControllable->compressor);
49 virtual uint64_t getCompressorValue() = 0;
50 virtual void setCompressorValue(q31_t value, RMSFeedbackCompressor* compressor) = 0;
51 [[nodiscard]] int32_t getMaxValue() const final {
return kMaxKnobPos; }
52 [[nodiscard]] int32_t getNumDecimalPlaces()
const override {
return 2; }
53 const char* getUnit()
override {
return "MS"; }
58 using CompressorValue::CompressorValue;
59 uint64_t getCompressorValue()
override {
60 return (uint64_t)soundEditor.currentModControllable->compressor.getAttack();
63 float getDisplayValue()
override {
return soundEditor.currentModControllable->compressor.getAttackMS(); }
67 using CompressorValue::CompressorValue;
68 uint64_t getCompressorValue()
final {
69 return (uint64_t)soundEditor.currentModControllable->compressor.getRelease();
72 float getDisplayValue()
override {
return soundEditor.currentModControllable->compressor.getReleaseMS(); }
73 [[nodiscard]] int32_t getNumDecimalPlaces()
const {
return 1; }
77 using CompressorValue::CompressorValue;
78 uint64_t getCompressorValue()
override {
79 return (uint64_t)soundEditor.currentModControllable->compressor.getRatio();
82 float getDisplayValue()
override {
return soundEditor.currentModControllable->compressor.getRatioForDisplay(); }
83 const char* getUnit()
override {
return " : 1"; }
87 using CompressorValue::CompressorValue;
88 uint64_t getCompressorValue()
override {
89 return (uint64_t)soundEditor.currentModControllable->compressor.getSidechain();
94 float getDisplayValue()
override {
return soundEditor.currentModControllable->compressor.getSidechainForDisplay(); }
95 const char* getUnit()
override {
return "HZ"; }
99 using CompressorValue::CompressorValue;
100 uint64_t getCompressorValue()
override {
101 return (uint64_t)soundEditor.currentModControllable->compressor.getBlend().raw();
104 auto value = this->getValue();
107 if (value < kMaxKnobPos) {
108 knobPos.
raw() = lshiftAndSaturate<24>(value);
113 float getDisplayValue()
override {
return soundEditor.currentModControllable->compressor.getBlendForDisplay(); }
114 const char* getUnit()
override {
return " %"; }
115 [[nodiscard]] int32_t getNumDecimalPlaces()
const override {
return 0; }