Vital
Loading...
Searching...
No Matches
diode_filter.h
Go to the documentation of this file.
1#pragma once
2
3#include "processor.h"
4#include "synth_filter.h"
5
6#include "futils.h"
7#include "one_pole_filter.h"
8
9namespace vital {
10
20 class DiodeFilter : public Processor, public SynthFilter {
21 public:
25 static constexpr mono_float kMinResonance = 0.7f;
26
30 static constexpr mono_float kMaxResonance = 17.0f;
31
35 static constexpr mono_float kMinCutoff = 1.0f;
36
40 static constexpr mono_float kHighPassFrequency = 20.0f;
41
48
52 virtual ~DiodeFilter() { }
53
58 virtual Processor* clone() const override { return new DiodeFilter(*this); }
59
67 virtual void process(int num_samples) override;
68
75 void setupFilter(const FilterState& filter_state) override;
76
90 force_inline void tick(poly_float audio_in,
91 poly_float coefficient,
92 poly_float high_pass_ratio,
93 poly_float high_pass_amount,
94 poly_float high_pass_feedback_coefficient,
96 poly_float drive);
97
105 void reset(poly_mask reset_mask) override;
106
113 void hardReset() override;
114
119 poly_float getResonance() { return resonance_; }
120
125 poly_float getDrive() { return drive_; }
126
131 poly_float getHighPassRatio() { return high_pass_ratio_; }
132
137 poly_float getHighPassAmount() { return high_pass_amount_; }
138
139 private:
143 poly_float resonance_;
144
148 poly_float drive_;
149
153 poly_float post_multiply_;
154
158 poly_float high_pass_ratio_;
159
163 poly_float high_pass_amount_;
164
168 poly_float feedback_high_pass_coefficient_;
169
175 static force_inline poly_float saturate(poly_float value) {
176 return futils::tanh(value);
177 }
178
184 static force_inline poly_float saturate2(poly_float value) {
185 return utils::clamp(value, -1.0f, 1.0f);
186 }
187
191 OnePoleFilter<> high_pass_1_;
192 OnePoleFilter<> high_pass_2_;
193
197 OnePoleFilter<> high_pass_feedback_;
198 OnePoleFilter<saturate> stage1_;
199 OnePoleFilter<> stage2_;
200 OnePoleFilter<> stage3_;
201 OnePoleFilter<saturate2> stage4_;
202
203 JUCE_LEAK_DETECTOR(DiodeFilter)
204 };
205} // namespace vital
A diode ladder filter implementation for the Vital synthesizer.
Definition diode_filter.h:20
void hardReset() override
Performs a complete hard reset of all internal states (for all voices).
Definition diode_filter.cpp:32
force_inline void tick(poly_float audio_in, poly_float coefficient, poly_float high_pass_ratio, poly_float high_pass_amount, poly_float high_pass_feedback_coefficient, poly_float resonance, poly_float drive)
Processes a single sample of audio through the diode ladder filter stages.
Definition diode_filter.cpp:175
virtual ~DiodeFilter()
Virtual destructor.
Definition diode_filter.h:52
void reset(poly_mask reset_mask) override
Resets internal filter states (such as one-pole filters) with the given reset mask.
Definition diode_filter.cpp:17
poly_float getHighPassAmount()
Gets the current high-pass amount.
Definition diode_filter.h:137
static constexpr mono_float kMinCutoff
Minimum cutoff frequency in Hz (used internally).
Definition diode_filter.h:35
poly_float getHighPassRatio()
Gets the current high-pass ratio.
Definition diode_filter.h:131
poly_float getResonance()
Gets the current resonance setting of the filter.
Definition diode_filter.h:119
static constexpr mono_float kMinResonance
Minimum resonance value for the diode filter.
Definition diode_filter.h:25
void setupFilter(const FilterState &filter_state) override
Sets up filter parameters from the given FilterState.
Definition diode_filter.cpp:131
poly_float getDrive()
Gets the current drive setting of the filter.
Definition diode_filter.h:125
DiodeFilter()
Default constructor.
Definition diode_filter.cpp:9
virtual void process(int num_samples) override
Processes audio data through the diode filter.
Definition diode_filter.cpp:46
static constexpr mono_float kHighPassFrequency
High-pass cutoff frequency in Hz (used internally).
Definition diode_filter.h:40
virtual Processor * clone() const override
Creates a clone (deep copy) of the DiodeFilter object.
Definition diode_filter.h:58
static constexpr mono_float kMaxResonance
Maximum resonance value for the diode filter.
Definition diode_filter.h:30
Base class for all signal-processing units in Vital.
Definition processor.h:212
Abstract base class for Vital’s synthesizer filters.
Definition synth_filter.h:19
#define force_inline
Definition common.h:23
cr::Value resonance
Resonance factor for this formant.
Definition formant_filter.cpp:18
Contains faster but less accurate versions of utility math functions, such as exponential,...
force_inline poly_float tanh(poly_float value)
Approximates tanh function using a complex polynomial.
Definition futils.h:347
force_inline poly_float clamp(poly_float value, mono_float min, mono_float max)
Clamps each lane of a vector to [min, max].
Definition poly_utils.h:306
Contains classes and functions used within the Vital synthesizer framework.
float mono_float
Definition common.h:33
Declares the Processor class and related structures for handling audio processing in a polyphonic con...
Represents a vector of floating-point values using SIMD instructions.
Definition poly_values.h:600
Represents a vector of integer values using SIMD instructions.
Definition poly_values.h:56