Class thl::dsp::fx::IntellijelWavefolderImpl#

class IntellijelWavefolderImpl : public thl::dsp::BaseProcessor#

Inheritance diagram for thl::dsp::fx::IntellijelWavefolderImpl:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "2" [label="thl::dsp::BaseProcessor" tooltip="thl::dsp::BaseProcessor"] "1" [label="thl::dsp::fx::IntellijelWavefolderImpl" tooltip="thl::dsp::fx::IntellijelWavefolderImpl" fillcolor="#BFBFBF"] "1" -> "2" [dir=forward tooltip="public-inheritance"] }

Collaboration diagram for thl::dsp::fx::IntellijelWavefolderImpl:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "2" [label="thl::dsp::BaseProcessor" tooltip="thl::dsp::BaseProcessor"] "1" [label="thl::dsp::fx::IntellijelWavefolderImpl" tooltip="thl::dsp::fx::IntellijelWavefolderImpl" fillcolor="#BFBFBF"] "1" -> "2" [dir=forward tooltip="public-inheritance"] }

Intellijel-style wavefolder processor.

Models the analog wavefolder topology found in the Intellijel µFold / Bifold modules. Uses a sine-shaping transfer function with a continuous Folds parameter, combined with an optional JFET-like soft saturation stage for tonal warmth.

Per-sample parameter smoothing prevents zipper noise when Drive/Folds/ Symmetry/JfetTone are modulated at control rate. A one-pole DC blocker on the output removes the static DC offset the transfer function produces for non-zero Symmetry.

Output is amplitude-normalized to the input: a one-pole envelope follower tracks both input and post-fold output level, and the output is scaled so its envelope matches the input’s. This prevents two artifacts: noise from a non-zero Symmetry/Drive when the input is silent (Symmetry synthesises DC from nothing), and large loudness jumps when Drive/Folds/Symmetry are randomized while audio is playing. Drive/Folds/Symmetry still control the harmonic content; they no longer control the level.

Processes all input channels in-place.

Parameters: Drive – input gain before folding [0.1, 20] Folds – fold depth [0, 10]; fractional values interpolate smoothly Symmetry – DC offset before folding [-1, 1]; adds even harmonics JfetTone – blend of JFET soft saturation [0 = clean, 1 = full]

Public Functions

IntellijelWavefolderImpl()#
~IntellijelWavefolderImpl() override#
virtual void prepare(const double &sample_rate, const size_t &samples_per_block, const size_t &num_channels) override#
virtual void process(thl::core::BufferView buffer, uint32_t modulation_offset = 0) override#

Protected Types

enum Parameter#

Values:

enumerator Drive#
enumerator Folds#
enumerator Symmetry#
enumerator JfetTone#
enumerator NumParameters#

Protected Functions

template<typename T>
T get_parameter(Parameter p, uint32_t modulation_offset = 0)#
virtual float get_parameter_float(Parameter p, uint32_t modulation_offset = 0) = 0#
template<>
inline float get_parameter(Parameter p, uint32_t modulation_offset)#