48#include <unordered_map>
49#include <unordered_set>
61class SpectralRuntimeBank;
64struct ExactParameterIngressOwner;
149 std::vector<PreparedNodeLatency>
nodes;
171 explicit operator bool() const noexcept {
175 return a.value == b.value;
182 const std::string& name);
185 const std::string& name);
187 const std::string& name);
203 return spectral_error_.load(std::memory_order_relaxed);
211 const std::string& name);
217 const std::string& name =
"Plugin");
222 const std::string& name = {});
224 const std::string& name = {});
249 const
audio::BufferView<const
float>& input,
int frames);
269 std::span<
std::
byte> output,
272 template <typename Report>
273 requires(!
std::is_same_v<
std::remove_cvref_t<Report>,
std::span<
std::
byte>>)
279 static_assert(std::is_trivially_copyable_v<Report>);
281 handle, schema, std::as_writable_bytes(std::span<Report>(&output, 1)), consistency);
295 return sample_region_parameter_binding_;
300 int num_outputs,
const std::string& name);
365 uint32_t dest_param_id,
float range_lo,
float range_hi,
374 uint32_t dest_param_id,
float range_lo,
float range_hi,
375 float smoothing_ms = 0.0f,
382 uint32_t dest_param_id,
bool audio_rate);
431 const std::vector<GraphNode>&
nodes()
const {
453 bool prepare(
double sample_rate,
int max_block_size);
520 std::uint64_t predecessor)
noexcept;
625 return spectral_mode_.load(std::memory_order_acquire) || live_slot_.has_value();
681 return routed_only_execution_failures_.load(std::memory_order_relaxed);
688 routed_only_execution_owners_.fetch_add(1, std::memory_order_relaxed);
691 auto owners = routed_only_execution_owners_.load(std::memory_order_relaxed);
692 while (owners != 0 && !routed_only_execution_owners_.compare_exchange_weak(
693 owners, owners - 1, std::memory_order_relaxed)) {
695 assert(owners != 0 &&
"unbalanced routed-only execution lease");
716 canonical_executor_routing_enabled_.store(enabled, std::memory_order_relaxed);
722 return canonical_executor_routing_enabled_.load(std::memory_order_relaxed);
735 parallel_routing_enabled_.store(enabled, std::memory_order_relaxed);
738 return parallel_routing_enabled_.load(std::memory_order_relaxed);
743 worker_pool_.set_audio_workgroup(workgroup);
746 worker_pool_.set_audio_workgroup_from_render_context(workgroup);
749 return worker_pool_.prepare_audio_workgroup_for_render();
752 worker_pool_.wait_for_audio_workgroup_update();
755 return worker_pool_.configured_audio_workgroup();
764 executor_.set_parallel_min_work_units(channel_samples);
767 return executor_.parallel_min_work_units();
773 return executor_.stats();
785 return routed_walk_fallbacks_.load(std::memory_order_relaxed);
825 anticipation_enabled_.store(enabled, std::memory_order_relaxed);
828 return anticipation_enabled_.load(std::memory_order_relaxed);
848 bool required =
false) const noexcept;
866 int num_samples, const
format::ProcessContext& transport);
876 return transport_suppressed_for_anticipation_.load(std::memory_order_relaxed);
893 return (
int)total_latency_samples_.load(std::memory_order_relaxed);
929 friend std::optional<std::vector<HostParamInfo>>
935 struct PrepareLifecycleObserver {
936 void* context =
nullptr;
937 void (*plugin_will_prepare)(
void*,
PluginSlot*)
noexcept =
nullptr;
938 void (*custom_will_prepare)(
void*,
void*)
noexcept =
nullptr;
940 struct MidiBlockSnapshot {
942 explicit MidiBlockSnapshot(
bool reserve_storage);
943 MidiBlockSnapshot(
const MidiBlockSnapshot& other);
944 MidiBlockSnapshot& operator=(
const MidiBlockSnapshot& other)
noexcept;
946 bool source_incomplete =
false) noexcept;
947 bool set_from_midi(const
midi::MidiBuffer& src, const
midi::MpeBuffer& mpe,
948 uint64_t new_sequence,
bool source_incomplete = false) noexcept;
949 bool copy_to_midi(
midi::MidiBuffer& dst) const noexcept;
950 bool append_to_midi(
midi::MidiBuffer& dst,
std::
size_t& event_index,
951 std::
size_t& sysex_index,
std::
size_t& ump_index) const noexcept;
952 bool has_payload() const noexcept;
957 bool incomplete = false;
961 struct MidiInputMailbox {
962 static_assert(std::atomic<uint64_t>::is_always_lock_free,
963 "MIDI ingress sequence atomics must be lock-free");
966 MidiBlockSnapshot writer_scratch;
967 std::atomic<uint64_t> next_sequence{0};
968 std::atomic<uint64_t> sequence_seen{0};
971 struct MidiOutputMailbox {
972 static constexpr std::size_t kBlockCapacity = 4;
973 static_assert(std::atomic<bool>::is_always_lock_free,
974 "MIDI egress overflow state must be lock-free");
976 runtime::SpscQueue<MidiBlockSnapshot, kBlockCapacity>
pending;
978 MidiBlockSnapshot consumer_scratch;
979 bool consumer_has_retry =
false;
980 bool consumer_incomplete =
false;
981 std::size_t consumer_event_index = 0;
982 std::size_t consumer_sysex_index = 0;
983 std::size_t consumer_ump_index = 0;
986 struct ParameterBlockSnapshot {
987 std::array<state::ParameterEvent, state::ParameterEventQueue::kCapacity>
events{};
988 std::size_t
size = 0;
989 std::uint64_t sequence = 0;
990 bool source_incomplete =
false;
992 bool set_from_queue(
const state::ParameterEventQueue& src,
993 std::uint64_t new_sequence)
noexcept;
994 bool append_to(state::ParameterEventQueue& dst)
const noexcept;
997 struct ParameterInputMailbox {
998 runtime::TripleBuffer<ParameterBlockSnapshot> published;
999 ParameterBlockSnapshot writer_scratch;
1000 std::atomic<std::uint64_t> next_sequence{0};
1001 std::atomic<std::uint64_t> sequence_seen{0};
1004 struct NodeRuntime {
1005 NodeRuntime() : mpe_in(false), mpe_out(false) {}
1010 std::vector<float> output_data;
1011 std::vector<float*> output_ptrs;
1014 std::vector<float> input_data;
1015 std::vector<float*> input_ptrs;
1016 std::vector<const float*> input_const_ptrs;
1021 std::unique_ptr<std::atomic<float>> gain;
1022 std::vector<EdgeRef> inbound_midi_edges;
1023 std::vector<EdgeRef> inbound_audio_edges;
1024 std::vector<EdgeRef> sparse_automation_edges;
1025 std::vector<EdgeRef> audio_rate_modulation_edges;
1031 int64_t input_latency = 0;
1032 int64_t output_latency = 0;
1047 std::vector<ParamBounds> param_bounds;
1057 std::vector<uint32_t> sparse_automation_param_ids;
1058 std::vector<SparseAutomationAccum> sparse_automation_accum;
1073 bool midi_in_incomplete =
false;
1074 bool midi_out_incomplete =
false;
1075 std::shared_ptr<MidiInputMailbox> midi_input_mailbox;
1076 std::unique_ptr<MidiOutputMailbox> midi_output_mailbox;
1081 std::shared_ptr<ParameterInputMailbox> parameter_input_mailbox;
1084 std::unique_ptr<ParameterInputMailbox> exact_parameter_input_mailbox;
1085 std::weak_ptr<detail::ExactParameterIngressOwner> exact_parameter_event_owner;
1096 std::vector<uint32_t> audio_rate_param_ids;
1097 std::vector<float> audio_rate_param_data;
1098 std::vector<DenseAutomationAccum> audio_rate_accum;
1104 struct ConnectionDelay {
1105 int delay_samples = 0;
1113 std::shared_ptr<State> state;
1116 std::vector<float> feedback_prev;
1124 float slew_last_value = 0.0f;
1125 bool slew_primed =
false;
1142 enum class PdcExecutionDomain : std::uint8_t {
1153 struct ProcessorNodeLifetime {
1154 explicit ProcessorNodeLifetime(
1155 std::shared_ptr<format::ProcessorNodeInstance> value)
noexcept;
1157 ~ProcessorNodeLifetime();
1159 std::shared_ptr<format::ProcessorNodeInstance> instance;
1162 struct CompiledGraph {
1163 explicit CompiledGraph(
bool reserve_midi =
true) : midi_publish_scratch(reserve_midi) {}
1164 std::shared_ptr<detail::TriggerState> trigger_state;
1166 std::shared_ptr<SignalGraph> trigger_preparation_owner;
1168 std::shared_ptr<SpectralRuntimeBank> spectral;
1169 std::uint64_t execution_generation = 0;
1170 std::shared_ptr<int> legacy_processing_lifetime;
1174 std::vector<GraphNode> executable_nodes;
1175 std::vector<NodeId> order;
1176 std::vector<Connection> connections;
1177 std::vector<std::uint64_t> connection_identities;
1178 std::vector<NodeRuntime::EdgeRef> feedback_edges;
1179 std::vector<ConnectionDelay> connection_delays;
1182 std::unordered_map<NodeId, NodeRuntime> runtime;
1183 std::unordered_map<NodeId, std::shared_ptr<PluginSlot>> plugins;
1187 std::unordered_map<NodeId, std::shared_ptr<ProcessorNodeLifetime>> processors;
1188 std::unordered_map<NodeId, CustomNodeProcessFn> custom_processors;
1193 std::unordered_map<NodeId, int> custom_latency_samples;
1198 std::unordered_map<NodeId, CustomNodeParamProcessFn> custom_param_processors;
1204 std::unordered_map<NodeId, CustomNodeTransportProcessFn> custom_transport_processors;
1211 std::unordered_map<NodeId, CustomNodeEventProcessFn> custom_event_processors;
1225 std::unordered_map<NodeId, NodeShape> authored_shapes;
1226 std::unordered_map<NodeId, NodeShape> shapes;
1227 std::vector<OrderedRuntime> ordered_runtime;
1233 int max_block_size = 0;
1234 double sample_rate = 0.0;
1236 int64_t total_latency_samples = 0;
1240 PdcExecutionDomain pdc_execution_domain = PdcExecutionDomain::Dynamic;
1241 MidiBlockSnapshot midi_publish_scratch;
1250 std::unordered_map<NodeId, const void*> custom_instances;
1251 std::uint64_t custom_registry_generation = 0;
1257 std::shared_ptr<SampleRegionStateBank> sample_region_bank;
1258 std::vector<std::shared_ptr<PreparedSampleRegion>> sample_regions;
1346 std::unique_ptr<format::GraphRuntimeAudioEdgeProbe> audio_edge_probe;
1375 std::vector<GraphNode> nodes_;
1379 std::unordered_map<NodeId, std::shared_ptr<ProcessorNodeLifetime>> processor_nodes_;
1380 std::vector<Connection> connections_;
1384 std::vector<std::uint64_t> connection_identities_;
1385 std::uint64_t next_connection_identity_{1};
1386 std::unordered_map<std::string, CustomNodeType> custom_node_types_;
1387 std::unordered_map<std::string, SampleKernelDescriptor> sample_kernel_types_;
1388 std::unordered_map<std::string, CustomNodeDiagnosticsDescriptor> custom_node_diagnostics_;
1389 static std::uint64_t next_diagnostic_graph_identity_() noexcept;
1390 const
std::uint64_t diagnostic_graph_identity_ = next_diagnostic_graph_identity_();
1391 std::uint32_t spectral_transition_serial_ = 0;
1392 SpectralRuntimeBank* spectral_render_target_ =
nullptr;
1396 std::uint32_t sample_region_proof_block_size_ = 16384;
1406 std::uint64_t custom_registry_generation_{0};
1409 std::uint64_t authoring_generation_{0};
1411 NodeId last_prepare_custom_failure_node_ = 0;
1412 GraphLimits limits_;
1423 struct PreparedPluginMetadata {
1424 std::vector<HostParamInfo> parameters;
1425 int latency_samples = 0;
1426 bool wants_transport =
false;
1436 std::unordered_map<NodeId, PreparedPluginMetadata> prepared_plugin_meta_;
1437 std::unordered_map<NodeId, std::weak_ptr<detail::ExactParameterIngressOwner>>
1438 exact_parameter_event_claims_;
1440 struct StagedReplacement {
1443 std::shared_ptr<PluginSlot> slot;
1444 PreparedPluginMetadata metadata;
1445 pulp::audio::AudioProcessLoadSnapshot warmed_load;
1446 bool same_identity =
false;
1448 std::unordered_map<NodeId, StagedReplacement> staged_replacements_;
1450 std::unordered_map<std::uint64_t, PluginInfo> scanned_plugin_catalog_;
1451 std::unordered_map<std::string, std::uint64_t> scanned_plugin_identity_to_token_;
1452 std::uint64_t next_scanned_plugin_token_{1};
1453 LiveSwapDiagnostics last_swap_diagnostics_;
1463 friend struct detail::TriggerTestAccess;
1464 void trigger_test_clock_(std::uint64_t cursor, std::uint64_t
sequence, std::uint64_t epoch,
1465 std::uint8_t phase,
bool saturate);
1468 TriggerEmitResult trigger_test_schedule_(std::int64_t target, std::uint64_t epoch);
1469 bool trigger_test_budget_(std::size_t total);
1470 void trigger_test_gate_(
bool held);
1473 std::unordered_map<NodeId, TriggerProducerConfig> trigger_producers_;
1474 std::unordered_map<NodeId, TriggerEnvelopeConfig> trigger_envelopes_;
1475 std::unordered_map<NodeId, TriggerAudioConfig> trigger_audio_;
1476 std::vector<TriggerEdge> trigger_edges_;
1477 std::atomic<bool> typed_trigger_authoring_{
false};
1478 std::shared_ptr<detail::TriggerController> trigger_controller_;
1479 std::shared_ptr<detail::TriggerState> compiling_trigger_state_;
1480 bool ensure_trigger_controller_();
1481 bool compile_trigger_pair_(CompiledGraph&
graph);
1482 void bind_trigger_pair_(CompiledGraph&
graph);
1483 void invalidate_trigger_binding_() noexcept;
1485 const
audio::BufferView<const
float>& input,
1487 const
format::ProcessContext* transport,
1488 CompiledGraph*
graph);
1489 static
void reset_trigger_audio_(CompiledGraph&
graph) noexcept;
1490 runtime::Slot<CompiledGraph> live_slot_;
1491 std::shared_ptr<
int> processing_handle_lifetime_ =
std::make_shared<
int>(0);
1492 std::array<
std::shared_ptr<CompiledGraph>, 3> spectral_slots_;
1494 std::atomic<
bool> spectral_mode_{
false};
1495 std::atomic<int> spectral_active_{0}, spectral_pending_{-1}, spectral_ack_{-1};
1496 std::atomic<bool> spectral_access_closed_{
false};
1497 mutable std::atomic<bool> spectral_reclaiming_{
false};
1498 mutable std::atomic<unsigned> spectral_readers_{0}, spectral_accesses_{0};
1499 mutable std::atomic<SpectralError> spectral_error_{SpectralError::None};
1500 std::uint64_t spectral_offer_generation_ = 0;
1501 std::uint64_t spectral_render_generation_ = 0;
1503 int spectral_retired_ = -1;
1504 bool spectral_terminal_ =
false;
1506 class SnapshotAccess {
1508 explicit SnapshotAccess(runtime::Slot<CompiledGraph>::ReadGuard guard)
1509 : legacy_(std::
move(guard)), value_(legacy_.get()) {}
1510 SnapshotAccess(
const SignalGraph* owner, CompiledGraph* value,
bool access)
1511 : owner_(owner), value_(
value), access_(access) {}
1515 owner_->spectral_accesses_.fetch_sub(1, std::memory_order_seq_cst);
1516 owner_->spectral_readers_.fetch_sub(1, std::memory_order_seq_cst);
1519 SnapshotAccess(
const SnapshotAccess&) =
delete;
1520 CompiledGraph* get() const noexcept {
1523 CompiledGraph* operator->() const noexcept {
1526 CompiledGraph& operator*() const noexcept {
1529 explicit operator bool() const noexcept {
1530 return value_ !=
nullptr;
1534 runtime::Slot<CompiledGraph>::ReadGuard legacy_;
1535 const SignalGraph* owner_ =
nullptr;
1536 CompiledGraph* value_ =
nullptr;
1537 bool access_ =
false;
1539 SnapshotAccess read_snapshot_(
bool access =
false) const noexcept;
1540 bool refuse_spectral_mutation_() const noexcept {
1541 if (!spectral_mode_.load(std::memory_order_acquire))
1543 spectral_error_.store(spectral_access_closed_.load(std::memory_order_seq_cst)
1544 ? SpectralError::TransitionPending
1545 : SpectralError::UnsupportedOperation,
1546 std::memory_order_relaxed);
1549 bool spectral_mailboxes_pending_(
const CompiledGraph&)
const noexcept;
1550 SpectralError offer_spectral_candidate_locked_(std::unique_ptr<SignalGraph>&,
1551 std::shared_ptr<CompiledGraph>, std::uint64_t);
1552 void adopt_candidate_authoring_locked_(
SignalGraph&);
1554 struct SpectralBoundary {
1558 SpectralBoundary capture_spectral_boundary_() noexcept;
1559 void process_spectral_boundary_(SpectralBoundary,
audio::BufferView<
float>&,
1560 const
audio::BufferView<const
float>&,
int,
1561 const
format::ProcessContext*);
1562 void process_spectral_(
audio::BufferView<
float>&, const
audio::BufferView<const
float>&,
int,
1563 const
format::ProcessContext*);
1579 std::atomic<
bool> canonical_executor_routing_enabled_{
true};
1586 std::atomic<bool> parallel_routing_enabled_{
false};
1587 std::atomic<bool> anticipation_enabled_{
false};
1601 bool in_swap_edit_{
false};
1602 std::thread::id swap_edit_owner_{};
1606 std::atomic<bool> anticipation_pump_busy_{
false};
1609 std::atomic<std::uint64_t> routed_walk_fallbacks_{0};
1610 std::atomic<std::uint32_t> routed_only_execution_owners_{0};
1613 std::atomic<std::uint64_t> routed_only_execution_failures_{0};
1618 std::atomic<std::uint64_t> transport_suppressed_for_anticipation_{0};
1619 format::GraphRuntimeWorkerPool worker_pool_;
1620 std::atomic<int64_t> total_latency_samples_{0};
1621 std::atomic<std::size_t> prepared_node_count_{0};
1622 std::atomic<std::size_t> prepared_ordered_node_count_{0};
1623 std::atomic<std::size_t> prepared_connection_count_{0};
1624 std::atomic<std::size_t> prepared_total_ports_{0};
1625 std::atomic<int> prepared_max_block_size_{0};
1626 std::atomic<std::size_t> prepared_node_audio_buffer_bytes_{0};
1627 std::atomic<std::size_t> prepared_automation_buffer_bytes_{0};
1628 std::atomic<std::size_t> prepared_delay_buffer_bytes_{0};
1629 std::atomic<std::size_t> prepared_total_buffer_bytes_{0};
1637 std::unordered_map<NodeId, std::unique_ptr<audio::AudioProcessLoadMeasurer>> node_load_;
1642 mutable std::mutex node_load_mu_;
1648 mutable std::atomic<bool> node_load_monitoring_{
false};
1649 std::unique_ptr<audio::AudioProcessLoadMeasurer> graph_load_ =
1650 std::make_unique<audio::AudioProcessLoadMeasurer>();
1656 std::atomic<bool> desired_live_dsp_telemetry_enabled_{
false};
1721 mutable std::mutex graph_mutation_mutex_;
1728 mutable std::atomic<std::thread::id> graph_mutation_owner_{};
1736 class GraphMutationLock {
1738 explicit GraphMutationLock(
const SignalGraph& graph)
1739 : lock_(graph.graph_mutation_mutex_)
1742 owner_(&graph.graph_mutation_owner_)
1747 GraphMutationLock(
const SignalGraph& graph, std::try_to_lock_t)
1748 : lock_(graph.graph_mutation_mutex_, std::try_to_lock)
1751 owner_(&graph.graph_mutation_owner_)
1754 if (lock_.owns_lock())
1757 bool owns_lock() const noexcept {
1758 return lock_.owns_lock();
1760 ~GraphMutationLock() {
1761 if (lock_.owns_lock())
1764 GraphMutationLock(
const GraphMutationLock&) =
delete;
1765 GraphMutationLock& operator=(
const GraphMutationLock&) =
delete;
1772 void note_acquired_() noexcept {
1774 owner_->store(std::this_thread::get_id(), std::memory_order_relaxed);
1777 void note_released_() noexcept {
1779 owner_->store(std::thread::id{}, std::memory_order_relaxed);
1783 std::unique_lock<std::mutex> lock_;
1785 std::atomic<std::thread::id>* owner_ =
nullptr;
1791 void assert_graph_mutation_locked_() const noexcept {
1793 assert(graph_mutation_owner_.load(std::memory_order_relaxed) ==
1794 std::this_thread::get_id() &&
1795 "graph_mutation_mutex_ must be held by the calling thread");
1804 SampleRegionCandidate
1805 sample_region_candidate_locked_(
const SampleRegionDefinition& definition)
const;
1806 SampleRegionProof sample_region_proof_locked_(
SampleRegionId id)
const;
1807 SampleRegionProof sample_region_metadata_proof_locked_(
const SampleRegionDefinition& definition,
1808 bool complete =
true)
const;
1809 SampleRegionProof sample_region_exterior_proof_locked_()
const;
1810 bool has_sample_kernel_nodes_locked_()
const;
1811 void append_connection_locked_(Connection connection);
1812 void erase_connection_at_locked_(std::size_t index);
1815 std::size_t total_declared_ports_locked_()
const;
1821 bool audio_rate_modulation_lane_locked_(
const Connection& connection,
1822 state::ModulationLane& lane)
const;
1826 void process_impl(audio::BufferView<float>& output,
const audio::BufferView<const float>& input,
1827 int num_samples,
const format::ProcessContext* transport);
1828 void process_snapshot_impl(audio::BufferView<float>& output,
1829 const audio::BufferView<const float>& input,
int num_samples,
1830 const format::ProcessContext* transport, CompiledGraph* snapshot,
1831 bool trigger_admitted =
false);
1832 static bool inject_midi_into_snapshot_(CompiledGraph& snapshot,
NodeId id,
1833 const midi::MidiBuffer& events,
1834 const midi::MpeBuffer* mpe =
nullptr) noexcept;
1836 inject_parameter_events_into_snapshot_(CompiledGraph& snapshot,
NodeId id,
1841 inject_exact_parameter_events_into_snapshot_(CompiledGraph& snapshot,
NodeId id,
1843 static PluginBindingContext::PendingParameterEventSequences
1844 append_parameter_mailbox_events_(
void* runtime,
1851 void run_reference_walk_(audio::BufferView<
float>& output,
1852 const audio::BufferView<const
float>& input,
int num_samples,
1853 CompiledGraph* cg,
bool time_nodes);
1860 enum class CompileMode {
Normal, SwapNoAnticipation };
1861 std::shared_ptr<CompiledGraph> compile_(
double sample_rate,
int max_block_size,
1862 CompileMode mode = CompileMode::Normal);
1863 bool prepare_impl_(
double sample_rate,
int max_block_size,
1864 const PrepareLifecycleObserver* lifecycle_observer);
1874 bool build_routing_snapshot_locked_(CompiledGraph& cg,
bool parallel_safe,
1875 std::vector<PluginBindingContext>& plugin_ctx,
1876 std::vector<CustomBindingContext>& custom_ctx,
1877 format::GraphRuntimeSnapshot& out);
1878 std::shared_ptr<const void> live_snapshot_handle_locked_() const noexcept;
1883 bool preflight_locked_(
int max_block_size);
1895 bool snapshot_is_plugin_reinit_free_locked_(const CompiledGraph& old_cg,
double sr,
1902 std::vector<HostParamInfo> cached_or_live_params_locked_(const GraphNode& n) const;
1903 std::unique_ptr<PluginSlot> load_live_swap_plugin_locked_(const PluginInfo& info) const;
1904 pulp::audio::AudioProcessLoadSnapshot warm_staged_slot_locked_(PluginSlot& slot,
1906 bool node_has_feedback_edge_locked_(
NodeId id) const;
1907 bool node_has_parameter_or_automation_contract_locked_(
NodeId id) const;
1908 bool staged_replacement_relaxes_identity_locked_(
NodeId id) const;
1910 std::
string message);
1912 std::
string message);
1913 void cancel_swap_edit_locked_();
1914 std::vector<audio::AudioProcessLoadSnapshot> staged_node_loads_locked_() const;
1915 void publish_prepared_stats_locked_(const CompiledGraph& cg);
1916 static PreparedStats stats_for_snapshot_(const CompiledGraph& cg);
1917 void clear_prepared_stats_locked_();
1918 void invalidate_live_locked_();
1920 compute_latencies_for_(CompiledGraph& cg, const std::vector<Connection>&
connections,
1921 const std::unordered_map<
NodeId, PreparedPluginMetadata>& plugin_meta);
1943 bool* loaded_out =
nullptr);
1961 const std::vector<audio::AudioProcessLoadSnapshot>& staged_nodes,
1962 float headroom_threshold, std::uint64_t min_callbacks);
Small runtime policy helper for budgeted work and graceful degradation.
Measures the CPU load of an audio processing callback.
Definition load_measurer.hpp:182
The store. One producer (audio thread) and one consumer (drain/owner thread).
Definition live_dsp_telemetry.hpp:178
Closed catalog value.
Definition spectral_frame.hpp:174
Profile-one indexed channels: symmetric float Hann, local-window phase, forward scale one,...
Definition spectral_frame.hpp:126
Definition anticipation_lane.hpp:33
Definition graph_serializer.hpp:97
Definition plugin_slot.hpp:94
Definition sample_region_runtime.hpp:181
Definition sample_region_parameters.hpp:80
Definition sample_region_runtime.hpp:121
Strong, typed handle to one exact compiled SignalGraph generation.
Definition signal_graph_execution_snapshot.hpp:23
Definition signal_graph_prepared_topology_edit.hpp:27
Definition signal_graph_runtime.hpp:83
GeneratedGraphValidationRejectReason
Definition signal_graph_runtime.hpp:100
@ MaxBlockSizeExceeded
Definition signal_graph_runtime.hpp:103
@ None
Definition signal_graph_runtime.hpp:101
@ ConnectionLimitExceeded
Definition signal_graph_runtime.hpp:105
@ InvalidBlockSize
Definition signal_graph_runtime.hpp:102
@ EstimatedWorkExceeded
Definition signal_graph_runtime.hpp:107
@ NodeLimitExceeded
Definition signal_graph_runtime.hpp:104
@ PortLimitExceeded
Definition signal_graph_runtime.hpp:106
bool parallel_routing_enabled() const noexcept
Definition signal_graph_runtime.hpp:737
bool prepare(double sample_rate, int max_block_size)
void set_parallel_min_work_units(std::uint64_t channel_samples) noexcept
Definition signal_graph_runtime.hpp:763
bool set_node_hosted_editor_open(NodeId id, bool open)
std::uint64_t routed_walk_fallbacks() const noexcept
Definition signal_graph_runtime.hpp:784
bool connect(NodeId source, PortIndex source_port, NodeId dest, PortIndex dest_port)
void acquire_routed_only_execution() noexcept
Require compiled routed execution while at least one owner holds a lease.
Definition signal_graph_runtime.hpp:687
NodeId add_trigger_producer(const TriggerProducerConfig &config)
SpectralResult< SpectralSynthesisPorts > add_spectral_synthesis(SpectralIdentity identity, const std::string &name)
SpectralResult< SpectralStagePorts > add_spectral_stage(SpectralIdentity identity, QualifiedSpectralStage stage, const std::string &name)
const GraphNode * node(NodeId id) const
bool set_node_parameter(NodeId id, uint32_t param_id, float value)
audio::AudioProcessLoadSnapshot graph_load() const
bool is_processor_node(NodeId id) const
std::optional< PreparedLatencySnapshot > prepared_latency_snapshot() const
const CustomNodeType * custom_node_type(std::string_view type_id, int version) const
bool inject_midi(NodeId midi_input_node, const midi::MidiBuffer &events, const midi::MpeBuffer &mpe) noexcept
int pump_anticipation(int max_blocks=8)
bool remove_node(NodeId id)
SignalGraphExecutionStatus RoutedExecutionStatus
Control-thread view of the actual routed paths embedded in the live compiled snapshot.
Definition signal_graph_runtime.hpp:674
GeneratedGraphValidation validate_generated_graph(int max_block_size) const
void compile_snapshot_for_test(double sample_rate, int max_block_size)
bool connect_sidechain(NodeId source, PortIndex source_port, NodeId dest, PortIndex dest_sidechain_port)
bool audio_rate_modulation_lane(const Connection &connection, state::ModulationLane &lane) const
SpectralError stop_spectral_controller()
Control thread only, after the host has stopped calling process().
const CustomNodeType * custom_node_type(std::string_view type_id) const
SpectralResult< SpectralAnalysisPorts > add_spectral_analysis(SpectralIdentity identity, const std::string &name)
void set_limits(GraphLimits limits)
void set_live_dsp_telemetry_enabled(bool enabled)
NodeId add_trigger_envelope(const TriggerEnvelopeConfig &config={})
TriggerPreparation prepare_trigger_plan(double sample_rate, int max_frames)
std::atomic< float > * live_gain_atomic(NodeId id) const noexcept
bool would_create_cycle(NodeId source, NodeId dest) const
SwapResult stage_plugin_replacement(NodeId id, PluginCatalogToken token)
float node_gain(NodeId id) const
const std::vector< GraphNode > & nodes() const
Definition signal_graph_runtime.hpp:431
SpectralTransitionState spectral_transition_state() const noexcept
bool is_prepared() const noexcept
Definition signal_graph_runtime.hpp:624
std::optional< SampleRegionDescriptor > sample_region(SampleRegionId id) const
SpectralError finalize_spectral_transition()
void set_audio_workgroup(void *workgroup) noexcept override
Publish the device-owned workgroup for subsequent renders, or null when the standalone device has no ...
Definition signal_graph_runtime.hpp:742
std::vector< SampleRegionRuntimeReceipt > sample_region_runtime_receipts() const
friend class GraphSerializer
Definition signal_graph_runtime.hpp:932
bool node_load_monitoring() const noexcept
std::vector< SampleRegionDescriptor > sample_regions() const
void set_node_load_monitoring(bool enabled) noexcept
bool prepare_audio_workgroup_for_render() noexcept override
RT-safe render-cycle preparation.
Definition signal_graph_runtime.hpp:748
bool connect_feedback(NodeId source, PortIndex source_port, NodeId dest, PortIndex dest_port)
audio::LiveDspTelemetrySnapshot poll_live_dsp_telemetry()
NodeId add_custom_node(std::string_view type_id, int version, const std::string &name={})
bool live_dsp_telemetry_enabled() const
bool set_node_gain(NodeId id, float linear_gain)
PreparedStats prepared_stats() const
std::vector< uint8_t > custom_node_state(NodeId id) const
NodeId add_trigger_modulation()
EdgeProbeIdentity audio_edge_probe_identity() const
NodeId add_gain_node(const std::string &name="Gain")
NodeId add_plugin_node(const PluginInfo &info)
bool connect_automation(NodeId src, PortIndex src_audio_port, NodeId dest, uint32_t dest_param_id, float range_lo, float range_hi, float smoothing_ms=0.0f, AutomationMix mix=AutomationMix::Replace)
void set_parallel_routing_enabled(bool enabled) noexcept
Definition signal_graph_runtime.hpp:734
std::size_t estimate_generated_graph_work_units(int max_block_size) const
SpectralError spectral_error() const noexcept
Definition signal_graph_runtime.hpp:202
bool register_custom_node_diagnostics(CustomNodeDiagnosticsDescriptor descriptor)
GraphResult connect(SpectralOutputPort source, SpectralInputPort dest)
Definition signal_graph_runtime.hpp:188
bool seed_midi_input_sequence_for_test(NodeId midi_input_node, std::uint64_t predecessor) noexcept
CustomNodeDiagnosticResult query_custom_node_diagnostics(CustomNodeDiagnosticHandle handle, std::uint64_t schema, std::span< std::byte > output, CustomNodeDiagnosticConsistency consistency=CustomNodeDiagnosticConsistency::LiveApproximate) const
std::shared_ptr< const void > live_snapshot_handle() const noexcept
int node_latency_samples(NodeId id) const
void release_routed_only_execution() noexcept
Definition signal_graph_runtime.hpp:690
const CustomNodeEventProcessFn * live_custom_event_processor(NodeId id) const noexcept
bool anticipation_enabled() const noexcept
Definition signal_graph_runtime.hpp:827
bool set_processor_audio_input_provider(NodeId id, format::AudioInputBusProvider provider) noexcept
Install a host-owned realtime input-bus provider on an in-process Processor node.
GraphResult connect(const PortHandle &source, const PortHandle &dest)
Connect named typed ports.
bool extract_midi(NodeId midi_output_node, midi::MidiBuffer &out) const
PluginSlot * live_plugin_slot(NodeId id) const noexcept
friend bool register_builtin_sample_region_types(SignalGraph &graph)
std::span< const TriggerRecord > trigger_trace() const noexcept
TriggerGraphResult connect_trigger(TriggerEdge edge)
const CustomNodeParamProcessFn * live_custom_param_processor(NodeId id) const noexcept
NodeId add_plugin_node(std::unique_ptr< PluginSlot > slot, int num_inputs, int num_outputs, const std::string &name="Plugin")
bool register_custom_node_type(CustomNodeType type)
bool read_audio_edge_probe(graph::GraphRuntimeProbeSample &sample)
std::vector< NodeLoadReport > node_loads() const
void clear_scanned_plugin_catalog()
void wait_for_audio_workgroup_update() noexcept override
Off-RT barrier for borrowed-handle teardown.
Definition signal_graph_runtime.hpp:751
void set_canonical_executor_routing_enabled(bool enabled) noexcept
Definition signal_graph_runtime.hpp:715
bool connect_midi(NodeId source, NodeId dest)
bool inject_parameter_events(NodeId plugin_node, const state::ParameterEventQueue &events)
RoutedExecutionStatus routed_execution_status(int block_size) const noexcept
std::vector< NodeId > processing_order() const
TriggerGraphResult process_checked(audio::BufferView< float > &output, const audio::BufferView< const float > &input, int frames)
const CustomNodeTransportProcessFn * live_custom_transport_processor(NodeId id) const noexcept
int live_custom_latency_samples(NodeId id) const noexcept
bool inject_midi(NodeId midi_input_node, const midi::MidiBuffer &events) noexcept
RuntimeBudgetReport evaluate_optional_runtime_budget(runtime::RuntimeBudgetFrame &frame, runtime::RuntimeWorkLane lane=runtime::RuntimeWorkLane::Background, bool required=false) const noexcept
GraphLimits limits() const
Definition signal_graph_runtime.hpp:527
NodeId add_processor_node(std::unique_ptr< format::Processor > processor, const std::string &name={})
int latency_samples() const
Definition signal_graph_runtime.hpp:892
NodeId add_custom_node(std::string_view type_id, const std::string &name={})
TriggerResourceReport trigger_resources() const
SwapResult prepare_swap(double sample_rate, int max_block_size)
bool set_node_live_swap_policy(NodeId id, NodeLiveSwapPolicy policy)
std::uint64_t midi_input_sequence_for_test(NodeId midi_input_node) const noexcept
EdgeProbeStatus attach_audio_edge_probe(const PortHandle &source, const PortHandle &destination)
int prepared_max_block_size() const noexcept
EdgeProbeStatus audio_edge_probe_status() const
friend struct SpectralControllerTestAccess
Definition signal_graph_runtime.hpp:1553
SpectralTransitionState
Definition signal_graph_runtime.hpp:191
@ Staged
Definition signal_graph_runtime.hpp:193
@ Finalized
Definition signal_graph_runtime.hpp:196
@ Activated
Definition signal_graph_runtime.hpp:194
@ Rejected
Definition signal_graph_runtime.hpp:195
@ Idle
Definition signal_graph_runtime.hpp:192
NodeId add_midi_output_node(const std::string &name="MIDI Out")
std::shared_ptr< format::ProcessorNodeInstance > processor_node_instance(NodeId id) const
Returns the retained Processor instance for a runtime-owned node.
friend class PreparedTriggerPlan
Definition signal_graph_runtime.hpp:1462
const std::vector< Connection > & connections() const
Definition signal_graph_runtime.hpp:434
TriggerGraphResult try_reset_events() noexcept
TriggerGraphResult trigger_counters(TriggerCounters &counters) const noexcept
SampleRegionProof prove_sample_region(SampleRegionId id) const
void * configured_audio_workgroup() const noexcept
Definition signal_graph_runtime.hpp:754
NodeId add_processor_node(std::shared_ptr< format::ProcessorNodeInstance > processor, const std::string &name={})
Add an owned in-process Processor.
void set_anticipation_enabled(bool enabled) noexcept
Definition signal_graph_runtime.hpp:824
bool set_custom_node_state(NodeId id, const std::vector< uint8_t > &bytes)
format::GraphRuntimeExecutorStats routing_executor_stats() const noexcept
Definition signal_graph_runtime.hpp:772
bool disconnect_modulation(NodeId src, PortIndex src_audio_port, NodeId dest, uint32_t dest_param_id, bool audio_rate)
Remove one automation or audio-rate modulation edge by its typed target.
std::size_t custom_node_type_count() const
NodeId add_input_node(int channels, const std::string &name="Input")
TriggerGraphResult try_install_prepared_trigger_plan(std::unique_ptr< PreparedTriggerPlan > &candidate)
std::uint64_t sample_region_binding_generation() const noexcept
void set_live_swap_plugin_loader_for_test(PluginLoaderForTest loader)
void detach_audio_edge_probe()
float get_node_parameter(NodeId id, uint32_t param_id) const
const CustomNodeProcessFn * live_custom_processor(NodeId id) const noexcept
NodeId add_unresolved_plugin_node(const PluginInfo &info, int num_inputs, int num_outputs, const std::string &name)
void process(audio::BufferView< float > &output, const audio::BufferView< const float > &input, int num_samples)
NodeId last_prepare_custom_failure_node() const
SwapResult
Definition signal_graph_runtime.hpp:467
@ NotInSwapEdit
Definition signal_graph_runtime.hpp:475
@ NeedsEagerPrepare
Definition signal_graph_runtime.hpp:470
@ Swapped
Definition signal_graph_runtime.hpp:468
std::uint64_t parallel_min_work_units() const noexcept
Definition signal_graph_runtime.hpp:766
NodeId add_output_node(int channels, const std::string &name="Output")
NodeId add_midi_input_node(const std::string &name="MIDI In")
PluginCatalogToken register_scanned_plugin(const PluginInfo &info)
LiveSwapDiagnostics last_swap_diagnostics() const
bool connect_audio_rate_modulation(NodeId src, PortIndex src_audio_port, NodeId dest, uint32_t dest_param_id, float range_lo, float range_hi, float smoothing_ms=0.0f, AutomationMix mix=AutomationMix::Replace)
NodeId add_unresolved_custom_node(std::string_view type_id, int version, int num_inputs, int num_outputs, const std::string &name)
std::function< std::unique_ptr< PluginSlot >(const PluginInfo &)> PluginLoaderForTest
Definition signal_graph_runtime.hpp:514
std::uint64_t transport_suppressed_for_anticipation() const noexcept
Definition signal_graph_runtime.hpp:875
std::uint64_t audio_edge_probe_dropped() const
const SampleKernelDescriptor * sample_kernel_type(std::string_view type_id, int version) const
std::uint64_t routed_only_execution_failures() const noexcept
Number of blocks made silent because routed processing failed, including a hosted node rejection,...
Definition signal_graph_runtime.hpp:680
bool disconnect(NodeId source, PortIndex source_port, NodeId dest, PortIndex dest_port)
const SampleRegionParameterBinding * sample_region_parameter_binding() const noexcept
Definition signal_graph_runtime.hpp:294
bool canonical_executor_routing_enabled() const noexcept
Definition signal_graph_runtime.hpp:721
GraphAuthoringReceiptStatus validate_authoring_receipt(GraphAuthoringReceipt receipt) const
GraphAuthoringReceipt authoring_receipt() const
NodeId add_trigger_lowpass(float coefficient=0.5f)
std::unique_ptr< PreparedTopologyEdit > begin_prepared_topology_edit()
std::vector< CustomNodeTypeMetadata > custom_node_types() const
std::vector< TriggerEdge > trigger_edges() const
void set_audio_workgroup_from_render_context(void *workgroup) noexcept override
Publish an AU render-context workgroup.
Definition signal_graph_runtime.hpp:745
friend bool build_signal_graph_executor_routing(const SignalGraph &, SignalGraphExecutorRouting &)
CustomNodeDiagnosticResult custom_node_diagnostic_handle(NodeId id) const
EdgeProbeStatus
Definition signal_graph_runtime.hpp:550
@ UnsupportedKind
Definition signal_graph_runtime.hpp:556
@ UnsupportedExecution
Definition signal_graph_runtime.hpp:557
@ Detached
Definition signal_graph_runtime.hpp:552
@ Attached
Definition signal_graph_runtime.hpp:551
@ UnknownPort
Definition signal_graph_runtime.hpp:554
@ MissingEdge
Definition signal_graph_runtime.hpp:555
@ Unprepared
Definition signal_graph_runtime.hpp:553
@ Busy
Definition signal_graph_runtime.hpp:558
Desktop adapter that lowers phase-1 timeline tracks into stable SignalGraph nodes.
Definition timeline_graph_binding.hpp:184
Collection of timestamped MIDI events within a single audio buffer period.
Definition buffer.hpp:31
A time-ordered list of per-note expression events for one block.
Definition mpe_buffer.hpp:51
A time-ordered list of UMP events for one audio block.
Definition ump_buffer.hpp:41
Definition budget_policy.hpp:101
Lock-free triple buffer for publishing the latest value from a writer thread to a reader thread witho...
Definition triple_buffer.hpp:45
Definition parameter_event_queue.hpp:82
Fixed-slot per-node live-DSP timing telemetry.
Real-time CPU load measurement for audio callbacks.
Sample-accurate MPE expression event stream.
Definition analyzer_provider.hpp:12
@ Normal
Definition font_options.hpp:38
@ events
a per-block list of ValueEvent occurrences
Definition value_channel_telemetry.hpp:25
Definition child_process_manager.hpp:18
Definition graph_runtime_buffer_assignment.hpp:8
std::uint32_t NodeId
Definition graph_types.hpp:7
SpectralError
Definition spectral_frame.hpp:15
std::uint32_t PortIndex
Definition graph_types.hpp:8
Definition baked_codec.hpp:158
std::shared_ptr< ExactParameterIngressOwner > make_exact_parameter_ingress_owner()
std::optional< std::vector< HostParamInfo > > processor_node_parameters(const SignalGraph &graph, NodeId id)
Bounded event contracts shared by host ingress and graph-authored nodes.
Definition anticipation_eligibility.hpp:9
TriggerGraphResult
Definition trigger_graph.hpp:87
AutomationMix
Definition signal_graph_connection.hpp:13
@ Replace
Definition signal_graph_connection.hpp:14
std::function< void(audio::BufferView< float > &output, const audio::BufferView< const float > &input, int num_samples, const CustomNodeEventBlock &events)> CustomNodeEventProcessFn
Stateless event-aware process callback.
Definition custom_node_events.hpp:62
std::function< void(audio::BufferView< float > &output, const audio::BufferView< const float > &input, int num_samples, const BakedParamView ¶ms)> CustomNodeParamProcessFn
Definition custom_node_type.hpp:61
std::function< void(audio::BufferView< float > &output, const audio::BufferView< const float > &input, int num_samples, const format::ProcessContext &transport)> CustomNodeTransportProcessFn
Definition custom_node_type.hpp:84
TriggerEmitResult
Definition trigger_graph.hpp:34
::pulp::state::ParameterEventQueue ParameterEventQueue
Definition parameter_event_queue.hpp:8
std::function< void(audio::BufferView< float > &output, const audio::BufferView< const float > &input, int num_samples)> CustomNodeProcessFn
Definition custom_node_type.hpp:24
LiveSwapFallbackReason
Definition signal_graph_node.hpp:99
CustomNodeDiagnosticConsistency
Definition custom_node_diagnostics.hpp:21
@ LiveApproximate
Definition custom_node_diagnostics.hpp:22
graph::SpectralResult< T > SpectralResult
Definition spectral_graph.hpp:11
LiveSwapAdmission evaluate_live_swap_admission(const audio::AudioProcessLoadSnapshot &graph, const std::vector< audio::AudioProcessLoadSnapshot > &staged_nodes, float headroom_threshold, std::uint64_t min_callbacks)
GraphAuthoringReceiptStatus
Definition signal_graph_authoring.hpp:25
NodeType
Definition signal_graph_node.hpp:21
NodeId add_plugin_node_from_drop(SignalGraph &graph, const PluginInfo &info, bool *loaded_out=nullptr)
std::uint32_t SampleRegionId
Definition sample_region_proof.hpp:13
Definition custom_node_events.hpp:26
@ info
Definition gpu_diagnostics.hpp:56
@ pending
Definition gpu_pass.hpp:556
Definition generated_event_source.hpp:33
RuntimeWorkLane
Definition budget_policy.hpp:11
@ Background
Definition budget_policy.hpp:14
Definition host_transport_projector.hpp:8
@ size
Definition config.hpp:216
@ GraphNode
Definition modulation_lane.hpp:16
@ move
Definition web_event_translate.hpp:110
@ value
the widget's primary value (Knob, Fader, RangeSlider, Toggle, ProgressBar)
Definition binding_diagnostics.hpp:19
Publishing a value built off the audio thread, and reclaiming the old one without ever calling a dest...
Snapshot published by AudioProcessLoadMeasurer.
Definition load_measurer.hpp:25
Definition graph_runtime_levelization.hpp:25
Definition graph_runtime_probe.hpp:9
Definition signal_graph_connection.hpp:18
Definition custom_node_diagnostics.hpp:27
Definition custom_node_diagnostics.hpp:32
Definition custom_node_diagnostics.hpp:46
Definition custom_node_type.hpp:90
Definition signal_graph_authoring.hpp:14
Definition signal_graph_node.hpp:126
Definition signal_graph_node.hpp:46
Definition signal_graph_runtime.hpp:1947
const char * reason
Definition signal_graph_runtime.hpp:1949
bool admit
Definition signal_graph_runtime.hpp:1948
Definition signal_graph_node.hpp:118
Definition signal_graph_node.hpp:81
Definition scanner.hpp:35
Definition signal_graph_executor_routing.hpp:38
Definition signal_graph_node.hpp:36
Definition custom_node_type.hpp:386
Definition sample_region_authoring.hpp:24
Definition sample_region_proof.hpp:134
Definition sample_region_runtime.hpp:171
Definition signal_graph_execution_status.hpp:12
Definition signal_graph_executor_routing.hpp:143
Definition signal_graph_runtime.hpp:1363
std::uint32_t slot
Definition signal_graph_runtime.hpp:1365
std::uint32_t out_channel
Definition signal_graph_runtime.hpp:1364
Definition signal_graph_runtime.hpp:1360
std::vector< std::uint8_t > skip_mask
Definition signal_graph_runtime.hpp:1362
AnticipationLane lane
Definition signal_graph_runtime.hpp:1361
std::vector< Prefill > prefill
Definition signal_graph_runtime.hpp:1367
std::vector< std::vector< float > > consume_scratch
Definition signal_graph_runtime.hpp:1368
bool valid
Definition signal_graph_runtime.hpp:1370
std::vector< float * > consume_ptrs
Definition signal_graph_runtime.hpp:1369
Definition signal_graph_runtime.hpp:1212
NodeType type
Definition signal_graph_runtime.hpp:1213
int num_input_ports
Definition signal_graph_runtime.hpp:1214
int num_output_ports
Definition signal_graph_runtime.hpp:1215
Definition signal_graph_runtime.hpp:1217
NodeShape shape
Definition signal_graph_runtime.hpp:1219
NodeRuntime * runtime
Definition signal_graph_runtime.hpp:1220
Definition signal_graph_runtime.hpp:1291
std::uint64_t pending_seq
Definition signal_graph_runtime.hpp:1294
std::uint32_t plan_index
Definition signal_graph_runtime.hpp:1292
NodeId id
Definition signal_graph_runtime.hpp:1293
Definition signal_graph_runtime.hpp:1278
format::GraphRuntimeBufferPool pool
Definition signal_graph_runtime.hpp:1280
std::vector< CustomBindingContext > custom_ctx
Definition signal_graph_runtime.hpp:1282
graph::GraphRuntimeLevelization levelization
Definition signal_graph_runtime.hpp:1283
std::vector< PluginBindingContext > plugin_ctx
Definition signal_graph_runtime.hpp:1281
format::GraphRuntimeSnapshot snapshot
Definition signal_graph_runtime.hpp:1279
bool valid
Definition signal_graph_runtime.hpp:1284
Definition signal_graph_runtime.hpp:1311
std::vector< RoutedMidiNode > midi_inputs
Definition signal_graph_runtime.hpp:1333
format::BusBufferSet buses
Definition signal_graph_runtime.hpp:1340
PluginRoutingScratch plugin_scratch
Definition signal_graph_runtime.hpp:1323
std::vector< RoutedProcessorNode > processor_parameter_inputs
Definition signal_graph_runtime.hpp:1335
RoutedPath parallel
Definition signal_graph_runtime.hpp:1320
RoutedPath serial
Definition signal_graph_runtime.hpp:1313
std::vector< RoutedMidiNode > midi_outputs
Definition signal_graph_runtime.hpp:1334
format::GraphRuntimeMidiScratch midi
Definition signal_graph_runtime.hpp:1332
format::GraphRuntimeAutomationScratch automation
Definition signal_graph_runtime.hpp:1339
Definition signal_graph_runtime.hpp:1296
std::uint64_t pending_seq
Definition signal_graph_runtime.hpp:1299
std::uint32_t plan_index
Definition signal_graph_runtime.hpp:1297
NodeId id
Definition signal_graph_runtime.hpp:1298
Definition signal_graph_runtime.hpp:1106
std::vector< float > ring
Definition signal_graph_runtime.hpp:1110
int write_pos
Definition signal_graph_runtime.hpp:1111
Definition signal_graph_runtime.hpp:560
std::uint64_t connection
Definition signal_graph_runtime.hpp:562
PortIndex source_port
Definition signal_graph_runtime.hpp:565
PortIndex destination_port
Definition signal_graph_runtime.hpp:566
NodeId source
Definition signal_graph_runtime.hpp:563
GraphAuthoringReceipt authoring
Definition signal_graph_runtime.hpp:561
NodeId destination
Definition signal_graph_runtime.hpp:564
Definition signal_graph_runtime.hpp:110
bool accepted
Definition signal_graph_runtime.hpp:111
std::size_t actual
Definition signal_graph_runtime.hpp:113
GeneratedGraphValidationRejectReason reason
Definition signal_graph_runtime.hpp:112
std::size_t limit
Definition signal_graph_runtime.hpp:114
Definition signal_graph_runtime.hpp:88
std::size_t max_ports
Definition signal_graph_runtime.hpp:91
std::size_t max_connections
Definition signal_graph_runtime.hpp:90
std::size_t max_estimated_work_units
Definition signal_graph_runtime.hpp:97
int max_block_size
Definition signal_graph_runtime.hpp:92
std::size_t max_nodes
Definition signal_graph_runtime.hpp:89
Definition signal_graph_runtime.hpp:546
NodeId node_id
Definition signal_graph_runtime.hpp:547
audio::AudioProcessLoadSnapshot load
Definition signal_graph_runtime.hpp:548
Definition signal_graph_runtime.hpp:1090
bool has_add
Definition signal_graph_runtime.hpp:1094
float lo
Definition signal_graph_runtime.hpp:1091
float hi
Definition signal_graph_runtime.hpp:1092
bool has_replace
Definition signal_graph_runtime.hpp:1093
Definition signal_graph_runtime.hpp:1017
size_t connection_index
Definition signal_graph_runtime.hpp:1018
NodeRuntime * source_runtime
Definition signal_graph_runtime.hpp:1019
Definition signal_graph_runtime.hpp:1042
float min_value
Definition signal_graph_runtime.hpp:1044
float max_value
Definition signal_graph_runtime.hpp:1045
Definition signal_graph_runtime.hpp:1049
bool touched
Definition signal_graph_runtime.hpp:1055
float lo
Definition signal_graph_runtime.hpp:1052
float v0
Definition signal_graph_runtime.hpp:1050
float vN
Definition signal_graph_runtime.hpp:1051
float hi
Definition signal_graph_runtime.hpp:1053
bool has_add
Definition signal_graph_runtime.hpp:1054
Definition signal_graph_runtime.hpp:169
std::uint64_t value
Definition signal_graph_runtime.hpp:170
friend bool operator==(PluginCatalogToken a, PluginCatalogToken b) noexcept
Definition signal_graph_runtime.hpp:174
Definition signal_graph_runtime.hpp:142
std::int64_t delay_samples
Definition signal_graph_runtime.hpp:144
Connection connection
Definition signal_graph_runtime.hpp:143
Definition signal_graph_runtime.hpp:147
std::vector< PreparedNodeLatency > nodes
Definition signal_graph_runtime.hpp:149
std::optional< std::int64_t > connection_delay(const Connection &connection) const
std::vector< PreparedConnectionDelay > connections
Definition signal_graph_runtime.hpp:150
std::int64_t total_latency_samples
Definition signal_graph_runtime.hpp:148
std::optional< PreparedNodeLatency > node(NodeId id) const
Definition signal_graph_runtime.hpp:136
std::int64_t output_latency_samples
Definition signal_graph_runtime.hpp:139
std::int64_t input_latency_samples
Definition signal_graph_runtime.hpp:138
NodeId node_id
Definition signal_graph_runtime.hpp:137
Definition signal_graph_runtime.hpp:117
std::size_t spectral_buffer_bytes
Definition signal_graph_runtime.hpp:127
std::size_t connection_count
Definition signal_graph_runtime.hpp:120
std::size_t ordered_node_count
Definition signal_graph_runtime.hpp:119
int max_block_size
Definition signal_graph_runtime.hpp:122
std::size_t total_prepared_buffer_bytes
Definition signal_graph_runtime.hpp:126
std::size_t node_count
Definition signal_graph_runtime.hpp:118
std::uint64_t snapshot_generation
Definition signal_graph_runtime.hpp:128
std::size_t total_ports
Definition signal_graph_runtime.hpp:121
std::size_t node_audio_buffer_bytes
Definition signal_graph_runtime.hpp:123
std::size_t delay_buffer_bytes
Definition signal_graph_runtime.hpp:125
std::size_t automation_buffer_bytes
Definition signal_graph_runtime.hpp:124
Definition signal_graph_runtime.hpp:158
bool should_run_optional_work() const noexcept
Definition signal_graph_runtime.hpp:164
std::uint64_t estimated_cost
Definition signal_graph_runtime.hpp:161
runtime::RuntimeBudgetFrameStats frame_stats
Definition signal_graph_runtime.hpp:160
runtime::RuntimeBudgetDecision decision
Definition signal_graph_runtime.hpp:159
bool prepared
Definition signal_graph_runtime.hpp:162
Definition spectral_graph.hpp:16
PortHandle handle
Definition spectral_graph.hpp:17
Definition trigger_graph.hpp:76
Definition trigger_graph.hpp:104
Definition trigger_graph.hpp:80
Definition trigger_graph.hpp:71
Definition trigger_graph.hpp:136
Definition trigger_graph.hpp:66
Definition trigger_graph.hpp:23
Definition trigger_graph.hpp:113
Definition budget_policy.hpp:39
Definition budget_policy.hpp:46
Definition modulation_lane.hpp:46
Lock-free latest-value publication between two threads.
Sample-accurate MIDI 2.0 UMP packet stream.