Skip to content

Cockpit UI and Jam Sessions

The cockpit is a browser-based single-page application served alongside the API. It provides three tabs for composing, performing, and managing renders, plus support for multi-user jam sessions.

The score editor is a piano roll interface for composing vocal scores.

  • Note creation — Click and drag on the grid to create notes spanning C2 through C6
  • Note editing — Move, resize, and delete notes with mouse interaction
  • Per-note controls — Velocity, timbre, breathiness, vibrato depth, and portamento time
  • Lyrics input — Type lyrics text and the engine runs grapheme-to-phoneme conversion automatically
  • Phoneme lane — A synchronized overlay below the piano roll showing the phoneme timeline
  • Render controls — Choose a preset, set polyphony limit, seed, and BPM, then render to WAV

Live mode turns the cockpit into a real-time instrument.

  • 24-key chromatic keyboard — Play with mouse clicks or mapped keyboard shortcuts
  • MIDI input — Connect a MIDI device with optional channel filtering
  • XY pad — X axis controls timbre morphing, Y axis controls breathiness, updated in real time
  • Hold pedal — Sustains notes beyond key release
  • Velocity and breathiness sliders — Set default values for keyboard input
  • Vibrato controls — Rate, depth, and onset delay
  • Metronome — Configurable BPM with quantize grid options (1/4, 1/8, 1/16)
  • Latency calibration — Low, balanced, and safe presets to match your audio setup
  • Recording — Capture a performance and save it to the render bank
  • Live telemetry — Active voices, peak dBFS, real-time factor, click risk, WebSocket jitter

The render bank stores and manages all rendered audio.

  • Playback — Play any saved render directly in the browser
  • Pin and rename — Mark important renders and give them descriptive names
  • Load score — Send a render’s original score back into the editor for further editing
  • Telemetry comparison — Side-by-side view of peak levels, real-time factor, and click counts between two renders
  • Provenance — Each render tracks its commit SHA, score hash, WAV hash, and engine configuration

Jam sessions enable multi-user collaboration over WebSocket at the /ws/jam endpoint.

RoleCapabilities
HostCreates the session. Controls transport, tracks, recording, quantization, BPM, and time signature.
GuestJoins an existing session. Can play notes on any track but cannot modify session state.

Tracks belong to the participant who created them. Only the track owner or the session host can modify or remove a track.

The host can start and stop recording. All participants’ note events are captured into an EventTape with full participant attribution. The recording can be exported to WAV.

A VocalScore can be loaded into a track for automatic playback synced to the session transport. This lets participants mix live performance with pre-composed parts.

Clients connect to /ws/jam and exchange JSON messages:

Client sendsServer respondsPurpose
jam_hellojam_hello_ackHandshake, receive participant ID
session_createsession_createdCreate a new session, receive snapshot
session_joinsession_joinedJoin existing session, receive snapshot
track_note_ontrack_note_ackPlay a note on a track
track_note_offtrack_note_ackRelease a note on a track
record_startrecord_statusBegin recording (host only)
record_stoprecord_statusStop recording (host only)
record_exportrecord_exportedExport recording to WAV, receive render ID
track_set_scorescore_statusLoad a score into a track

The session metronome is controlled by the host. BPM and time signature changes are broadcast to all participants for synchronized playback.