nooise 2.5.1

Ambient music generator for the terminal
# Live performance

## Normal browsing gestures

Hold `z` for Bloom, `c` for Submerge, `v` for Echo, `b` for Thin, or `x` for
Lift.
The amount rises while held and returns smoothly on release. Bloom adds a
reverb cloud, Submerge darkens the sound, Echo throws the phrase into repeats,
Thin lowers its contribution, and Lift sweeps its low end away. The gesture
input returns in 50 ms; reverb and echo tails finish after release.

The current page supplies the target. Master affects the whole mix. The target
stays fixed while the key is down, so arrows and Tab remain available and
different gestures can overlap on different layers. Pressing during a return
on the same layer catches it at its current amount.

The footer is two rows: a gesture-activity row above a stable exits/mode-help
row, so a held gesture never crowds out `Esc release · ^Q quit` or the row
below it. Idle, the activity row lists each hold's key and name (`z bloom
c submerge  v echo  b thin  x lift`); held or returning, it switches to a
bold readout of target and amount — `↑` means rising, `↓` returning, and `R`
marks a restored hold loaded from a song code. The row below stays a terse
`BROWSE · ? shortcuts   ^Q quit`; pressing `?` opens the full keyboard-shortcut
map (`InteractionMode::Help`), a static overlay covering the tab/control area
that leaves both footer rows visible beneath it. Esc closes it. Shift+/ is
matched two ways, since terminals disagree on how they report it: the
shifted glyph `?` alone (most terminals — unlike a shifted letter, no SHIFT
modifier accompanies shifted punctuation), or the base key `/` with an
explicit SHIFT modifier (the keyboard-enhancement protocol's report-base-key-
plus-modifier style). A plain, unshifted `/` still opens the palette.

These are temporary effects over the playing song. User module slots remain
intact, automation and auto-morph continue, and edits made during a gesture
survive its return.

Escape releases held gestures before backing out of a browsing drill.
Opening a keyboard-owning editor or Lead play releases gestures; their tails
can finish in the background. A key held through that transition must be
released before it can start another gesture. Reported focus loss and shutdown
also release held gestures.

Hold gestures require negotiated key-release support. Without it, the
activity row stays blank and gesture keys remain inactive — the shortcut map
(`?`) still lists them, since they are a capability gap, not a hidden feature.
The runtime never guesses release from a timeout or keyboard repeat.

A saved song carries active gesture amounts and envelope direction, with no
audio buffers. Loaded holds resume on their saved targets. Press the matching
gesture key to claim a loaded hold and release it, or use Escape to release
all loaded holds.

## Sequence

Space enters the one-shot Sequence owner. Repeated entry is inert while
choosing or performing. `a/s/d/f` select Pads/Bass/Kick/Perc and open the
corresponding page. `h/l` shorten/lengthen, `j/k` quieten/louden, and `u/i`
make the selected instrument sparser/denser.

Each action applies once on Press. With releases, Sequence consumes subsequent
Repeat events until the matching action Release returns to Browse. Unrelated
releases are inert. Selector Press selects and marks the instrument held;
its matching Release clears the hold. Selecting another instrument first
releases the old one.

Without releases, an action enters a visible completed stage. Autorepeat is
inert there; Space rearms Sequence and Escape returns to Browse.

The former Deck entry on `p` is retired. Lead play retains its own `i` entry
and existing bindings.

## Audio smoke

1. Run `cargo run` in this worktree, in a terminal reporting key releases.
   On Pads, hold `c`: expect a smooth darkening and a Submerge amount in the
   footer. Release: expect the original clarity to return.
2. Hold `z`, move with arrows and Tab, and release. The effect must stay on
   Pads while navigation continues. On another audible layer, overlap a
   different gesture and confirm each target is named.
3. On Master, try short and long `v` presses, then `b` and `x`. Echoes should
   finish after release; Thin should smoothly lower and restore the mix; Lift
   should clear its low end while held and restore it quickly on release.
4. Open the palette during a held gesture, return to Browse, and keep the
   physical key down. It must stay released until a fresh press after key-up.
   Escape must also release held or loaded gestures.
5. Save during a swell and load that code. Its amount should resume; the
   matching gesture key or Escape must let it return.
6. Verify Space, `d`, `k` still makes one louder Kick edit and completes
   Sequence according to the terminal's release capability.
7. Press `?` from Browsing: the shortcut map should open over the tab and
   control rows, leaving both footer rows visible beneath it. Esc returns
   to Browsing.

Acceptance requires rendered-audio checks as well as input replay and footer
checks. The minimum supported frame is 46x11 — the two-row footer costs the
control-row area one line versus the former 46x10.