Repository navigation
Racks: chains in lanes, macros, rigs (docs/42), and Zig 0.17 - #28
Merged
Merged
Conversation
…ts (docs/42) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…assets (docs/42 §Build phases 1) chain.State holds the latest-value handoff, retirement, the audio copy and dry lines, so rack lanes can share what tracks use. Tracks keep the editable instrument and effects; songs render byte-identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… rack state v2 (docs/42 §Build phases 2)
Each lane owns a chain.State: an instrument and up to 16 inserts in a
Rack, inserts alone in the new FX Rack (an effect, its lanes in parallel
on the input). Lanes align to the slowest one and the rack reports that
latency; tails, wakes and idle skip reach the inserts; racks nest three
deep. State is {"rack":2,...,"lanes":[...]}; the first form's parts
read as lanes, and a project with one renders byte-identical.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nder and --stems Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tle strip (docs/42) The selected lane's chain draws as the bay draws a track's: preset menu, ON/BYP, replace and remove on every machine, I/O meters on inserts, + to add one. Preset actions go through main as the bay's do; lane and insert edits are undo steps; lane machines keep their preset names in the state. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…; macro block and MAP mode (docs/42 §Build phases 3) Racks get rk-m1..8 and rk-chain controls that automate, save and nest. A mapping drives a lane machine's control, or the lane's level or pan, over a range in the target's knob space through an optional formula (src/formula.zig: postfix ops, a fixed stack, no failure at run time). Machines take the value through set_mod, which wins over automation and the knob and follows as a lane does; while a macro moves the rack renders its lanes in 32-sample chunks, so a macro sweep equals the same sweep automated on the control. Lane CHAIN zones close lanes outside them. The panel gets the macro block: eight knobs, NAME, MAP to map a clicked control or LV/PN, and the picked macro's mappings with MIN, MAX and f(x). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
0.17 drops `b.args`, `getInstallPath`, `**` array repetition, `@cImport`, `bufPrintZ`/`dupeZ`, `std.meta.fields`, `std.enums.values` and extern struct `@bitCast`, and reshapes `@typeInfo` and `builtin.mode`. Arrays fill with `@splat`; C headers are translated by the build (src/c_*.h, fy/src/c.h); `@hasDecl` sees only pub decls, so the tune test's context makes `tuneAt` pub. Tests (523 + fy's 82) pass, and every bench render hashes the same under 0.16 and 0.17. Fixes #3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d automation inside racks (docs/42 §Build phases 4, 6) The rack panel gets KEY/VEL/CHAIN zone tabs, a fold button that shows only the named macros, MAP outlines on mappable controls, hand moves on a mapped control that drive its macro, and drag-reordering of a lane's inserts. Lanes carry stable uids. Automation targets gain a path of up to three (lane uid, slot) steps under the rack's own target; Machine.child/inner walk containers, AutoView.into hands a nested rack its view, and files write `inst/L.P:id` positions. Shift-click selects a run of devices in the bay; ⌘G groups it into a new Rack or FX Rack with settings and automation moved one step down, and ⌘⇧G ungroups a one-lane rack with no mappings (src/rack_group.zig). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…scribe lists racks (docs/42 §Build phases 5) Factory rigs: Fretwire Clean and Crunch Rig, Bass DI + Amp and Parallel Squash (FX Rack); the first Rack's split and layer presets are rewritten as lanes. The machine picker lists Rack and FX Rack under a RACKS heading. `slab --describe` emits both with rk-m1..8 and rk-chain. slabkit gains rack()/lane()/macro()/map(), rig presets by name, and automation paths into racks; songs/rack_rigs.py demos it. docs/42 becomes the reference, with docs/19, 20 and 22 updated. 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.
Finishes docs/42. Racks hold lanes of chains, run eight macros with formula mappings, and ship as rigs. The build also moves to Zig 0.17.
Racks (docs/42 phases 1–6)
chain.Stateis extracted. Rack lanes hold an instrument plus up to 16 inserts. The new FX Rack runs lanes of inserts. Racks nest three deep and align per-lane latency. Rack state v2 still reads the first form, and those projects render byte-identical.rk-m1..8andrk-chainmap to lane controls, level or pan through MIN/MAX and formulas (src/formula.zig), withset_modhost input. The panel adds MAP mode.inst/L.P:idandfx1/2.1:amp-gain.rack(),.lane(),.macro()and.map(), loads rig presets by name, and resolves automation paths into racks.slab --describelists rack and fxrack. Demo:songs/rack_rigs.py.Zig 0.17
**becomes@splat. C headers go throughaddTranslateCmodules (raylib_c,miniaudio_c). Also covers the new@typeInfoshapes,addPassthruArgsand other std renames, in both slab and fy.Testing
zig build test: 527/527 passed.cd fy && zig build testpassed.zig build bench -- --all --check --no-sheets: every golden is bit-exact. shift2, resonator2, buffer2 and phaser2 have no goldens on master either, so the check still exits 1.songs/rack_rigs.pyrenders headless with audio on every stem, including an automation lane two racks deep.🤖 Generated with Claude Code