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

A wet-only early-reflection renderer with a caller-authored tap pattern. More...

#include <early_reflections.hpp>

Classes

struct  Tap

Public Member Functions

bool prepare (double sample_rate, double maximum_delay_ms=250.0)
bool configure (std::span< const Tap > taps, MatrixHeadroomPolicy policy=MatrixHeadroomPolicy::NormalizePeak) noexcept
 Atomically replaces the complete tap pattern.
bool prepared () const noexcept
double sample_rate () const noexcept
double maximum_delay_ms () const noexcept
std::size_t tap_count () const noexcept
Tap tap (std::size_t index) const noexcept
MatrixHeadroomPolicy headroom_policy () const noexcept
std::size_t retained_bytes () const noexcept
int tail_samples () const noexcept
 The last possibly non-zero linearly interpolated tap sample.
void reset () noexcept
 Logically clears both histories in constant time.
void process_sample (SampleType input_left, SampleType input_right, SampleType &output_left, SampleType &output_right) noexcept
void process_block (const SampleType *input_left, const SampleType *input_right, SampleType *output_left, SampleType *output_right, std::size_t sample_count) noexcept

Static Public Member Functions

static constexpr int latency_samples () noexcept
 This wet-only feed-forward renderer never delays a direct path.

Static Public Attributes

static constexpr std::size_t kMaxTaps = 16
static constexpr double kMinimumSampleRate = 1000.0
static constexpr double kMaximumSampleRate = 768000.0
static constexpr double kMaximumDelayMs = 1000.0

Detailed Description

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

A wet-only early-reflection renderer with a caller-authored tap pattern.

This is the reusable rendering primitive, not a room or image-source model: callers own the geometry (if any) and publish a complete bounded tap set. prepare() and configure() are control-thread operations. Processing and constant-time reset allocate no memory, take no locks, and preserve stereo input identity when a tap uses the default pan/width.

Member Function Documentation

◆ configure()

template<typename SampleType = float>
bool pulp::signal::EarlyReflectionsT< SampleType >::configure ( std::span< const Tap > taps,
MatrixHeadroomPolicy policy = MatrixHeadroomPolicy::NormalizePeak )
inlinenodiscardnoexcept

Atomically replaces the complete tap pattern.

A rejected pattern leaves the active taps, routing gains, headroom policy, and history unchanged.

◆ headroom_policy()

template<typename SampleType = float>
MatrixHeadroomPolicy pulp::signal::EarlyReflectionsT< SampleType >::headroom_policy ( ) const
inlinenoexcept

◆ latency_samples()

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

This wet-only feed-forward renderer never delays a direct path.

◆ maximum_delay_ms()

template<typename SampleType = float>
double pulp::signal::EarlyReflectionsT< SampleType >::maximum_delay_ms ( ) const
inlinenoexcept

◆ prepare()

template<typename SampleType = float>
bool pulp::signal::EarlyReflectionsT< SampleType >::prepare ( double sample_rate,
double maximum_delay_ms = 250.0 )
inlinenodiscard

◆ prepared()

template<typename SampleType = float>
bool pulp::signal::EarlyReflectionsT< SampleType >::prepared ( ) const
inlinenoexcept

◆ process_block()

template<typename SampleType = float>
void pulp::signal::EarlyReflectionsT< SampleType >::process_block ( const SampleType * input_left,
const SampleType * input_right,
SampleType * output_left,
SampleType * output_right,
std::size_t sample_count )
inlinenoexcept

◆ process_sample()

template<typename SampleType = float>
void pulp::signal::EarlyReflectionsT< SampleType >::process_sample ( SampleType input_left,
SampleType input_right,
SampleType & output_left,
SampleType & output_right )
inlinenoexcept

◆ reset()

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

Logically clears both histories in constant time.

◆ retained_bytes()

template<typename SampleType = float>
std::size_t pulp::signal::EarlyReflectionsT< SampleType >::retained_bytes ( ) const
inlinenoexcept

◆ sample_rate()

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

◆ tail_samples()

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

The last possibly non-zero linearly interpolated tap sample.

◆ tap()

template<typename SampleType = float>
Tap pulp::signal::EarlyReflectionsT< SampleType >::tap ( std::size_t index) const
inlinenoexcept

◆ tap_count()

template<typename SampleType = float>
std::size_t pulp::signal::EarlyReflectionsT< SampleType >::tap_count ( ) const
inlinenoexcept

Member Data Documentation

◆ kMaximumDelayMs

template<typename SampleType = float>
double pulp::signal::EarlyReflectionsT< SampleType >::kMaximumDelayMs = 1000.0
staticconstexpr

◆ kMaximumSampleRate

template<typename SampleType = float>
double pulp::signal::EarlyReflectionsT< SampleType >::kMaximumSampleRate = 768000.0
staticconstexpr

◆ kMaxTaps

template<typename SampleType = float>
std::size_t pulp::signal::EarlyReflectionsT< SampleType >::kMaxTaps = 16
staticconstexpr

◆ kMinimumSampleRate

template<typename SampleType = float>
double pulp::signal::EarlyReflectionsT< SampleType >::kMinimumSampleRate = 1000.0
staticconstexpr

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