Files
serumalt/Source/EffectUnits/Hyper.h
T

35 lines
864 B
C++

#pragma once
#include "../FXProcessor.h"
#include "Biquad.h"
namespace serum
{
// ===========================================================================
// Hyper — an OTT-style three-band upward/downward compressor. p[0]=intensity,
// p[1]=low amount, p[2]=high amount, p[3]=output.
// ===========================================================================
class HyperUnit : public FXUnit
{
public:
void prepare (double sampleRate, int maxBlockSize) override;
void reset() override;
void process (float* l, float* r, int numSamples, const float p[4]) override;
private:
struct Band
{
float env = 0.0f;
float gain = 1.0f;
};
double sr = 44100.0;
Biquad lpL, lpR, hpL, hpR;
Band bL[3], bR[3];
float computeGain (Band& band, float absIn, float intensity) noexcept;
};
} // namespace serum