Commit Graph

17 Commits

Author SHA1 Message Date
type-two
93c5e20ccf 📖 Z6 — grimoire + manual: zero-build, OMNI panel, dimensions & vibes
Canon (viz/index.html grimoire) is truth; manual synced to match.

- grimoire: two new tech-manual sections in the OMNI/Earth-Echo/GODSONIQ style
  (numbered how-to + spec table) — 'Building from zero — the empty instrument'
  (rings → orbs → drag/tap routing → synth-roll → keep/weave exit → persistence)
  and 'OMNI — the synth panel' (live arcs, trim-riding knobs, engine selector,
  earth echo, transport). Rewrote 'Saving your instrument' as dimensions & vibes.
- manual (had drifted — still said MY PATCHES): added Building-from-zero + the
  🎹 OMNI panel; 'Saving' → dimensions & vibes; keymap now lists F11 zero + O.

Verified: grimoire renders all three new h2 sections, no broken markup.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-11 00:37:09 +10:00
type-two
5db568d9da 📖 name the softsynth OMNI + tech-manual sections (OMNI / Earth Echo / GODSONIQ)
Names the built-in browser synth OMNI (♪ tooltip, intro prose) and adds three
scannable "tech manual" reference sections to the grimoire — OMNI (full voice
roster + how-to), the Earth Echo (six world-driven tape knobs + Schumann), and
GODSONIQ (resample + tab feed) — each a numbered how-to plus a two-column
control/dest spec table (new .spec / ol.steps CSS; auto-indexed in the TOC).

Every label, dest key and world→voice mapping extracted from code and verified.
Fixes two drifted claims in the old Earth Echo prose the audit caught: tape
wear drives hiss only (grit/saturation is static, not world-driven), and the
Schumann sub is ×4 = two octaves (not "four times").

Manual: sections flow into PART I (extractor taught .spec/.row → markdown
bullets) + an OMNI umbrella entry in Appendix J.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 10:02:40 +10:00
type-two
78718e9459 🌐 feed a tab into the world — external audio via getDisplayMedia
Right-click sky → "🌐 feed a tab": getDisplayMedia({video:true, audio:{…}})
lets the user share another tab's audio (a YouTube tab, a stream). Wired via
createMediaStreamSource into preSat → the full FX chain + master, so it's
audible live, crush-able, and resampleable by GODSONIQ from one wiring. Video
track stopped immediately; a track 'ended' listener handles Stop-sharing.

Audio constraints (verified against MDN/W3C/Chrome docs): suppressLocalAudio
Playback so the tab isn't heard twice, and echoCancellation/noiseSuppression/
autoGainControl off so the WebRTC voice-DSP doesn't mangle music. Chromium-only
(feature-detected; graceful ticker hints for unsupported / no-audio-track);
macOS grabs a tab not all-system; DRM services capture silent, YouTube fine.

Grimoire (truth) + manual Appendix J updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 09:38:33 +10:00
type-two
5ffa3a4bfb 🎛 GODSONIQ — resample the world onto the keys (ASR-10 nod)
Record ~3s of the live master mix into a buffer via a recorder AudioWorklet
tapping the full post-FX bus, then replay it pitched across the keyboard
(playbackRate = 2^((midi-60)/12), middle C = unity). Runs through the same
FX chain as every voice, so `crush` gives it the classic 12-bit sampler grit.
Right-click sky → 🎛 GODSONIQ to sample / re-sample; 🎸 string voice exits
back to the FM tine. Capture path verified: full-amplitude sawtooth recorded
clean (peak 0.98, rms 0.49) over the realtime port round-trip.

Grimoire (truth) + manual Appendix J updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 09:30:25 +10:00
type-two
adde3bc326 🎸🔊 worklet batch — Karplus string + 12-bit bitcrush (spectrally verified)
The two voices native Web Audio can't do safely, done as one AudioWorklet module
(loaded from a Blob URL, so still single-file):
- 🎸 Karplus-Strong string — a sample-accurate 8-voice plucked-string worklet
  (noise burst → damped delay loop). Right-click sky → "string voice" swaps the
  FM tine for it. Verified offline: STABLE (rms 0.04, not the billions the native
  version exploded to), in-tune (A3→221, A4→436), harmonic.
- 🔊 12-bit bitcrush — a world-drivable lo-fi stage on the master bus (true
  bit-depth quantise + sample-rate reduction). Route anything to `crush`; clean
  by default (16-bit → 4-bit + downsample). Verified: transparent at 16-bit,
  hi-freq grit 0.18 at 4-bit.

Loaded async on synth start, spliced glitch→crusher→out and karplus→preSat.
Verified live: both load with no errors, string-voice toggle flips correctly.
Grimoire + manual document the whole synth-voice suite.

This closes the timbre work: FM tine · supersaw · chorus · string · bitcrush —
every one tuned by the offline-render + FFT harness before it made a sound.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 07:37:31 +10:00
type-two
2db0d5945f 🔍 pinch/scroll zoom — get right into the orbits
The whole visual now zooms: scroll or trackpad-pinch to zoom the canvas toward
the cursor (1×–6×), drag empty space to pan when zoomed, double-click to snap
home. Implemented as a CSS transform on #stage (smooth, no draw-loop surgery);
all four hit-test chokepoints (mousedown/move/up/contextmenu) invert the zoom so
clicking/dragging/right-clicking nodes still lands exactly — provably correct
(the inverse of the transform). Pan clamps so the canvas always covers the view.
Grimoire + manual note the gesture.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 03:01:06 +10:00
type-two
9e5de4f55f 📖 grimoire front door — quick-start card + clickable contents
The grimoire got big, so give it a proper entrance:
-  Quick-start card up top: a 7-step "make it sing in a minute" on-ramp for the
  generative sequencer (scale → euclid → Play One → ratchet → p-lock → play).
- ☰ contents: a floating, jump-anywhere table of contents built from the 22 h2
  sections (delta-based scroll so it lands reliably in any layout). Sits beside
  the × close, drops a clean index panel, closes on pick or outside-click.
Verified: quick-start renders (7 steps), TOC lists all 22 sections and jumps
distinctly (Getting in→top, Playing it→far). Manual regenerated to match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 01:33:16 +10:00
type-two
8938424db6 📖 sync manual to HEAD — p-lock prose in Part I (grimoire mirror)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 01:23:03 +10:00
type-two
8dd551017a ⬗ Parameter locks — the Pocket-Operator move on the texture voices
Steal the one clever idea from the PO/Elektron world: p-locks. A CC/texture
voice (filter, glitch, reverb, drive) now gets a per-step LOCK lane — pin its
value to a blocky level on any step, overriding the world there; drag a step
below the lane to unlock it and hand it back to the data. The filter jumping to
a different cutoff on every hit, disjointed and alive — a full groovebox.

- applyGroove(sq, step, world) unifies the gate + p-lock; computeDests calls it.
- lock[] rides on seqs (serialised, migrated). Note voices keep velocity/chance/
  ratchet; CC voices get the p-lock lane (amber).
- self-check guards all four cases (no-groove / lit-unlocked / dark / locked).
- grimoire + manual updated (also documents the Juno chorus).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 01:02:22 +10:00
type-two
75dbe81749 🎚🌀 skins re-tune the world — Source → Spirit → Matter, made true
The flagship fix from the wired audit: skins were visual-only (the mix was
identical across all 14). Now the active Spirit re-tunes the Matter — each
skin's home tonality (its first station's scale) becomes the global scale, so
BOTH the sequencer and the ambient data-melodies re-harmonise when you turn the
wheel of cosmologies. Verified: 10 distinct tonalities across 14 skins
(chakra→B hirajoshi, wuxing→A dorian, wheelyear→F major, futhark→G# pentatonic…).
- skinHomeScale() derives {root,scale} from the skin's own station data (no
  hardcoded map); applySkinScale() sets gScale on skin change + at init.
- computeDests overrides the ambient note quantize to follow gScale.
- the sequencer already followed gScale, so it re-tunes for free.
- grimoire updated: "choose your spirit and the same planet plays through it"
  is now literally true. Manual regenerated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 00:42:36 +10:00
type-two
e2170060c7 🔌 honesty pass — every control now does what it says
Retire the wired-audit debt so nothing is decorative-pretending-to-be-wired:
- FREEZE now works: a group freeze snapshots each member and holds it (was a
  set-but-never-read flag). Verified: holds 0.2 while the source moves to 0.9.
- .mid export is full-fidelity: real per-step velocity + ratchets expanded to
  sub-notes (was hardcoded vel 100, single hits). Chance/Play-One stay live-only
  — honest for a deterministic file.
- Hide the level/trim sliders on note voices (they never applied to a pitch —
  no more dead sliders).
- Grimoire honesty: soften "every source is a real measurement" to name the
  honest models (demographic tide, room-sensor sim); drop the phantom ⚙ SPELLS
  panel claim. Manual regenerated to match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-10 00:34:57 +10:00
type-two
74df16c90f Ratchets — per-step sub-hits, and the glitch loop is closed
The last piece from the glitch-drum workflow: a per-step ratchet lane (1–4) —
each step can re-fire that many sub-hits within its slot, for instant rolls and
32nd-note glitch from a single step. Fired via short setTimeouts inside seqTick;
combined with Play One, every sub-hit re-rolls the note. Verified live:
rat3→3 hits, rat4→4, rat1→1, empty step→0. Self-check guards the rat default.

Now the generative loop is complete: Euclidean picks the rhythm, Play One the
pitch, ratchets the subdivision, the Groove the feel, follow-actions the
structure — and the global Scale keeps it all in key. Grimoire + manual synced.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 20:43:37 +10:00
type-two
f65598a988 Global Scale + Play One — one key for the planet, glitch by chance
Global Scale (Live 12 Scale Awareness §3.13): a root + scale the whole groove
editor sings in. The piano-roll rows ARE the scale degrees (always folded to
scale), so every melody is in key; change the scale and drawn patterns
re-harmonise in place. Travels with the patch.

Play One (adapted from Ableton's Group Notes → Play One): a piano-roll column
can hold several candidate degrees — stack them (they turn blue) and the
sequencer picks one at random each fire. Stack in-scale notes under a fast
Euclidean fill and the line glitches itself, always in key. Applied in both
grid editors, seqTick, and .mid export (prints the first candidate).

Self-check guards scaleRows + the stack helpers. Grimoire + manual in sync.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 20:32:40 +10:00
type-two
d4a1b71427 ⬢ Euclidean fills — the world's oldest rhythms, from the arithmetic
Live 12's Euclidean generator (manual §11.3.5) on the groove grid: spread N
pulses as evenly as possible over the pattern, with adjustable steps (cycle
length) and rotation, tiled into the 16-step grid. E(3,8) tresillo, E(5,8)
cinquillo, E(4,16) four-on-the-floor — one control fills any groove or gate
lane (note lanes fill the root). Verified live: E(4,16)→[0,4,8,12],
E(3,8)→[0,3,6,8,11,14], E(5,16)→[0,4,7,10,13]. Self-check guards the
canonical patterns. Grimoire + integrated manual updated to match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 19:40:10 +10:00
type-two
2fba980556 📖 one integrated grimoire — the manual, comprehensive and in sync
Rebuild GODSTRUMENT_MANUAL_SOURCE.md as a single finished grimoire, no drift:
- PART I is the current in-app grimoire (viz/index.html — the source of truth)
  converted verbatim, so it now covers the Groove, follow actions, and every
  feature the live prose does.
- Appendices A/C/D regenerated straight from config.json (83 sources, 56 cables,
  14 vibes); B/E–J carried and refreshed, with the Groove / per-step expression /
  follow actions added to the feature-systems appendix.
- dropped the old "brief for the manual writer (Gemini)" scaffolding — this
  document IS the finished grimoire now, not a brief to write one.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 18:23:58 +10:00
type-two
c6083fb2b7 ☯ the bagua — the I Ching joins the Spirits, and the world casts itself
Eight trigrams in the King Wen Later Heaven ring, south at the top as
the compasses have it, every feed seated by the Shuogua's attributions:
quakes at zhen the thunder-shock, the word at dui the mouth, the moon
at kan, the sun at li, your own hands at gen — "Gen is the hand." At
the centre the two loudest trigrams stack into a live hexagram, named
from all 64 by the King Wen table; silence rests at 11, Peace.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 20:05:48 +10:00
type-two
f0e5b28aef 🎨 the artist — Kandinsky's palette joins the Spirits
Concerning the Spiritual in Art (1911) taken at its word: six pigments
round a wireframe palette, weiß the canvas on the easel, schwarz the
final pause, his four great contrasts strung dashed between the drops —
and every feed seated by the feeling of its colour, each colour keyed
to the register of its instrument. Paint strokes itself onto the canvas
as the data sings. Plus GODSTRUMENT_MANUAL_SOURCE.md (the manual's
source doc) and its Appendix E entry for the new skin.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 19:50:31 +10:00