Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
timeline_offline_graph.hpp
Go to the documentation of this file.
1#pragma once
2
3// Builds the device-free SignalGraph topology that a Timeline bounce needs.
4//
5// TimelineGraphPlaybackBinding is expressed entirely in NodeIds, so every caller
6// that wants to render a compiled PlaybackProgram must first stand up a graph and
7// a route table. That construction is small but it is not obvious, and getting it
8// subtly wrong renders silence rather than failing, so it belongs in one place
9// instead of being rediscovered per call site.
10//
11// "Device-free" is the whole contract: no device_routes, no plugin nodes, no
12// post-device or post-mixer overrides. The binding still creates the per-track
13// arrangement-audio and mixer nodes itself, so this topology is at exact parity
14// with ArrangementAudioRenderer over the same program - see the bit-exactness
15// assertion in test/test_timeline_graph_binding.cpp. Device chains are additive
16// work on top of this shape, not a different one.
17//
18// MIDI destinations are left unset. A device-free graph instantiates no
19// instrument, so there is nothing for note events to reach; routing them at a
20// node that does not exist would be a lie, not a capability.
21
25
26#include <cstdint>
27#include <vector>
28
29namespace pulp::host {
30
38
44 std::vector<TimelineTrackGraphRoute> routes;
45
46 constexpr explicit operator bool() const noexcept {
48 }
49};
50
56 const playback::PlaybackProgram& program,
57 std::uint32_t output_channels);
58
59} // namespace pulp::host
Definition signal_graph_runtime.hpp:83
Definition program.hpp:290
Definition graph_runtime_buffer_assignment.hpp:8
std::uint32_t NodeId
Definition graph_types.hpp:7
Bounded event contracts shared by host ingress and graph-authored nodes.
Definition anticipation_eligibility.hpp:9
TimelineDeviceFreeGraph build_device_free_timeline_graph(SignalGraph &graph, const playback::PlaybackProgram &program, std::uint32_t output_channels)
Adds a single output node to graph and returns one device-free route per track in program.
TimelineDeviceFreeGraphCode
Definition timeline_offline_graph.hpp:31
@ OutputNodeRejected
The graph refused the output node.
Definition timeline_offline_graph.hpp:36
@ InvalidChannelCount
output_channels was zero, or wider than the graph accepts.
Definition timeline_offline_graph.hpp:34
@ Ok
Definition timeline_offline_graph.hpp:32
@ Ok
Definition baked_graph_processor.hpp:156
Definition timeline_offline_graph.hpp:39
std::vector< TimelineTrackGraphRoute > routes
One route per program track, in program order.
Definition timeline_offline_graph.hpp:44
NodeId output_node
Definition timeline_offline_graph.hpp:41
TimelineDeviceFreeGraphCode code
Definition timeline_offline_graph.hpp:40