Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
automation_recording.hpp
Go to the documentation of this file.
1#pragma once
2
7
8#include <atomic>
9#include <cstddef>
10#include <cstdint>
11#include <span>
12#include <vector>
13
14namespace pulp::playback {
15
16enum class AutomationRecordMode : std::uint8_t {
20};
21
24 float value = 0.0f;
25 constexpr bool operator==(const RecordedAutomationPoint&) const = default;
26};
27
36
42
47
52 public:
55
56 bool prepare(std::size_t maximum_points);
57 void release() noexcept;
58 bool begin(AutomationRecordMode mode) noexcept;
59 AutomationRecordError record(timebase::TickPosition position, float value,
60 bool gesture_active) noexcept;
61 bool end() noexcept;
62
63 std::span<const RecordedAutomationPoint> points() const noexcept;
64 bool recording() const noexcept;
65 std::uint64_t dropped_points() const noexcept;
66
68 materialize_curve(std::uint64_t next_item_id) const;
69
70 private:
71 AutomationRecordError append(timebase::TickPosition position, float value) noexcept;
72
73 std::vector<RecordedAutomationPoint> points_;
74 std::size_t maximum_points_ = 0;
76 float latched_value_ = 0.0f;
77 bool gesture_was_active_ = false;
78 bool latch_started_ = false;
79 bool recording_ = false;
80 bool prepared_ = false;
81 std::atomic<bool> recording_snapshot_{false};
82 std::atomic<std::uint64_t> dropped_points_{0};
83};
84
85} // namespace pulp::playback
Captures parameter gestures into a bounded point stream.
Definition automation_recording.hpp:51
static constexpr audio::RtSafetyClass record_rt_safety_class
Definition automation_recording.hpp:53
bool recording() const noexcept
bool begin(AutomationRecordMode mode) noexcept
std::uint64_t dropped_points() const noexcept
runtime::Result< MaterializedAutomationCurve, AutomationCurveMaterializationError > materialize_curve(std::uint64_t next_item_id) const
std::span< const RecordedAutomationPoint > points() const noexcept
AutomationRecordError record(timebase::TickPosition position, float value, bool gesture_active) noexcept
bool prepare(std::size_t maximum_points)
Immutable, position-ordered automation points.
Definition automation_curve.hpp:88
RtSafetyClass
Definition rt_safety_contract.hpp:11
@ AudioCallbackSafeAfterPrepare
Definition rt_safety_contract.hpp:13
Definition audio_renderer.hpp:20
AutomationCurveMaterializationError
Definition automation_recording.hpp:37
@ InvalidCurve
Definition automation_recording.hpp:40
@ NoPoints
Definition automation_recording.hpp:38
@ IdentityExhausted
Definition automation_recording.hpp:39
AutomationRecordError
Definition automation_recording.hpp:28
@ InvalidValue
Definition automation_recording.hpp:32
@ NotPrepared
Definition automation_recording.hpp:30
@ None
Definition automation_recording.hpp:29
@ NotRecording
Definition automation_recording.hpp:31
@ NonMonotonicPosition
Definition automation_recording.hpp:33
@ CapacityExceeded
Definition audio_renderer.hpp:38
AutomationRecordMode
Definition automation_recording.hpp:16
@ Write
Definition automation_recording.hpp:19
@ Latch
Definition automation_recording.hpp:18
@ Touch
Definition automation_recording.hpp:17
Definition generated_event_source.hpp:33
Definition beat_division.hpp:11
STL namespace.
Result<T, E> — success / failure union for fallible operations.
Definition automation_recording.hpp:43
std::uint64_t next_item_id
Definition automation_recording.hpp:45
timeline::AutomationCurve curve
Definition automation_recording.hpp:44
Definition automation_recording.hpp:22
timebase::TickPosition position
Definition automation_recording.hpp:23
float value
Definition automation_recording.hpp:24
constexpr bool operator==(const RecordedAutomationPoint &) const =default
Definition tick.hpp:61