Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::signal::ZeroLatencyConvolverDesign Struct Reference

Zero-latency non-uniform partitioned convolution engine. More...

#include <zero_latency_convolver_support.hpp>

Static Public Member Functions

static bool valid_resample_geometry (int source_length, double source_rate, double destination_rate, int taps_per_phase) noexcept
 Proves every resampler geometry value is finite and representable before the ingest path casts it to int or allocates source/destination work.

Static Public Attributes

static constexpr int kHeadLenMin = 64
 Head length N0, in taps.
static constexpr int kHeadLenMax = 512
static constexpr double kIrGainDbDefault = 0.0
 IR trim on the convolved path. [dp, default 0 dB, range -24..+24 dB].
static constexpr double kIrGainDbMin = -24.0
static constexpr double kIrGainDbMax = 24.0
static constexpr double kPredelayMsDefault = 0.0
 Pre-IR delay of the wet path.
static constexpr double kPredelayMsMin = 0.0
static constexpr double kPredelayMsMax = 250.0
static constexpr double kWetPercentDefault = 100.0
 Wet / dry mix, in percent. [dp, defaults 100 % / 0 %, range 0..100 %].
static constexpr double kDryPercentDefault = 0.0
static constexpr double kLowcutHzDefault = 20.0
 Send-EQ corners.
static constexpr double kLowcutHzMin = 20.0
static constexpr double kLowcutHzMax = 500.0
static constexpr double kHighcutHzDefault = 20000.0
static constexpr double kHighcutHzMin = 1000.0
static constexpr double kHighcutHzMax = 20000.0
static constexpr double kWidthPercentDefault = 100.0
 Mid/side width of the wet output. [dp, default 100 %, range 0..200 %].
static constexpr double kWidthPercentMin = 0.0
static constexpr double kWidthPercentMax = 200.0
static constexpr double kTailTrimDbDefault = -72.0
 IR truncation floor on the Schroeder backward-energy curve.
static constexpr double kTailTrimDbMin = -90.0
static constexpr double kTailTrimDbMax = -40.0
static constexpr double kTailFadeMsDefault = 5.0
 Raised-cosine fade applied to the last part of the kept IR so the truncation cannot click.
static constexpr double kTailFadeMsMin = 2.0
static constexpr double kTailFadeMsMax = 20.0
static constexpr int kResampTapsPerPhaseDefault = 32
 Resampler kernel width, in taps per polyphase branch.
static constexpr int kResampTapsPerPhaseMin = 16
static constexpr int kResampTapsPerPhaseMax = 64
static constexpr double kResampKaiserBeta = 8.0
 House Kaiser window shape, fixed by the series contract's oversampling / resampling law — not a tunable of this module.
static constexpr double kBlockCostSlackDefault = 1.5
 Peak-to-mean per-block cost slack the distributed schedule is allowed.
static constexpr double kBlockCostSlackMin = 1.2
static constexpr double kBlockCostSlackMax = 2.0
static constexpr double kSilenceEpsilon = 1e-24
 Below this, energies are treated as zero.

Detailed Description

Zero-latency non-uniform partitioned convolution engine.

Public design constants and ingest validation shared by every convolver specialization. Inheritance preserves the established Class::kConstant API.

Member Function Documentation

◆ valid_resample_geometry()

bool pulp::signal::ZeroLatencyConvolverDesign::valid_resample_geometry ( int source_length,
double source_rate,
double destination_rate,
int taps_per_phase )
inlinestaticnoexcept

Proves every resampler geometry value is finite and representable before the ingest path casts it to int or allocates source/destination work.

Public so registration-time wrappers can reject unusable IR metadata before retaining a shared copy.

Member Data Documentation

◆ kBlockCostSlackDefault

double pulp::signal::ZeroLatencyConvolverDesign::kBlockCostSlackDefault = 1.5
staticconstexpr

Peak-to-mean per-block cost slack the distributed schedule is allowed.

[dp, default 1.5, range 1.2..2.0] Absorbs the fact that a sliced transform's phases (permuted gather, butterfly stages, conjugate passes) have different per-item costs, so equal budgets do not produce exactly equal flop counts.

◆ kBlockCostSlackMax

double pulp::signal::ZeroLatencyConvolverDesign::kBlockCostSlackMax = 2.0
staticconstexpr

◆ kBlockCostSlackMin

double pulp::signal::ZeroLatencyConvolverDesign::kBlockCostSlackMin = 1.2
staticconstexpr

◆ kDryPercentDefault

double pulp::signal::ZeroLatencyConvolverDesign::kDryPercentDefault = 0.0
staticconstexpr

◆ kHeadLenMax

int pulp::signal::ZeroLatencyConvolverDesign::kHeadLenMax = 512
staticconstexpr

◆ kHeadLenMin

int pulp::signal::ZeroLatencyConvolverDesign::kHeadLenMin = 64
staticconstexpr

Head length N0, in taps.

[design parameter, default = host block size, range 64..512] Tying N0 to the block size is what lets the head be a plain dot product over samples that are all present in the current block, which is the zero-latency property (see the file doc block).

◆ kHighcutHzDefault

double pulp::signal::ZeroLatencyConvolverDesign::kHighcutHzDefault = 20000.0
staticconstexpr

◆ kHighcutHzMax

double pulp::signal::ZeroLatencyConvolverDesign::kHighcutHzMax = 20000.0
staticconstexpr

◆ kHighcutHzMin

double pulp::signal::ZeroLatencyConvolverDesign::kHighcutHzMin = 1000.0
staticconstexpr

◆ kIrGainDbDefault

double pulp::signal::ZeroLatencyConvolverDesign::kIrGainDbDefault = 0.0
staticconstexpr

IR trim on the convolved path. [dp, default 0 dB, range -24..+24 dB].

◆ kIrGainDbMax

double pulp::signal::ZeroLatencyConvolverDesign::kIrGainDbMax = 24.0
staticconstexpr

◆ kIrGainDbMin

double pulp::signal::ZeroLatencyConvolverDesign::kIrGainDbMin = -24.0
staticconstexpr

◆ kLowcutHzDefault

double pulp::signal::ZeroLatencyConvolverDesign::kLowcutHzDefault = 20.0
staticconstexpr

Send-EQ corners.

[dp, defaults 20 Hz / 20 kHz, ranges 20..500 Hz and 1 k..20 kHz] Each endpoint is defined as OFF: at lowcut_hz == 20 the high-pass is bypassed and at highcut_hz == 20000 the low-pass is bypassed, so the default send path is an exact identity. Without that rule a 1-pole filter sits in the path at the default setting and the engine cannot reproduce its own impulse response, which the impulse identity acceptance test requires to floating-point round-off.

◆ kLowcutHzMax

double pulp::signal::ZeroLatencyConvolverDesign::kLowcutHzMax = 500.0
staticconstexpr

◆ kLowcutHzMin

double pulp::signal::ZeroLatencyConvolverDesign::kLowcutHzMin = 20.0
staticconstexpr

◆ kPredelayMsDefault

double pulp::signal::ZeroLatencyConvolverDesign::kPredelayMsDefault = 0.0
staticconstexpr

Pre-IR delay of the wet path.

[dp, default 0 ms, range 0..250 ms] Signal delay, not I/O latency — latency_samples() is 0 regardless.

◆ kPredelayMsMax

double pulp::signal::ZeroLatencyConvolverDesign::kPredelayMsMax = 250.0
staticconstexpr

◆ kPredelayMsMin

double pulp::signal::ZeroLatencyConvolverDesign::kPredelayMsMin = 0.0
staticconstexpr

◆ kResampKaiserBeta

double pulp::signal::ZeroLatencyConvolverDesign::kResampKaiserBeta = 8.0
staticconstexpr

House Kaiser window shape, fixed by the series contract's oversampling / resampling law — not a tunable of this module.

◆ kResampTapsPerPhaseDefault

int pulp::signal::ZeroLatencyConvolverDesign::kResampTapsPerPhaseDefault = 32
staticconstexpr

Resampler kernel width, in taps per polyphase branch.

[dp, default 32, range 16..64] More taps tighten the stopband at proportionally higher load-time cost; load-time only, never on the audio thread.

◆ kResampTapsPerPhaseMax

int pulp::signal::ZeroLatencyConvolverDesign::kResampTapsPerPhaseMax = 64
staticconstexpr

◆ kResampTapsPerPhaseMin

int pulp::signal::ZeroLatencyConvolverDesign::kResampTapsPerPhaseMin = 16
staticconstexpr

◆ kSilenceEpsilon

double pulp::signal::ZeroLatencyConvolverDesign::kSilenceEpsilon = 1e-24
staticconstexpr

Below this, energies are treated as zero.

Guards a divide and a log of an all-silent IR; any value far below the single-precision noise floor works, range 1e-30..1e-18.

◆ kTailFadeMsDefault

double pulp::signal::ZeroLatencyConvolverDesign::kTailFadeMsDefault = 5.0
staticconstexpr

Raised-cosine fade applied to the last part of the kept IR so the truncation cannot click.

[dp, default 5 ms, range 2..20 ms]

◆ kTailFadeMsMax

double pulp::signal::ZeroLatencyConvolverDesign::kTailFadeMsMax = 20.0
staticconstexpr

◆ kTailFadeMsMin

double pulp::signal::ZeroLatencyConvolverDesign::kTailFadeMsMin = 2.0
staticconstexpr

◆ kTailTrimDbDefault

double pulp::signal::ZeroLatencyConvolverDesign::kTailTrimDbDefault = -72.0
staticconstexpr

IR truncation floor on the Schroeder backward-energy curve.

[dp, default -72 dB, range -90..-40 dB]

◆ kTailTrimDbMax

double pulp::signal::ZeroLatencyConvolverDesign::kTailTrimDbMax = -40.0
staticconstexpr

◆ kTailTrimDbMin

double pulp::signal::ZeroLatencyConvolverDesign::kTailTrimDbMin = -90.0
staticconstexpr

◆ kWetPercentDefault

double pulp::signal::ZeroLatencyConvolverDesign::kWetPercentDefault = 100.0
staticconstexpr

Wet / dry mix, in percent. [dp, defaults 100 % / 0 %, range 0..100 %].

◆ kWidthPercentDefault

double pulp::signal::ZeroLatencyConvolverDesign::kWidthPercentDefault = 100.0
staticconstexpr

Mid/side width of the wet output. [dp, default 100 %, range 0..200 %].

◆ kWidthPercentMax

double pulp::signal::ZeroLatencyConvolverDesign::kWidthPercentMax = 200.0
staticconstexpr

◆ kWidthPercentMin

double pulp::signal::ZeroLatencyConvolverDesign::kWidthPercentMin = 0.0
staticconstexpr

The documentation for this struct was generated from the following file: