Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
breakpoint_envelope.hpp File Reference

Fixed-capacity, sample-accurate breakpoint modulation envelope. More...

#include <pulp/signal/modulation_curve.hpp>
#include <algorithm>
#include <array>
#include <cmath>
#include <cstddef>
#include <cstdint>
#include <limits>
#include <span>
#include <type_traits>

Go to the source code of this file.

Classes

struct  pulp::signal::BreakpointEnvelopePointT< SampleType >
class  pulp::signal::BreakpointEnvelopeT< SampleType, MaxPoints >

Namespaces

namespace  pulp
namespace  pulp::signal

Typedefs

using pulp::signal::BreakpointEnvelopePoint = BreakpointEnvelopePointT<float>
using pulp::signal::BreakpointEnvelopePoint64 = BreakpointEnvelopePointT<double>
using pulp::signal::BreakpointEnvelope = BreakpointEnvelopeT<float>
using pulp::signal::BreakpointEnvelope64 = BreakpointEnvelopeT<double>

Enumerations

enum class  pulp::signal::BreakpointEnvelopeStatus : std::uint8_t {
  pulp::signal::ok , pulp::signal::too_few_points , pulp::signal::too_many_points , pulp::signal::invalid_time ,
  pulp::signal::times_not_ordered , pulp::signal::invalid_value , pulp::signal::invalid_sample_rate , pulp::signal::invalid_loop
}

Detailed Description

Fixed-capacity, sample-accurate breakpoint modulation envelope.

A program is authored as absolute times in milliseconds and values in the caller's real unit. Values are not normalized. The curve stored at point N shapes the segment from N to N+1. Equal adjacent times are legal and become bounded, instantaneous transitions.

trigger() places the source exactly at point zero. Each next() advances one sample; a segment quantized to N samples reaches its endpoint on the Nth call. The final value is held after completion. A loop wraps after emitting its end point; if the loop endpoint and start point differ, the discontinuity occurs before the following sample by explicit authored choice.

RT contract: the program and runtime state are fixed-capacity scalar/array storage. next(), process(), trigger(), and reset() allocate nothing, acquire no locks, and perform bounded work. Configuration and prepare() are control-thread operations.