Repository navigation
Draw the routing view as a manual's flow diagram, lit by the sound (t-146) - #115
Merged
Merged
Conversation
…-146) The diagram takes the faceplate's colour and ink between the rails (paper and ink in Outline). Blocks are square boxes with a schematic symbol and designator, the module colour kept to a lamp. The synth's routes are ink lines with arrowheads; patch cables are drawn over them cased, in colour, with jacks. routingActivity() turns the engine's meters and the output's level into a glow per part over the routed path; the view eases it once a frame into --a (up fast, down slow) so a release fades the path with the sound. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ew (t-146) The DSP meter now carries the LFO's rate and each oscillator's output, pitch and mixer level. The LFO, and an oscillator slow enough to see (Oscillator 3 at LO), glow with the wave itself, eased quickly both ways so the trough is drawn; from 3 to 6 Hz the pulse blends into a steady glow, since a 25 Hz meter would alias a faster wave into a false slow pulse. An oscillator at audio pitch glows with the output times its share of the mixer, and at half while it runs switched out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Meter an oscillator's level as the mix hears it, CV into its level input included, and build the arrays without a slice. - A switched-out oscillator feeding the mod bus glows with the output, so it goes dark with the sound rather than holding at half. - Set the loop's refs, and find the parts' elements, as each render commits rather than after it; keep each glow by element in a WeakMap, and key cables by their jacks so a glow stays with its cable when an earlier one comes out. - Glow as a ring whose opacity follows --a, not an animated drop-shadow, so a frame repaints a stroke instead of re-rasterising a blur. - Work out each link's ends once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Write the oscillator meters into three arrays per voice rather than new ones, so the audio thread makes no garbage; count the oscAssign note gain in the level, as the mix does. - Read the analyser only while the power is on; work out the loudest oscillator once per call. - Find the parts' elements only when the drawing's parts change, and read the routing through a ref with the state and source. - Draw the key's cable swatch in the colour an uncoloured cable takes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The routing view (t-142) read as a pastel web-app chart. It now reads as the flow diagram in a service manual, and it lights up with the sound actually going through the synth (t-146).
railStyle). The module colour is kept to a small lamp in each block's corner.symbolonRoutingBlock.routingState()). On top of that,routingActivity()(lib/app/synths/lib/routing-activity.ts) turns the engine's meters and the output level into a glow for each part: the lamp, the box tint, a halo, and coloured flow along the lines. The glow fades as the sound does. Each block follows a new optionalmeter:lfoHz,oscV,oscHz,oscLv).Why this shape
routingActivity()is pure and unit-tested. The view eases towards it once a frame withsettle()(up in about 40 ms, down over about 450 ms, or quickly both ways for a moving wave) and writes--astraight to each element.drop-shadow. Changing the shadow every frame re-rasterises a blur; changing an opacity only repaints a stroke.Review rounds
Two
/code-reviewrounds, each fixed in its own commit.oscLvnow includes CV into the level input.oscAssignnote gain, as the mix does.Gates
/pre-pr:lib/appis the fork's own tier, not Sunrise's public surface.mainfails it the same way, so it is the machine, not this branch./security-review: no findings./code-review: two rounds, as above. Format: prettier, scoped.Not done / open
predev. A dev server that is already running needsnpm run build:audio-workersand a page reload.🤖 Generated with Claude Code