Class thl::dsp::fx::IntellijelWavefolderImpl#
-
class IntellijelWavefolderImpl : public thl::dsp::BaseProcessor#
Inheritance diagram for thl::dsp::fx::IntellijelWavefolderImpl:
Collaboration diagram for thl::dsp::fx::IntellijelWavefolderImpl:
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
Foldsparameter, 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
-
IntellijelWavefolderImpl()#