Zero-latency non-uniform partitioned convolution engine.
More...
#include <zero_latency_convolver_support.hpp>
|
| 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 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.
|
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.
◆ 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.
◆ 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: