Files
bass-foundry/docs/rivet/implementation.md
T
nvrl f1366280ff
Check and Windows preview / check (patina) (push) Successful in 3m59s
Check and Windows preview / check (rivet) (push) Successful in 2m2s
Check and Windows preview / previews (push) Successful in 1m8s
Independent plugin release / plan (push) Successful in 7s
Check and Windows preview / windows (push) Successful in 2m41s
Independent plugin release / build (push) Successful in 3m0s
Independent plugin release / publish (push) Successful in 9s
feat(rivet): storyboard composition with flexible lengths and meters
Rivet 0.4.0 tells a motif as a story. A timeline of blocks with roles
(statement, answer, departure, return, rest) replaces tasks, pins and
branches. Rivet writes each block from a motif and joins the seams with
a cut, breath, pickup or approach.

- Motifs of 1-8 bars in a bin of 16; storyboards up to 32 bars.
- Meters 2/4, 3/4, 4/4, 5/4, 6/8, 7/8 and 12/8 for import, writing,
  audition and export. Phrygian, harmonic minor and Mixolydian scales.
- Per-block options, Another take and Keep; templates for new boards.
- Editor rebuilt: motif bin, timeline, large piano roll, inspector,
  tabs for generation, harmony and sound roles, 32-step undo/redo.
- Sessions from 0.1-0.3 open as a storyboard from their source motif.
2026-11-06 02:15:18 +01:00

65 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Rivet 0.4 implementation notes
## Musical intent
Tell a producer's own motif as a story. The unit of work is a storyboard of
blocks; each block has a role that says what it does for the story, and Rivet
writes the notes for that role from the motif. Emotional interpretation stays
with the producer.
## Model
- **Meter.** One time signature per session: 2/4, 3/4, 4/4, 5/4, 6/8, 7/8 or
12/8. Bar length is `PPQ * 4 * beats / unit`. Compound meters (6/8, 12/8) pulse
in dotted quarters; strong positions, pickups and breaths use that pulse.
- **Motif.** A monophonic phrase of 1–8 whole bars with per-note locks (whole
note, pitch, rhythm). The bin holds 16 motifs.
- **Block.** Motif, role, 1–8 bars, the join into the next block, a take number,
up to three realized options, the chosen option, and a keep flag. A storyboard
holds 32 blocks and 32 bars.
- **Roles.** Statement, Answer, Departure, Return and Rest. Each role ranks the
transformation families that suit it (statement: quote, displaced groove,
changed ending; answer: call/response, changed ending, held back; departure:
higher peak, displaced groove, fragment; return: familiar return, quote, room
to breathe). The quote is always in the pool, so a statement can play the
motif as written. Rest yields one silent option.
- **Realizing a block.** The motif is tiled to the block length (notes crossing
the end are shortened, or dropped when rhythm-locked), then developed. The seed
mixes the session seed, the block's take and its position, so options are
deterministic and differ between blocks. Harmony is read at the block's
absolute position. The last sounding block follows the ending setting; other
statements prefer an open last note.
- **Joins.** Applied when the storyboard is composed, never stored in options.
Breath ends the last note at least half a beat before the seam. Approach moves
the last note one scale step next to the following first note. Pickup writes
two half-beat notes in the last beat that move toward the following first note;
it is skipped when anchors occupy that beat. Defaults follow the roles: into a
departure a pickup, into a return an approach, around rests a cut, otherwise a
breath.
- **Keep.** Kept blocks are not rewritten when settings, harmony or neighbours
change, unless their stored options no longer fit (for example after a meter
change).
## Editor
Header (key, scale, meter, tempo, play, loop, undo/redo, export), motif bin,
timeline with role-coloured blocks and clickable seams, one large roll (the
storyboard, or the selected motif for lock editing), inspector (block or motif),
and tabs for generation, harmony and sound roles. Edits are synchronous; file
dialogs run on a worker. Undo keeps the last 32 session states in the editor;
continuous drags and typing collapse into one step. While the storyboard plays,
an edit queues the new composition for the next bar line.
## Compatibility
State version 4. Versions 1–3 are read leniently and upgraded: the source motif,
a kept phrase and saved gestures enter the bin; an eight-bar phrase becomes an
arc, a four-bar phrase statement and return. Branch history is dropped. Future
versions are rejected without changing the current session. The CLAP ID and the
`story-session-v1` host field are unchanged.
## Verification
Core tests cover role options and diversity, locks, a fully locked motif,
harmony and endings, all meters, keys and lengths, templates, limits, joins,
kept blocks, compound meters, motif removal, and v1/v3 migration. MIDI tests
cover time signatures and compound-meter round trips. App tests cover queued
switches at the meter's bar line. The CLAP ABI test restores a 6/8 storyboard
session through host state. FL Studio routing and musical usefulness still need
checks in the host (see [FL Studio](fl-studio.md)).