Skip to content

Click track editor

📋 Planned · v0.12.0

The click track is a structured authorable artifact, not a constant BPM value. You need vamps. You need rits. You need a coda jump. You need to scrub. The editor treats the click track as the first-class authoring surface it actually is.

Where it lives

A dedicated editor inside Program mode, on the song’s Click sub-tab. The output is the song’s tempo map, which the engine reads directly each audio block to drive:

  • the click bus output (typically the drummer’s IEM)
  • MIDI clock send (sync external rigs)
  • any vamp-driven transport behavior (backing tracks loop with the vamp)
  • the on-screen click-indicator widget

No bake step. Edits are live — play and edit in the same surface. Tempo curve is interpolated per-sample between control points at runtime.

Data model

The click track is part of the song document. Same architectural pattern as the patch graph: data is source of truth, no compiled artifacts.

ClickTrack {
bars: Bar[],
events: ClickEvent[], // points on tempo curve
vamps: VampRegion[],
repeats: RepeatRegion[],
cuePoints: CuePoint[]
}
Bar {
number: number,
timeSignature: TimeSig,
accentPattern: number[] // beat emphasis
}
ClickEvent {
bar: number, // with fractional beat
tempo: number, // BPM
curveType: "linear" | "instant" | "ease-in" | "ease-out" | "manual"
}
VampRegion {
startBar: number,
endBar: number,
label: string,
loopCount: "infinite" | number
}
RepeatRegion {
startBar: number,
endBar: number,
label: string,
repeatCount: number
}
CuePoint {
bar: number,
label: string // "Verse 1", "Chorus", "Bridge"
}

Editor UI

Tempo curve graph

Horizontal graph spanning the song:

  • Tempo axis (Y) on the left
  • Bar axis (X) on the bottom
  • Line shows tempo across bars
  • Click anywhere on the line → adds a control point
  • Drag points up/down to change tempo at that bar
  • Right-click a point → curve type (instant / linear / ease-in / ease-out / manual bezier)

Marker overlays

Vamps (looping bracket), repeats (Coda symbol), cue points (flag) — visible at all zoom levels.

Side panel

Bar list with editable per-bar BPM + time signature + accent pattern.

Input modes per click event

  • Numeric BPM80
  • Note=BPM notation♩=80, ♩.=100, ♪=160
  • Musical termAndante, Allegro, Presto — maps to standard BPM ranges, configurable per-show

Rits and ralls

Select a region → right-click → Apply rit. / rall. from X to Y BPM over N bars → choose start/end tempo, curve shape, optional resolution to next steady tempo. The editor inserts the right curve points automatically.

Audition

Scrub a playhead through the click; hear in real time. Reverse scrubbing supported for finding edit points.

Vamps, repeats, codas — the theatre-specific machinery

These are first-class, encoded as marker pairs in the timeline.

Vamps

A region of time that loops indefinitely (or N times) until a footswitch “end vamp” signal fires. The transport completes the current loop, then proceeds past the end marker. Patches can be tied to “exit vamp” event for auto-advance.

Repeats

A region that loops a specified number of times, then proceeds. Used for chorus repeats, refrains, etc.

Codas

D.S. al Coda / Coda jump pairs. The transport follows the jump on a configured trigger (a specific cue point, a footswitch, or auto). Standard MT shorthand for “skip ahead to the tag.”

Cue points

Named timeline anchors. Used by:

  • The transport’s “jump to cue” action
  • The cue system for fire-on-cue MIDI events
  • The backing tracks’ transport sync (v0.13.0)
  • The conductor cam overlay (v0.11.0 — shows current cue point)

DAW interop — SMF Type 1 with tempo map

Every DAW reads/writes SMF Type 1. It’s the universal format. Stardust round-trips against it.

Export

The click track exports to Standard MIDI File Type 1:

  • Tempo events as Set Tempo meta-events (μs-per-quarter resolution = sample-accurate at any BPM)
  • Time signatures as Time Signature meta-events
  • Bar markers as Marker meta-events
  • Cue points as marker events
  • Vamps / repeats / codas encoded via our own marker-naming convention — vamp:start:bar17, vamp:end:bar24, coda:jump-to:X. Most DAWs render these as labeled bar markers but won’t loop them.

Import

The inverse: read an SMF Type 1, parse tempo events into curve points, parse markers into bars/cues/vamps where the naming convention matches.

What the MD workflow looks like

  1. Write the click in Pit’s editor — bar-by-bar tempo, vamps, codas
  2. Export as SMF
  3. Import to DAW (Logic / Ableton / Cubase / Pro Tools / Reaper)
  4. Add other instruments, render audio stems
  5. Bring stems back into Pit as backing tracks
  6. Tempo stays in sync because SMF roundtripped

Scope of round-trip support

DirectionFormatScope
Export tempo to DAWSMF Type 1: tempo + bar markers + cue points + vamp markersv0.12.0
Import tempo from DAWSame SMF formatv0.12.0
Export full song (tempo + per-instrument tracks)SMF Type 1 with N MIDI tracksv1.x if recording lands
Import full song (parsed tempo + bundled MIDI tracks as backing)Multi-track SMFv1.x or v2.0

Engine integration

  • Engine drives click playback + MIDI clock sync directly from click data
  • Patches can be bar-numbered → auto-advance based on click position (opt-in)
  • Vamp regions in click data + transport interaction with backing tracks (backing-tracks)

What this editor doesn’t do

  • No time signature changes mid-bar. Time signatures live on bar boundaries.
  • No notation rendering. Stardust is not a notation app; sheet music belongs in forScore or its eventual replacement, Sheets.
  • No groove templates in v1.0. Quantize-to-template lives in v1.x backlog.
  • No swing/shuffle in v1.0 — even-eighths only. Swing in v1.x.