diff --git a/core/Clipper.cpp b/core/Clipper.cpp new file mode 100644 index 0000000..28b206c --- /dev/null +++ b/core/Clipper.cpp @@ -0,0 +1,16 @@ +#include "Clipper.hpp" + +Clipper::Clipper(float init_clip) : clip_(init_clip) {} + +void Clipper::process(const float *in, float *out, uint32_t frames) { + for (uint32_t i = 0; i < frames; ++i) { + out[i] = in[i] > clip_ ? clip_ : in[i]; + } +} +void Clipper::processStereo(const float *inLeft, const float *inRight, + float *outLeft, float *outRight, uint32_t frames) { + for (uint32_t i = 0; i < frames; ++i) { + outLeft[i] = inLeft[i] > clip_ ? clip_ : inLeft[i]; + outRight[i] = inRight[i] > clip_ ? clip_ : inRight[i]; + } +} diff --git a/core/Clipper.hpp b/core/Clipper.hpp new file mode 100644 index 0000000..8309279 --- /dev/null +++ b/core/Clipper.hpp @@ -0,0 +1,22 @@ +#ifndef CLIPPER_HPP_INCLUDED +#define CLIPPER_HPP_INCLUDED + +#include + +class Clipper { +public: + Clipper(float init_clip = 1.0f); + + void process(const float *in, float *out, uint32_t frames); + void processStereo(const float *inLeft, const float *inRight, float *outLeft, + float *outRight, uint32_t frames); + +private: + float clip_; + +public: + void setGain(float c) { clip_ = c; } + float getGain() const { return clip_; } +}; + +#endif // CLIPPER_HPP_INCLUDED \ No newline at end of file diff --git a/plugins/SquidgeDistortion/Makefile b/plugins/SquidgeDistortion/Makefile index 4055cd1..6175a5c 100644 --- a/plugins/SquidgeDistortion/Makefile +++ b/plugins/SquidgeDistortion/Makefile @@ -1,7 +1,7 @@ #!/usr/bin/make -f NAME = SquidgeDistortion -FILES_DSP = SquidgeDistortion.cpp ../../core/Gain.cpp +FILES_DSP = SquidgeDistortion.cpp ../../core/Gain.cpp ../../core/Clipper.cpp TARGETS = vst3 clap