Krotos Modules 3
Loading...
Searching...
No Matches
Saturation.h
Go to the documentation of this file.
1namespace krotos
2{
3 //==============================================================================
8 {
9 public:
18
24
25 Saturation();
27
28 void prepareToPlay(double sampleRate, int blockSize);
29 float processSample(float sample, int channel);
30
31 void setFunctionType(FunctionType function);
32
33 void setInputGainDb(float gainInDb);
34 void setOutputGainDb(float gainInDb);
35
36 void setLowCutFrequency(float newCutoffFrequency);
37 void setHighCutFrequency(float newCutoffFrequency);
38
39 void setMix(float newMixValue);
40
41 private:
50
52 {
53 left = 0,
54 right
55 };
56
57 struct Function
58 {
59 static float hyperbolicTangent(float x) { return dsp::FastMathApproximations::tanh(x); }
60
61 static float anhystericTapeRecordingErf(float x) { return std::erf(x); }
62
63 static float diodic(float x) { return sign(x) * (2.0f * std::abs(x) - x * x); }
64
65 static float saturation1(float x)
66 {
67 float a = 1.5f;
68 return x * (std::abs(x) + a) / (x * x + (a - 1.0f) * std::abs(x) + 1.0f);
69 }
70
71 static float saturation2(float x)
72 {
73 return std::sin(MathConstants<float>::halfPi * jlimit(-1.0f, 1.0f, x));
74 }
75
76 static float saturation3(float x)
77 {
78 float k = 1.3f;
79 float sgn = static_cast<float>(sign(x));
80 x = std::pow(std::abs(x), k);
81 x = std::pow(std::atan(x), (1.0f / k));
82 return sgn * x;
83 }
84 };
85
86 template <typename T> static int sign(T val);
87
88 const int NUM_CHANNELS_MAX{2};
89
90 double m_sampleRate{0.0};
91
92 float m_outputGain{1.0f};
93 float m_inputGain{1.0f};
94 float m_mix{1.0f};
95
96 dsp::WaveShaper<float> m_waveshaper;
97
98 OwnedArray<IIRFilter> m_lowCutFilters;
99 OwnedArray<IIRFilter> m_highCutFilters;
100
101 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Saturation)
102 };
103} // namespace krotos
Applies distortion to an audio signal using various transfer functions.
Definition Saturation.h:8
OwnedArray< IIRFilter > m_highCutFilters
Definition Saturation.h:99
ParameterList
Definition Saturation.h:43
@ preGain
Definition Saturation.h:44
@ lowCut
Definition Saturation.h:46
@ hiCut
Definition Saturation.h:47
@ mix
Definition Saturation.h:48
@ postGain
Definition Saturation.h:45
float m_mix
Definition Saturation.h:94
OwnedArray< IIRFilter > m_lowCutFilters
Definition Saturation.h:98
double m_sampleRate
Definition Saturation.h:90
void setOutputGainDb(float gainInDb)
Definition Saturation.cpp:47
void setHighCutFrequency(float newCutoffFrequency)
Definition Saturation.cpp:59
float processSample(float sample, int channel)
Definition Saturation.cpp:31
void setLowCutFrequency(float newCutoffFrequency)
Definition Saturation.cpp:51
void setInputGainDb(float gainInDb)
Definition Saturation.cpp:45
Saturation()
Definition Saturation.cpp:3
FunctionType
Definition Saturation.h:11
@ diodic
Definition Saturation.h:12
@ saturation3
Definition Saturation.h:16
@ hyperbolicTangent
Definition Saturation.h:13
@ saturation2
Definition Saturation.h:15
@ saturation1
Definition Saturation.h:14
Channel
Definition Saturation.h:52
@ left
Definition Saturation.h:53
@ right
Definition Saturation.h:54
float m_outputGain
Definition Saturation.h:92
const std::map< FunctionType, float(*)(float)> functions
Definition Saturation.h:19
static int sign(T val)
Definition Saturation.cpp:43
dsp::WaveShaper< float > m_waveshaper
Definition Saturation.h:96
void setMix(float newMixValue)
Definition Saturation.cpp:67
~Saturation()
Definition Saturation.cpp:12
void setFunctionType(FunctionType function)
Definition Saturation.cpp:49
const int NUM_CHANNELS_MAX
Definition Saturation.h:88
float m_inputGain
Definition Saturation.h:93
void prepareToPlay(double sampleRate, int blockSize)
Definition Saturation.cpp:14
Definition AirAbsorptionFilter.cpp:2
Definition Saturation.h:58
static float anhystericTapeRecordingErf(float x)
Definition Saturation.h:61
static float hyperbolicTangent(float x)
Definition Saturation.h:59
static float saturation1(float x)
Definition Saturation.h:65
static float saturation3(float x)
Definition Saturation.h:76
static float diodic(float x)
Definition Saturation.h:63
static float saturation2(float x)
Definition Saturation.h:71