Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::signal::MultistageWavefolderT< SampleType > Class Template Reference

A sequential wavefolder whose stage drive increases through the chain. More...

#include <nonlinear_shaping.hpp>

Public Member Functions

void prepare (double sample_rate)
void set_alias_policy (NonlinearAliasPolicy policy)
NonlinearAliasPolicy alias_policy () const noexcept
int oversample_factor () const noexcept
int latency_samples () const noexcept
int tail_samples () const noexcept
double sample_rate () const noexcept
void set_stages (int stages) noexcept
int stages () const noexcept
void set_fold (double fold01) noexcept
double fold () const noexcept
void set_stage_offset (int stage, double offset) noexcept
double stage_offset (int stage) const noexcept
void set_stage_symmetry (int stage, double symmetry) noexcept
double stage_symmetry (int stage) const noexcept
void set_dc_coupling (double amount01) noexcept
 How much of each stage's zero-input operating point reaches the next stage.
void set_stage_dc_coupling (int stage, double amount01) noexcept
double stage_dc_coupling (int stage) const noexcept
double small_signal_gain () const noexcept
 The exact slope at the origin where differentiable; zero at a fold cusp.
double dc_output () const noexcept
void reset () noexcept
SampleType process (SampleType input) noexcept
void process_block (const SampleType *input, SampleType *output, std::size_t sample_count) noexcept
double shape (double input) const noexcept

Static Public Attributes

static constexpr int kMaxStages = 8
static constexpr double kRawInputLimit = 64.0

Detailed Description

template<typename SampleType = float>
class pulp::signal::MultistageWavefolderT< SampleType >

A sequential wavefolder whose stage drive increases through the chain.

The default four-times oversampling uses Pulp's standard linear-phase FIR pair and reports its exact host-rate latency. off is an explicit raw reference mode, not an antialiased quality setting. Configuration may allocate inside the composed oversampler; process(), process_block(), and reset() allocate nothing and take no locks.

Member Function Documentation

◆ alias_policy()

template<typename SampleType = float>
NonlinearAliasPolicy pulp::signal::MultistageWavefolderT< SampleType >::alias_policy ( ) const
inlinenoexcept

◆ dc_output()

template<typename SampleType = float>
double pulp::signal::MultistageWavefolderT< SampleType >::dc_output ( ) const
inlinenoexcept

◆ fold()

template<typename SampleType = float>
double pulp::signal::MultistageWavefolderT< SampleType >::fold ( ) const
inlinenoexcept

◆ latency_samples()

template<typename SampleType = float>
int pulp::signal::MultistageWavefolderT< SampleType >::latency_samples ( ) const
inlinenoexcept

◆ oversample_factor()

template<typename SampleType = float>
int pulp::signal::MultistageWavefolderT< SampleType >::oversample_factor ( ) const
inlinenoexcept

◆ prepare()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::prepare ( double sample_rate)
inline

◆ process()

template<typename SampleType = float>
SampleType pulp::signal::MultistageWavefolderT< SampleType >::process ( SampleType input)
inlinenoexcept

◆ process_block()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::process_block ( const SampleType * input,
SampleType * output,
std::size_t sample_count )
inlinenoexcept

◆ reset()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::reset ( )
inlinenoexcept

◆ sample_rate()

template<typename SampleType = float>
double pulp::signal::MultistageWavefolderT< SampleType >::sample_rate ( ) const
inlinenoexcept

◆ set_alias_policy()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::set_alias_policy ( NonlinearAliasPolicy policy)
inline

◆ set_dc_coupling()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::set_dc_coupling ( double amount01)
inlinenoexcept

How much of each stage's zero-input operating point reaches the next stage.

One is a fully DC-coupled cascade; zero subtracts that static point locally. This is a memoryless transfer-law choice, not a high-pass filter, so it adds no state, latency, or decay tail.

◆ set_fold()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::set_fold ( double fold01)
inlinenoexcept

◆ set_stage_dc_coupling()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::set_stage_dc_coupling ( int stage,
double amount01 )
inlinenoexcept

◆ set_stage_offset()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::set_stage_offset ( int stage,
double offset )
inlinenoexcept

◆ set_stage_symmetry()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::set_stage_symmetry ( int stage,
double symmetry )
inlinenoexcept

◆ set_stages()

template<typename SampleType = float>
void pulp::signal::MultistageWavefolderT< SampleType >::set_stages ( int stages)
inlinenoexcept

◆ shape()

template<typename SampleType = float>
double pulp::signal::MultistageWavefolderT< SampleType >::shape ( double input) const
inlinenoexcept

◆ small_signal_gain()

template<typename SampleType = float>
double pulp::signal::MultistageWavefolderT< SampleType >::small_signal_gain ( ) const
inlinenoexcept

The exact slope at the origin where differentiable; zero at a fold cusp.

◆ stage_dc_coupling()

template<typename SampleType = float>
double pulp::signal::MultistageWavefolderT< SampleType >::stage_dc_coupling ( int stage) const
inlinenoexcept

◆ stage_offset()

template<typename SampleType = float>
double pulp::signal::MultistageWavefolderT< SampleType >::stage_offset ( int stage) const
inlinenoexcept

◆ stage_symmetry()

template<typename SampleType = float>
double pulp::signal::MultistageWavefolderT< SampleType >::stage_symmetry ( int stage) const
inlinenoexcept

◆ stages()

template<typename SampleType = float>
int pulp::signal::MultistageWavefolderT< SampleType >::stages ( ) const
inlinenoexcept

◆ tail_samples()

template<typename SampleType = float>
int pulp::signal::MultistageWavefolderT< SampleType >::tail_samples ( ) const
inlinenoexcept

Member Data Documentation

◆ kMaxStages

template<typename SampleType = float>
int pulp::signal::MultistageWavefolderT< SampleType >::kMaxStages = 8
staticconstexpr

◆ kRawInputLimit

template<typename SampleType = float>
double pulp::signal::MultistageWavefolderT< SampleType >::kRawInputLimit = 64.0
staticconstexpr

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