diff --git a/Architecture.md b/Architecture.md index e1c125d..0f0382f 100644 --- a/Architecture.md +++ b/Architecture.md @@ -371,7 +371,7 @@ src/editor/graph/ GraphEditor (header, breadcrumb), GraphCanvas and what it empty space opens, a transition armed from a state's menu), graphDrags (nodes, groups and comments moved or resized, each gesture one undo step), annotationLayer (the boxes behind the edges); graphView (zoom limits, grid, panAndZoom — shared with NodeBoard and the Tile tab's TileCanvas — and `inView`, which nodes are in the picture, #292), EdgeLayer (curves and fold marks), graphMenus, - NodeView (and the picture below the rows, drawn again only when the settings change, #375) + portRow (how an input and an output share one row, #306), NodePalette + paletteEntries (which also ranks a search), folding (hidden links, collapsed nodes), Breadcrumb + trail (the path into nested behaviors), beads (the run's pulses and the clock that launches them), + NodeView (and the picture below the rows, drawn again only when the settings change, #375, or a face instead of the rows, a widget between the inputs and the outputs, #380: `nodeFace.ts`) + portRow (how an input and an output share one row, #306), NodePalette + paletteEntries (which also ranks a search), folding (hidden links, collapsed nodes), Breadcrumb + trail (the path into nested behaviors), beads (the run's pulses and the clock that launches them), AnnotationView + annotationDrag (groups and comments: what a drag carries, each thing moved once), SnapToggle (the magnet every tab that snaps carries, the vector art tab included, #194) src/editor/container/ ContainerEditor (header), ContainerCanvas (a SceneViewport on a template) @@ -422,9 +422,10 @@ src/editor/soundfx/ SoundFxEditor (#311: the graph, a sound to try it on, Pla the picture, and the spectrum behind the curve, #374), CompressorEditor + compressorView (#378: the Compressor's tab, its knobs, its curve with threshold and ratio to drag, and the levels in and out tinted where it squeezes), CompressorPanel + - hardwareView (#379: the Compressor as a device in a window of one size, its meter, - LEDs and plate worked out apart from the drawing), nodeTabs (which nodes open a tab - of their own) + hardwareView (#379: the Compressor as a device, its meter, LEDs and plate worked + out apart from the drawing), CompressorFace + nodeFaces (#380: the panel as what a + Compressor node shows in the graph), nodeParamDrag (a knob's drag as one undo + step, for the tab and the node), nodeTabs (which nodes open a tab of their own) src/editor/instrument/ InstrumentEditor (#331: the graph over the keys, Preset, Randomize, Mutate, Audition), PianoKeyboard + keys (the keys drawn, played by the pointer and the computer keyboard) src/editor/routing/ RoutingEditor (#351: the Master routing tab, one per project) diff --git a/Concepts.md b/Concepts.md index 5e62450..075618c 100644 --- a/Concepts.md +++ b/Concepts.md @@ -361,9 +361,6 @@ one kind can be open at once — two textures, three behaviors — each with its sizes it, *Dock* puts the document back into the row, showing, and the `×` closes it. Only documents float, never Scene or Game. A window is at least 320 × 200 px. A tab that needs more, like a Compressor's with its knobs (#378), holds its window at that size. - - **A Compressor in its hardware look** (#379) has a window only: a double-click opens it there - at one size, with no corner to size it and no *Dock*. Switched to that look while its tab is - in the row, it leaves the row for the window. - Every kind has one editor, so it has **one window**: with a texture in a window, opening another texture shows it there and closes the one it had. Windows of different kinds can be open side by side, a sound FX beside its Parametric EQ for instance. diff --git a/Sounds.md b/Sounds.md index 1ff63d8..ad7c70f 100644 --- a/Sounds.md +++ b/Sounds.md @@ -435,7 +435,7 @@ response of a Reverb, and as what the Sound FX tab tries out. Its row means noth | **Phaser** | Sweeps notches through the sound, the swirl of a phaser pedal. **Stages** (2, 4, 6, 8 or 12, 4 by default) is how many allpass stages it has, every two make one notch. They sit around `frequency` (800 Hz by default), and an LFO moves them `depth` octaves wide (2), `rate` times a second (0.5 Hz). `feedback` (0.4) sharpens the notches, `wet` (1) is how much is heard. See [below](#phaser-and-flanger). | | **Flanger** | Blends the sound with a copy a few ms late: the jet sound of a flanger, and what sfxr calls its phaser. `offset` is how late the copy is (1 ms by default), `sweep` moves that on by so many ms a second from the start of the sound (0), an LFO adds up to `depth` ms (2) `rate` times a second (0.25 Hz). `feedback` (0.5) and `wet` (1) as on the Phaser. See [below](#phaser-and-flanger). | | **Pan** | Moves the sound left or right: `pan` -1 is all left, 1 all right, 0 (the default) leaves it in the middle. A mono sound is spread on both sides and then moved (each side 0.707 at 0). A stereo sound keeps the side it goes to and the other side moves over into it, as Web Audio's `StereoPannerNode` does: at 1 both sides are heard on the right. In an [instrument](Instruments#envelopes) an Envelope can move it. Measured (e2e 34, Chrome offline): a mono sine at 0.5 came out 0.5 / 0 at -1 and 0.354 / 0.354 at 0, a stereo one at 0.5 came out 0.354 / 0.854. | -| **Compressor** | Squeezes the loudness together: what goes above `threshold` (-24 dB by default) comes out only 1/`ratio` (4) as much louder. `knee` (6 dB) eases into it, `attack` (0.003 s) and `release` (0.25 s) say how fast it turns down and lets go. `makeup` (0 dB) raises it afterwards. **Auto-gain** (off) gives back what it takes from a sound at -18 dB, with the makeup on top. **Hardware look** (on) is how its editor looks: a double-click on the node opens a panel like a device in a window, with a meter of what it takes away; off, a tab with a knob for each number, its curve, and the level going in and out. See [below](#compressor-and-limiter). | +| **Compressor** | Squeezes the loudness together: what goes above `threshold` (-24 dB by default) comes out only 1/`ratio` (4) as much louder. `knee` (6 dB) eases into it, `attack` (0.003 s) and `release` (0.25 s) say how fast it turns down and lets go. `makeup` (0 dB) raises it afterwards. **Auto-gain** (off) gives back what it takes from a sound at -18 dB, with the makeup on top. The node is drawn as a device with a meter of what it takes away, and a double-click opens a tab with its curve and the level going in and out. See [below](#compressor-and-limiter). | | **Limiter** | Keeps every peak below `threshold` (-6 dB): it looks 5 ms ahead, so even a sudden peak never gets through, and comes back up in `release` (0.1 s). **Auto-gain** (on) raises the limited sound to `ceiling` (-1 dB). Nothing ever goes above the ceiling. See [below](#compressor-and-limiter). | | **Saturation** | Bends the sound, from warmth to a hard distortion. **Type**: *Soft (tanh)* (the default), *Cubic*, *Hard clip*, *Tube*, *Fuzz*, *Foldback*, *Sine fold* or *Rectify*. `drive` (12 dB) is how hard the sound is pushed into it, `tone` (1) a low-pass after it from 1 kHz (0) to wide open (1). **Auto-gain** (on) keeps the bent sound about as loud as it came in, `output` (0 dB) is added on top. `wet` (1) how much of it is heard instead of the sound itself. See [below](#saturation). | | **Tremolo** | Makes the volume swing `rate` times a second (5 Hz by default), from full down by `depth` percent (50) and back. **Shape**: *Sine* (the default), *Triangle*, *Square* or *Saw*. See [below](#tremolo-and-vibrato). | @@ -759,14 +759,16 @@ Both (#326) work on the whole sound passing them: on a voice that is one sound, is a square at their right, centred up and down. It grows with the tab from 180 to 360 px, but takes no more than 40 % of its width. A floated Compressor's window cannot be made smaller than what shows every knob and the smallest pictures (560 × 414 px in the test browser). -- **The hardware look** (#379), on by default and switched under *Settings* in the inspector, is - the Compressor as a device on a brushed aluminium plate, 820x280 px. A double-click opens it - straight in a [window](Concepts) of that size: no corner sizes it and *Dock* is gone, so it - never sits in the tab row. Switched off, the node has the tab above again, and its window can - be sized and docked. All of the panel is drawn by the editor, there are no pictures. +- **The node is the device** (#379, #380): in the graph a Compressor is drawn as a brushed + aluminium plate, 820x280 graph units, with its inputs on the left of it and its output on the + right. The node is that large on purpose: the graph's zoom makes it smaller. Its settings and + numbers are not listed as rows, the panel shows them. All of the panel is drawn by the editor, + there are no pictures. - **Chrome knobs**: threshold large on the left, makeup large on the right, ratio and knee small - beside the meter on the left, attack and release on its right. They turn, notch, reset and - take a typed number as the tab's knobs do, and the orange arc is the value. + beside the meter on the left, attack and release on its right. They turn, notch and reset as + the tab's knobs do, each one undo step, and the orange arc is the value. The number below a + knob is only shown: typing goes in the tab and in the inspector. A press on a knob or the + lever neither picks nor moves the node, and the wheel over a knob does not zoom the graph. - **The meter** in the middle shows what the Compressor takes away, 0 dB at the right to 24 dB at the left, red from 10 dB on. The scale runs by the square root, so the first dB is about as wide as the last nine. The needle moves like a VU's: most of the way to a reading in @@ -774,8 +776,12 @@ Both (#326) work on the whole sound passing them: on a voice that is one sound, - **Auto-gain** is a lever with a lamp at the top right. Beside it stands what it gives. - **The LEDs** at the right edge show the level going out, one every 3 dB from -39 to 0 dB: the top two red, the next three amber. They light at once and go out by 20 dB a second. - - The pictures of the tab, curve and levels, are not on the panel. Switch the look off for - them. + - The meter and the LEDs run while the node is in the picture of a sound FX or instrument + graph that is seen, from the same taps as the tab. Out of the picture, folded or with the + graph hidden, the node lets go of them. A tab that is open but not seen lets go of them once, + so the node keeps hearing. + - The pictures of the tab, curve and levels, are not on the panel. A double-click on the node + opens the tab for them. - **Measured** (2026-10-07, e2e 34, Chrome offline): an impulse came out of the Compressor 288 samples late and out of the Limiter 240. A 1 kHz sine at -18 dB through a hard-knee Compressor at -24 dB and 4:1 came out at -17.92 dB with auto-gain on and at -22.42 dB with it