Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
automation_curve.hpp
Go to the documentation of this file.
1#pragma once
2
6
7#include <cstdint>
8#include <memory>
9#include <optional>
10#include <span>
11#include <vector>
12
13namespace pulp::timeline {
14
18
20enum class AutomationInterpolation : std::uint8_t {
23};
24
38
42 constexpr bool operator()(const AutomationPoint& lhs,
43 const AutomationPoint& rhs) const noexcept {
44 if (lhs.position != rhs.position)
45 return lhs.position < rhs.position;
46 return lhs.id < rhs.id;
47 }
48};
49
61 timebase::TickPosition end, float start_value,
62 float end_value, float curvature) noexcept;
63
74
81
88class AutomationCurve {
89 public:
95 create(std::vector<AutomationPoint> points);
96
100 std::span<const AutomationPoint> points() const noexcept {
101 return *points_;
102 }
103
106 const AutomationPoint* find_point(ItemId id) const noexcept;
107
113 std::optional<float> value_at(timebase::TickPosition position) const noexcept;
114
128
129 private:
130 explicit AutomationCurve(std::shared_ptr<const std::vector<AutomationPoint>> points)
131 : points_(std::move(points)) {}
132
133 std::shared_ptr<const std::vector<AutomationPoint>> points_;
134};
135
137
138} // namespace pulp::timeline
Result<T, E> — either holds a T or an E, never both.
Definition result.hpp:76
runtime::Result< AutomationCurve, AutomationCurveError > erase_point(ItemId id) const
Returns a new curve without id, or MissingPoint when absent.
std::span< const AutomationPoint > points() const noexcept
Returns points in canonical position-then-identity order.
Definition automation_curve.hpp:100
runtime::Result< AutomationCurve, AutomationCurveError > replace_point(AutomationPoint point) const
Returns a new curve replacing the point with the same identity.
runtime::Result< AutomationCurve, AutomationCurveError > insert_point(AutomationPoint point) const
Returns a new curve containing point; this snapshot remains unchanged.
std::optional< float > value_at(timebase::TickPosition position) const noexcept
Random-access evaluation for control-thread and compile-time use.
const AutomationPoint * find_point(ItemId id) const noexcept
Finds a point by identity, or returns nullptr when absent.
static runtime::Result< AutomationCurve, AutomationCurveError > create(std::vector< AutomationPoint > points)
Validates, canonically orders, and immutably stores points.
float evaluate_continuous_automation_segment(timebase::TickPosition position, timebase::TickPosition start, timebase::TickPosition end, float start_value, float end_value, float curvature) noexcept
Evaluates one continuous segment and clamps outside it.
AutomationInterpolation
Interpolation applied from an automation point to its successor.
Definition automation_curve.hpp:20
AutomationCurveErrorCode
Validation failures returned by AutomationCurve factories and edits.
Definition automation_curve.hpp:65
@ Continuous
Definition automation_curve.hpp:22
@ Hold
Definition automation_curve.hpp:21
@ NonFiniteValue
Definition automation_curve.hpp:70
@ MissingPoint
Definition automation_curve.hpp:72
@ InvalidCurvature
Definition automation_curve.hpp:71
@ DuplicatePointId
Definition automation_curve.hpp:67
@ InvalidInterpolation
Definition automation_curve.hpp:69
@ InvalidPointId
Definition automation_curve.hpp:66
@ DuplicatePosition
Definition automation_curve.hpp:68
Definition program_compiler.hpp:18
STL namespace.
Result<T, E> — success / failure union for fallible operations.
Definition tick.hpp:61
Automation curve failure with the offending and, when relevant, conflicting identities.
Definition automation_curve.hpp:76
AutomationCurveErrorCode code
Definition automation_curve.hpp:77
ItemId point
Definition automation_curve.hpp:78
ItemId related_point
Definition automation_curve.hpp:79
Canonical ordering for authored automation points and curve storage.
Definition automation_curve.hpp:40
constexpr bool operator()(const AutomationPoint &lhs, const AutomationPoint &rhs) const noexcept
Orders by position and then stable point identity.
Definition automation_curve.hpp:42
One identity-bearing automation value at a canonical musical tick.
Definition automation_curve.hpp:29
constexpr bool operator==(const AutomationPoint &) const =default
timebase::TickPosition position
Definition automation_curve.hpp:31
float curvature
Definition automation_curve.hpp:34
ItemId id
Definition automation_curve.hpp:30
float value
Definition automation_curve.hpp:32
AutomationInterpolation interpolation
Definition automation_curve.hpp:33
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19