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

Bounded stochastic collision model for shaken particle instruments. More...

#include <particle_collision_exciter.hpp>

Classes

struct  CollisionEvent

Public Member Functions

 ParticleCollisionExciterT ()
void prepare (double sample_rate)
 Reconfigures the two NoiseSourceT streams and clears dynamic state.
void set_seed (std::uint64_t seed) noexcept
void set_particle_count (int count) noexcept
void set_event_rate (SampleType events_per_second) noexcept
void set_energy_decay (SampleType milliseconds) noexcept
void set_sustain_floor (SampleType floor) noexcept
void set_collision_energy_loss (SampleType loss) noexcept
 Absolute normalized-energy decrement applied after each collision.
void reset () noexcept
void excite (SampleType amount01) noexcept
CollisionEvent next () noexcept
SampleType energy () const noexcept
int particle_count () const noexcept
SampleType event_rate () const noexcept
SampleType energy_decay_ms () const noexcept
SampleType sustain_floor () const noexcept
SampleType collision_energy_loss () const noexcept
std::uint64_t seed () const noexcept
double sample_rate () const noexcept
int tail_samples () const noexcept
 Conservative samples until the decay envelope reaches its exact floor, assuming no more excite() calls.

Static Public Member Functions

static constexpr int latency_samples () noexcept
static constexpr std::size_t retained_bytes () noexcept

Static Public Attributes

static constexpr int kMaxParticleCount = 2000
static constexpr double kDefaultSampleRate = 48000.0
static constexpr double kMinSupportedSampleRate = 8000.0
static constexpr std::uint64_t kDefaultSeed = 0x5041525449434C45ull

Detailed Description

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

Bounded stochastic collision model for shaken particle instruments.

One event draw is consumed on every sample. Amplitude jitter is drawn from a separately seeded stream only when a collision occurs, so changing the amplitude law cannot move event times. reset() rewinds both streams and clears the accumulated energy.

RT contract: after control-side prepare() and parameter updates, next(), excite(), and reset() allocate nothing, lock nothing, and perform no I/O.

Constructor & Destructor Documentation

◆ ParticleCollisionExciterT()

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

Member Function Documentation

◆ collision_energy_loss()

template<typename SampleType = float>
SampleType pulp::signal::ParticleCollisionExciterT< SampleType >::collision_energy_loss ( ) const
inlinenodiscardnoexcept

◆ energy()

template<typename SampleType = float>
SampleType pulp::signal::ParticleCollisionExciterT< SampleType >::energy ( ) const
inlinenodiscardnoexcept

◆ energy_decay_ms()

template<typename SampleType = float>
SampleType pulp::signal::ParticleCollisionExciterT< SampleType >::energy_decay_ms ( ) const
inlinenodiscardnoexcept

◆ event_rate()

template<typename SampleType = float>
SampleType pulp::signal::ParticleCollisionExciterT< SampleType >::event_rate ( ) const
inlinenodiscardnoexcept

◆ excite()

template<typename SampleType = float>
void pulp::signal::ParticleCollisionExciterT< SampleType >::excite ( SampleType amount01)
inlinenoexcept

◆ latency_samples()

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

◆ next()

template<typename SampleType = float>
CollisionEvent pulp::signal::ParticleCollisionExciterT< SampleType >::next ( )
inlinenoexcept

◆ particle_count()

template<typename SampleType = float>
int pulp::signal::ParticleCollisionExciterT< SampleType >::particle_count ( ) const
inlinenodiscardnoexcept

◆ prepare()

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

Reconfigures the two NoiseSourceT streams and clears dynamic state.

Rates below 8 kHz or non-finite rates retain the prior valid rate. NoiseSourceT::prepare() is bounded control-side work.

◆ reset()

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

◆ retained_bytes()

template<typename SampleType = float>
constexpr std::size_t pulp::signal::ParticleCollisionExciterT< SampleType >::retained_bytes ( )
inlinestaticconstexprnoexcept

◆ sample_rate()

template<typename SampleType = float>
double pulp::signal::ParticleCollisionExciterT< SampleType >::sample_rate ( ) const
inlinenodiscardnoexcept

◆ seed()

template<typename SampleType = float>
std::uint64_t pulp::signal::ParticleCollisionExciterT< SampleType >::seed ( ) const
inlinenodiscardnoexcept

◆ set_collision_energy_loss()

template<typename SampleType = float>
void pulp::signal::ParticleCollisionExciterT< SampleType >::set_collision_energy_loss ( SampleType loss)
inlinenoexcept

Absolute normalized-energy decrement applied after each collision.

◆ set_energy_decay()

template<typename SampleType = float>
void pulp::signal::ParticleCollisionExciterT< SampleType >::set_energy_decay ( SampleType milliseconds)
inlinenoexcept

◆ set_event_rate()

template<typename SampleType = float>
void pulp::signal::ParticleCollisionExciterT< SampleType >::set_event_rate ( SampleType events_per_second)
inlinenoexcept

◆ set_particle_count()

template<typename SampleType = float>
void pulp::signal::ParticleCollisionExciterT< SampleType >::set_particle_count ( int count)
inlinenoexcept

◆ set_seed()

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

◆ set_sustain_floor()

template<typename SampleType = float>
void pulp::signal::ParticleCollisionExciterT< SampleType >::set_sustain_floor ( SampleType floor)
inlinenoexcept

◆ sustain_floor()

template<typename SampleType = float>
SampleType pulp::signal::ParticleCollisionExciterT< SampleType >::sustain_floor ( ) const
inlinenodiscardnoexcept

◆ tail_samples()

template<typename SampleType = float>
int pulp::signal::ParticleCollisionExciterT< SampleType >::tail_samples ( ) const
inlinenodiscardnoexcept

Conservative samples until the decay envelope reaches its exact floor, assuming no more excite() calls.

Collisions can only shorten this tail.

Member Data Documentation

◆ kDefaultSampleRate

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

◆ kDefaultSeed

template<typename SampleType = float>
std::uint64_t pulp::signal::ParticleCollisionExciterT< SampleType >::kDefaultSeed = 0x5041525449434C45ull
staticconstexpr

◆ kMaxParticleCount

template<typename SampleType = float>
int pulp::signal::ParticleCollisionExciterT< SampleType >::kMaxParticleCount = 2000
staticconstexpr

◆ kMinSupportedSampleRate

template<typename SampleType = float>
double pulp::signal::ParticleCollisionExciterT< SampleType >::kMinSupportedSampleRate = 8000.0
staticconstexpr

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