s3g Tracker
s3g Tracker is a MIDI-generating CLAP instrument for REAPER. It follows the host transport and tempo, sequences as many as 32 polymetric tracks, and publishes sample-offset notes on MIDI channels 1–16 through one CLAP note-output port. Sound is produced by downstream s3g-dsp drums, samplers, or other instrument plug-ins.
The tracker is a MIDI-only companion to the drum and sampler instruments in the collection.
Workflow
- Insert
s3g Trackerbefore a receiving instrument in a REAPER FX chain, or place it on a track whose MIDI output is routed to other tracks. - Route its MIDI output to a downstream instrument and monitor that instrument's audio through REAPER.
- For each tracker lane, choose a
CH01–CH16MIDI channel in the lane header. - Enter notes and sequencing actions, then start REAPER's transport. The pattern is saved automatically with the REAPER project.
Host Transport and Timing
REAPER owns the audio device, tempo, transport, rendering, instruments, effects, and final mix. HOST BPM is read-only. RATE scales the tracker clock by a musical ratio: 1/4×, 1/2×, 2/3×, 1×, 3/2×, 2×, or 4×.
The play button requests host play or continue. SYNC ALL forces every lane column to row 1 without stopping or seeking REAPER; it ignores the columns' phase offsets for that launch. Click it while stopped to queue a synchronized start, or while playing to realign the tracker at the next processing boundary. The loop button applies the displayed row range across every track column. PANIC releases all notes tracked as active and sends MIDI CC 123 on channels 1–16.
Normal host starts, seeks, and loop discontinuities remain host-timeline aligned and honor each column's phase. Pattern-boundary changes are prepared outside the audio callback and swapped at a safe musical boundary.
MIDI Routing
Tracker exposes one CLAP note-output port because REAPER does not currently provide usable routing for its former multiple note-port layout. It also exposes one MIDI input dedicated to step recording. Every tracker lane owns a one-based output channel selected with its CHxx control. There is no tracker-global channel assignment and no direct CoreMIDI device selection: REAPER decides which inputs reach Tracker and which downstream track or plug-in receives its output.
Several downstream instrument instances may share one REAPER track and listen on different channels. For clearer mixing and plug-in chains, create MIDI sends from the Tracker track and filter channels at the receiving tracks or instruments. Use another Tracker instance when a project needs more than 16 independently addressed destinations.
MIDI 1.0 cannot independently identify overlapping copies of the same pitch on the same channel. Tracker therefore uses a deterministic latest-note-wins policy: a replacement onset sends Note Off immediately before the new Note On, and the older note's scheduled gate cannot stop the replacement. Use different channels when overlapping unisons must sustain independently.
MIDI Step Recording
Route a REAPER MIDI input to Tracker, place the tracker cursor on the destination lane, and choose STEP, LIVE Q, or LIVE MT. Armed MIDI is passed through immediately on the selected lane's output channel. The input channel is reported in Console but does not override the selected lane or its output channel.
| Mode | Recorded result |
|---|---|
OFF | Disarms input capture. |
STEP | Writes note and velocity exactly on the cursor row, removes MT there, and advances one row. Note-off is not recorded. |
LIVE Q | Writes onset and physical note-off at their nearest viable playback rows, filling crossed rows with HLD and ending on KIL. |
LIVE MT | Uses the same NOTE duration cells and also writes the measured onset and release offsets as MicroTime in an existing MT cell or the first empty SEQ pair. |
Microtiming is bounded by the project's MicroTime range and reports when an extreme offset is clamped. If both SEQ cells on an onset or release row already contain other actions, that boundary is rejected transactionally instead of overwriting them. Live modes require running REAPER transport and target one selected pattern; MIDI-file import is not part of this version.
Tracker Grid
Every track offers six editable columns. The default compact view keeps NOTE and VOL at their full widths; EXPAND SEQ reveals both sequencing pairs, and COLLAPSE SEQ hides them again.
| Column | Purpose | Entry |
|---|---|---|
NOTE | MIDI note, rest, retrigger, hold, or kill. | 60, C-4, ---, RPT, HLD, or KIL |
VOL | Normalized velocity sent as MIDI 0–127. | 0.000–1.000, DEF, or PRV |
SEQ1 | First sequencing behavior. | Action code, full name, PRV, or --- |
V1 | Value for SEQ1; its header selects STP or LIN. | 0.000–1.000, MIDI 0–127 for CC, or PRV |
SEQ2 | Second sequencing behavior. | Action code, full name, PRV, or --- |
V2 | Value for SEQ2; its header selects STP or LIN. | 0.000–1.000, MIDI 0–127 for CC, or PRV |
NOTE: NAME displays pitches as names such as C-4. NOTE: MIDI displays the same stored pitch as its decimal MIDI value, such as 60. This is a view-only option: files and playback do not change, and either form remains valid when editing a note.
Each column advances independently and owns its length, stride, phase, direction, mute state, and playhead. One track can therefore combine a 16-row note pattern, a 7-row volume pattern, and a 5-row probability pattern.
The header gives every column four separate rows: label, length/stride, direction, and mute. Double-click the L row to type a length. Click DIR to cycle forward >, reverse <, palindrome <>, and random RND. The bottom MUTE row has an isolated click target. Double-click a track name to rename it.
Sequencing Actions
Right-click a SEQ1 or SEQ2 cell to choose an action with its abbreviation and value meaning. Direct text entry accepts the code, full name, or stable command name.
| Code | Action | Value behavior |
|---|---|---|
RR | Ratchet | 2–8 onsets within one tracker tick. |
MT | Microtime | Early at 0, centered at 0.5, late at 1. |
DL | Delay | 0–1 complete tracker tick. |
FL | Flam | 6–60 ms quieter secondary onset. |
ST | Stutter | 2–8 onsets extending across following ticks. |
AC | Accent | 0.5×–1.5× onset velocity. |
GL | Ghost | Half-tick secondary onset at reduced velocity. |
PR | Probability | Deterministic 0–100% note gate. |
SK | Skip | Play once per 2–8 visits to the row. |
OF | Note Offset | Read NOTE from four rows back to four ahead. |
RP | Repeat Previous | Chance of filling an empty source with the last emitted note. |
EU | Euclidean Gate | One through NOTE-length Euclidean hits. |
CC0–CC127 | MIDI Control Change | Send a 7-bit controller value on the lane's MIDI channel, including on NOTE rest rows. |
Each V lane has its own interpolation mode. Click its V1 STP/LIN or V2 STP/LIN header, or use interp <target> <v1|v2> <step|linear>. STEP sends only the authored value at each visited CC row. LINEAR sends intermediate integer CC values toward the next visited row when it contains the same controller. Direction, stride, phase, and polymetric lane traversal determine which row is “next”; empty rows, another controller, or another action end the ramp. Interpolation is capped at 200 messages per second and 128 generated events per tracker tick across the project, while every authored endpoint is preserved.
When both pairs resolve the same kind of source transform, SEQ2 wins. Probability, skip, offset, repeat-previous, and Euclidean gating resolve the note source before ratchet, microtime, delay, flam, stutter, accent, and ghost expand its timing.
The Console command eu <target> <pulses> <steps> also accepts overfull rhythms up to eight pulses per step. For example, eu @kick 20 16 fills the 16 NOTE steps, distributes the four extra pulses across the cycle, and writes correctly valued RR cells into an available SEQ pair. The generated SEQ action and value columns are length-, stride-, phase-, and direction-aligned with NOTE so each burst remains on its intended step. Forward, reverse, and palindrome are supported; overfull random traversal is rejected because independently randomized NOTE and SEQ heads cannot stay aligned. Running eu again replaces RR cells in its generated row span, and unrelated SEQ actions are never overwritten.
Compact symbol reference
The compact grammar uses one meaning per standalone symbol. Removed legacy spellings are rejected instead of being interpreted differently by context.
| Context | Symbols | Meaning |
|---|---|---|
| VOL / FX level | ! + * . | 1.00, 0.85, 0.70, and 0.55. |
| Empty / rest / default | - | No authored event: NOTE rest, VOL default, or empty FX action. When attached to a number it remains a minus sign. |
| Previous / hold | = | Recall or hold the previously resolved VOL or FX state. Alias assignment uses the alias command instead. |
| NOTE mask | x X / - | x or X writes a hit; - writes a rest. |
| Direction | > < <> random | Forward, reverse, palindrome, and random. ? is reserved for Help. |
For example, vol @kick !+*. writes four levels, while fx1 @kick pr !.=- writes probability 1.00, probability 0.55, previous, and empty. Numeric VOL entries are always MIDI integers or normalized decimals; numeric FX entries are always normalized decimals. Grid cell text also accepts ---, RPT, HLD, and KIL in NOTE; DEF and PRV appear in value columns.
Editing and Shortcuts
Double-click a cell to type an exact value. Drag VOL, V1, or V2 vertically for continuous editing; Option-drag is fine and Shift-drag is coarse. Clicking blank workspace releases an active text field. Drag the row-number gutter to set a global loop region.
| Keys | Action |
|---|---|
| Arrow keys | Move among columns and rows. |
| Shift-Left / Shift-Right | Move between tracks. |
| Home / End | Move to the first or last row. |
| Page Up / Page Down | Move by one visible page. |
| F9–F12 | Jump to 0%, 25%, 50%, or 75% of the pattern. |
| Control-A / C / X / V | Select all, copy, cut, or paste tracker cells. |
| Control-Z / Control-Shift-Z | Undo or redo a persistent Tracker edit. Command-Z remains available to REAPER. |
| Control-= / − / 0 | Zoom in, zoom out, or reset tracker zoom. |
| Delete / Backspace | Clear the selected cell. |
| X / R / H / K in NOTE | Toggle an anchored hit, write retrigger-previous, continue the active note, or write kill; each advances to the next row. |
| [ / ] in VOL, V1, or V2 | Decrease or increase the selected normalized value. |
| M | Toggle mute for the selected column. |
: / backtick | Focus Live Code. |
| Escape | Leave an editor or return focus to the grid. |
| Space / Shift-Space | Request host play or toggle tracker looping. |
Tracker editing deliberately uses Control-key combinations so REAPER retains its Command-key shortcuts.
Patterns and Song
The pattern bank stores multiple named patterns in plug-in state. Create, duplicate, rename, delete, and select patterns from the top strip. Pattern edits are stored automatically and mark the REAPER project dirty; there is no separate Save Pattern command.
Song mode arranges stable pattern references into a longer form. Each pattern menu shows both parts as A01 · Pattern Name: the ID is saved in the Song row, while the renameable pattern name is there for recognition. Pattern-bank editing is locked while Song playback is active so a playing arrangement cannot acquire unresolved references.
Turn on SONG TRANSPORT before starting REAPER. Playback begins at Song row 1. TICKS is the length of one pattern cycle for that Song row, and REP is the number of cycles before natural advance; repeats continue the current pattern phase, while entry into another Song row relaunches that row's pattern at its start. The WARP column selects OFF or a named composition saved on the Warps page. Warp is global timing, so it belongs to the Song row rather than an individual tracker lane.
To jump during playback, select a target row, choose its launch boundary, and press QUEUE SELECTED. NEXT TICK waits at least one tracker tick; NEXT BEAT uses the Song beat grid (four tracker ticks by default); NEXT CYCLE waits for the end of the current TICKS cycle; and NEXT SONG ROW waits for the natural end of the current row, including its repeats. The target row is filled and outlined in yellow, and the queue readout states both the row and boundary. Queueing again replaces the earlier pending target. At the chosen boundary, pattern, WARP, swing, and lane mutes switch as one row launch; OFF restores identity timing instead of inheriting the previous row's warp.
Live Code
Press : or backtick to focus Live Code. Return runs a command, Up and Down recall history, Tab completes command names, and Escape returns to the grid. The Help page lists every command accepted by the current build.
help
actions
alias kick 1
mask @kick x---x---x---x---
eu @kick 5 16
vol @kick 1.0 .8 .9 .7
randomize @kick vel .55 1.0
fx @kick 1 1 RR 0.50
fx @kick 2 5 PR 0.75
fx @kick 1 3 CC74 64
interp @kick v1 linear
len @kick note 16
stride @kick v1 2
phase @kick fx2 -1
dir @kick note palindrome
mute @kick fx1 toggle
warp exp 2.0 mix .5
actions lists the sequencing behaviors accepted by the two SEQ columns, including CC0–CC127. Audio-parameter effects and internal-instrument commands from earlier standalone designs are not part of this MIDI product.
Tool Pages
- Geometry draws polygons from active pulses on unmuted note lanes. A pattern's muted NOTE lanes are omitted, and during Song playback the active Song row's muted lanes are omitted too.
ACTIVE PULSESpreserves the original nested view;ALL STEPS UNDERLAYadds complete light-gray step polygons;PHASE SPOKESanimates each lane's current readhead from the center;LANE FOCUSenlarges the selected lane and ghosts the others; andCOMPOSITE RINGnormalizes every lane onto one shared cycle. A compact solid yellow point marks each current note hit. Zoom controls keep dense patterns readable. - Warps edits the functional timing-warp stack used for exponential and stepped ramps, Euclidean timing, and multipart swing. Save named compositions here, then select them per row in Song's
WARPcolumn. - Console displays Live Code results and errors and repeats the Live Code entry field, so commands remain available when Console is detached.
- Help provides the categorized command and sequencing-action reference generated from the current command registry.
Geometry, Warps, Console, and Help can remain embedded pages or detach into independent windows while viewing the same live tracker state. The one-line Live Code editor remains in Tracker view, while the repeated editor travels with a detached Console. The lower value-envelope editor distinguishes large saturated-cyan note-hit breakpoints from smaller dark-gray points without notes.
Current Boundaries
- MIDI-only processing; the plug-in has no audio ports or internal instruments.
- REAPER owns tempo, transport, devices, receiving instruments, audio effects, and mixing.
- One CLAP MIDI output with channels 1–16 and one authoring-only MIDI step-record input; every tracker lane owns its output-channel assignment.
- Project state uses the current native tracker schema and does not import Max tracker files or abandoned standalone formats.