Spark
A discharge is three things at once: a blast, a pinch, and a jag. The spark strike composes them from operators the engine already trusts. The blast is the drop — radial outflow is divergence itself, no stream function produces it, and the oldest operator here expands a disk exactly while conserving the area around it. The pinch is the viscous multipole burst, its ejection lobes along the note’s axis. The jag is this page’s operator: the spark shear.
Shears invert for any profile. In the frame of the strike, one step of the shear slides every row by an amount that depends only on the row, then every column by an amount that depends only on the column:
Whatever is — a triangle wave, a sawtooth, noise — inverts as , so each stage is exact and the kinks of become creases in the ink, legally. That is the dielectric aesthetic, at no cost in area. The profile is a stack of triangle waves at , , with halving weights (the depth is a parameter), or piecewise-linear noise from an integer hash; is a window across each shear, twice the strike radius wide, so the streamers run along and across the axis. The step’s exact inverse is the second stage undone first: reversed order and negated — a sign flip alone is not, because crossed shears do not commute.
The kick decays. A strike spends its shear as over four time constants, dealt out in kick-drift steps whenever the pending kick reaches the field’s own quantum. Each step is exact, the composition is exact, and the figure it draws depends on how it was dealt — that is the operator’s texture, bounded below by the quantum and above by the frame. The wavenumber is a control: a thick channel at one end, fine streamers at the other, and under Anod the slide (CC 74) drives it.
The Anod strike
Section titled “The Anod strike”Under the Anod medium every note-on is this composition, with
one number deciding its size: the charge. A Sumi drop at the same
velocity has the radius ; the Anod strike’s charge is
Strike charge (anod_drop, 0.1–1, default 0.57), and the
whole spark is cut to it — the drop of radius , a burst of core
with the order from Order (burst_order), and the shear episode with the
charge as its band and kick base. The default 0.57 is the Z-key spark’s
0.05 at the velocity-100 drop. It was measured, not chosen: a composition
on thin threads at a third of the Sumi radius vanished on a lossy mobile
GPU (the Adreno’s shader arithmetic erodes what a half-float field holds
near a quantum), while the classic spark on its charge survives on every
device the project runs on — six strikes stay six charges on the Tab and on
the desktop alike. The streamers are thicker and shorter for it; Strike
charge and Shear are the player’s to retune.
Invariants
Section titled “Invariants”- The shear is exact, for any profile. On the desktop harness a step of fifteen-texel kicks moves the interior pre-image seven texels; the step then its inverse leaves a fifth of a texel (the resampler’s, at the kinks) for the triangle stack and a hundredth for the noise profile; the same-order sign flip leaves six texels and is not an inverse. A single stage moves no row in and slides each row rigidly.
- The composition is sub-stepped by inheritance. The drop and the shears are exact; the burst is area-preserving to first order, so the spark takes the strictest member’s class and gates under the burst’s numbers. Its pre-image Jacobian, read outside the drop’s rim, stays first-order.
- The episodes end. The shear’s kick sums to exactly and the episode is over at ; the burst’s age envelope is its own page’s.
- The ingress rule applies to every stage, as to the ripple.
- A charge smaller than the Sumi drop. The headless gesture test reads the Anod tap’s charge at 1126 texels against the Sumi drop’s 2966 at the default 0.57.
Ownership
Section titled “Ownership”sumi_add_spark(x, y, r, D, θ₀, layer)— the strike: the drop (ink or clear water, assumi_add_drop), the burst of core and lobe displacement along , the shear episode along and across it. The Marble-mode tap and the mapper’s note-on strike both call it under Anod.sumi_add_spark_shear(x, y, band, A, B, k, φ, θ₀)— one step of the shear alone; a zero amplitude skips its stage, so the inverse of is the call then the call .- The knobs: Shear (
spark_shear, the kick as a fraction of the radius), Decay (spark_tau), Octaves (spark_stack), the profile (triangle or noise), Frequency (k) (CC 108 on the desktop; the slide CC 74 under Slide → Spark frequency, the Anod default), and Strike charge (anod_drop).
Lineage
Section titled “Lineage”The shear is the ripple’s family with a jagged profile — the tine and the ripple were the engine’s first exact shears, and the Chladni lattice its first kick-drift pair; the observation that a shear needs no smoothness to invert is what lets the creases in. The blast is Jaffer’s √-form drop; the lobes are the multipole burst, Jaffer’s method extended; the composition is the medium’s own idea of a strike.
midi-sink 2.0.0-rc.5 · AGPL-3.0 · source
