30 #include "siddefs-fp.h"
43 static inline int clipper(
int x)
46 constexpr
int threshold = 28000;
47 if (likely(x < threshold))
50 constexpr
double max_val =
static_cast<double>(m);
51 constexpr
double t = threshold / max_val;
52 constexpr
double a = 1. - t;
53 constexpr
double b = 1. / a;
55 double value =
static_cast<double>(x - threshold) / max_val;
56 value = t + a * std::tanh(b * value);
57 return static_cast<int>(value * max_val);
63 static inline int softClipImpl(
int x)
65 return x < 0 ? -clipper<32768>(-x) : clipper<32767>(x);
72 static inline short softClip(
int x) {
return static_cast<short>(softClipImpl(x)); }
74 virtual int output()
const = 0;
87 virtual bool input(
int sample) = 0;
96 const int out = (scaleFactor * output()) / 2;
100 virtual void reset() = 0;
Definition: Resampler.h:40
virtual bool input(int sample)=0
short getOutput(int scaleFactor) const
Definition: Resampler.h:94