Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
automation_program.hpp
Go to the documentation of this file.
1#pragma once
2
7
8#include <compare>
9#include <cstdint>
10#include <memory>
11#include <span>
12#include <variant>
13#include <vector>
14
15namespace pulp::playback {
16
17namespace detail {
18class AutomationProgramCompiler;
19}
20
22 std::uint64_t value = 0;
23 constexpr auto operator<=>(const AutomationProgramInstanceToken&) const = default;
24};
25
32
37
50
55class AutomationProgram {
56 public:
59 std::shared_ptr<const timebase::CompiledTempoMap> tempo_map,
61
62 ProgramGeneration generation() const noexcept {
63 return generation_;
64 }
66 return instance_token_;
67 }
68 timeline::ItemId lane_id() const noexcept {
69 return lane_id_;
70 }
71 const timeline::AutomationTarget& target() const noexcept {
72 return target_;
73 }
74
78 return std::get_if<timeline::DeviceParameterTarget>(&target_);
79 }
80 const timebase::CompiledTempoMap& tempo_map() const noexcept {
81 return *tempo_map_;
82 }
83 const std::shared_ptr<const timebase::CompiledTempoMap>& tempo_map_owner() const noexcept {
84 return tempo_map_;
85 }
86 std::span<const AutomationProgramSegment> segments() const noexcept {
87 return segments_;
88 }
89 float leading_value() const noexcept {
90 return leading_value_;
91 }
92 bool empty() const noexcept {
93 return segments_.empty();
94 }
95
96 private:
100 std::shared_ptr<const timebase::CompiledTempoMap> tempo_map,
101 std::vector<AutomationProgramSegment> segments, float leading_value) noexcept;
102
103 ProgramGeneration generation_ = 0;
104 AutomationProgramInstanceToken instance_token_;
105 timeline::ItemId lane_id_;
107 std::shared_ptr<const timebase::CompiledTempoMap> tempo_map_;
108 std::vector<AutomationProgramSegment> segments_;
109 float leading_value_ = 0.0f;
110};
111
117 timebase::SamplePosition sample, bool cold,
118 std::size_t segment_index) noexcept;
119
124float evaluate_automation_segment(const AutomationProgram& program, std::size_t segment_index,
126 timebase::TickPosition tick) noexcept;
127
128} // namespace pulp::playback
Immutable tick- and sample-domain form of one automation lane.
Definition automation_program.hpp:55
const timeline::AutomationTarget & target() const noexcept
Definition automation_program.hpp:71
const timeline::DeviceParameterTarget * device_target() const noexcept
The device parameter this lane drives, or none when it drives a control the owning track holds itself...
Definition automation_program.hpp:77
const timebase::CompiledTempoMap & tempo_map() const noexcept
Definition automation_program.hpp:80
friend class detail::AutomationProgramCompiler
Definition automation_program.hpp:97
ProgramGeneration generation() const noexcept
Definition automation_program.hpp:62
std::span< const AutomationProgramSegment > segments() const noexcept
Definition automation_program.hpp:86
AutomationProgramInstanceToken instance_token() const noexcept
Definition automation_program.hpp:65
float leading_value() const noexcept
Definition automation_program.hpp:89
bool empty() const noexcept
Definition automation_program.hpp:92
timeline::ItemId lane_id() const noexcept
Definition automation_program.hpp:68
const std::shared_ptr< const timebase::CompiledTempoMap > & tempo_map_owner() const noexcept
Definition automation_program.hpp:83
static runtime::Result< std::shared_ptr< const AutomationProgram >, AutomationProgramError > compile(const timeline::AutomationLane &lane, std::shared_ptr< const timebase::CompiledTempoMap > tempo_map, ProgramGeneration generation)
Result<T, E> — either holds a T or an E, never both.
Definition result.hpp:76
Definition compiled_tempo_map.hpp:91
Immutable ownership of one authored automation curve and its logical target.
Definition automation_lane.hpp:72
ParameterTarget AutomationTarget
Exhaustive authored-target set.
Definition automation_lane.hpp:21
AutomationInterpolation
Interpolation applied from an automation point to its successor.
Definition automation_curve.hpp:20
@ Continuous
Definition automation_curve.hpp:22
Definition automation_program.hpp:17
Definition audio_renderer.hpp:20
AutomationProgramErrorCode
Definition automation_program.hpp:26
@ UnsupportedTarget
Definition automation_program.hpp:29
@ InstanceTokenExhausted
Definition automation_program.hpp:30
@ InvalidGeneration
Definition automation_program.hpp:27
@ MissingTempoMap
Definition automation_program.hpp:28
std::size_t select_automation_segment(const AutomationProgram &program, timebase::SamplePosition sample, bool cold, std::size_t segment_index) noexcept
Selects the segment governing an absolute timeline sample.
float evaluate_automation_segment(const AutomationProgram &program, std::size_t segment_index, timebase::SamplePosition sample, timebase::TickPosition tick) noexcept
The authored value of one already-selected segment at an exact tick.
std::uint64_t ProgramGeneration
Definition program_identity.hpp:10
Result<T, E> — success / failure union for fallible operations.
Definition automation_program.hpp:33
timeline::ItemId lane
Definition automation_program.hpp:35
AutomationProgramErrorCode code
Definition automation_program.hpp:34
Definition automation_program.hpp:21
constexpr auto operator<=>(const AutomationProgramInstanceToken &) const =default
std::uint64_t value
Definition automation_program.hpp:22
Definition automation_program.hpp:38
timeline::AutomationInterpolation interpolation
Definition automation_program.hpp:45
constexpr bool operator==(const AutomationProgramSegment &) const =default
timebase::SamplePosition start_sample
Definition automation_program.hpp:41
timebase::TickPosition end_tick
Definition automation_program.hpp:40
float curvature
Definition automation_program.hpp:46
float end_value
Definition automation_program.hpp:44
float start_value
Definition automation_program.hpp:43
timebase::TickPosition start_tick
Definition automation_program.hpp:39
timebase::SamplePosition end_sample
Definition automation_program.hpp:42
Definition rational_time.hpp:9
Definition tick.hpp:61
Format-neutral document target for a placed device parameter.
Definition parameter_target.hpp:22
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19