Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
forge_space_catalog.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <array>
4#include <cstdint>
5#include <limits>
6#include <memory>
13#include <vector>
14
15#if defined(PULP_HOST_ENABLE_GPU_CONVOLUTION)
16#ifndef PULP_GPU_CONVOLUTION_TRACE_CONFIG_API
17#define PULP_GPU_CONVOLUTION_TRACE_CONFIG_API 1
18#endif
20#endif
21
23// Canonical descriptor keys owned by this family: "convolution_reverb",
24// "nonlin_ambience", and "speaker_cabinet".
25namespace convolution {
26inline constexpr const char* kTypeId = "space.convolution_reverb";
27inline constexpr state::ParamID kIrGainDb = 1;
28inline constexpr state::ParamID kPredelayMs = 2;
29inline constexpr state::ParamID kWetPercent = 3;
30inline constexpr state::ParamID kDryPercent = 4;
31inline constexpr state::ParamID kWidthPercent = 5;
32inline constexpr state::ParamID kLowcutHz = 6;
33inline constexpr state::ParamID kHighcutHz = 7;
36 std::vector<std::vector<float>> channels;
37 double sample_rate = 48000.0;
38};
47struct Instance {
49};
51 double sample_rate, int max_block);
55#if defined(PULP_HOST_ENABLE_GPU_CONVOLUTION)
56inline constexpr const char* kGpuTypeId = "space.convolution_reverb_gpu";
57struct GpuInstance {
58 std::unique_ptr<gpu_audio::GpuConvolutionReverb> engine;
59 std::uint64_t preparation_generation = 0;
60};
61int gpu_internal_block_size(int max_block) noexcept;
62inline constexpr std::uint64_t kGpuDiagnosticSchema = 0x4750554352560001ULL;
63enum class GpuDiagnosticCounterUnit : std::uint8_t { TransportQuantum = 1 };
64struct GpuConvolutionDiagnostics {
65 std::uint32_t schema_version = 1;
66 std::uint32_t lane_count = 2;
68 GpuDiagnosticCounterUnit delivery_counter_unit = GpuDiagnosticCounterUnit::TransportQuantum;
69};
70CustomNodeDiagnosticsDescriptor gpu_convolution_diagnostics();
71CustomNodeType make_gpu_convolution_reverb_node(ImpulseResponse, IrPolicy = {},
72 gpu_audio::GpuConvolverTraceConfig = {});
73ForgeNodeDescriptor descriptor_with_gpu();
74#endif
75} // namespace convolution
76
77namespace nonlin_ambience {
78inline constexpr const char* kTypeId = "space.nonlin_ambience";
79inline constexpr state::ParamID kProgram = 1;
80inline constexpr state::ParamID kLengthMs = 2;
81inline constexpr state::ParamID kPredelayMs = 3;
82inline constexpr state::ParamID kDensityPct = 4;
83inline constexpr state::ParamID kDensityGrowth = 5;
84inline constexpr state::ParamID kGateHoldPct = 6;
85inline constexpr state::ParamID kAttackPct = 7;
86inline constexpr state::ParamID kDiffusion = 8;
87inline constexpr state::ParamID kTone = 9;
88inline constexpr state::ParamID kHfDampHz = 10;
89inline constexpr state::ParamID kWidthPct = 11;
90inline constexpr state::ParamID kConverterAmount = 12;
91inline constexpr state::ParamID kOutputGainDb = 13;
92inline constexpr state::ParamID kMixPct = 14;
94namespace cal = signal::nonlin_ambience;
95inline constexpr float kProgramSteps = 3.0f;
96inline constexpr float kLengthMsMin = static_cast<float>(cal::kMinLengthMs);
97inline constexpr float kLengthMsDefault = 350.0f;
98inline constexpr float kPredelayMsMax = 200.0f;
99inline constexpr float kDensityPctMin = static_cast<float>(cal::kMinDensityPct);
100inline constexpr float kGateHoldPctMin = 10.0f;
101inline constexpr float kGateHoldPctMax = 95.0f;
102inline constexpr float kAttackPctMin = 5.0f;
103inline constexpr float kAttackPctMax = 98.0f;
104inline constexpr float kOutputGainDbMax = 24.0f;
105struct Instance {
109 float last_diffusion = std::numeric_limits<float>::quiet_NaN();
110 float last_tone = std::numeric_limits<float>::quiet_NaN();
111 float last_hf_damp = std::numeric_limits<float>::quiet_NaN();
112 float last_width = std::numeric_limits<float>::quiet_NaN();
113 float last_converter = std::numeric_limits<float>::quiet_NaN();
114 float last_output_gain = std::numeric_limits<float>::quiet_NaN();
115 float last_mix = std::numeric_limits<float>::quiet_NaN();
116};
117template <typename Fn> inline void forward_if_changed(float& last, float value, Fn&& apply) {
118 if (value == last)
119 return;
120 last = value;
121 apply(value);
122}
124CustomNodeType make_nonlin_ambience_node(std::uint32_t seed = cal::kDefaultSeed,
125 double max_length_ms = cal::kMaxLengthMs);
127} // namespace nonlin_ambience
128
129namespace cabinet {
130inline constexpr const char* kTypeId = "space.speaker_cabinet";
131inline constexpr state::ParamID kDriver = 1;
132inline constexpr state::ParamID kBox = 2;
133inline constexpr state::ParamID kVolumeL = 3;
134inline constexpr state::ParamID kResonanceTrimSt = 4;
135inline constexpr state::ParamID kQ = 5;
136inline constexpr state::ParamID kBreakupPct = 6;
137inline constexpr state::ParamID kTrebleHz = 7;
138inline constexpr state::ParamID kDriveDb = 8;
139inline constexpr state::ParamID kCompressionPct = 9;
140inline constexpr state::ParamID kMicDistanceCm = 10;
141inline constexpr state::ParamID kMicPositionPct = 11;
142inline constexpr state::ParamID kMicAxisDeg = 12;
143inline constexpr state::ParamID kDiffractionPct = 13;
144inline constexpr state::ParamID kOutputTrimDb = 14;
146struct Instance {
148 std::array<float, 14> last_params = [] {
149 std::array<float, 14> values{};
150 values.fill(std::numeric_limits<float>::quiet_NaN());
151 return values;
152 }();
153};
158} // namespace cabinet
159} // namespace pulp::host::space
Definition forge_space_catalog.hpp:129
constexpr state::ParamID kDriveDb
Definition forge_space_catalog.hpp:138
constexpr state::ParamID kTrebleHz
Definition forge_space_catalog.hpp:137
constexpr state::ParamID kDriver
Definition forge_space_catalog.hpp:131
constexpr state::ParamID kMicAxisDeg
Definition forge_space_catalog.hpp:142
constexpr state::ParamID kBreakupPct
Definition forge_space_catalog.hpp:136
ForgeNodeDescriptor descriptor()
constexpr state::ParamID kCompressionPct
Definition forge_space_catalog.hpp:139
CustomNodeType make_speaker_cabinet_node()
constexpr state::ParamID kMicPositionPct
Definition forge_space_catalog.hpp:141
constexpr state::ParamID kBox
Definition forge_space_catalog.hpp:132
constexpr state::ParamID kMicDistanceCm
Definition forge_space_catalog.hpp:140
constexpr state::ParamID kQ
Definition forge_space_catalog.hpp:135
constexpr const char * kTypeId
Definition forge_space_catalog.hpp:130
constexpr state::ParamID kVolumeL
Definition forge_space_catalog.hpp:133
signal::SpeakerModel Engine
Definition forge_space_catalog.hpp:145
constexpr state::ParamID kResonanceTrimSt
Definition forge_space_catalog.hpp:134
constexpr state::ParamID kOutputTrimDb
Definition forge_space_catalog.hpp:144
CustomNodeType make_speaker_emulation_node()
constexpr state::ParamID kDiffractionPct
Definition forge_space_catalog.hpp:143
Definition forge_space_catalog.hpp:25
float convolution_reverb_worst_case_gain(const ImpulseResponse &, const IrPolicy &, double sample_rate, int max_block)
constexpr state::ParamID kIrGainDb
Definition forge_space_catalog.hpp:27
constexpr state::ParamID kPredelayMs
Definition forge_space_catalog.hpp:28
constexpr state::ParamID kWidthPercent
Definition forge_space_catalog.hpp:31
constexpr state::ParamID kWetPercent
Definition forge_space_catalog.hpp:29
bool valid_impulse_response(const ImpulseResponse &)
constexpr state::ParamID kLowcutHz
Definition forge_space_catalog.hpp:32
constexpr state::ParamID kHighcutHz
Definition forge_space_catalog.hpp:33
signal::ZeroLatencyConvolver Engine
Definition forge_space_catalog.hpp:34
constexpr const char * kTypeId
Definition forge_space_catalog.hpp:26
CustomNodeType make_convolution_reverb_node(ImpulseResponse, IrPolicy={})
constexpr state::ParamID kDryPercent
Definition forge_space_catalog.hpp:30
CustomNodeType catalog_probe_node()
ForgeNodeDescriptor descriptor()
Definition forge_space_catalog.hpp:77
constexpr float kDensityPctMin
Definition forge_space_catalog.hpp:99
void forward_if_changed(float &last, float value, Fn &&apply)
Definition forge_space_catalog.hpp:117
constexpr float kGateHoldPctMin
Definition forge_space_catalog.hpp:100
constexpr state::ParamID kOutputGainDb
Definition forge_space_catalog.hpp:91
constexpr state::ParamID kDensityPct
Definition forge_space_catalog.hpp:82
constexpr state::ParamID kTone
Definition forge_space_catalog.hpp:87
constexpr state::ParamID kLengthMs
Definition forge_space_catalog.hpp:80
constexpr state::ParamID kGateHoldPct
Definition forge_space_catalog.hpp:84
constexpr float kLengthMsMin
Definition forge_space_catalog.hpp:96
constexpr float kAttackPctMin
Definition forge_space_catalog.hpp:102
constexpr state::ParamID kMixPct
Definition forge_space_catalog.hpp:92
constexpr const char * kTypeId
Definition forge_space_catalog.hpp:78
constexpr state::ParamID kAttackPct
Definition forge_space_catalog.hpp:85
constexpr state::ParamID kHfDampHz
Definition forge_space_catalog.hpp:88
ForgeNodeDescriptor descriptor()
constexpr state::ParamID kDensityGrowth
Definition forge_space_catalog.hpp:83
constexpr float kPredelayMsMax
Definition forge_space_catalog.hpp:98
constexpr state::ParamID kProgram
Definition forge_space_catalog.hpp:79
signal::NonlinAmbience Engine
Definition forge_space_catalog.hpp:93
constexpr state::ParamID kPredelayMs
Definition forge_space_catalog.hpp:81
constexpr state::ParamID kWidthPct
Definition forge_space_catalog.hpp:89
CustomNodeType make_nonlin_ambience_node(std::uint32_t seed=cal::kDefaultSeed, double max_length_ms=cal::kMaxLengthMs)
constexpr float kLengthMsDefault
Definition forge_space_catalog.hpp:97
constexpr float kAttackPctMax
Definition forge_space_catalog.hpp:103
constexpr float kGateHoldPctMax
Definition forge_space_catalog.hpp:101
constexpr state::ParamID kDiffusion
Definition forge_space_catalog.hpp:86
constexpr float kOutputGainDbMax
Definition forge_space_catalog.hpp:104
constexpr float kProgramSteps
Definition forge_space_catalog.hpp:95
constexpr state::ParamID kConverterAmount
Definition forge_space_catalog.hpp:90
Definition forge_space_catalog.hpp:22
The calibration register: every number this module ships that is not cited to the literature lives he...
Definition nonlin_ambience_design.hpp:253
SpeakerModelT< float > SpeakerModel
Definition speaker_cabinet.hpp:944
IrNormalizeMode
IR amplitude policy applied at load, after resampling and tail trim.
Definition zero_latency_convolver_support.hpp:157
@ energy
sum h^2 = 1 per output ear (default; convolution reverb).
Definition zero_latency_convolver_support.hpp:160
ZeroLatencyConvolverT< float > ZeroLatencyConvolver
Definition zero_latency_convolver.hpp:1116
NonlinAmbienceT< float > NonlinAmbience
Definition nonlin_ambience.hpp:829
uint32_t ParamID
Unique parameter identifier, stable across plugin versions.
Definition parameter.hpp:55
Runtime nonlinear ambience processor.
Physics-based loudspeaker, cabinet and microphone emulation: a Thiele-Small electromechanical model r...
Definition gpu_convolution_reverb.hpp:55
Definition custom_node_type.hpp:90
Definition forge_param_descriptor.hpp:127
Definition forge_space_catalog.hpp:146
Engine engine
Definition forge_space_catalog.hpp:147
std::array< float, 14 > last_params
Definition forge_space_catalog.hpp:148
Definition forge_space_catalog.hpp:35
double sample_rate
Definition forge_space_catalog.hpp:37
std::vector< std::vector< float > > channels
Definition forge_space_catalog.hpp:36
Definition forge_space_catalog.hpp:47
Engine engine
Definition forge_space_catalog.hpp:48
Definition forge_space_catalog.hpp:40
bool true_stereo
Definition forge_space_catalog.hpp:45
double tail_trim_db
Definition forge_space_catalog.hpp:42
double tail_fade_ms
Definition forge_space_catalog.hpp:43
signal::IrNormalizeMode normalize
Definition forge_space_catalog.hpp:41
int resample_taps_per_phase
Definition forge_space_catalog.hpp:44
Definition forge_space_catalog.hpp:105
float last_hf_damp
Definition forge_space_catalog.hpp:111
float last_output_gain
Definition forge_space_catalog.hpp:114
float last_width
Definition forge_space_catalog.hpp:112
float last_tone
Definition forge_space_catalog.hpp:110
Engine engine
Definition forge_space_catalog.hpp:106
float last_diffusion
Last value forwarded for each continuous param.
Definition forge_space_catalog.hpp:109
float last_mix
Definition forge_space_catalog.hpp:115
float last_converter
Definition forge_space_catalog.hpp:113
static constexpr double kTailFadeMsDefault
Definition zero_latency_convolver_support.hpp:475
static constexpr double kTailTrimDbDefault
Definition zero_latency_convolver_support.hpp:469
static constexpr int kResampTapsPerPhaseDefault
Definition zero_latency_convolver_support.hpp:483
Runtime zero-latency convolver; scheduling support and design constants are provided by zero_latency_...