Discrete Track — manual

A threshold map. One moving input scans 32 stages; whichever threshold it crosses fires that stage's note and gate. Drive it from an internal ramp for melody, or from external CV for quantizing.

1. Overview
2. Input & Stages
3. Gate, Slew & Pluck
4. Playback Timing
5. The Sequence Page
6. Generators, Voicings & Macros
7. The Scanner
8. Setup & Routing

Introduction

The Discrete track does not step through a sequence of notes. It watches one moving input — an internal ramp or an external CV — and fires one of up to 32 stages whenever that input crosses the stage's threshold in the stage's direction. The stage that fires emits a note (CV) and a gate. Sweep the input and the map plays back as a melody; drive it from outside and the same map becomes a quantizer / CV shaper.

It is a stateless ramp engine. Nothing is remembered between ticks: each tick recomputes the ramp phase from the clock position, compares the current input against the previous input, and lets any crossed threshold claim the active stage. Pause, reset, or change pattern and the whole picture rebuilds from the clock.

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

The track owns 32 stages. Each stage holds three things:

A single moving input scans the window. When it crosses a stage's threshold in that stage's direction, that stage becomes the active stage: its note converts to output CV and a gate fires. The active stage holds until another stage's threshold is crossed (an Off active stage releases to silence).

The input comes from one of three clock sources:

Where state lives. Track-wide params (Play Mode, CV Update) live on the track. Per-pattern params (clock source, sync, divisor, gate length, loop, range, scale group, slew, pluck, octave/transpose/offset, and all 32 stages) live on the sequence. The scale group is on the sequence, not the track; root note clamps to 0..11 (C..B).

Part 2 · Input & Stages

Clock source and the ramp

The internal ramp always spans the full ±5V, regardless of the Above/Below range — the range only moves where the thresholds sit, not where the ramp goes. Internal Saw rises linearly −5V→+5V then snaps back; Internal Tri rises −5V→+5V over the first half of the period and falls +5V→−5V over the second.

Period in ticks is divisor ÷ (clock multiplier as a fraction): a higher clock multiplier shortens the period (faster sweeps), a higher divisor lengthens it. External ignores the internal ramp and reads the DMap Input route value (clamped −5V..+5V) as the live input each tick.

Loop vs Once

Loop (default) cycles the ramp forever. Once sweeps a single period, then holds its final value (+5V, phase 1.0) and stops until a reset or a Loop↔Once toggle restarts it.

External + Once tracks an external sweep: it arms when the input first enters the range window (5% tolerance), then declares the sweep done once the input has covered ≥90% of the range span. While done, the active stage is frozen — no re-scanning until reset/restart/pattern change. Direction-agnostic, so an LFO or envelope that misses the exact endpoints still completes.

Stage direction

DirectionFires whenOLED / LED
Riseinput crosses from below to at/above the threshold^ / green
Fallinput crosses from above to at/below the thresholdv / red
Botheither edge crosses the thresholdx / yellow
Offnever; stage disabled- / unlit

Stages are scanned in index order and the first crossing wins. A stage stays active until some other stage is crossed. The init/default direction is Off.

Threshold modes: Position vs Length

The Above (rangeHigh) and Below (rangeLow) params define the voltage window the thresholds live in. The mode decides how each stage's −100..+100 maps into that window:

ModeDefaultMapping
PositionyesEach stage's −100..+100 maps linearly to Below..Above. 0 lands at the midpoint; each threshold is an absolute trigger voltage.
Length—Each stage's value is a proportional length. The values become cumulative interval ends across the window, partitioning the span by weight. All stages at −100 → even distribution.

Changing the range or the mode marks the threshold cache dirty and recomputes on the next tick.

Note index → CV

A stage's note index (−63..+63) is a scale degree. Output volts come from the sequence's selected scale: noteToVolts(noteIndex + octave·notesPerOctave + transpose). On a chromatic scale the root note adds root × (1/12) volts. The Offset param adds a flat CV bias (centivolts ×0.01 = volts) on top of the resolved note.

The CV Update mode (track-scope) decides when pitch params are read:

Part 3 · Gate, Slew & Pluck

Gate length

When a new stage becomes active, a gate fires for a length derived from the step. Gate Len 0% = "T" is a fixed short pulse (a few ticks), independent of step length; 1..100% is that percentage of the step's tick length.

Slew

Slew (0 = Off, 1..100%) smooths CV between stages by limiting the pitch rate — up to 48 semitones/sec at Slew=1 (fast), scaling down to a slow glide near Slew=100. With Slew off the CV jumps instantly. Slew enabled also flags the outgoing MIDI note as a slide.

Pluck

Pluck (−100..+100, 0 = Off) adds a pitch transient at note onset. The note starts bent away from its target and decays linearly back to pitch:

Pluck is per-sequence and not routable.

Part 4 · Playback Timing

ParamDefaultRange / members
ClockInternal SawInternal Saw / Internal Tri / External
Divisor1921..768
Clock Mult1.00x0.50x..1.50x (50..150%)
Gate LenT (0%)0..100%
LoopLoopLoop / Once
Reset Measure8 barsoff / 1..128 bars
SyncOffOff / Reset (External retired → behaves as Off)

Sync = Reset realigns the ramp to a bar boundary every Reset Measure bars (a reset re-zeros the ramp to −5V/phase 0 and clears stage/CV/gate/pluck state). The legacy External sync member is inert — re-anchor from outside via a Reset route instead.

Play Mode (track-scope) is Aligned (ramp phase locks to the bar grid) or Free (ramp runs from its own free clock position).

Part 5 · The Sequence Page

Page+S0 opens the Discrete edit page (header DMAP). It draws a threshold bar across the top, a live input cursor, and a three-row info block for the eight stages of the current section. Four sections of eight stages each; LEFT / RIGHT step through them.

Discrete edit page, threshold mode
Threshold mode (DMAP: THR). Top bar = per-stage thresholds with the live input cursor (tall, bright). Rows: direction (^ Rise, v Fall, x Both, - Off), threshold, note. The active stage is brightest; the side brackets mark the threshold row.
Discrete edit page, note mode
Note mode (DMAP: NOTE) — encoder press toggles modes; the side brackets drop to the note row. Off stages show --.

The footer (F1-F5), normal mode

KeyShowsPress
F1SAW / TRI / EXTcycle clock source
F2range-macro name (e.g. -5/+5)advance to next range macro
F3POS / LENtoggle Position / Length threshold mode
F4LOOP / ONCEtoggle loop mode
F5sync short (OFF / RM)cycle sync mode

The F2 range macros snap Above/Below to a preset window:

MacroAbove / BelowMacroAbove / Below
Full−5 / +5Btm−5 / −4
Inv+5 / −5Ass−1 / +4
Pos0 / +5BAss+3 / −2
Neg−5 / 0Top+4 / +5

The step keypad (S1-S16)

Two rows of 8, acting on the eight stages of the current section:

Double-click a bottom-row step (plain) auto-places its threshold at the midpoint between its nearest active neighbours — range ends (−100 / +100) substitute when a neighbour is missing (message THR BETWEEN). Shift + double-click selects all stages with the same value (note value in note-edit mode, otherwise threshold).

The encoder

Pressing the encoder toggles the edit mode between Threshold and Note. It then edits the selected stage(s):

Stage edit LEDs

The OLED threshold bar marks each non-Off stage as an upward tick (tallest = active, mid = selected) and draws the live input as a bright cursor. The info block shows direction char / threshold / note name per stage, the active stage brightest.

Part 6 · Generators, Voicings & Macros

The context menu

The context-menu key opens: INIT, COPY, PASTE, GEN.

INIT target submenu footer
INIT submenu footer: ALL / THR / NOTE / (blank) / X.

GEN (generator)

GEN runs in two footer steps. First a kind: RAND / LIN / LOG / EXP / X. Then a target:

GEN kind footer
GEN step 1 — choose kind: RAND / LIN / LOG / EXP / X.
GEN RAND target footer
GEN step 2, RAND target row: ALL / THR / NOTE / TOG / X.
GEN LIN/LOG/EXP target footer
GEN step 2, LIN/LOG/EXP target row: ALL / THR / NOTE5 / NOTE2 / X.

Page+Step quick edits

ComboAction
Page+S9Range High (Above)
Page+S10Range Low (Below)
Page+S11Divisor
Page+S12Piano voicing (held; encoder scrolls bank, release applies)
Page+S13Guitar voicing (held; encoder scrolls bank, release applies)

Range High / Low / Divisor open the standard quick-edit overlay. Voicing quick-edits apply a chord shape across the active stages (selection-limited if more than one selected); the selected stage's note is the root, C0 resets from the track/project root, ROOT is a safe no-op.

Page+Step macros

Four step combos open threshold/note macro menus (yellow LEDs):

Part 7 · The Scanner

The DMap Scan route lets an external CV reshape the map live. Route a CV source to DMap Scan (value 0..34):

Sweep a fader or slow LFO across the scan input to "draw" directions across the map in real time. The dead zones at the extremes toggle nothing.

Part 8 · Setup & Routing

Track-scope list (Page+S2)

Track-wide params, hosted by the generic Track page:

Sequence-scope list (Page+S1)

Per-pattern params, in order: Clock, Sync, Divisor, Clock Mult, Gate Len, Loop, Reset Measure, Threshold (mode), Above, Below, Scale, Root, Scale Rotate, Slew, Pluck, Octave, Transpose, Offset.

ParamDefaultRange
Divisor1921..768
Clock Mult1.00x50..150%
Gate LenT (0%)0..100%
Reset Measure8 barsoff / 1..128
Above (rangeHigh)+5.0V−5.0..+5.0V
Below (rangeLow)−5.0V−5.0..+5.0V
ScaleProjectProject / track scales
RootC (0)0..11 (C..B)
Scale RotateDefaultDefault / 0..31
SlewOff0..100%
PluckOff−100..+100
Octave0−10..+10
Transpose0−60..+60
Offset+0.00V−5.00..+5.00V (−500..+500 cV)

What is routable

Routing targets exposed for a Discrete track:

DMap Sync is retired (folds into the universal Align/Reset). Pluck and Gate Length are not routable.

Initialization (the fret pattern)

INIT (ALL) re-seeds every stage with an interleaved fret-pattern threshold distribution — round-robin across the four sections, ~6.5 units apart overall — with all directions Off and all notes 0. Enabling a stage (changing its direction) lights up a pre-spaced threshold without re-placing it.