Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
dsl_processor.hpp
Go to the documentation of this file.
1#pragma once
2
3// pulp-dsl contract — the interface that DSL code generators target.
4//
5// A DslProcessor wraps generated DSP code behind Pulp's Processor interface.
6// Each DSL backend (FAUST, Cmajor, JSFX) provides a concrete subclass that:
7// 1. Populates DslParamDescriptor from DSL metadata
8// 2. Maps parameters into StateStore via define_parameters()
9// 3. Bridges audio/MIDI through the generated compute function
10//
11// Ownership boundary: the DslProcessor owns the generated DSP instance.
12// The format adapters (VST3, AU, CLAP) see only a Processor.
13
15#include <string>
16#include <vector>
17
18namespace pulp::dsl {
19
20// Metadata extracted from DSL source (FAUST UI declarations, Cmajor endpoints, etc.)
22 std::string name; // Display name from DSL metadata
23 std::string group; // Group/path from UI hierarchy (e.g. "Envelope/Attack")
24 std::string unit; // Unit string: "dB", "Hz", "%", etc.
25 float min = 0.0f;
26 float max = 1.0f;
27 float default_value = 0.0f;
28 float step = 0.0f; // 0 = continuous
29};
30
31// Bus layout extracted from DSL source
33 int num_inputs = 0; // Number of audio input channels
34 int num_outputs = 0; // Number of audio output channels
35 bool accepts_midi = false;
36};
37
38// Compile/build error reported by a DSL backend
39struct DslError {
40 enum class Severity { Warning, Error };
42 std::string message;
43 std::string file; // Source file path (may be empty)
44 int line = 0; // Source line (0 = unknown)
45};
46
47// Abstract base for DSL-generated processors.
48// Subclasses implement the generate/reflect/compute bridge for their specific DSL.
50public:
51 // --- Reflection (populated by subclass constructor) ---
52
53 const std::vector<DslParamDescriptor>& dsl_params() const { return dsl_params_; }
54 const DslBusLayout& bus_layout() const { return bus_layout_; }
55 const std::string& dsl_name() const { return dsl_name_; }
56
57protected:
58 std::vector<DslParamDescriptor> dsl_params_;
60 std::string dsl_name_; // "faust", "cmajor", "jsfx"
61};
62
63} // namespace pulp::dsl
Definition dsl_processor.hpp:49
const DslBusLayout & bus_layout() const
Definition dsl_processor.hpp:54
const std::string & dsl_name() const
Definition dsl_processor.hpp:55
DslBusLayout bus_layout_
Definition dsl_processor.hpp:59
std::string dsl_name_
Definition dsl_processor.hpp:60
const std::vector< DslParamDescriptor > & dsl_params() const
Definition dsl_processor.hpp:53
std::vector< DslParamDescriptor > dsl_params_
Definition dsl_processor.hpp:58
Definition processor.hpp:174
Definition dsl_processor.hpp:18
Definition dsl_processor.hpp:32
int num_outputs
Definition dsl_processor.hpp:34
bool accepts_midi
Definition dsl_processor.hpp:35
int num_inputs
Definition dsl_processor.hpp:33
Definition dsl_processor.hpp:39
int line
Definition dsl_processor.hpp:44
std::string message
Definition dsl_processor.hpp:42
Severity severity
Definition dsl_processor.hpp:41
Severity
Definition dsl_processor.hpp:40
@ Warning
Definition dsl_processor.hpp:40
@ Error
Definition dsl_processor.hpp:40
std::string file
Definition dsl_processor.hpp:43
Definition dsl_processor.hpp:21
float default_value
Definition dsl_processor.hpp:27
float min
Definition dsl_processor.hpp:25
float max
Definition dsl_processor.hpp:26
std::string name
Definition dsl_processor.hpp:22
std::string group
Definition dsl_processor.hpp:23
std::string unit
Definition dsl_processor.hpp:24
float step
Definition dsl_processor.hpp:28