PhaseFlux Track — manual

A 16-cell pulse synthesizer. Each cell of a 4×4 grid fires a scheduled burst of gate pulses with an independent temporal shape and pitch shape, walked through a selectable traversal with per-stage accumulators and sequence-wide macros.

1. Overview
2. The Stage Parameter Matrix
3. Cycle, Traversal & Timing
4. Pitch Mode — Cell vs Global
5. The Pulse / Curve Pipeline
6. Accumulators
7. The Edit Page
8. Setup & Routing

Introduction

The PhaseFlux track is a 16-cell pulse synthesizer. The 16 cells form a 4×4 grid; each cell is a stage that, when its slot comes up in the cycle, fires a scheduled burst of gate pulses. Every stage carries two independent shapes: a temporal shape that decides when the pulses land inside the slot, and a pitch shape that decides what note each pulse plays. Stages are walked in a selectable traversal (a top-down snake plus seven René-mk2 access patterns), drift over time through per-stage note and pulse accumulators, and respond live to sequence-wide macro nudges.

It generates everything itself from the per-stage parameter matrix — there is no source track to sample. One stage with four pulses across a beat is the default; push the curves, warps, windows, repeats and accumulators and the same grid produces evolving polyrhythmic phrases.

Everything here is grounded in the firmware as built — defaults, ranges, enum members, key bindings, and step-grid maps come from the model, engine, and UI code.

Prerequisites

Part 1 · Overview

A PhaseFlux sequence holds 16 stages laid out as a 4×4 grid. The engine builds a cycle from the in-range, non-skipped stages and walks them slot by slot:

  1. Cycle build — each stage's length (in divisor units) sets its slot width. Skipped/out-of-range stages contribute zero (Adaptive) or stay as a silent slot (Fixed). The sum is the cycle length in ticks.
  2. Per-slot schedule — when a slot becomes active, the engine builds a list of pulses for that stage: pulseCount triggers placed by the temporal shape, each carrying a CV from the pitch shape.
  3. Pulse fire — at each tick the engine fires any scheduled pulse whose trigger time was reached, raising the gate for its gate-length and pushing the pulse's CV to the output.

The two shapes per stage are orthogonal:

On top of both sit per-stage Accumulators (note + pulse counters that drift the values each cycle) and sequence-wide macros (uniform nudges, global phase, cycle warp).

Where state lives. Track-wide params (play/fill/CV-update modes, slide, octave, transpose) live on the track. Per-pattern params (the 16 stages, divisor, traversal, loop bounds, pitch mode/rate, cycle length, accumulator configs, macros, the scale group) live on the sequence — one set per w-pattern.

Part 2 · The Stage Parameter Matrix

Every stage stores the same field set. Two axes (temporal, pitch) plus per-stage accumulator wiring. All per-stage edits target the cursor cell, or every cell in an active multi-select.

Temporal fields

FieldDefaultRangeEffect
Pulse Count (Puls)4 (stages 0-3), 0 (4-15)0-16Pulses fired in the slot. 0 = silent stage
Length (Len)41-127Slot width in divisor units (4 = one beat at 1/16)
CurveLinearLinear / Bell / BounceTemporal density curve (Bounce = ExpDown3x)
Warp0±64PowerBend on pulse position before the curve
Response0±64PowerBend on the curve output
FlipVoffon/offMirror the curve value (vertical)
FlipHoffon/offReflect the pulse schedule around the slot midpoint
WindowOffOff / Focus70 / Focus50 / Polarize70 / Polarize50Drop pulses outside the visible band
Repeatx1x1 / x2 / x3 / x5Split the slot into N sub-sections, one curve copy each
MaskOff8 patternsMute selected pulses (LSB = pulse 0)
Mask Shift00-7Rotate the mask pattern
Phase Shift00-7Shift all triggers by N×0.125 of the slot
Gate Length500-100Pulse gate as a percent of the pulse period

Mask patterns (set bit mutes that pulse): Off, OneInTwo, OneInThree, OneInFour, TwoInThree, TwoInFour, ThreeInFour, OneInEight.

Gate-length rules (kMinPulseGateTicks = 6): 0 drops the pulse; 1 is an always-audible minimum, floored at 6 ticks; ≥2 scales by percent and drops the pulse if the computed gate is shorter than 6 ticks.

Pitch fields

FieldDefaultRangeEffect
Base Pitch (Note)0±63 degreesStage's root scale degree
CurveRampRamp / Bell / Triangle / BouncePitch contour across the pulses (Bounce = ExpDown3x)
Warp0±64PowerBend on phase before the curve
Response0±64PowerBend on the curve output
FlipVoffon/offMirror the curve value
FlipHoffon/offMirror the phase input
Range (Span)OneHalf / One / Two / ThreePitch span: 0.5 / 1 / 2 / 3 octaves
Direction (Dir)UpUp / Down / BipolarApply the curve offset up, down, or centered
WindowOffOff / Focus70 / Focus50 / Polarize70 / Polarize50Hold pitch at the nearest visible boundary in hidden bands
Repeatx1x1 / x2 / x3 / x5Repeat the pitch curve N times across the slot
Mask Melody (Mask)1000-100Tonal filter on note centrality; 100 = all pass
Tilt Melody (Tilt)00-100Anti-tonal filter on inverted centrality; 0 = off

Mask Melody and Tilt Melody form an orthogonal union: a pulse plays if it passes either filter (mask keeps central scale tones, tilt keeps the outliers). Final note = base pitch + accumulator offset + octave + transpose + the direction-applied curve offset, converted to volts through the sequence scale.

Per-stage accumulator fields

FieldDefaultRangeEffect
Note Step (Ac.St)0±7 (UI), ±15 (storage)Scale-degree drift applied per trigger
Pulse Step (Ac.St)0±7Pulse-count drift applied per trigger
Note Trigger (Trig)StageStage / PulseAdvance the note counter per stage, or per pulse
Pulse Trigger (Trig)StageStage / PulseAdvance the pulse counter per stage, or per pulse

The step value is the per-stage amount; the scope, order, polarity, reset, and limits that govern how the counter walks are sequence-level (Part 6).

Part 3 · Cycle, Traversal & Timing

How the cycle is built

Each in-range non-skipped stage's length (plus the Len Nudge macro) sets its slot's tick width. length × divisor, scaled by clock multiplier, gives the ticks; the cumulative table over the traversal order yields the cycle length. An all-skipped sequence is idle (gate held low, counters frozen).

Traversal patterns

#NameWalk
0SnakeTop-down boustrophedon (default)
1RowsBottom-up rows, all left→right (René P1)
2SnakeUpSnake bottom-up (René P2)
3ColsColumns bottom-up, right column first (René P3)
4ColSnakeColumns zigzag, down/up alternating (René P4)
5SpiralOutward from bottom-left (René P5)
6InwardInner-to-outer counter-clockwise (René P6)
7DiagAnti-diagonal scan from bottom-left (René P7)

Timing params (per sequence)

Part 4 · Pitch Mode — Cell vs Global

Pitch Mode (per sequence) sets where the pitch curve comes from:

Pitch Rate (Global mode)

Pitch Rate is a P:T ratio index, 17 entries, default 1:1 (index 9, locked). Off-ratios drift the curve across cycles. The full table:

IdxRatioIdxRatioIdxRatio
01:767:91211:9
11:5711:12139:7
21:3816:17147:5
32:591:1155:3
43:51018:17169:5
55:71113:12

The pitch-phase accumulator advances every tick regardless of mode, so flipping Cell↔Global is seamless — Global picks up wherever the accumulator is.

Part 5 · The Pulse / Curve Pipeline

For each pulse the engine runs two parallel chains, then masks and schedules.

Temporal chain — seed the pulse at index / pulseCount, apply Warp then split by Repeat into a sub-section + local position; drop it if the local position is outside the Window band; run it through the Curve, then Response and FlipV; add the Phase Shift; place it at position × slot ticks. FlipH reflects the whole schedule around the slot midpoint at the end.

Pitch chain — take the pulse's phase (Cell: the pulse position; Global: the free-running pitch phase projected to the trigger time); run Warp → Repeat → Window-hold → FlipH → Curve → Response → FlipV; scale by the range in degrees and apply the direction; add base pitch, accumulator offset, octave, transpose; pass the melody-mask / tilt filter; convert to volts.

Mask gates on the original pulse index (survives reordering). Accepted pulses are sorted by trigger time; overlapping gates merge via gate retrigger. Up to 16 pulses (kMaxPulses) per slot.

Continuous CV. With track CV Update = Always the pitch chain is evaluated every tick from the stage phase, producing a smooth envelope between pulses. With CV Update = Gate, CV updates only when a pulse fires.

Part 6 · Accumulators

Two per-sequence counters drift the output as the cycle repeats: a note counter (degrees) and a pulse counter (pulse-count). Each stage contributes its own step (Part 2); the config below governs the walk.

FieldDefaultRangeEffect
Scope (Mode)Stage (Local)Stage / SequenceStage = per-cell counter; Sequence = one shared counter
OrderWrapWrap / Pendulum / Hold / RTZHow the counter behaves at its bounds
PolarityUniUni / BiUni: bounds follow the step sign; Bi: bounds span both limits
Reset00-15Zero the counter every N cycle wraps (0 = never)
Pos Limitnote 28 / pulse 160-255Positive bound
Neg Limitnote 28 / pulse 160-255Negative bound

Scope — Local gives each stage its own counter (each cell drifts alone); Track shares counter 0 across all stages (the whole pattern transposes together). Trigger (per stage) picks whether each step lands per completed stage or per fired pulse. The pulse counter clamps on the output (pulse-count clipping is independent of the counter's wrap/pendulum bounds). Reset fires on cycle wrap.

Part 7 · The Edit Page

Page+S0 opens the PhaseFlux edit page. The left side is the 4×4 stage grid; the right side is the per-cell scope + parameter list (or a full-width scope for ACCUM / MACRO). One topic SET is active at a time, cycled with Left/Right:

TEMP → PTCH → ACCUM.N → ACCUM.P → MACRO
PhaseFlux edit page, TEMP topic page 0
Edit page: 4×4 stage grid (left), temporal scope with pulse rings (center), parameter list + F-key footer (right).

Within a topic, F1-F4 address parameter slots and F5 = Next cycles the topic's pages. F1-F4 either select a slot for the encoder, or — for binary fields on page 2 — flip directly on press. The encoder edits the selected slot; Shift (or encoder-press) is the coarse/secondary modifier.

Step grid

LEDs: red = playhead (active cell) or edit cursor; green = cell will fire (not skipped and length > 0); overlap shows yellow. With Page held, the bottom row is masked dark (quick-edit slots reserved).

TEMP topic (_currentSet 0, 3 pages)

PageF1F2F3F4F5
P0CurveWarpRespPulsNext
P1LenFlipV*FlipH*MaskNext
P2WindRep——Next

* = press-to-flip toggle. Re-pressing F1 Len on P1 arms Len-TR: the encoder transfers length between the cursor cell and the next, conserving the sum (mirrors Indexed DUR-TR).

TEMP topic page 1: Len / FlipV / FlipH / Mask
TEMP P1 — Len, FlipV, FlipH, Mask.
TEMP topic page 2: Wind / Rep
TEMP P2 — Wind, Rep (F3/F4 blank).

PTCH topic (_currentSet 1)

PTCH topic page 0, Cell mode
PTCH P0 (Cell mode) — pitch scope shows the per-cell contour; F1-F4 = Curve, Warp, Resp, Note.

Cell mode (3 pages):

PageF1F2F3F4F5
P0CurveWarpRespNoteNext
P1SpanDirFlipV*FlipH*Next
P2WindRepMaskTiltNext

Global mode (2 pages, header reads PTCH.G):

PageF1F2F3F4F5
P0CurveWarpRespRateNext
P1NoteSpanFlipV*FlipH*Next
PTCH.G topic page 0, Global mode
PTCH.G P0 (Global mode) — scope draws stage 0's master curve (ST1 badge); F4 = Rate.

In Global mode Curve/Warp/Resp/FlipV/FlipH and Rate edit stage 0 (the master curve); Note and Span still edit the cursor cell.

ACCUM.N / ACCUM.P topics (_currentSet 2 / 3, 2 pages)

PageF1F2F3F4F5
P0Ac.StM:Sta / M:Seq—OrderNext
P1ResetPolarTrig—Next

F2 on P0 shows the current Accum Mode (Stage/Sequence) but is not editable from here — change it on the sequence list (Part 8). Ac.St and Trig are per-stage (multi-cell aware); Order/Reset/Polar are sequence-level. The full-width strip draws each cell's counter offset with glyphs for Order, Polarity, and Reset.

ACCUM.N topic, note accumulator strip
ACCUM.N — 1×16 cell strip with per-cell step pancakes and S/P trigger glyphs; left margin shows Order / Polarity / Reset.
ACCUM.P topic, pulse accumulator strip
ACCUM.P — same strip for the pulse-count counter.

MACRO topic (_currentSet 4, 2 pages)

PageF1F2F3F4F5
P0WarpNRespNPulsNLenNNext
P1PhaseGWarpSnapZeroNext

P0 nudges are uniform per-cell offsets added to every stage. Snap (press) quantizes each non-skipped stage's length to the nearest binary note value, conserving total length. Zero (press) resets the five magnitude macros (the four nudges + GWarp) to 0; Global Phase is left alone. MACRO draws a full-width scope of all 16 stages stitched along X, live to every macro.

MACRO topic, full-width composite scope
MACRO P0 — full-width scope stitches every non-skipped stage's temporal curve along X; F1-F4 = WarpN, RespN, PulsN, LenN.

Quick-edit (Page + bottom row)

Shake excludes "chassis-feel" fields (length, base pitch, skip) and never sets pulse count to 0. TEMP/PTCH shake the cursor cell; ACCUM shakes non-skipped cells + config; MACRO is sequence-level.

Context menu

Long-press opens INIT / COPY / PASTE / DUP. INIT opens a sub-menu:

COPY/PASTE move the sequence via the clipboard; DUP clones the current sequence into the next pattern slot and jumps there.

Part 8 · Setup & Routing

Track-scope list (Page+S2)

Track-wide params, in display order:

Sequence-scope list (Page+S1)

Per-pattern params, in display order: Divisor, Clock Mult, Global Phase, Pitch Mode, Pitch Rate, Traversal, First Stage, Last Stage, Cycle Length, Note Accum Mode, Pulse Accum Mode, Warp Nudge, Resp Nudge, Pulse Nudge, Len Nudge, Cycle Warp, Scale, Root, Scale Rotate, Reset Measure.

What is routable

TargetRangeScope
Octave±10track
Transpose±60track
Slide Time0-100track
Divisor1-768sequence
Clock Mult50-150sequence
Scale0-23sequence
Root Note0-11sequence
Phase0.0-1.0sequence
Warp Nudge±64sequence
Resp Nudge±64sequence
Len Nudge±64sequence
Cyc Warp±64sequence
Pulse Nudge±15sequence

The Sequence list exposes Divisor / Clock Mult / Scale / Root Note as routable rows; the Track list exposes Slide Time / Octave / Transpose. The five macro nudges, Cyc Warp, and Phase are routable through the param table. A/B inlets are not implemented. Per-stage fields and the accumulator configs are not routable.