Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
modulation.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <cstddef>
7#include <cstdint>
8#include <optional>
9#include <string>
10#include <string_view>
11
12namespace pulp::timeline {
13
17
27
35template <class... Fs> struct ModulationTargetCases : Fs... {
36 using Fs::operator()...;
37};
38template <class... Fs> ModulationTargetCases(Fs...) -> ModulationTargetCases<Fs...>;
39
42inline constexpr std::size_t kModulationTargetAlternativeCount =
44
51enum class ModulatorKind : std::uint8_t {
56};
57
60constexpr std::string_view modulator_kind_name(ModulatorKind value) noexcept {
61 switch (value) {
63 return "lfo";
65 return "envelope";
67 return "random";
69 return "step_sequence";
70 }
71 return "lfo";
72}
73
79constexpr bool known_modulator_kind(ModulatorKind value) noexcept {
80 switch (value) {
85 return true;
86 }
87 return false;
88}
89
92constexpr std::optional<ModulatorKind> modulator_kind_from_name(std::string_view name) noexcept {
93 if (name == "lfo")
94 return ModulatorKind::Lfo;
95 if (name == "envelope")
97 if (name == "random")
99 if (name == "step_sequence")
101 return std::nullopt;
102}
103
109struct Modulator {
112 std::string name;
113
115 bool valid() const noexcept {
116 return id.valid();
117 }
118
119 bool operator==(const Modulator&) const = default;
120};
121
131 std::string name;
132 // Normalized authored position in [0, 1]. It is the macro's own value, not
133 // any target parameter's: what each target receives is this scaled by the
134 // depth of the route that reaches it.
135 float value = 0.0f;
136
138 bool valid() const noexcept {
139 return id.valid();
140 }
141
142 bool operator==(const MacroControl&) const = default;
143};
144
146enum class ModulationSourceKind : std::uint8_t {
149};
150
152constexpr std::string_view modulation_source_kind_name(ModulationSourceKind value) noexcept {
153 switch (value) {
155 return "modulator";
157 return "macro";
158 }
159 return "modulator";
160}
161
164constexpr std::optional<ModulationSourceKind>
165modulation_source_kind_from_name(std::string_view name) noexcept {
166 if (name == "modulator")
168 if (name == "macro")
170 return std::nullopt;
171}
172
181
183 constexpr bool valid() const noexcept {
184 return id.valid();
185 }
186
187 constexpr bool operator==(const ModulationSourceRef&) const = default;
188};
189
191inline constexpr float kMaximumModulationDepth = 1.0f;
192
213 // Signed scale in [-1, 1] applied to the source signal before it is added
214 // to the target's base value. Negative inverts; zero is a connection that
215 // is authored and silent, which is not the same as an absent one.
216 float depth = 0.0f;
217 // An authored bypass. A disabled route keeps its identity, depth, and
218 // target so re-enabling it restores exactly what was there.
219 bool enabled = true;
220
222 constexpr bool valid() const noexcept {
223 return id.valid();
224 }
225
226 bool operator==(const ModulationRoute&) const = default;
227};
228
230
231} // namespace pulp::timeline
ModulatorKind
The signal shape a modulator produces.
Definition modulation.hpp:51
constexpr std::size_t kModulationTargetAlternativeCount
Number of alternatives a route target may take.
Definition modulation.hpp:42
constexpr std::size_t kParameterTargetAlternativeCount
Number of alternatives in ParameterTarget.
Definition parameter_target.hpp:102
ModulationSourceKind
Which track-owned entity a route draws its signal from.
Definition modulation.hpp:146
ModulationTargetCases(Fs...) -> ModulationTargetCases< Fs... >
constexpr float kMaximumModulationDepth
Largest magnitude a route depth may carry.
Definition modulation.hpp:191
ParameterTarget ModulationTarget
Exhaustive authored target set for a modulation route.
Definition modulation.hpp:26
constexpr std::string_view modulator_kind_name(ModulatorKind value) noexcept
The canonical persisted spelling of a modulator kind, shared by the encoder, the decoder,...
Definition modulation.hpp:60
std::variant< DeviceParameterTarget, TrackMixerTarget > ParameterTarget
Exhaustive set of document parameters an authored control can address.
Definition parameter_target.hpp:92
constexpr std::optional< ModulatorKind > modulator_kind_from_name(std::string_view name) noexcept
Parses the canonical persisted modulator-kind spelling.
Definition modulation.hpp:92
constexpr bool known_modulator_kind(ModulatorKind value) noexcept
Returns whether value names a declared modulator kind.
Definition modulation.hpp:79
constexpr std::string_view modulation_source_kind_name(ModulationSourceKind value) noexcept
The canonical persisted spelling of a modulation source kind.
Definition modulation.hpp:152
constexpr std::optional< ModulationSourceKind > modulation_source_kind_from_name(std::string_view name) noexcept
Parses the canonical persisted modulation-source-kind spelling.
Definition modulation.hpp:165
@ Lfo
Definition modulation.hpp:52
@ Envelope
Definition modulation.hpp:53
@ Random
Definition modulation.hpp:54
@ StepSequence
Definition modulation.hpp:55
@ Modulator
Definition modulation.hpp:147
@ Macro
Definition modulation.hpp:148
Definition program_compiler.hpp:18
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19
A track-owned named control that a performer sets and that drives parameters through ordinary modulat...
Definition modulation.hpp:129
bool operator==(const MacroControl &) const =default
ItemId id
Definition modulation.hpp:130
std::string name
Definition modulation.hpp:131
bool valid() const noexcept
Returns whether id is a usable, non-sentinel document identity.
Definition modulation.hpp:138
float value
Definition modulation.hpp:135
One authored source-to-parameter connection.
Definition modulation.hpp:209
float depth
Definition modulation.hpp:216
ModulationSourceRef source
Definition modulation.hpp:211
constexpr bool valid() const noexcept
Returns whether id is a usable, non-sentinel document identity.
Definition modulation.hpp:222
bool enabled
Definition modulation.hpp:219
ModulationTarget target
Definition modulation.hpp:212
ItemId id
Definition modulation.hpp:210
bool operator==(const ModulationRoute &) const =default
Reference to the track-owned source a route reads.
Definition modulation.hpp:178
ModulationSourceKind kind
Definition modulation.hpp:180
ItemId id
Definition modulation.hpp:179
constexpr bool operator==(const ModulationSourceRef &) const =default
constexpr bool valid() const noexcept
Returns whether the referenced source identity is nonzero.
Definition modulation.hpp:183
Overload set for visiting a ModulationTarget with no generic fallback.
Definition modulation.hpp:35
A track-owned generator of modulation signal.
Definition modulation.hpp:109
bool operator==(const Modulator &) const =default
bool valid() const noexcept
Returns whether id is a usable, non-sentinel document identity.
Definition modulation.hpp:115
ModulatorKind kind
Definition modulation.hpp:111
std::string name
Definition modulation.hpp:112
ItemId id
Definition modulation.hpp:110