Commits on 9 Oct 2026
Driven plate: steady views (mode grid of energy per (m, n), default; RMS displacement), live height map as an option; start paused
Jeremy Magland committed
2a0d838Driven plate: listening (records displacement, velocity, acceleration at the listening point, 512 per period; plays back from any time at a set pitch while the run computes; steady or fixed level; start and playhead marks on the time charts); spectrogram follows the chosen signal; ramp-rate slider; target up to 1e3 E_nl
Jeremy Magland committed
206d3e9Driven plate: spectrogram of the displacement at a listening point (click the plate to move it), whole run, log frequency in driven pitches, per-time or whole-run colour, mode pitch ticks; shared FFT exported
Jeremy Magland committed
ea9e7caDriven plate: optional loss, per-mode decay concentrated at the top of the band (rate ~ omega^k, k 1, 2 or 4, tau top in driven periods), switchable during a run; drive and loss power readout; mode map colour bar on its own line
Jeremy Magland committed
b22731fDriven plate: mode map (every mode's energy against time, averaged over time bins, log colour, hover readout); energy chart reads the same averaged bins
Jeremy Magland committed
bedc4d4Plate: remove the curvature (domed rest shape) and its cross-section, to keep the plate simple; Parameters stays in the right column
Jeremy Magland committed
2c9a594Driven plate: new app, rectangular simply supported von Kármán plate driven in one mode (modal force in phase with the mode's velocity, energy-target controller on a log ramp), height map, energy chart, perturbation option
Jeremy Magland committed
39bccd2Plate: Parameters back in the right column; true-scale cross-section under the height map showing the dome and the thickness
Jeremy Magland committed
ecc198bPlate: optional curvature (domed rest shape, Marguerre shallow shell): stretching measured from the rest shape, computed modes with the curvature stiffness, generalized nonlinear scale
Jeremy Magland committed
e7f0b54Note renderer: step at the stability step and read the signal between steps by cubic interpolation (no longer at least 4 steps per audio sample); plate notes 1.4-2.3x faster
Jeremy Magland committed
0394e11Plate: Lyapunov exponent (shadow plate; real-time chart in a new Real time card, note chart and λ vs E off by default); Parameters folded under the plate
Jeremy Magland committed
ad9866bPlate: remove membrane tension (did not sound like a drum; drums later); clamped edges stay
Jeremy Magland committed
e17746cPlate: clamped edges (clamped 13-point stencil, computed modes) and a general membrane tension T for held edges; mallet unchanged
Jeremy Magland committed
197feb9Plate: stretching with free edges (free in-plane edge, clamped stress function by sine solves + Woodbury); free plate moved to grid vertices (edge masses on the edge, half/quarter mass), second-order bending and stretching; mallet takes per-mass masses
Jeremy Magland committed
b2016c6Plate: free edges (full bending energy with Poisson term, rigid motions removed, modes by symmetry blocks with a new Householder/QL eigensolver); stretching off when free for now
Jeremy Magland committed
c86ceb3Plate: von Kármán stretching (stress function by sine transforms, exact gradient), thickness h sets it (default 5 cm), step from the strike energy, nonlinear scale
Jeremy Magland committed
6a89fa0Plate: new app, square simply supported linear plate on a grid (exact sine modes, mallet or kick at a point, height map, sped-up note with spectrogram)
Jeremy Magland committed
1763884Beam: free-free ends in the page (Ends 'free'; rigid part of strikes removed and reported; mode displays by Modes.count; bending offsets for ghost and Lyapunov shadow; drawing without supports)
Jeremy Magland committed
a171f3cBeam: free-free ends in the physics (rigid motions removed by projection, modes without the rigid pair); not yet in the UI
Jeremy Magland committed
ddfbc84Beam defaults: 16 masses, frequency-dependent loss on (τ top 200 s), mallet strike (M 1 kg, K 1000)
Jeremy Magland committed
e605cb4Beam: mallet strike (Hertz contact, mass M and stiffness K in Parameters; shared contact routine in src/common/mallet.ts); hammer shape factored out; kick stays the default
Jeremy Magland committed
5b795e3Beam: strike and listening at positions along the beam (m), hammer blow of fixed physical width, so both mean the same at any N; N = 8 unchanged
Jeremy Magland committed
8ce184cAnti-alias filter for rendered notes (beam, fput-chain): 4x oversampling, Kaiser FIR low-pass to 0.42 fs, decimation; beam warning now says modes above the passband are filtered out
Jeremy Magland committed
0172972Beam: integrator step 0.2 / omega_eff (was 0.03): 6.5x fewer steps, top-mode pitch error 2.9 cents, statistically equivalent notes
Jeremy Magland committed
1115407Beam: Masses refines the same beam (parameters for 8 masses, scaled with the spacing), so the low modes, decay times and note length stay put as N grows
Jeremy Magland committed
fcad6beBeam: frequency-dependent loss (dashpots alongside the springs, set by the top-of-band decay time τ top, default off); per-mode decay times in the derived values
Jeremy Magland committed
462e79cBeam README: 1:2 internal resonance between modes 1 and 3 (Kirchhoff, clamped, h = 0.38)
Jeremy Magland committed
e39a676Beam README: the near 2:1 at h = 0.2 is not a resonance (mode 2 antisymmetric)
Jeremy Magland committed
2079531Beam: draw the rest shape and the beam at rest shape plus displacement
Jeremy Magland committed
82fcd7fBeam: curvature (rise h of a stress-free curved rest shape, default 0); stepFor safe for k3 = 0
Jeremy Magland committed
551b7a9Chart legends fit left of the range text; the rest counted as +n
Jeremy Magland committed
64125ddSpectrogram: log frequency axis by default with a 'log f' chip for linear; rows show the loudest bin in their band; mode lines decided per line
Jeremy Magland committed
63e5e6eBeam step 5: λ vs E scatter over notes
Jeremy Magland committed
90c1386