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

Deterministic discrete-time Poisson impulse source. More...

#include <dust.hpp>

Public Member Functions

 DustT ()
bool prepare (double sample_rate) noexcept
bool set_density_hz (double density_hz) noexcept
bool set_level (SampleType level) noexcept
bool set_distribution (DustAmplitudeDistribution distribution) noexcept
void set_seed (std::uint32_t seed) noexcept
void reset () noexcept
SampleType process () noexcept
void process (SampleType *output, std::size_t frames) noexcept
double sample_rate () const noexcept
double density_hz () const noexcept
SampleType level () const noexcept
DustAmplitudeDistribution distribution () const noexcept
std::uint32_t seed () const noexcept
bool triggered () const noexcept

Static Public Member Functions

static constexpr int latency_samples () noexcept
static constexpr int tail_samples () noexcept

Static Public Attributes

static constexpr double kDefaultSampleRate = 48000.0
static constexpr std::uint32_t kDefaultSeed = 0xD0571234u

Detailed Description

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

Deterministic discrete-time Poisson impulse source.

Each sample is an independent Bernoulli trial with probability density_hz / sample_rate. This is the sample-grid form of a homogeneous Poisson process: its expected event rate is exactly density_hz, intervals are geometrically distributed, and at most one event can occupy a sample. Density is therefore legal on [0, sample_rate] Hz. Output level is a dimensionless magnitude on [0, 1]; bipolar amplitudes occupy [-level, level), while the other laws occupy [0, level]. Event timing and amplitude use independent streams derived from the same public seed, so changing the amplitude law or level never moves an event.

The public seed is the complete initial random condition. set_seed() selects it and reset() rewinds to it; no clock or device entropy is read. Identical parameter histories therefore produce identical samples under every block partition.

RT contract: process() and its block overload are bounded, allocation-free scalar work. There is no recursive floating-point state, so denormals cannot accumulate. Every generated value is finite. Latency and tail are zero.

Constructor & Destructor Documentation

◆ DustT()

template<typename SampleType = float>
pulp::signal::DustT< SampleType >::DustT ( )
inline

Member Function Documentation

◆ density_hz()

template<typename SampleType = float>
double pulp::signal::DustT< SampleType >::density_hz ( ) const
inlinenoexcept

◆ distribution()

template<typename SampleType = float>
DustAmplitudeDistribution pulp::signal::DustT< SampleType >::distribution ( ) const
inlinenoexcept

◆ latency_samples()

template<typename SampleType = float>
constexpr int pulp::signal::DustT< SampleType >::latency_samples ( )
inlinestaticconstexprnoexcept

◆ level()

template<typename SampleType = float>
SampleType pulp::signal::DustT< SampleType >::level ( ) const
inlinenoexcept

◆ prepare()

template<typename SampleType = float>
bool pulp::signal::DustT< SampleType >::prepare ( double sample_rate)
inlinenoexcept

◆ process() [1/2]

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

◆ process() [2/2]

template<typename SampleType = float>
void pulp::signal::DustT< SampleType >::process ( SampleType * output,
std::size_t frames )
inlinenoexcept

◆ reset()

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

◆ sample_rate()

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

◆ seed()

template<typename SampleType = float>
std::uint32_t pulp::signal::DustT< SampleType >::seed ( ) const
inlinenoexcept

◆ set_density_hz()

template<typename SampleType = float>
bool pulp::signal::DustT< SampleType >::set_density_hz ( double density_hz)
inlinenoexcept

◆ set_distribution()

template<typename SampleType = float>
bool pulp::signal::DustT< SampleType >::set_distribution ( DustAmplitudeDistribution distribution)
inlinenoexcept

◆ set_level()

template<typename SampleType = float>
bool pulp::signal::DustT< SampleType >::set_level ( SampleType level)
inlinenoexcept

◆ set_seed()

template<typename SampleType = float>
void pulp::signal::DustT< SampleType >::set_seed ( std::uint32_t seed)
inlinenoexcept

◆ tail_samples()

template<typename SampleType = float>
constexpr int pulp::signal::DustT< SampleType >::tail_samples ( )
inlinestaticconstexprnoexcept

◆ triggered()

template<typename SampleType = float>
bool pulp::signal::DustT< SampleType >::triggered ( ) const
inlinenoexcept

Member Data Documentation

◆ kDefaultSampleRate

template<typename SampleType = float>
double pulp::signal::DustT< SampleType >::kDefaultSampleRate = 48000.0
staticconstexpr

◆ kDefaultSeed

template<typename SampleType = float>
std::uint32_t pulp::signal::DustT< SampleType >::kDefaultSeed = 0xD0571234u
staticconstexpr

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