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

Dattorro's figure-of-eight reverb tank, one per channel. More...

#include <diffusion.hpp>

Public Member Functions

void prepare (double fs)
void reset ()
void update (double character_amount) noexcept
bool active () const noexcept
 Zero mix means the tank contributes nothing at all — the character is then the bare allpass diffuser, which is the magnitude-flat baseline the diffusion character is specified against.
double mix () const noexcept
double process (double x, double decorrelation) noexcept
void tick_modulation () noexcept

Detailed Description

Dattorro's figure-of-eight reverb tank, one per channel.

The input diffuser above cannot make a reverb on its own: it has no recirculation, so it smears a transient and then falls silent until the delay's next repeat. This is the part that holds energy. Two branches, each a modulated allpass, a delay, a damping lowpass, a second allpass and a second delay, cross-coupled so each branch feeds the other through decay.

Two departures from the textbook tank, both in service of a GRANULAR texture rather than a smooth hall:

  • the first allpass in each branch is swept far harder than an anti-metallic wobble (tens of samples, ~1 Hz), which scatters the recirculating energy in time so the tail shimmers instead of sustaining;
  • each branch delay is read at two extra offset taps as well as its end, which multiplies echo density per pass without another allpass in the loop.

Member Function Documentation

◆ active()

bool pulp::signal::chardelay::ReverbTank::active ( ) const
inlinenoexcept

Zero mix means the tank contributes nothing at all — the character is then the bare allpass diffuser, which is the magnitude-flat baseline the diffusion character is specified against.

◆ mix()

double pulp::signal::chardelay::ReverbTank::mix ( ) const
inlinenoexcept

◆ prepare()

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

◆ process()

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

◆ reset()

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

◆ tick_modulation()

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

◆ update()

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

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