Finite-difference grids, mass-spring lattices and scanned synthesis: nonlinear bodies beyond a modal bank and one line #145

Open
opened 2026-10-06 00:33:31 +00:00 by bcox · 0 comments
Owner

bcox asked on 2026-10-05 for a ticket for each family in his gaps.md that has none. Engine claims are from reading the tree at cd68bd3e on main; literature named below is from recollection and was not re-read. Nothing here is built, measured or listened to.

What the tree has

  • The modal engine (ModalLayer over ModalLoop and its ModeBank) is a linear bank of resonances, nonlinear only at its interaction sites through dsp/junction.h, with tension modulation as a destination (kTensionDepth). The waveguide is one lumped line with drives. dsp/strings_junction.h couples N strings to one board at one point (#83, closed). The particle engine is two bodies excited by arrivals.
  • materials/ generates the mode tables offline (string, bar, membrane, plate, tube; materials/bessel.h for the membranes), which is how the engine evaluates no material formula. Every body in the tree is linear; the nonlinearity is a point.
  • The cymbal-scatter spike (#91) found the crash sounding like a pitched bell. A real crash is the plate's nonlinear regime: mode coupling at large amplitude, which a linear bank cannot do at any mode count.

What the family is

  1. Finite-difference schemes. A membrane or plate as a 2D grid stepped in time; nonlinear where it matters: the von Karman plate (the crash, the gong's swell, the thunder sheet), the Kirchhoff-Carrier string (tension from the whole string's stretch, the pitch glide of a hard pluck). Bilbao's Numerical Sound Synthesis is the reference; every scheme carries a stability condition tied to the sample rate that fixed point has to respect exactly.
  2. Mass-spring lattices. CORDIS-ANIMA and GENESIS: arbitrary networks of masses, springs, dampers and nonlinear links. A modeling language more than an engine; the host compiles a network into a fixed schedule, the engine runs the schedule.
  3. Scanned synthesis (Verplank, Mathews and Shaw). A slow mass-spring string, stepped at a control rate under the player's hand, whose shape is read as a wavetable at audio rate. The haptic instrument; cheap, and the one of the three that is nearly free once #115's table exists, since it is that table with a lattice writing into it.

Shape and cost

The three are priced apart. A 64 by 64 plate is 4096 points at roughly ten multiply-adds per sample: on the fabric a per-channel instrument at one voice, not 128, and a channel-scope layer by that fact. A lattice's cost is its link count, bounded by what the host compiled. Scanned synthesis is a few hundred points at a control rate plus one table read per sample, a VA shape in all but the table's source.

Open

  • Which of the three, if any. The nonlinear plate is the one that reaches a sound nothing in the tree reaches (#91's crash); scanned synthesis is the one that costs almost nothing given #115; the lattice is the one that asks for a language.
  • Word growth and rounding in an explicit scheme: a grid update is a recursion over thousands of states, and the contraction argument dsp/fixed.h's kTowardZero makes for a filter has to be made for the scheme.

#91, #115, #83 (closed), #104, materials/.

bcox asked on 2026-10-05 for a ticket for each family in his `gaps.md` that has none. Engine claims are from reading the tree at `cd68bd3e` on `main`; literature named below is from recollection and was not re-read. **Nothing here is built, measured or listened to.** ## What the tree has - The modal engine (`ModalLayer` over `ModalLoop` and its `ModeBank`) is a linear bank of resonances, nonlinear only at its interaction sites through `dsp/junction.h`, with tension modulation as a destination (`kTensionDepth`). The waveguide is one lumped line with drives. `dsp/strings_junction.h` couples N strings to one board at one point (#83, closed). The particle engine is two bodies excited by arrivals. - `materials/` generates the mode tables offline (string, bar, membrane, plate, tube; `materials/bessel.h` for the membranes), which is how the engine evaluates no material formula. Every body in the tree is linear; the nonlinearity is a point. - The cymbal-scatter spike (#91) found the crash sounding like a pitched bell. A real crash is the plate's nonlinear regime: mode coupling at large amplitude, which a linear bank cannot do at any mode count. ## What the family is 1. **Finite-difference schemes.** A membrane or plate as a 2D grid stepped in time; nonlinear where it matters: the von Karman plate (the crash, the gong's swell, the thunder sheet), the Kirchhoff-Carrier string (tension from the whole string's stretch, the pitch glide of a hard pluck). Bilbao's *Numerical Sound Synthesis* is the reference; every scheme carries a stability condition tied to the sample rate that fixed point has to respect exactly. 2. **Mass-spring lattices.** CORDIS-ANIMA and GENESIS: arbitrary networks of masses, springs, dampers and nonlinear links. A modeling language more than an engine; the host compiles a network into a fixed schedule, the engine runs the schedule. 3. **Scanned synthesis** (Verplank, Mathews and Shaw). A slow mass-spring string, stepped at a control rate under the player's hand, whose shape is read as a wavetable at audio rate. The haptic instrument; cheap, and the one of the three that is nearly free once #115's table exists, since it is that table with a lattice writing into it. ## Shape and cost The three are priced apart. A 64 by 64 plate is 4096 points at roughly ten multiply-adds per sample: on the fabric a per-channel instrument at one voice, not 128, and a channel-scope layer by that fact. A lattice's cost is its link count, bounded by what the host compiled. Scanned synthesis is a few hundred points at a control rate plus one table read per sample, a VA shape in all but the table's source. ## Open - Which of the three, if any. The nonlinear plate is the one that reaches a sound nothing in the tree reaches (#91's crash); scanned synthesis is the one that costs almost nothing given #115; the lattice is the one that asks for a language. - Word growth and rounding in an explicit scheme: a grid update is a recursion over thousands of states, and the contraction argument `dsp/fixed.h`'s `kTowardZero` makes for a filter has to be made for the scheme. ## Related #91, #115, #83 (closed), #104, `materials/`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bcox/tymbal#145
No description provided.