Commit graph

17 commits

Author SHA1 Message Date
b08490e80e v7.15.1 — silence hold: beat detection & prediction freeze during silence
Sustained near-digital quiet on the overall level (< 0.006 for 300 ms,
sticky until a decisive 0.015) now places an immediate HOLD on the beat
tracker: nothing fires (real or predicted -- previously the predictor
kept faking beats for up to ~2 s into any silence), the tempo estimate
and confidence freeze exactly where they are, and beatphase freezes for
scripts instead of saturating at 'beat imminent'. Decisive audio
releases the hold instantly and the grid resumes from the phase the
audio went quiet (captured before the debounce window, so a
pause/resume keeps perfect time); after a hard cut the comb + first
real beats re-align within a couple of periods. 'Set Beat' taps release
the hold outright. Waveform/band data is never gated -- it still flows
(it is simply ~0, because the audio is gone).

- BeatFrame.silent carries the state; scripts get the silent variable
  (1 while held); the beat indicator shows an amber HOLD badge + amber
  phase ring while held.
- rust-agent/src/beat.rs + engine.rs: same gate ported for parity (its
  bass level doubles as the silence signal; NOT compile-verified -- no
  cargo in this sandbox).
- Verified: headless 26/26 assertions on the real BeatTracker (music ->
  silence -> in-phase resume -> onsetless pad -> tap; the pre-fix
  fake-beat window 12.8-15.5 s is empty) and browser E2E on the live
  app with a generated 120 BPM + silence looping WAV (HOLD badge tracks
  the silent spans exactly across two loop cycles; console clean).
2026-11-06 06:49:46 +00:00
Z User
5f1c03db31 e0315efb-ff50-4f97-ab76-b2f751e9b03b 2026-11-06 01:14:43 +00:00
Z User
b54841fabf c123beee-6c07-4660-8af8-d2ff1f89767c 2026-11-05 23:35:41 +00:00
Z User
5451c6ccdd cc601e21-85be-4466-9dee-d6199754c813 2026-11-05 22:47:32 +00:00
Z User
9cea959a52 v7.13.1 — Beat Matrix endpoint fix: full 16x10 grid, no phantom dot past the wall 2026-11-05 08:44:59 +00:00
Z User
b161685026 v7.13 — merge the parallel v7.12 line into the OVE-Directory build
Three-way merge (base d59d398, verified identical trees). Brings in:
- 7.10.1: spectrum edge fix (SPEC_TOP_HZ 16 kHz cap)
- 7.10.2 (was 7.11 there): wake lock, respectful Demo, one-click Save
- 7.12: background movement (bgrot/bgx/bgy/bgzoom) + osc-rotations preset

Hand-merged: script-tab.tsx toolbar (one-click Save + Upload side by side),
version.ts + release-notes.ts single timeline, new 7.13 entries.
2026-11-05 08:09:31 +00:00
Z User
40c6d2887e b8fd4912-690d-432c-9235-71b5108014df 2026-11-05 06:53:07 +00:00
Z User
1ea335a2fe 62fe0e7e-3025-47cc-bab0-d72875f1698e 2026-11-04 23:55:48 +00:00
Z User
401963b9f3 a30cfb39-1b53-4097-990f-27d01fb42f1f 2026-11-04 18:48:09 +00:00
Z User
1c1105da45 e7e98d75-c472-45a0-8363-2cc17e4e3f4e 2026-11-04 16:14:36 +00:00
Z User
d59d398cec 74b54406-5b0d-416f-8a38-1f1006a1c814 2026-11-04 06:47:03 +00:00
Z User
9b76dcc208 a132a822-8297-48ee-a813-68dcaf906c8b 2026-11-04 05:50:06 +00:00
Z User
a97d5a17ad 12b812ed-f283-4328-aa03-41acf2879cf3 2026-10-31 03:45:59 +00:00
Z User
698fc1c2a3 v7.8 — share strings 2.0: big-base packing cuts them to ~28% of the script (was ~51%)
The user asked for more compression 'by any means possible', suggesting
base-62 numbers and dictionary phrases. Both ideas shipped — cranked up:

- Dictionary grew ~170 data-mined entries: every function WITH its open
  paren (sin(, if(, megabuf(, …), every engine variable (vol_att, time,
  bpm, sv, …), AVS idioms ("hue = hue + dt * ", "t = t + dt * ", " * 0.",
  ") * ", "(0."), header lines ("linewidth: ", "blend: additive",
  "mode: lines"), blank-line+section skeletons ("\n\n[point]\n"), CRLF
  statement ends, ~70 number literals, and the library's common variable
  names (ring, spokes, chroma, segs, …) — all mined by frequency over the
  101-preset embedded corpus with a greedy-cover scorer.
- New scheme ▼ 'big-base packing': the dictionary output is read as ONE
  BIG NUMBER over its own alphabet and rewritten in base 32,164 — one
  digit per character from CJK Unified + Hangul. ~15 bits/char vs
  base-62's 5.95 ("1400" costs ~0.85 chars). The body's alphabet rides
  in a ~32-char bitmap header (dict-symbol bitmap + ASCII bitmap + raw
  non-ASCII tail) instead of ~80 literal symbols.
- Pair-packing kept as the fallback for short scripts (encoder picks
  whichever body is shorter); ▲ strings from v7.7 still decode via the
  kept legacy tables; still lossless for ANY text (verified: 101-preset
  corpus + 21 edge cases incl. CRLF, Hangul/CJK literals, lone
  surrogates, platform-injected zero-widths), still copy-safe, still
  self-checking (8 FNV check digits).
- Base packing gated at 16K symbols (O(n²) BigInt); encode 1.1 ms on the
  largest preset. Decode input capped at 40K chars.

Corpus measure: 64854 → 18026 chars = 72.2% reduction (v7.7: 49.1%);
median share string 26.9% of source, best 21.9%. Bass Bloom: 1341 → 326.
Browser-verified: encode→copy→paste→decode→load round-trip through the
dialogs for both ▼ and legacy ▲ strings, What's New 7.8 entry, mobile +
desktop layout, sticky footer.
2026-10-29 10:49:56 +00:00
Z User
80782609b2 133604ae-01f0-4bd7-96a5-69156cef7530 2026-10-29 10:04:00 +00:00
Z User
78bf025686 fcea9515-7ac3-402f-9159-635593e53a1f 2026-10-29 09:26:27 +00:00
Z User
9e90f7ff8a 06aca6bb-9fee-4fa9-bcc4-7ce527f71121 2026-10-29 08:43:20 +00:00