Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::signal::chardelay::DiffusionChain Class Reference

The four-stage chain for one channel. More...

#include <diffusion.hpp>

Public Member Functions

void prepare (double fs)
void reset ()
void update (double character_amount) noexcept
 Recompute stage delays and gains for a character amount.
double process_diffuser (double x, double decorrelation) noexcept
 The bare allpass diffuser — the only part safe to RECIRCULATE.
double process_cloud (double x, double decorrelation) noexcept
 The reverb tank, crossfaded in — OUTPUT ONLY, never in the loop.
double process (double x, double decorrelation) noexcept
 One-pass smear for the cross-character output blend: diffuser + cloud.
void tick_modulation () noexcept
 Advance the two anti-metallic LFOs by one sample.

Detailed Description

The four-stage chain for one channel.

Member Function Documentation

◆ prepare()

void pulp::signal::chardelay::DiffusionChain::prepare ( double fs)
inline

◆ process()

double pulp::signal::chardelay::DiffusionChain::process ( double x,
double decorrelation )
inlinenoexcept

One-pass smear for the cross-character output blend: diffuser + cloud.

◆ process_cloud()

double pulp::signal::chardelay::DiffusionChain::process_cloud ( double x,
double decorrelation )
inlinenoexcept

The reverb tank, crossfaded in — OUTPUT ONLY, never in the loop.

The tank rings longer than a typical loop period, so it must not feed back through the delay line and compose two resonators into net growth. On the output it is excited afresh by every repeat (the cloud still blooms per repeat), but its energy never re-enters the line. Tank decay < 1 and loop feedback < 1 therefore guarantee their own halves of the stability contract independently.

◆ process_diffuser()

double pulp::signal::chardelay::DiffusionChain::process_diffuser ( double x,
double decorrelation )
inlinenoexcept

The bare allpass diffuser — the only part safe to RECIRCULATE.

An allpass is unity-gain by construction, so the delay's feedback loop can pass repeats through it forever and the always-decays contract survives. decorrelation scales the modulation depth (1.0 left, kStereoDecorr right).

◆ reset()

void pulp::signal::chardelay::DiffusionChain::reset ( )
inline

◆ tick_modulation()

void pulp::signal::chardelay::DiffusionChain::tick_modulation ( )
inlinenoexcept

Advance the two anti-metallic LFOs by one sample.

◆ update()

void pulp::signal::chardelay::DiffusionChain::update ( double character_amount)
inlinenoexcept

Recompute stage delays and gains for a character amount.

Cheap enough to run at control rate; the odd-sample rounding means the delays step rather than glide, which is inaudible under the allpass.


The documentation for this class was generated from the following file:
  • /home/runner/work/pulp/pulp/core/signal/include/pulp/signal/character_delay/diffusion.hpp