feat: adding wave folding distortion

This commit is contained in:
Liam Kerr 2026-08-02 23:13:42 +01:00
parent e7ff4fcc18
commit b8f0211f4b
3 changed files with 19 additions and 3 deletions

View file

@ -33,5 +33,16 @@ float Clipper::clip(const float in) {
float normalized = (in / clip_) * 0.75f; float normalized = (in / clip_) * 0.75f;
return std::tanh(normalized) * clip_; return std::tanh(normalized) * clip_;
} }
case kClipperModeFold: {
float x = in;
while (x > clip_ || x < -clip_) {
if (x > clip_) {
x = 2.0f * clip_ - x;
} else if (x < -clip_) {
x = -2.0f * clip_ - x;
}
}
return x;
}
} }
} }

View file

@ -5,7 +5,12 @@
class Clipper { class Clipper {
public: public:
enum ClipperMode { kClipperModeSoft, kClipperModeHard, kClipperModeCount }; enum ClipperMode {
kClipperModeSoft,
kClipperModeHard,
kClipperModeFold,
kClipperModeCount
};
Clipper(float init_clip = 1.0f, ClipperMode mode = kClipperModeSoft); Clipper(float init_clip = 1.0f, ClipperMode mode = kClipperModeSoft);

View file

@ -45,8 +45,8 @@ protected:
parameter.hints = kParameterIsAutomatable | kParameterIsInteger; parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
parameter.enumValues.count = Clipper::kClipperModeCount; parameter.enumValues.count = Clipper::kClipperModeCount;
parameter.enumValues.restrictedMode = true; parameter.enumValues.restrictedMode = true;
parameter.enumValues.values = parameter.enumValues.values = new ParameterEnumerationValue[3]{
new ParameterEnumerationValue[2]{{0.0f, "Soft"}, {1.0f, "Hard"}}; {0.0f, "Soft"}, {1.0f, "Hard"}, {2.0f, "Fold"}};
break; break;
} }
} }