Skip to content

Step pattern + rhythm editor for bass & arp (rests, ties, accents) #5

Description

@philoking

Summary

A lightweight step pattern + rhythm editor for the bass and arp, so you can grab the generated line and shape it by hand — without giving up generation. Each step holds a rest, a tie, an accent, or a velocity, with a length independent from the part's note source.

Why it fits

Modular Riffs' parts are fully algorithmic, which is great for "forward forever" but frustrating when you hear almost the right groove and want to nail one step. The flow becomes generate → freeze → tweak: keep the engine's note choices, but pin the rhythm. It also unlocks deliberate phasing when the rhythm length differs from the note-source length.

Proposed scope

Model (js/generator.js)

  • Optional per-part steps[] overriding the generated rhythm: each step is rest | tie | { vel, accent }.
  • A part with a step pattern still pulls pitches from the normal generator (chord tones / motif), but the rhythm comes from the grid — so chord changes still flow through.
  • Honour the rest vs velocity-1 distinction: a rest skips the next note in the line; a near-silent hit still consumes one (audible on velocity-sensitive gear, and it shifts the note pool).
  • Independent length (e.g. a 6-step bass against a 16-step bar) for built-in phasing.

Editor UI (js/app.js + js/timeline.js)

  • A per-part step lane (reuse the timeline's lane styling and patch-cable colours) with click-to-cycle cells: rest → tie → low → high → accent.
  • A "capture current" button that freezes the live generated rhythm into editable steps as a starting point.
  • Persist in state (rides presets / export).

Where

js/generator.js (rhythm override + tie/rest semantics), js/app.js + js/timeline.js (editor UI), state (persistence).

Done when

  • Bass and arp can take an editable step rhythm with rest / tie / accent / velocity.
  • Pitches still track chord/key changes while the rhythm is pinned.
  • Rest and velocity-1 behave differently (skip vs consume).
  • Independent length produces phasing against the bar.
  • Patterns persist in presets / JSON.

Open questions

  • Should "capture current" snapshot one bar, or a whole section?
  • Tie semantics under mono enforcement — a tie should extend the gate, not retrigger; confirm against the existing clip-before-next rule.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions