Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
track_automation_program.hpp
Go to the documentation of this file.
1#pragma once
2
7
8#include <cstdint>
9#include <memory>
10#include <span>
11#include <vector>
12
13namespace pulp::playback {
14
15namespace detail {
16class TrackAutomationCompiler;
17}
18
28
34 // Reported verbatim so a rejected duplicate names the control it collided
35 // on, whichever kind of target that was.
37};
38
44class TrackAutomationProgram {
45 public:
49 std::shared_ptr<const timebase::CompiledTempoMap> tempo_map,
50 std::vector<std::shared_ptr<const AutomationProgram>> programs);
51
52 timeline::ItemId track_id() const noexcept {
53 return track_id_;
54 }
55 const timebase::CompiledTempoMap& tempo_map() const noexcept {
56 return *tempo_map_;
57 }
58 const std::shared_ptr<const timebase::CompiledTempoMap>& tempo_map_owner() const noexcept {
59 return tempo_map_;
60 }
61 std::span<const std::shared_ptr<const AutomationProgram>> programs() const noexcept {
62 return programs_;
63 }
64 const AutomationProgram* find_lane(timeline::ItemId lane_id) const noexcept;
65
66 private:
68 TrackAutomationProgram(timeline::ItemId track_id,
69 std::shared_ptr<const timebase::CompiledTempoMap> tempo_map,
70 std::vector<std::shared_ptr<const AutomationProgram>> programs) noexcept;
71
72 timeline::ItemId track_id_;
73 std::shared_ptr<const timebase::CompiledTempoMap> tempo_map_;
74 std::vector<std::shared_ptr<const AutomationProgram>> programs_;
75};
76
77} // namespace pulp::playback
Immutable tick- and sample-domain form of one automation lane.
Definition automation_program.hpp:55
std::span< const std::shared_ptr< const AutomationProgram > > programs() const noexcept
Definition track_automation_program.hpp:61
timeline::ItemId track_id() const noexcept
Definition track_automation_program.hpp:52
friend class detail::TrackAutomationCompiler
Definition track_automation_program.hpp:67
const timebase::CompiledTempoMap & tempo_map() const noexcept
Definition track_automation_program.hpp:55
const AutomationProgram * find_lane(timeline::ItemId lane_id) const noexcept
const std::shared_ptr< const timebase::CompiledTempoMap > & tempo_map_owner() const noexcept
Definition track_automation_program.hpp:58
static runtime::Result< std::shared_ptr< const TrackAutomationProgram >, TrackAutomationProgramError > create(timeline::ItemId track_id, std::shared_ptr< const timebase::CompiledTempoMap > tempo_map, std::vector< std::shared_ptr< const AutomationProgram > > programs)
Result<T, E> — either holds a T or an E, never both.
Definition result.hpp:76
Definition compiled_tempo_map.hpp:91
ParameterTarget AutomationTarget
Exhaustive authored-target set.
Definition automation_lane.hpp:21
Definition automation_program.hpp:17
Definition audio_renderer.hpp:20
TrackAutomationProgramErrorCode
Definition track_automation_program.hpp:19
@ DuplicateLane
Definition track_automation_program.hpp:25
@ DuplicateTarget
Definition track_automation_program.hpp:26
@ InvalidLaneId
Definition track_automation_program.hpp:23
@ InvalidTrackId
Definition track_automation_program.hpp:20
@ MissingTempoMap
Definition automation_program.hpp:28
@ MissingProgram
Definition note_renderer.hpp:38
@ TempoMapMismatch
Definition automation_cursor.hpp:33
Result<T, E> — success / failure union for fallible operations.
Definition track_automation_program.hpp:29
timeline::ItemId related_lane
Definition track_automation_program.hpp:33
timeline::ItemId lane
Definition track_automation_program.hpp:32
TrackAutomationProgramErrorCode code
Definition track_automation_program.hpp:30
timeline::ItemId track
Definition track_automation_program.hpp:31
timeline::AutomationTarget target
Definition track_automation_program.hpp:36
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19