Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::signal::chardelay::TapePhysicalChannel Class Reference

The physical tier for one channel. More...

#include <tape_physical.hpp>

Public Member Functions

void prepare (double fs)
void reset () noexcept
void recover_audio_fault () noexcept
 Fresh-state recovery without clearing dynamically sized FIR storage.
void set_seeds (std::uint32_t base) noexcept
void set_speed_ips (double ips)
 Control-thread only: redesigns both filters and starts the crossfade.
double speed_ips () const noexcept
const std::vector< double > & gap_coefficients () const noexcept
TapeLossIirParams loss_parameters () const noexcept
void update (double age) noexcept
 Control-rate update. In this tier character_amount IS the age axis.
double pre_process (double x) noexcept
 Record EQ → oversampled hysteresis → makeup → playback EQ.
double post_process (double x) noexcept
 Wallace loss → head bump → hiss → chew → degrade → DC block.
double in_loop_delay_samples () const noexcept
 Total in-loop delay this tier contributes ahead of the delay line's read: the oversampler's group delay plus both halves of the loss cascade.
std::size_t chew_state_index () const noexcept

Static Public Member Functions

static int oversampler_latency_samples () noexcept
 Group delay the oversampling wrap adds inside the loop, in host samples.

Detailed Description

The physical tier for one channel.

Member Function Documentation

◆ chew_state_index()

std::size_t pulp::signal::chardelay::TapePhysicalChannel::chew_state_index ( ) const
inlinenoexcept

◆ gap_coefficients()

const std::vector< double > & pulp::signal::chardelay::TapePhysicalChannel::gap_coefficients ( ) const
inlinenoexcept

◆ in_loop_delay_samples()

double pulp::signal::chardelay::TapePhysicalChannel::in_loop_delay_samples ( ) const
inlinenoexcept

Total in-loop delay this tier contributes ahead of the delay line's read: the oversampler's group delay plus both halves of the loss cascade.

The engine subtracts this from the requested line delay so the echo still lands on the requested time and latency_samples() can stay 0.

◆ loss_parameters()

TapeLossIirParams pulp::signal::chardelay::TapePhysicalChannel::loss_parameters ( ) const
inlinenoexcept

◆ oversampler_latency_samples()

int pulp::signal::chardelay::TapePhysicalChannel::oversampler_latency_samples ( )
inlinestaticnoexcept

Group delay the oversampling wrap adds inside the loop, in host samples.

◆ post_process()

double pulp::signal::chardelay::TapePhysicalChannel::post_process ( double x)
inlinenoexcept

Wallace loss → head bump → hiss → chew → degrade → DC block.

◆ pre_process()

double pulp::signal::chardelay::TapePhysicalChannel::pre_process ( double x)
inlinenoexcept

Record EQ → oversampled hysteresis → makeup → playback EQ.

◆ prepare()

void pulp::signal::chardelay::TapePhysicalChannel::prepare ( double fs)
inline

◆ recover_audio_fault()

void pulp::signal::chardelay::TapePhysicalChannel::recover_audio_fault ( )
inlinenoexcept

Fresh-state recovery without clearing dynamically sized FIR storage.

◆ reset()

void pulp::signal::chardelay::TapePhysicalChannel::reset ( )
inlinenoexcept

◆ set_seeds()

void pulp::signal::chardelay::TapePhysicalChannel::set_seeds ( std::uint32_t base)
inlinenoexcept

◆ set_speed_ips()

void pulp::signal::chardelay::TapePhysicalChannel::set_speed_ips ( double ips)
inline

Control-thread only: redesigns both filters and starts the crossfade.

The outgoing design keeps running in its OWN complete filter instance and the two outputs are crossfaded — never a blend of coefficients, which for the recursive half would apply mixed coefficients to state belonging to neither design. The incoming stage inherits the outgoing one's FIR history (delayed input samples, meaningful under any coefficients) and starts its recursive half from zero, which the crossfade covers because the incoming stage's weight is still near zero while it warms.

◆ speed_ips()

double pulp::signal::chardelay::TapePhysicalChannel::speed_ips ( ) const
inlinenoexcept

◆ update()

void pulp::signal::chardelay::TapePhysicalChannel::update ( double age)
inlinenoexcept

Control-rate update. In this tier character_amount IS the age axis.


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