Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
sequence_processor.hpp
Go to the documentation of this file.
1#pragma once
2
10#include <pulp/runtime/slot.hpp>
12
13#include <atomic>
14#include <cstddef>
15#include <cstdint>
16#include <memory>
17#include <string>
18#include <vector>
19
20namespace pulp::sequence {
21
22namespace detail {
23class MidiLatencyQueue;
24}
25
27 std::string name = "Pulp Sequence";
28 std::string manufacturer = "Pulp";
29 std::string bundle_id = "com.pulp.sequence";
30 std::string version = "1.0.0";
31 std::uint32_t output_channels = 2;
35 std::size_t maximum_delayed_events = 262'144;
36};
37
50
58
63 public:
65 SequenceProcessorConfig config = {});
67
69 void define_parameters(state::StateStore& store) override;
70 void prepare(const format::PrepareContext& context) override;
71 void release() override;
77 void process(audio::BufferView<float>& audio_output,
78 const audio::BufferView<const float>& audio_input, midi::MidiBuffer& midi_in,
79 midi::MidiBuffer& midi_out, const format::ProcessContext& context) override;
80 int latency_samples() const override {
81 return prepared_ ? static_cast<int>(prepared_latency_samples_) : 0;
82 }
83 bool has_editor() const override {
84 return false;
85 }
86
88 return status_;
89 }
90 bool ready() const noexcept {
91 return prepared_;
92 }
94 return last_observation_;
95 }
96
97 private:
98 struct TrackRuntime;
99 struct PreparedPublication;
100
101 static bool process_track(format::ProcessBlock& block,
103 void* user_data) noexcept;
104 bool prepare_graph(const PreparedPublication& publication, std::uint32_t maximum_block_size);
105 bool topology_matches(const playback::PlaybackProgram& program) const noexcept;
106
107 const playback::PlaybackProgramStore& store_;
109 HostTransportProjector transport_;
114 std::vector<std::unique_ptr<TrackRuntime>> tracks_;
115 std::vector<timeline::ItemId> track_ids_;
117 const timebase::CompiledTempoMap* prepared_tempo_map_ = nullptr;
118 const playback::PlaybackProgram* active_program_ = nullptr;
119 const playback::TransportSnapshot* active_transport_ = nullptr;
120 playback::RealtimeStretchProgramRuntime* active_realtime_stretch_ = nullptr;
121 std::uint32_t midi_output_node_index_ = 0;
122 std::uint32_t maximum_block_size_ = 0;
123 std::uint32_t prepared_latency_samples_ = 0;
124 std::unique_ptr<detail::MidiLatencyQueue> midi_delay_;
125 const playback::PlaybackProgram* midi_delay_publication_ = nullptr;
126 std::uint64_t midi_delay_playback_epoch_ = 0;
127 bool prepared_ = false;
128 SequenceProcessObservation last_observation_;
129 std::atomic<playback::AudioRenderStatus> block_audio_status_{
132};
133
134} // namespace pulp::sequence
Pre-allocated scratch buffers backing the routing process() path.
Definition graph_runtime_executor.hpp:297
Definition graph_runtime_executor.hpp:738
Pre-allocated per-node MIDI buffers backing the routing path's event edges.
Definition graph_runtime_executor.hpp:486
Control-thread-built graph snapshot for GraphRuntimeExecutor.
Definition graph_runtime_executor.hpp:159
Definition processor.hpp:174
Definition program.hpp:371
Definition program.hpp:290
One exact-publication live Stretch runtime.
Definition realtime_stretch_renderer.hpp:31
Lock-free publication to a reader that must never block.
Definition slot.hpp:84
Re-anchors the engine transport to the host's integer sample position on every callback.
Definition host_transport_projector.hpp:32
SequenceProcessor(const playback::PlaybackProgramStore &store, SequenceProcessorConfig config={})
int latency_samples() const override
Latency in samples introduced by this processor (default 0).
Definition sequence_processor.hpp:80
SequenceProcessObservation last_observation() const noexcept
Definition sequence_processor.hpp:93
bool has_editor() const override
Editor support.
Definition sequence_processor.hpp:83
bool ready() const noexcept
Definition sequence_processor.hpp:90
void release() override
Release resources.
format::PluginDescriptor descriptor() const override
Return the plugin's metadata. Called once during initialization.
SequenceProcessorStatus status() const noexcept
Definition sequence_processor.hpp:87
void force_realtime_stretch_failure_for_test() noexcept
bool adopt_latest_program()
Control-thread operation.
void define_parameters(state::StateStore &store) override
Register parameters with the state store.
void process(audio::BufferView< float > &audio_output, const audio::BufferView< const float > &audio_input, midi::MidiBuffer &midi_in, midi::MidiBuffer &midi_out, const format::ProcessContext &context) override
Process one buffer of audio.
void prepare(const format::PrepareContext &context) override
Prepare for processing.
Centralized parameter storage with lock-free value access.
Definition store.hpp:164
Definition compiled_tempo_map.hpp:91
Definition analyzer_provider.hpp:12
What the product grants a device: the quota table indexed by capability tier and live thermal state.
Definition aax_editor.hpp:31
Definition custom_node_events.hpp:26
AudioRenderStatus
Definition audio_renderer.hpp:214
@ Silent
Definition audio_renderer.hpp:216
Definition host_transport_projector.hpp:23
Definition host_transport_projector.hpp:8
SequenceProcessorStatus
Definition sequence_processor.hpp:38
@ TopologyChanged
Definition sequence_processor.hpp:44
@ TransportRejected
Definition sequence_processor.hpp:45
@ ExecutorFailed
Definition sequence_processor.hpp:48
@ MissingProgram
Definition sequence_processor.hpp:41
@ SampleRateMismatch
Definition sequence_processor.hpp:43
@ Unprepared
Definition sequence_processor.hpp:39
@ RealtimeStretchRejected
Definition sequence_processor.hpp:47
@ Ready
Definition sequence_processor.hpp:40
@ InvalidConfiguration
Definition sequence_processor.hpp:42
@ RenderFailed
Definition sequence_processor.hpp:46
Publishing a value built off the audio thread, and reclaiming the old one without ever calling a dest...
Definition graph_runtime_executor.hpp:70
Plugin metadata — declared once, immutable.
Definition plugin_descriptor.hpp:245
Definition prepare_resources.hpp:102
Additive block-scoped process contract.
Definition process_block.hpp:517
Definition transport.hpp:71
Definition sequence_processor.hpp:51
timebase::TickPosition timeline_tick_start
Definition sequence_processor.hpp:52
std::uint32_t emitted_midi_events
Definition sequence_processor.hpp:53
bool discontinuity
Definition sequence_processor.hpp:54
playback::AudioRenderStatus audio_status
Definition sequence_processor.hpp:55
bool valid
Definition sequence_processor.hpp:56
Definition sequence_processor.hpp:26
std::size_t maximum_note_events_per_track_per_block
Definition sequence_processor.hpp:32
std::string name
Definition sequence_processor.hpp:27
std::uint32_t output_channels
Definition sequence_processor.hpp:31
std::string manufacturer
Definition sequence_processor.hpp:28
std::size_t maximum_delayed_events
Admission ceiling for each prepared MIDI/UMP latency ring.
Definition sequence_processor.hpp:35
std::string version
Definition sequence_processor.hpp:30
std::string bundle_id
Definition sequence_processor.hpp:29
Definition tick.hpp:61