102inline constexpr const char*
kTypeId =
"sequencing.stage_seq";
141 const int degrees[] = {0, 2, 4, 5, 7, 9, 11, 12};
142 for (std::size_t i = 0; i < p.size(); ++i) {
143 const int semitone = degrees[i % 8] + 12 *
static_cast<int>(i / 8);
144 p[i].pitch_v =
static_cast<float>(semitone) /
146 p[i].pulse_count = 1;
181 return {
"stage_seq",
"Stage Sequencer",
"A clocked stage sequencer with direction, slide, and repeated-gate shaping.",
183 {{
"run",
kRun,
"Run",
"",
"Enables clocked advancement.",
ForgeParamKind::stepped,
ForgeParamCurve::linear, {{
"stopped",
"Stopped", 0}, {
"running",
"Running", 1}}},
186 {{
"forward",
"Forward", 0}, {
"reverse",
"Reverse", 1}, {
"ping_pong",
"Ping Pong", 2}, {
"random",
"Random", 3}}},
199inline constexpr const char*
kTypeId =
"sequencing.cartesian_walk";
218 for (std::size_t i = 0; i < g.size(); ++i)
245 return {
"cartesian_walk",
"Cartesian Walk",
"Walks a two-dimensional value grid from independent clock inputs.",
246 {{
"order",
"Order",
"Selects Cartesian or row-major traversal.",
247 {{
"cartesian",
"Cartesian", 0}, {
"row_major",
"Row Major", 1}}}},
248 {{
"cartesian",
kTypeId, {{
"order",
"cartesian"}}},
250 {{
"run",
kRun,
"Run",
"",
"Enables grid traversal.",
ForgeParamKind::stepped,
ForgeParamCurve::linear, {{
"stopped",
"Stopped", 0}, {
"running",
"Running", 1}}},
264inline constexpr const char*
kTypeId =
"sequencing.rungler";
310 return {
"rungler",
"Rungler",
"A clocked shift-register sequencer producing stepped pseudo-random control voltage.",
312 {{
"run",
kRun,
"Run",
"",
"Enables register advancement.",
ForgeParamKind::stepped,
ForgeParamCurve::linear, {{
"stopped",
"Stopped", 0}, {
"running",
"Running", 1}}},
316 {
"external_data",
kExternalData,
"External Data",
"",
"Selects an external steering bit.",
ForgeParamKind::stepped,
ForgeParamCurve::linear, {{
"internal",
"Internal", 0}, {
"external",
"External", 1}}},
317 {
"data_in",
kDataIn,
"Data In",
"",
"Sets the external steering bit.",
ForgeParamKind::stepped,
ForgeParamCurve::linear, {{
"low",
"Low", 0}, {
"high",
"High", 1}}}}};
327inline constexpr const char*
kTypeId =
"sequencing.quantize_scale";
376 return {
"quantize_scale",
"Scale Quantizer",
"Quantizes a control voltage to equal divisions or a pitch-class scale.",
379 {{
"equal_divisions",
"Equal Divisions", 0}, {
"scale_mask",
"Scale Mask", 1}}},
384 {
"reset",
kReset,
"Reset",
"",
"Clears the quantizer latch.",
ForgeParamKind::stepped,
ForgeParamCurve::linear, {{
"idle",
"Idle", 0}, {
"reset",
"Reset", 1}}}}};
394inline constexpr const char*
kTypeId =
"sequencing.gate_logic";
419 return {
"gate_logic",
"Gate Logic",
"Combines two gate signals with selectable Boolean logic.",
422 {{
"and",
"AND", 0}, {
"or",
"OR", 1}, {
"xor",
"XOR", 2}, {
"nand",
"NAND", 3}, {
"nor",
"NOR", 4}, {
"xnor",
"XNOR", 5}}}}};
432inline constexpr const char*
kTypeId =
"sequencing.prob_gate";
457 return {
"prob_gate",
"Probability Gate",
"Passes incoming gates according to a deterministic probability decision.",
460 {
"reset",
kReset,
"Reset",
"",
"Clears the gate latch and random sequence.",
ForgeParamKind::stepped,
ForgeParamCurve::linear, {{
"idle",
"Idle", 0}, {
"reset",
"Reset", 1}}}}};
static constexpr int kMaxDim
Definition cartesian_walk.hpp:58
Hysteretic continuous-CV edge detector.
Definition trigger.hpp:39
static constexpr std::uint32_t kProbSeed
Definition probability_gate.hpp:46
static constexpr int kDefaultBits
Definition rungler.hpp:74
static constexpr std::uint32_t kSeedPattern
Definition rungler.hpp:84
static constexpr int kMaxStages
Definition stage_sequencer.hpp:70
static constexpr std::uint32_t kRandomSeed
Definition stage_sequencer.hpp:89
Authored sequence in the signal domain: blocks that remember a pattern, walk it under a clock,...
Definition forge_sequencing_catalog.hpp:196
constexpr state::ParamID kXOffset
Definition forge_sequencing_catalog.hpp:206
constexpr state::ParamID kGridW
Definition forge_sequencing_catalog.hpp:204
float cartesian_walk_cv_bound_v(const Grid &grid)
Largest absolute CV, in volts, the node can emit for a given grid.
constexpr state::ParamID kGridH
Definition forge_sequencing_catalog.hpp:205
Grid default_grid()
The default grid: a rising chromatic ramp in volts, so an unconfigured node walks an audible,...
Definition forge_sequencing_catalog.hpp:216
signal::CartesianWalk Walk
Definition forge_sequencing_catalog.hpp:209
constexpr const char * kTypeId
Independent X and Y — the documented René behaviour, and the default.
Definition forge_sequencing_catalog.hpp:199
float cartesian_walk_worst_case_gain()
Worst-case linear gain for the Forge registry (series law 8).
std::array< float, static_cast< std::size_t >(Walk::kMaxDim *Walk::kMaxDim)> Grid
Definition forge_sequencing_catalog.hpp:211
ForgeNodeDescriptor descriptor()
Definition forge_sequencing_catalog.hpp:244
constexpr state::ParamID kYOffset
Definition forge_sequencing_catalog.hpp:207
constexpr state::ParamID kRun
Definition forge_sequencing_catalog.hpp:203
constexpr const char * kRowMajorTypeId
Row-major — an X wrap carries into Y, and the Y clock port is not read.
Definition forge_sequencing_catalog.hpp:201
CustomNodeType make_cartesian_walk_node(Grid grid=default_grid(), bool row_major=false)
grid is the composed pattern and row_major is the access topology — the latter picks the registered t...
Definition forge_sequencing_catalog.hpp:392
constexpr state::ParamID kOp
Definition forge_sequencing_catalog.hpp:396
signal::GateLogic Logic
Definition forge_sequencing_catalog.hpp:398
constexpr const char * kTypeId
Definition forge_sequencing_catalog.hpp:394
ForgeNodeDescriptor descriptor()
Definition forge_sequencing_catalog.hpp:418
CustomNodeType make_gate_logic_node()
Two outputs, because these operations come in complementary pairs and the complement is free: with op...
float gate_logic_worst_case_gain()
Worst-case linear gain for the Forge registry (series law 8).
Definition forge_sequencing_catalog.hpp:430
signal::ProbGate Prob
Definition forge_sequencing_catalog.hpp:437
constexpr const char * kTypeId
Definition forge_sequencing_catalog.hpp:432
constexpr state::ParamID kReset
Definition forge_sequencing_catalog.hpp:435
float prob_gate_worst_case_gain()
Worst-case linear gain for the Forge registry (series law 8).
constexpr state::ParamID kProbabilityPct
Definition forge_sequencing_catalog.hpp:434
CustomNodeType make_prob_gate_node(std::uint32_t seed=Prob::kProbSeed)
seed is registration-time (law 2): changing the seed is how you roll again, and that is a composition...
ForgeNodeDescriptor descriptor()
Definition forge_sequencing_catalog.hpp:456
Definition forge_sequencing_catalog.hpp:325
CustomNodeType make_quantize_scale_node()
constexpr state::ParamID kMode
Definition forge_sequencing_catalog.hpp:329
constexpr state::ParamID kReset
Definition forge_sequencing_catalog.hpp:334
ForgeNodeDescriptor descriptor()
Definition forge_sequencing_catalog.hpp:375
constexpr state::ParamID kScaleMask
Definition forge_sequencing_catalog.hpp:331
float quantize_scale_worst_case_gain()
Worst-case linear gain for the Forge registry (series law 8).
signal::QuantizeScale Quant
Definition forge_sequencing_catalog.hpp:336
float quantize_scale_mask_offset_bound_v()
The additive ceiling of scale-mask mode, in volts: the rounding boundary plus the widest hysteresis w...
constexpr state::ParamID kRootPc
Definition forge_sequencing_catalog.hpp:332
constexpr state::ParamID kHystCents
Definition forge_sequencing_catalog.hpp:333
constexpr state::ParamID kEdoN
Definition forge_sequencing_catalog.hpp:330
constexpr const char * kTypeId
Definition forge_sequencing_catalog.hpp:327
Definition forge_sequencing_catalog.hpp:262
constexpr state::ParamID kRun
Definition forge_sequencing_catalog.hpp:266
float rungler_worst_case_gain()
Worst-case linear gain for the Forge registry (series law 8).
ForgeNodeDescriptor descriptor()
Definition forge_sequencing_catalog.hpp:309
signal::Rungler Rung
Definition forge_sequencing_catalog.hpp:273
float rungler_output_bound_v()
The largest absolute output the node can emit, in volts: the ceiling of the range_v param,...
constexpr state::ParamID kRangeV
Definition forge_sequencing_catalog.hpp:269
constexpr const char * kTypeId
Definition forge_sequencing_catalog.hpp:264
CustomNodeType make_rungler_node(int reg_bits=Rung::kDefaultBits, std::uint32_t seed_pattern=Rung::kSeedPattern)
reg_bits and seed_pattern are registration-time.
constexpr state::ParamID kExternalData
Definition forge_sequencing_catalog.hpp:270
constexpr state::ParamID kFeedbackTap
Definition forge_sequencing_catalog.hpp:268
constexpr state::ParamID kDacBits
Definition forge_sequencing_catalog.hpp:267
constexpr state::ParamID kDataIn
Definition forge_sequencing_catalog.hpp:271
Definition forge_sequencing_catalog.hpp:100
std::array< Stage, static_cast< std::size_t >(Seq::kMaxStages)> Pattern
Definition forge_sequencing_catalog.hpp:123
Pattern default_pattern()
The default composed pattern: a rising major scale, one clock per stage, one re-articulated gate per ...
Definition forge_sequencing_catalog.hpp:139
signal::StageSeq Seq
Definition forge_sequencing_catalog.hpp:112
constexpr state::ParamID kRepeatDutyPct
Definition forge_sequencing_catalog.hpp:110
constexpr state::ParamID kDirection
Definition forge_sequencing_catalog.hpp:108
CustomNodeType make_stage_seq_node(Pattern pattern=default_pattern(), std::uint32_t seed=Seq::kRandomSeed)
pattern and seed are registration-time: the composed notes and which random performance this artifact...
constexpr state::ParamID kRun
Definition forge_sequencing_catalog.hpp:106
constexpr const char * kTypeId
Definition forge_sequencing_catalog.hpp:102
constexpr state::ParamID kNumStages
Definition forge_sequencing_catalog.hpp:107
float stage_seq_worst_case_gain()
Worst-case linear gain for the Forge registry (series law 8).
float stage_seq_pitch_bound_v(const Pattern &pattern)
Largest absolute pitch, in volts, the node can emit for a given pattern.
ForgeNodeDescriptor descriptor()
Definition forge_sequencing_catalog.hpp:180
constexpr state::ParamID kSlideMs
Definition forge_sequencing_catalog.hpp:109
Definition forge_sequencing_catalog.hpp:86
constexpr float kGateHigh
Level a gate/clock output is driven to.
Definition forge_sequencing_catalog.hpp:90
constexpr float kGateLow
Definition forge_sequencing_catalog.hpp:91
bool param_high(float v)
Reads a 0/1 param as a boolean, at the kit's rising threshold so the convention is the same one the p...
Definition forge_sequencing_catalog.hpp:95
@ stepped
Definition forge_param_descriptor.hpp:25
@ continuous
Definition forge_param_descriptor.hpp:25
@ logarithmic
Definition forge_param_descriptor.hpp:29
@ linear
Definition forge_param_descriptor.hpp:29
constexpr double kSemitonesPerOctave
Semitones per octave, and cents per semitone. Fixed by 12-TET notation.
Definition units.hpp:61
constexpr double kTriggerHighThreshold
Definition trigger.hpp:31
RunglerT< float > Rungler
Definition rungler.hpp:212
StageSeqT< float > StageSeq
Definition stage_sequencer.hpp:420
StageGateMode
What the gate does across the clock pulses a stage occupies.
Definition stage_sequencer.hpp:25
@ repeat
A separate gate per pulse, at repeat_duty.
Definition stage_sequencer.hpp:27
@ single
High on the first pulse only.
Definition stage_sequencer.hpp:28
TransportEdgeT< float > TransportEdge
Definition transport_edge.hpp:120
GateLogicT< float > GateLogic
Definition gate_logic.hpp:106
ProbGateT< float > ProbGate
Definition probability_gate.hpp:93
CartesianWalkT< float > CartesianWalk
Definition cartesian_walk.hpp:192
QuantizeScaleT< float > QuantizeScale
Definition scale_quantizer.hpp:204
uint32_t ParamID
Unique parameter identifier, stable across plugin versions.
Definition parameter.hpp:55
Definition custom_node_type.hpp:90
Definition forge_param_descriptor.hpp:127
Definition forge_sequencing_catalog.hpp:223
signal::TransportEdge transport
Definition forge_sequencing_catalog.hpp:225
signal::CartesianWalk walk
Definition forge_sequencing_catalog.hpp:224
signal::HystereticTriggerDetectT< float > y_detect
Definition forge_sequencing_catalog.hpp:226
Definition forge_sequencing_catalog.hpp:400
signal::GateLogic logic
Definition forge_sequencing_catalog.hpp:401
Definition forge_sequencing_catalog.hpp:439
signal::HystereticTriggerDetectT< float > reset_detect
Definition forge_sequencing_catalog.hpp:441
signal::ProbGate gate
Definition forge_sequencing_catalog.hpp:440
Definition forge_sequencing_catalog.hpp:338
signal::QuantizeScale quant
Definition forge_sequencing_catalog.hpp:339
signal::HystereticTriggerDetectT< float > reset_detect
Definition forge_sequencing_catalog.hpp:340
Definition forge_sequencing_catalog.hpp:275
signal::Rungler rungler
Definition forge_sequencing_catalog.hpp:276
signal::TransportEdge transport
Definition forge_sequencing_catalog.hpp:277
Definition forge_sequencing_catalog.hpp:154
signal::TransportEdge transport
Definition forge_sequencing_catalog.hpp:156
signal::StageSeq seq
Definition forge_sequencing_catalog.hpp:155
One stage of the composed pattern — the realization payload.
Definition forge_sequencing_catalog.hpp:115
float pitch_v
Definition forge_sequencing_catalog.hpp:116
bool slide
Definition forge_sequencing_catalog.hpp:119
int pulse_count
Definition forge_sequencing_catalog.hpp:117
bool skip
Definition forge_sequencing_catalog.hpp:120
signal::StageGateMode gate_mode
Definition forge_sequencing_catalog.hpp:118