Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
trigger_graph.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <array>
6#include <cstddef>
7#include <cstdint>
8#include <memory>
9#include <span>
10
11namespace pulp::host {
12class SignalGraph;
13namespace detail {
14struct TriggerState;
15struct TriggerController;
16struct TriggerTestAccess;
17} // namespace detail
18
20 std::uint16_t token = 0;
21};
22enum class TriggerKind : std::uint8_t { Trigger = 1 };
24 std::uint64_t epoch = 0;
25 std::uint64_t sample = 0;
26 std::uint64_t sequence = 0;
27 std::uint32_t producer = 0;
28 std::uint16_t token = 0;
29 std::uint8_t source_port = 0;
31};
32static_assert(sizeof(TriggerRecord) == 32);
33
45
46// Borrowed only for one callback. Coordinates and phase belong to the graph.
47class TriggerContext final {
48 public:
52 TriggerEmitResult emit_at_sample(std::int64_t absolute_sample, TriggerPayload payload) noexcept;
53 std::span<const TriggerRecord> received() const noexcept;
54
55 private:
56 friend struct detail::TriggerState;
57 explicit TriggerContext(detail::TriggerState& state) noexcept : state_(&state) {}
58 detail::TriggerState* state_;
59};
60
62 float threshold = 0.5f;
63 std::uint16_t input_channel = 0;
65};
67 std::array<TriggerDetectorLane, 16> lanes{};
68 std::uint8_t lane_count = 1;
69 std::uint8_t input_channels = 1;
70};
72 // Output is one on a trigger, then multiplied by decay per sample.
73 float decay = 0.99f;
74};
75enum class TriggerAudioKind : std::uint8_t { Modulation, Lowpass };
105 std::uint64_t cursor = 0;
106 std::uint64_t sequence = 0;
107 std::uint64_t epoch = 0;
108 std::uint64_t overflow = 0;
109 std::uint64_t diagnostic_refusals = 0;
110 std::uint8_t attempts = 0;
111 std::uint8_t accepted = 0;
112};
114 static constexpr std::size_t limit = 2'097'152;
115 std::size_t arena_bytes = 0;
116 std::size_t generation_bytes = 0;
117 std::size_t controller_bytes = 0;
118 std::size_t descriptor_bytes = 0;
119 std::size_t total() const noexcept {
121 }
122};
123
125 public:
129
130 private:
131 friend class SignalGraph;
132 struct Impl;
133 explicit PreparedTriggerPlan(std::unique_ptr<Impl> impl);
134 std::unique_ptr<Impl> impl_;
135};
138 std::unique_ptr<PreparedTriggerPlan> plan;
139};
140} // namespace pulp::host
PreparedTriggerPlan(const PreparedTriggerPlan &)=delete
friend class SignalGraph
Definition trigger_graph.hpp:131
PreparedTriggerPlan & operator=(const PreparedTriggerPlan &)=delete
Definition signal_graph_runtime.hpp:83
std::span< const TriggerRecord > received() const noexcept
TriggerEmitResult emit(TriggerPayload payload) noexcept
friend struct detail::TriggerState
Definition trigger_graph.hpp:56
TriggerContext & operator=(const TriggerContext &)=delete
TriggerEmitResult emit_at_sample(std::int64_t absolute_sample, TriggerPayload payload) noexcept
TriggerContext(const TriggerContext &)=delete
std::uint32_t NodeId
Definition graph_types.hpp:7
Definition baked_codec.hpp:158
Bounded event contracts shared by host ingress and graph-authored nodes.
Definition anticipation_eligibility.hpp:9
TriggerAudioKind
Definition trigger_graph.hpp:75
@ Modulation
Definition trigger_graph.hpp:75
@ Lowpass
Definition trigger_graph.hpp:75
TriggerKind
Definition trigger_graph.hpp:22
@ Trigger
Definition trigger_graph.hpp:22
@ Feedback
Definition anticipation_eligibility.hpp:26
TriggerGraphResult
Definition trigger_graph.hpp:87
@ Payload
Definition trigger_graph.hpp:90
@ InvalidBuffers
Definition trigger_graph.hpp:101
@ Frames
Definition trigger_graph.hpp:97
@ StaleGeneration
Definition trigger_graph.hpp:99
@ Mode
Definition trigger_graph.hpp:94
@ ClockExhausted
Definition trigger_graph.hpp:98
@ Cardinality
Definition trigger_graph.hpp:89
@ Budget
Definition trigger_graph.hpp:95
@ Binding
Definition trigger_graph.hpp:96
@ UnsupportedProducer
Definition trigger_graph.hpp:91
@ DependencyCycle
Definition trigger_graph.hpp:93
@ ProcessingFailure
Definition trigger_graph.hpp:102
@ Overflow
Definition graph_event_contract.hpp:35
@ OutOfRange
Definition graph_event_contract.hpp:33
@ Accepted
Definition graph_event_contract.hpp:30
@ Late
Definition graph_event_contract.hpp:34
@ Unbound
Definition graph_event_contract.hpp:32
@ StaleEpoch
Definition graph_event_contract.hpp:31
TriggerEmitResult
Definition trigger_graph.hpp:34
@ Busy
Definition custom_node_diagnostics.hpp:18
@ InvalidPhase
Definition graph_event_contract.hpp:345
@ Future
Definition graph_event_contract.hpp:341
@ AttemptLimit
Definition graph_event_contract.hpp:344
SequencerStateChannel is the audio-safe transport for a plugin's structured NON-parameter state: the ...
Definition audio_device_manager.hpp:48
Definition trigger_graph.hpp:76
TriggerAudioKind kind
Definition trigger_graph.hpp:77
float coefficient
Definition trigger_graph.hpp:78
Definition trigger_graph.hpp:104
std::uint64_t overflow
Definition trigger_graph.hpp:108
std::uint64_t sequence
Definition trigger_graph.hpp:106
std::uint64_t cursor
Definition trigger_graph.hpp:105
std::uint8_t accepted
Definition trigger_graph.hpp:111
std::uint64_t epoch
Definition trigger_graph.hpp:107
std::uint8_t attempts
Definition trigger_graph.hpp:110
std::uint64_t diagnostic_refusals
Definition trigger_graph.hpp:109
Definition trigger_graph.hpp:61
float threshold
Definition trigger_graph.hpp:62
std::uint16_t input_channel
Definition trigger_graph.hpp:63
TriggerPayload payload
Definition trigger_graph.hpp:64
Definition trigger_graph.hpp:80
NodeId consumer
Definition trigger_graph.hpp:82
std::uint8_t source_port
Definition trigger_graph.hpp:84
std::uint8_t destination_port
Definition trigger_graph.hpp:85
TriggerKind kind
Definition trigger_graph.hpp:83
NodeId producer
Definition trigger_graph.hpp:81
Definition trigger_graph.hpp:71
float decay
Definition trigger_graph.hpp:73
Definition trigger_graph.hpp:19
std::uint16_t token
Definition trigger_graph.hpp:20
Definition trigger_graph.hpp:136
TriggerGraphResult result
Definition trigger_graph.hpp:137
std::unique_ptr< PreparedTriggerPlan > plan
Definition trigger_graph.hpp:138
Definition trigger_graph.hpp:66
std::array< TriggerDetectorLane, 16 > lanes
Definition trigger_graph.hpp:67
std::uint8_t lane_count
Definition trigger_graph.hpp:68
std::uint8_t input_channels
Definition trigger_graph.hpp:69
Definition trigger_graph.hpp:23
std::uint16_t token
Definition trigger_graph.hpp:28
std::uint64_t epoch
Definition trigger_graph.hpp:24
TriggerKind kind
Definition trigger_graph.hpp:30
std::uint64_t sample
Definition trigger_graph.hpp:25
std::uint8_t source_port
Definition trigger_graph.hpp:29
std::uint64_t sequence
Definition trigger_graph.hpp:26
std::uint32_t producer
Definition trigger_graph.hpp:27
Definition trigger_graph.hpp:113
std::size_t descriptor_bytes
Definition trigger_graph.hpp:118
std::size_t generation_bytes
Definition trigger_graph.hpp:116
std::size_t arena_bytes
Definition trigger_graph.hpp:115
std::size_t total() const noexcept
Definition trigger_graph.hpp:119
static constexpr std::size_t limit
Definition trigger_graph.hpp:114
std::size_t controller_bytes
Definition trigger_graph.hpp:117