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 } |
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.