trails
trails · sourcesThe Bela TRAILS eurorack module read over its USB-C MIDI port — a quad touch-gesture recorder whose four channels each loop a recorded finger gesture. Twelve jacks (X/Y per channel plus a contact gate) and a divided clock from the device's own MIDI transport. The card mirrors the physical 85x85mm pad one to one, with a coloured dot and a fading trail per channel. RANGE picks unipolar pad coordinates or bipolar about the centre; SMOOTH glides the X/Y jacks; CLOCK DIV divides the MIDI clock. Touch data is live engine state and never reaches the saved patch.
the faceplate
0 inputs · 21 outputs · 0 params
outputs
| id | cable | what it does |
|---|---|---|
x1 | cv | Channel 1's horizontal pad position. 0 is the left edge of the pad and 1 the right, or −1..+1 about the centre when RANGE is BI. It keeps streaming while a recorded gesture plays back, and holds its last value when the channel is idle. With pitch quantisation switched on the device sends notes instead of continuous positions, and this jack follows those notes: each note number lands at its own point along the travel, so a scale steps the jack rather than sliding it, and a released note holds the last pitch rather than dropping to zero. control voltage (CV) |
y1 | cv | Channel 1's vertical pad position, 0 at the bottom edge through 1 at the top (or −1..+1 when RANGE is BI). Pair it with X1 to drive a two-axis destination from one finger. control voltage (CV) |
x2 | cv | Channel 2's horizontal pad position, in the same coordinates as X1. control voltage (CV) |
y2 | cv | Channel 2's vertical pad position, in the same coordinates as Y1. control voltage (CV) |
x3 | cv | Channel 3's horizontal pad position, in the same coordinates as X1. control voltage (CV) |
y3 | cv | Channel 3's vertical pad position, in the same coordinates as Y1. control voltage (CV) |
x4 | cv | Channel 4's horizontal pad position, in the same coordinates as X1. control voltage (CV) |
y4 | cv | Channel 4's vertical pad position, in the same coordinates as Y1. control voltage (CV) |
g1 | gate | Channel 1's CONTACT gate: high while the channel is sounding, low when it is idle. It answers "is this channel in contact", and during a gesture the answer is usually yes the whole way through, so expect a long held gate rather than a rhythm. That is deliberate and it is worth understanding before you patch it. In the continuous mode the device streams positions without a pause while a recorded gesture plays back, so contact never ends; the gate is re-struck once at the top of each loop repetition, as a brief dip to zero and back, so a looping gesture articulates an envelope again each time round. With quantisation on, the channel is counted as sounding while EITHER its horizontal or its vertical note is held, and because those two are quantised separately they overlap almost continuously — one is nearly always sounding — so the gate stays up for the whole gesture and the loop dip is not applied, because the notes themselves are already the articulation. If you want a drone that follows a gesture, this is the jack. If you want to strike a drum once per step, patch TRIG instead. Two limits are worth knowing. The loop dip is driven by the device's transport, and the device reports only one playhead, its first channel's: with clock-synchronised recording every channel shares the cycle and they re-strike together, but a channel running a different step count re-strikes at channel 1's rate rather than its own. And the hardware's own gate jacks are not transmitted over MIDI at all, so everything on this jack is reconstructed from the position and note streams rather than read from the device. gate / trigger; gate — acts while the level is high (reacts to both edges) |
g2 | gate | Channel 2's contact gate, in the same form as GATE 1 — high while that channel is sounding, and long-held through a gesture rather than rhythmic. See GATE 1 for what it does in each mode, why it holds, and what the device does and does not transmit. gate / trigger; gate — acts while the level is high (reacts to both edges) |
g3 | gate | Channel 3's contact gate, in the same form as GATE 1 — high while that channel is sounding. See GATE 1 for the mode differences and the limits. gate / trigger; gate — acts while the level is high (reacts to both edges) |
g4 | gate | Channel 4's contact gate, in the same form as GATE 1 — high while that channel is sounding. See GATE 1 for the mode differences and the limits. gate / trigger; gate — acts while the level is high (reacts to both edges) |
clock | gate | A pulse train derived from the MIDI clock the device transmits, divided by the CLOCK DIV setting — at the default 24 that is one pulse per quarter note, the division TIMELORDE expects. It is a trigger: each pulse is a short fixed-width rising edge and the level between pulses carries no meaning. Silent until the device's transport is running. gate / trigger; trigger — fires once per rising edge |
trig1 | gate | A short pulse every time channel 1's gesture steps — this is the jack to patch into a drum. It fires once per step of the recorded or played gesture, plus once each time the loop returns to its start, which is what the module's own gate jack does on the hardware. Use it wherever you want something struck rather than held: a kick, a snare, a sampler, an envelope you want re-articulated. It is deliberately not the same jack as GATE 1. GATE 1 answers "is this channel sounding", and during a gesture that answer stays yes the whole time, because the horizontal and vertical positions cross their quantiser steps at different moments and one of them is essentially always sounding. A drum patched there fires once at the start of a gesture and then never again, which is the problem this jack fixes. How much it can tell you depends on the mode. With pitch and temporal quantisation on, the device sends a note for every step and this jack is exact, one pulse per step. In the ordinary continuous mode the device sends only positions, and its own step gate is not transmitted at all, so all this can honestly fire on is the moment a channel starts moving again after being still, and each loop restart. If you want steady triggers from a gesture, turn quantisation on. gate / trigger; trigger — fires once per rising edge |
trig2 | gate | Channel 2's step trigger, in the same form as TRIG 1 — a short pulse per gesture step and per loop restart, for striking a drum or re-articulating an envelope. gate / trigger; trigger — fires once per rising edge |
trig3 | gate | Channel 3's step trigger, in the same form as TRIG 1. gate / trigger; trigger — fires once per rising edge |
trig4 | gate | Channel 4's step trigger, in the same form as TRIG 1. gate / trigger; trigger — fires once per rising edge |
poly1 | polyPitchGate | Channel 1's two axes as a note bus, for playing an instrument directly instead of reconstructing pitch from a control voltage. Voice 1 is the X axis and voice 2 is the Y axis, each carrying a pitch and its own gate, so one finger plays a two-note chord that moves as you move. Patch it into any polyphonic voice. Only alive when the device is sending notes: turn on both pitch and temporal quantisation and this starts playing, and in the ordinary continuous mode it sits silent while the X, Y and gate jacks carry everything as usual. The pitch is the real quantised note the device chose, so it lands in tune with whatever scale you picked on the panel rather than being a voltage you have to calibrate. The gate stays up for as long as you hold the position, so a sustained touch sustains the note. Velocity is not part of it: this hardware sends the same fixed velocity for every note, so the bus carries no dynamics and a voice that responds to how hard you play will always hear the same thing. poly pitch+gate bus; 10-channel poly bus (5 pitch + 5 gate lanes) |
poly2 | polyPitchGate | Channel 2's two axes as a note bus, in the same form as POLY 1 — voice 1 is X, voice 2 is Y, and it is alive only when the device is sending notes. Each channel has its own bus so you can play a different instrument from each recorded gesture. poly pitch+gate bus; 10-channel poly bus (5 pitch + 5 gate lanes) |
poly3 | polyPitchGate | Channel 3's two axes as a note bus, in the same form as POLY 1 — voice 1 is X, voice 2 is Y, and it is alive only when the device is sending notes. poly pitch+gate bus; 10-channel poly bus (5 pitch + 5 gate lanes) |
poly4 | polyPitchGate | Channel 4's two axes as a note bus, in the same form as POLY 1 — voice 1 is X, voice 2 is Y, and it is alive only when the device is sending notes. poly pitch+gate bus; 10-channel poly bus (5 pitch + 5 gate lanes) |
controls
| control | what it does |
|---|---|
| Divisor | How many of the device's MIDI clock ticks make one pulse on the CLOCK jack. MIDI runs at a fixed 24 pulses per quarter note, so 24 is one pulse per quarter (patch it into TIMELORDE's clock to slave the rack to the device's transport), 12 is eighths, 6 sixteenths, 3 thirty-seconds, and RAW passes every incoming tick. Only divisions that divide 24 evenly are offered, because any other lands on no note value and drifts against every other clock in the rack. |
| Range | Whether the eight X and Y jacks emit the pad's own coordinates or a bipolar signal centred on the middle of the pad. UNI is 0..1 and is the default because a touch position is a COORDINATE: the pad's bottom-left is (0, 0) and its top-right is (1, 1), which is the space a screen and an absolute-position CV input already speak, so a 1:1 mapping lands the picture where your finger physically is. BI is −1..+1 with the centre of the pad at 0, which is what a destination that modulates around its own knob setting wants. It changes what the jacks emit, never what the pad view shows — the view always mirrors the physical surface. |
| Smooth | How lazily the X and Y jacks follow the device. At 0 each arriving sample steps the jack immediately, which is what a 1:1 screen mapping wants; turning it up makes the jack glide exponentially toward each new sample instead, covering about two thirds of the distance in the time the knob sets, up to a quarter of a second at the far end. Use it to turn a jittery fingertip or a coarse stream into a smooth sweep, and accept that the jack then trails the hand that made the gesture. It does not affect the gates or the clock, which must stay sharp. |
| Trails connect {n} | The gesture that makes the module do anything at all. A browser shows no MIDI port until it has consented, and it only asks when a click asks it to — so before this press there is no device to read, and all twenty-one jacks sit at zero however many gestures the hardware is looping. Pressing it grants access (one prompt, once per origin) and binds the selected input, or all matching Trails inputs if no per-module choice is set, which is how a class-compliant USB-C device joins the rack with no driver and no helper app. It is safe to press again: on an already-granted origin it simply re-resolves the port list, which is what re-binds a device that was unplugged and put back. Loading a patch that contains this module never raises the prompt by itself — nothing in the rack asks for MIDI on the module's behalf. The outcome is always nameable rather than silent: bound, no port named Trails, permission denied, the prompt suppressed, or Web MIDI missing entirely, and the LINK lamp on the faceplate carries the sentence with the failures also printed under it. If it says no port is present, connect the module's USB-C socket to this computer; if you want to see what the device is actually transmitting, press MON beside the lamp. |
source
trails.ts on GitHub.