Each note is a hammer burst convolved with an impulse response synthesised for that exact pitch. The IR carries two mode groups at once. The tine's are the bending modes of a rod clamped at one end, 1, 6.267, 17.55 and 34.39 times the fundamental, wildly inharmonic, which is why a struck tine sounds like a tuning fork rather than a string and why its attack is a metallic cluster with no relationship to the note. The tonebar's are a free-free bar's, plus an octave partial the coupled pair sings at, and its fundamental sits four-tenths of a percent sharp so the two beat slowly against each other.
The hammer is a two-to-six-millisecond burst of low-passed noise with a leading impact, seeded so a given setting always produces the same burst. Contact time is what sets the bandwidth of the excitation, so a soft tip literally cannot wake the tine's seventeenth-ratio mode and a hard one wakes all of it, and because a neoprene tip compresses under a heavy blow, the played velocity moves the hammer's hardness as well as its force.
Then the pickup, which is the only part of this that is not a modal bank. A WaveShaperNode runs a transfer curve computed from a Lorentzian flux law: the gap sets how bent it is, and an alignment control fades in the even half of it, which is what turns odd harmonics into even ones. Velocity is not applied to the curve, it is applied to the signal entering it, so a quiet note sits in the near-linear middle and a hard one reaches the ends. For that to mean anything the level entering the curve has to be the same for every note, which it is not by default: the impulse responses are normalised by peak, and a short hammer burst sums far more coherently against a high note's dense response than a low note's, spanning about 15 dB across the compass. So each note's strike transient is measured once, when its response is rendered, and divided out, after which velocity is the only thing deciding where on the curve a note lands. The curve itself is level-matched to full scale so a dirtier setting is not also a louder one, and a DC blocker follows it because an offset pickup rectifies slightly, exactly as the capacitor in a real preamp is there for.
The curve is not written in the audio code. It lives in the shared UI kit's waveshaper maths as a tested pure function, and both the WaveShaperNode's table and the plot on the panel are sampled from that one function, the table pinned bit-identical to the plotted curve on the node's own sampling grid. A transfer plot that merely resembled the audio would be teaching a shape the ear cannot confirm, which is why this is arranged the way it is.
Behind the voices, the amplifier: a soft-clip drive stage and a stereo tremolo, both shared web-fx primitives rather than local copies. The tremolo runs its two channels in opposite phase from a quadrature-locked oscillator pair, so it pans rather than pulses and stays locked at any rate. IRs are cached by note and by the two knobs that change the samples, deliberately not by velocity, since velocity here never touches the modal bank, so a crescendo never misses the cache. Voices are capped at eight with oldest-first stealing, and every voice's nodes are freed on a six-second tail cap.