Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
offline_processor.hpp
Go to the documentation of this file.
1#pragma once
2
3// Offline audio processing — render an entire file through a processor chain.
4// Useful for batch processing, bouncing, and golden-file test generation.
5
7#include <functional>
8#include <string>
9#include <optional>
10#include <vector>
11#include <cstdint>
12
13namespace pulp::audio {
14
18using OfflineProcessCallback = std::function<void(
19 const float* input, float* output,
20 int channels, int block_size, double sample_rate
21)>;
22
25 uint64_t block_index = 0;
26 uint64_t sample_position = 0;
27 int frames = 0;
29 double sample_rate = 0.0;
30 double time_seconds = 0.0;
31 double position_beats = 0.0;
32 double tempo_bpm = 120.0;
33 double render_speed_ratio = 1.0;
34 uint64_t state_generation = 0;
35 uint64_t deterministic_seed = 0;
36};
37
38enum class OfflineRenderTailPolicy : uint8_t {
41};
42
48
49enum class OfflineRenderComputeBackend : uint8_t {
50 Cpu = 0,
52};
53
60
71
73 std::string id;
74 std::string path;
75 std::string content_sha256;
76 std::string cache_key;
77 uint64_t generation = 0;
78 uint64_t decoded_bytes = 0;
79 bool required = true;
80 bool staged = true;
81};
82
88 std::vector<int> block_size_schedule;
91 double tempo_bpm = 120.0;
92 double render_speed_ratio = 1.0;
93 uint64_t state_generation = 0;
94 uint64_t deterministic_seed = 0;
96 uint64_t tail_frames = 0;
97 std::vector<OfflineRenderResourceRef> resources;
98};
99
101 std::string name;
102 uint32_t first_channel = 0;
103 uint32_t channel_count = 0;
104};
105
110
113 std::vector<OfflineRenderedStem> stems;
114};
115
117 uint32_t channels = 0;
118 uint64_t frames = 0;
119 float peak_error = 0.0f;
120 double rms_error = 0.0;
121
122 bool passes(float peak_tolerance, double rms_tolerance) const noexcept;
123};
124
126 uint64_t start_frame = 0;
127 uint64_t frame_count = 0;
129};
130
132 uint32_t format_version = 1;
133 uint32_t sample_rate = 0;
134 uint32_t channels = 0;
135 uint64_t frames = 0;
136 std::string audio_sha256;
140 double tempo_bpm = 120.0;
141 double render_speed_ratio = 1.0;
142 uint64_t state_generation = 0;
143 uint64_t deterministic_seed = 0;
145 uint64_t tail_frames = 0;
146 std::vector<int> block_size_schedule;
147 std::vector<OfflineRenderResourceRef> resources;
148 std::vector<OfflineRenderManifestChunk> chunks;
150 bool cache_reusable = true;
152
153 bool matches_audio(const AudioFileData& audio) const noexcept;
154};
155
157using OfflineRenderCallback = std::function<void(
158 const float* input, float* output,
159 int channels, const OfflineRenderBlockContext& context
160)>;
161
163std::optional<AudioFileData> offline_render(
164 const AudioFileData& input,
165 OfflineRenderCallback render_fn,
166 const OfflineRenderOptions& options = {}
167);
168
170std::optional<OfflineRenderStemResult> offline_render_stems(
171 const AudioFileData& input,
172 OfflineRenderCallback render_fn,
173 const OfflineRenderOptions& options,
174 const std::vector<OfflineRenderStem>& stems
175);
176
178std::optional<OfflineRenderComparison> compare_offline_render_audio(
179 const AudioFileData& actual,
180 const AudioFileData& expected
181);
182
184std::optional<std::string> offline_render_audio_sha256(
185 const AudioFileData& audio
186);
187
189std::optional<OfflineRenderArtifactManifest> create_offline_render_manifest(
190 const AudioFileData& rendered_audio,
191 const OfflineRenderOptions& options = {}
192);
193
196 const OfflineRenderComputePolicy& policy
197);
198
201std::optional<AudioFileData> offline_process(
202 const AudioFileData& input,
203 OfflineProcessCallback process_fn,
204 int block_size = 512
205);
206
210 const std::string& input_path,
211 const std::string& output_path,
212 OfflineProcessCallback process_fn,
213 int block_size = 512
214);
215
217AudioFileData apply_gain(const AudioFileData& input, float gain_linear);
218
219} // namespace pulp::audio
Definition analyzer_provider.hpp:12
OfflineRenderComputeDecision evaluate_offline_render_compute_policy(const OfflineRenderComputePolicy &policy)
Decide whether a GPU-assisted offline analysis request is allowed.
std::optional< OfflineRenderStemResult > offline_render_stems(const AudioFileData &input, OfflineRenderCallback render_fn, const OfflineRenderOptions &options, const std::vector< OfflineRenderStem > &stems)
Render an in-memory file and extract named channel-range stems from the mix.
OfflineRenderExecutionScope
Definition offline_processor.hpp:43
@ OfflineAnalysis
Definition offline_processor.hpp:45
@ RealtimeAudioThread
Definition offline_processor.hpp:44
@ BackgroundAnalysis
Definition offline_processor.hpp:46
OfflineRenderTailPolicy
Definition offline_processor.hpp:38
@ RenderTail
Definition offline_processor.hpp:40
@ Truncate
Definition offline_processor.hpp:39
std::function< void( const float *input, float *output, int channels, int block_size, double sample_rate)> OfflineProcessCallback
Callback for processing a block of audio.
Definition offline_processor.hpp:18
bool offline_process_file(const std::string &input_path, const std::string &output_path, OfflineProcessCallback process_fn, int block_size=512)
Process a file on disk, writing the result to another file.
std::optional< OfflineRenderComparison > compare_offline_render_audio(const AudioFileData &actual, const AudioFileData &expected)
Compare two rendered artifacts for golden/null tests.
std::optional< OfflineRenderArtifactManifest > create_offline_render_manifest(const AudioFileData &rendered_audio, const OfflineRenderOptions &options={})
Build a deterministic manifest for a rendered offline audio artifact.
std::function< void( const float *input, float *output, int channels, const OfflineRenderBlockContext &context)> OfflineRenderCallback
Callback for deterministic offline render blocks.
Definition offline_processor.hpp:157
std::optional< AudioFileData > offline_render(const AudioFileData &input, OfflineRenderCallback render_fn, const OfflineRenderOptions &options={})
Render an entire in-memory audio file with deterministic block metadata.
AudioFileData apply_gain(const AudioFileData &input, float gain_linear)
Simple gain processing for testing.
OfflineRenderComputeBackend
Definition offline_processor.hpp:49
@ Gpu
Definition offline_processor.hpp:51
@ Cpu
Definition offline_processor.hpp:50
std::optional< AudioFileData > offline_process(const AudioFileData &input, OfflineProcessCallback process_fn, int block_size=512)
Process an entire audio file through a callback function.
std::optional< std::string > offline_render_audio_sha256(const AudioFileData &audio)
Compute a canonical SHA-256 digest for rendered floating-point audio.
Definition audio_file.hpp:24
Definition offline_processor.hpp:131
double tempo_bpm
Definition offline_processor.hpp:140
double render_speed_ratio
Definition offline_processor.hpp:141
bool cache_reusable
Definition offline_processor.hpp:150
OfflineRenderTailPolicy tail_policy
Definition offline_processor.hpp:144
uint64_t tail_frames
Definition offline_processor.hpp:145
std::string resource_set_sha256
Definition offline_processor.hpp:149
uint32_t sample_rate
Definition offline_processor.hpp:133
std::vector< int > block_size_schedule
Definition offline_processor.hpp:146
double start_position_beats
Definition offline_processor.hpp:139
std::vector< OfflineRenderResourceRef > resources
Definition offline_processor.hpp:147
uint32_t missing_optional_resources
Definition offline_processor.hpp:151
std::string audio_sha256
Definition offline_processor.hpp:136
uint64_t frames
Definition offline_processor.hpp:135
uint64_t state_generation
Definition offline_processor.hpp:142
uint32_t format_version
Definition offline_processor.hpp:132
uint32_t channels
Definition offline_processor.hpp:134
uint64_t start_sample_position
Definition offline_processor.hpp:138
uint64_t deterministic_seed
Definition offline_processor.hpp:143
bool matches_audio(const AudioFileData &audio) const noexcept
std::string render_plan_sha256
Definition offline_processor.hpp:137
std::vector< OfflineRenderManifestChunk > chunks
Definition offline_processor.hpp:148
Per-block metadata for deterministic offline renders.
Definition offline_processor.hpp:24
int frames
Definition offline_processor.hpp:27
uint64_t block_index
Definition offline_processor.hpp:25
uint64_t sample_position
Definition offline_processor.hpp:26
double tempo_bpm
Definition offline_processor.hpp:32
int scheduled_block_size
Definition offline_processor.hpp:28
double time_seconds
Definition offline_processor.hpp:30
double render_speed_ratio
Definition offline_processor.hpp:33
double position_beats
Definition offline_processor.hpp:31
uint64_t state_generation
Definition offline_processor.hpp:34
uint64_t deterministic_seed
Definition offline_processor.hpp:35
double sample_rate
Definition offline_processor.hpp:29
Definition offline_processor.hpp:116
uint32_t channels
Definition offline_processor.hpp:117
uint64_t frames
Definition offline_processor.hpp:118
float peak_error
Definition offline_processor.hpp:119
double rms_error
Definition offline_processor.hpp:120
bool passes(float peak_tolerance, double rms_tolerance) const noexcept
Definition offline_processor.hpp:61
bool used_cpu_fallback
Definition offline_processor.hpp:64
bool accepted
Definition offline_processor.hpp:62
bool uses_gpu() const noexcept
Definition offline_processor.hpp:67
OfflineRenderComputeBackend backend
Definition offline_processor.hpp:63
const char * reason
Definition offline_processor.hpp:65
Definition offline_processor.hpp:54
bool allow_cpu_fallback
Definition offline_processor.hpp:58
OfflineRenderExecutionScope scope
Definition offline_processor.hpp:55
OfflineRenderComputeBackend requested_backend
Definition offline_processor.hpp:56
bool gpu_available
Definition offline_processor.hpp:57
Definition offline_processor.hpp:125
uint64_t start_frame
Definition offline_processor.hpp:126
uint64_t frame_count
Definition offline_processor.hpp:127
int scheduled_block_size
Definition offline_processor.hpp:128
Advanced offline render options.
Definition offline_processor.hpp:86
std::vector< int > block_size_schedule
Definition offline_processor.hpp:88
uint64_t tail_frames
Definition offline_processor.hpp:96
uint64_t deterministic_seed
Definition offline_processor.hpp:94
OfflineRenderTailPolicy tail_policy
Definition offline_processor.hpp:95
double render_speed_ratio
Definition offline_processor.hpp:92
std::vector< OfflineRenderResourceRef > resources
Definition offline_processor.hpp:97
double start_position_beats
Definition offline_processor.hpp:90
uint64_t state_generation
Definition offline_processor.hpp:93
int fallback_block_size
Definition offline_processor.hpp:87
uint64_t start_sample_position
Definition offline_processor.hpp:89
double tempo_bpm
Definition offline_processor.hpp:91
Definition offline_processor.hpp:72
std::string content_sha256
Definition offline_processor.hpp:75
uint64_t generation
Definition offline_processor.hpp:77
bool required
Definition offline_processor.hpp:79
std::string path
Definition offline_processor.hpp:74
bool staged
Definition offline_processor.hpp:80
std::string id
Definition offline_processor.hpp:73
std::string cache_key
Definition offline_processor.hpp:76
uint64_t decoded_bytes
Definition offline_processor.hpp:78
Definition offline_processor.hpp:111
AudioFileData mix
Definition offline_processor.hpp:112
std::vector< OfflineRenderedStem > stems
Definition offline_processor.hpp:113
Definition offline_processor.hpp:100
uint32_t channel_count
Definition offline_processor.hpp:103
std::string name
Definition offline_processor.hpp:101
uint32_t first_channel
Definition offline_processor.hpp:102
Definition offline_processor.hpp:106
std::string name
Definition offline_processor.hpp:107
AudioFileData audio
Definition offline_processor.hpp:108