StruckFrankenSim instrument lab

FrankenSim · physical acoustics

Nothing here
was recorded.

A concert grand and a drum kit, computed from geometry, materials and contact. Strings get their partials from tension, stiffness and mass; the soundboard gets its modes from finite elements; drum heads and cymbals are vibrating plates on a fine grid. A felt hammer, a stick or a beater collides with them, and the air carries the result to a microphone placed at a point in space.

Two ways to hear it: offline reference renders that took up to 41 minutes per clip, and a live engine compiled to WebAssembly that you can play in this tab. The only recordings on this page are the real instruments we grade ourselves against, and they are clearly marked.

Play it live Hear strings nobody struck

Satie, Gymnopédie No. 1 (1888), bars 1–2 and 5–9 · two pressure microphones 1 m above a Model D–derived soundboard · rendered in 41 min for 19.0 s of sound (128× slower than real time)

string partials
18,167
board modes
128
render
41min
energy closure
1.7×10−14J
Offline reference0.00 s
Soundboard geometry: FE mesh, 17 ribs, 2 bridgeslit points: the 88 bridge stations where each key drives the board

Two ways to hear it

The same physics at two budgets.

The offline reference spends minutes per second of sound so that nothing is cut short. The live engine runs the same equations on a smaller description, fast enough to play. They are labelled everywhere, and the live engines report their measured distance from the reference.

Offline reference

Rendered here, at research fidelity

Native Rust, single-threaded per clip, run on a workstation and encoded to AAC for this page.

  • Grand pianoall 88 keys / 234 strings every step · 18,167 string partials · 128 soundboard modes to 2.4 kHz · 192 kHz mechanics
  • Drum kitone finite-difference plate solver for every head and cymbal · up to 7,589 grid points per surface · 48–288 kHz · von Kármán shells · 18 snare wires in contact with the head
  • Costthe 19 s grand-piano clip took 41 minutes (128× slower than real time)
  • Microphonepressure in pascals at a point, never normalized
Live · WebAssembly

Computed in your browser, as you play

Each engine runs in its own Web Worker (one per drum piece) and streams to an AudioWorklet that mixes them on the audio clock. Nothing is sampled or pre-recorded.

  • Drum kitthe offline kit's own plate solver, snare wires and clamped hi-hat included, on a grid 2–8× coarser, chosen per piece for each device · a piece that has gone quiet is not stepped
  • Pianothe reference's own equations, for the sounding keys only · on the largest soundboard this device keeps up with, up to the offline render's 128 coordinates · 16 keys held with the pedal down at about 2× real time
  • Not livethe finest drum detail (a coarser grid loses some above a few kHz), and the strings of keys you are not playing
  • Latencyabout 35–45 ms measured headlessly, including the output device

Offline reference Live · WebAssembly

One groove, two simulations, one switch.

The piano riff and four-on-the-floor of Todd Terje's Strandbar, played on FrankenSim's concert grand and drum kit. Two versions run on one clock: the studio render, computed offline at full resolution, and the same piano and drums computed in this tab while you listen. Flip the switch as it plays; nothing else changes.

You are hearingStudio renderTap the switch or drag the lever
Bar –
Studio renderhearing
Live in this tabhearing
Press play: both versions scroll here, the one you hear lit
Piano—
Kick—
Hi-hat—

The live engines start when you press play: a piano and two drum pieces, each in its own Worker.

What each version computes

Studio render

  • Piano: grand_piano, Steinway D preset: all 88 strings and their dampers on one FE soundboard (128 retained board coordinates up to 2.4 kHz), felt hammers driven by the score, a Rayleigh microphone 1 m above the board. (28 min of computing)
  • Kick: fs-vkplate: two Mylar heads on a 4.5 mm grid with the air between them, a convex felt beater crown, every stroke into the same ringing drum. (5 min of computing)
  • Hi-hat: fs-vkplate: two bronze shells on a 5.5 mm grid (von Kármán shells), clamped by the pedal at their rims, which rub with dry friction, stepped at 288 kHz. (1.1 h of computing)

Live in this tab

  • Piano: engine-piano: the same hammer, string and damper equations for the keys being played, on the largest soundboard this device keeps up with (16 to 128 coordinates, picked when you press play).
  • Kick and hi-hat: fs-vkplate itself, compiled to WebAssembly, on a grid several times coarser (picked for this device when you press play): fewer, larger cells, so less detail above a few kHz.

Levels: one fixed gain per part. In the studio render they set the low (30–90 Hz), middle (250–2,500 Hz) and high (6–14 kHz) bands in the same proportion as the recording we matched; each live part then gets the gain that gives it the RMS of its studio part, corrected for the drum grid your device runs. Both versions share one master level, low enough that neither clips. Nothing is compressed, limited or equalised.

After Todd Terje, Strandbar (Olsen Records, 2013). The piano riff's rhythm and voicings follow a published transcription study of the record; here it is a semitone higher and at 130.45 BPM, like the version we matched. The drum part is four-on-the-floor with closed hi-hat sixteenths, accented as in that version.

Offline reference

A drum kit, every piece from one solver.

Kick, snare, toms, hi-hat, crash and ride are one object here: a thin plate on a fine grid. A drum head is a film under tension, clamped at its rim; a cymbal is a bronze shell with a free edge that bends, stretches and trades energy between its vibrations (von Kármán coupling), which is what turns a strike into a wash. Stick, beater, snare wires and hi-hat rims meet the surfaces through contact laws; the air inside a drum couples its two heads. The sizes copy a real kit recorded with overhead microphones, and each piece is played next to its recording below.

Live · WebAssembly

Play a drum kit that is being solved as you hit it.

Strike any head or cymbal where you like: the stick lands at that spot on the same plate solver as the kit above, computed in this tab. The colours are the surface's own velocity field, the wave you hear spreading from where you hit. Keys work too: B kick, S snare, T and F toms, H hi-hat, C crash, R ride.

Eight pieces, each solved in its own Worker as you play.

What is computed

Each piece is the same finite-difference solver as the drum kit above: tensioned Mylar heads with the air between them, von Kármán bronze shells, Hertz stick contacts, a felt beater, snare wires and a pedal-clamped hi-hat whose rims rub with dry friction. Here it runs on a grid several times coarser (picked per piece for this device when you start), so it is cheaper and loses detail above a few kHz. A piece that has gone quiet is not stepped until it is struck again.

The colours are the computed transverse velocity of the surface (warm up, cool down), drawn from the solver state about 20 ms ahead of what you hear. Energy is the kinetic energy of the piece; force is the peak stick force of the last stroke. Levels: one gain per piece, matched on one grid to a real kit's recorded balance, except that the cymbals are capped so their very sharp attacks do not clip. A stroke's loudness changes with the grid (the crash is about 5 dB louder on a 3× grid than on 5×), so each piece's gain is rescaled for the grid it runs on, from a table of that stroke measured on every grid; it is raised only while the stroke stays under the same peak cap.

Live · WebAssembly

A grand piano you can play — with its strings visible.

Each key launches a hysteretic felt hammer into stiff strings with the published Steinway scale's lengths, tensions and stiffness. Every string you play shares one soundboard. Press nearer the front of a key to strike harder.

live
strings: at restboard: at rest
Live engine

A concert grand solved in your browser while you play it.

Starting downloads FrankenSim's reduced piano engine as WebAssembly (about 700 kB compressed, the Model D soundboard included) and assembles all 88 keys from the published string scale. The piano starts silent and at rest.

The picture shows, for every sounding key, the real transverse shape of its first string between the agraffe and the bridge, its hammer and felt force, and the soundboard's signed displacement.

Hammer speedfrom key position
Sustain pedalup
MIDInot connected
C1
C2
C3
C4
C5
C6
C7
C8

AWSEDFTGYHUJKOLP; play C4–E5 Z X octave Space pedal (hold) Press near the front edge of a key for a faster hammer; slide for a glissando.

Try this

Each one only presses keys and the pedal on a timeline; everything you hear is computed.

Energy ledger

live
supplied 0 mJ stored 0 mJ dissipated 0 mJ retired 0 mJ

balance residual 0 J supplied − stored − dissipated − retired

Supplied is the work the hammers bring in. It is either still stored (strings, board, hammers, felt), dissipated (string and board losses, dampers, felt and shank, the hammer caught on its rest), or retired: relative string energy discarded when a quiet key returns to its resting image, or when the polyphony budget forces the quietest key out. The residual is what the arithmetic fails to close.

Sounding keys
–
Strings · modes
–
Real time
–
Latency
–
Underruns
–
Peak pressure
–
Clipped
–
Forced out
–
Quality granted
–

Latency is the audio queued ahead of the playhead, plus the sound's travel to the microphone 1 m above the board, plus your output device. The hammer's 2 mm flight to the string adds 0.4 to 4 ms. Peak pressure is at that microphone; 10 Pa is digital full scale.

What this live model is — and is not

The reduced real-time model. It steps the same equations, with the same time discretisation, as FrankenSim's offline grand-piano reference, compiled from the reference's own source files: stiff strings whose partials follow from tension, bending stiffness, mass and length (never assigned pitches), a moving bridge coupled reciprocally to the soundboard, a felt hammer with crush memory and relaxation solved implicitly against the strings, and sound pressure from the Rayleigh integral over the moving board. What it reduces is listed here, with the measured cost of each reduction.

In the live model

  • All 88 keys of the published scale, 234 speaking strings on the bridge. Only the sounding keys are dynamic: every unison string and duplex segment, up to 200 string modes per key (low trichords keep partials to about 5–7 kHz).
  • Every other string stays attached as a quasi-static chord (its mass and tension load the bridge); a key becomes dynamic at its strike and returns to rest when quiet.
  • One shared soundboard: a reduction of the Model D board (exact low modes plus bridge-response vectors from the 0–2400 Hz slice) with its full damping matrix, 32 to 128 coordinates: the largest this device computes fast enough, chosen when you press Start.
  • The published hammer shank (rigid rotation plus bending), the per-key wool-felt card with crush memory and Prony relaxation, contact solved implicitly every step.
  • The estimated damper pad on every string up to E6 (four quadrature points), and a continuous sustain pedal.
  • Pressure from the time-domain Rayleigh integral at a microphone 1 m above the board, at a fixed 10 Pa full scale. No samples, no normalisation, no EQ, no reverb.

Reduced or absent

  • One mechanical step per sample at 48 kHz; the offline reference uses four.
  • 32 to 128 board coordinates where the offline render keeps 128: the live piano part of Strandbar sits 2.95 dB from the studio render in octave balance on 32 coordinates, 0.77 dB on 96 and 0.36 dB on 128.
  • Strings of silent keys neither resonate nor absorb: offline, their dampers soak up about 10 % of an A3 strike, so the live notes decay more slowly early on (≈ −9.6 against −15.2 dB/s).
  • A polyphony budget of 2,400 string modes and 24 keys. Beyond it the quietest key is returned to rest early; this is counted ("Forced out") and its energy appears as retired in the ledger. A load governor may lower the budget for new keys on a slow device, and says so.
  • No una corda or sostenuto, no key or action beyond the shank, no room, lid or case, no air loading of the board.

Checked against the offline reference

With nothing but one key on the bridge, the live kernel and the reference engine (the same source files) agree on bridge velocity to within 2.3 × 10⁻⁹ relative over one second, for eight keys at three hammer speeds, and their energy books agree to about ten digits. For an isolated C4 on the same 32-coordinate board, the live model's pressure, compiled natively, equals the offline renderer's file in all but 137 of 48,000 float32 samples, which differ by at most 1.5 × 10⁻⁸ Pa; the WebAssembly build in this tab sums its string modes in two lanes, which moves its output by less than 10⁻¹⁰ (rms, relative). Against the full offline render, the first 15 partials of A3 sit within 2.5 cents and the fitted inharmonicity is 2.42 × 10⁻⁴ (offline 2.47 × 10⁻⁴).

Published

RT-0425 string scale, 84 keysRT-0425 hammer mass, exponent, stiffnessModel D dimensionsModel D board drawing (Boutillon et al.)Hammer shank geometry (Chabassier & Durufle)

Estimated

4 end keys of the scaleFelt crush and relaxationUnison detune 0.8 centsString loss lawDamper pads, 0.4 N s/mBoard damping 1.5 %Bridge stations, rib sections

Not modelled live

Silent-string resonanceSilent-string damper lossBoard beyond what the device affordsUna corda, sostenutoAction beyond the shankRoom, lid, case

Offline reference

A concert grand, all 234 strings at once.

The string scale is the published RT-0425 model of a Steinway D: 88 courses with lengths, linear densities, tensions and bending stiffness. The soundboard is a ribbed orthotropic spruce plate transcribed from published Model D drawings. Every string of every key stays in the simulation all the time, which is why the effects below need no "resonance layer".

The strings nobody struck

Hold C4, E4 and G4 down silently, so that their dampers lift without a hammer moving. Then strike C3 staccato and let it go. C3's dampers stop its own strings, but the shared bridge has already passed energy into the undamped C-major strings, and they keep singing. Compare it with the same strike alone, and with the pedal down, which lifts every damper. Use “Listen closer” to raise only the playback level of the quiet tail.

0.00 s / 4.00 s
peak 3.16 Paduration 4.00 srender 1,692 sslower than real time 423×energy closure 9.7×10−17 Jplayback gain -11.4 dB

Strings keep partials to 21.6 kHz; the board and its radiation are resolved to 2.4 kHz (128-mode Ritz reduction).

Run evidence
percussion grand_piano --preset steinway-d --wav-format float32 --performance silent-held.csv --duration 4 --board-band-hz 2400 --board-reduction 128,64,200,400,800,1600,2300 --render silent-held.wav
mechanical rate: 192 kHz
string partials: 18,167
soundboard modes: 128
board band: 2,400 Hz
energy input: 0.098 J
energy closure: 9.7×10⁻¹⁷ J
worst substep defect: 2.9×10⁻¹⁵ J
felt loss: 0.00499 J
damper loss: 0.0358 J

RT-0425 Appendix A wrapped-string MODEL: 84 published courses plus four estimated extensions; tensions adjusted to A4=440 Hz first-partial equal temperament; L, mass and EI preserved.

GEOMETRY-DERIVED Flat plate; mixed,Approximate Model D reconstruction: Boutillon Ege Paulello 2012 Fig 2/Table 1; Steinway Model D specifications; estimated per-key bridge stations; see steinway_d.rs for estimates; explicit bridge-driven Ritz projection: 148 source modes, 128 retained, 64 unchanged low modes; mixed tail intervals certify the projected pencil only; rim compliance not modeled.

Rayleigh pressure microphone at [0.675, 1.0, 1.0] m

pp, mf, ff: the felt hardens

Hammer felt is stiffer the more it is squeezed, so a faster hammer stays in contact for less time. A shorter contact feeds energy into higher partials, which is why ff is brighter and not just louder. Beside the clips is the bridge velocity under the key: the force that actually reaches the soundboard.

0.00 s / 3.00 s
peak 0.186 Paduration 3.00 srender 1,306 sslower than real time 435×energy closure 5.0×10−16 Jplayback gain -6.9 dB

Strings keep partials to 21.6 kHz; the board and its radiation are resolved to 2.4 kHz (128-mode Ritz reduction).

Run evidence
percussion grand_piano --preset steinway-d --wav-format float32 --performance a3-pp.csv --duration 3 --board-band-hz 2400 --board-reduction 128,64,200,400,800,1600,2300 --bridge-trace-csv a3-pp-bridge.csv --render a3-pp.wav
mechanical rate: 192 kHz
string partials: 18,167
soundboard modes: 128
board band: 2,400 Hz
energy input: 0.00375 J
energy closure: 5.0×10⁻¹⁶ J
worst substep defect: 4.3×10⁻¹⁷ J
felt loss: 1.6×10⁻⁴ J
damper loss: 1.8×10⁻⁴ J

RT-0425 Appendix A wrapped-string MODEL: 84 published courses plus four estimated extensions; tensions adjusted to A4=440 Hz first-partial equal temperament; L, mass and EI preserved.

GEOMETRY-DERIVED Flat plate; mixed,Approximate Model D reconstruction: Boutillon Ege Paulello 2012 Fig 2/Table 1; Steinway Model D specifications; estimated per-key bridge stations; see steinway_d.rs for estimates; explicit bridge-driven Ritz projection: 148 source modes, 128 retained, 64 unchanged low modes; mixed tail intervals certify the projected pencil only; rim compliance not modeled.

Rayleigh pressure microphone at [0.675, 1.0, 1.0] m

Vertical bridge velocity under A3 for the first 30 ms. Each curve is scaled to its own peak and offset so that the shapes can be compared. The repeating pattern is the string's period, 4.5 ms for A3.

Why piano octaves are wider than 2:1

A steel string is a little stiff, so its partials run sharp: fₙ = n·f₁·√(1+Bn²)/√(1+B). The effect grows up the keyboard. With exact 2:1 first partials, A5's second partial lands 5.5 Hz (5.4 cents) above A6. Stretch tuning moves them together by changing each string's tension, not by retuning an oscillator. The clips play A4+A5, then A5+A6 from 2.6 s. The plot zooms into the rendered sound near 1760 Hz, where the two tunings differ.

0.00 s / 5.40 s
peak 1.95 Paduration 5.40 srender 2,114 sslower than real time 392×energy closure -8.2×10−15 Jplayback gain -6.8 dB

Strings keep partials to 21.6 kHz; the board and its radiation are resolved to 2.4 kHz (128-mode Ritz reduction).

Run evidence
percussion grand_piano --preset steinway-d --wav-format float32 --performance octaves-high2.csv --duration 5.4 --board-band-hz 2400 --board-reduction 128,64,200,400,800,1600,2300 --render octhi2-et.wav
mechanical rate: 192 kHz
string partials: 18,167
soundboard modes: 128
board band: 2,400 Hz
energy input: 0.0979 J
energy closure: -8.2×10⁻¹⁵ J
worst substep defect: 8.1×10⁻¹⁶ J
felt loss: 0.00814 J
damper loss: 0.0024 J

RT-0425 Appendix A wrapped-string MODEL: 84 published courses plus four estimated extensions; tensions adjusted to A4=440 Hz first-partial equal temperament; L, mass and EI preserved.

GEOMETRY-DERIVED Flat plate; mixed,Approximate Model D reconstruction: Boutillon Ege Paulello 2012 Fig 2/Table 1; Steinway Model D specifications; estimated per-key bridge stations; see steinway_d.rs for estimates; explicit bridge-driven Ritz projection: 148 source modes, 128 retained, 64 unchanged low modes; mixed tail intervals certify the projected pencil only; rim compliance not modeled.

Rayleigh pressure microphone at [0.675, 1.0, 1.0] m

The last 2.65 s of each clip, zoomed to 1752–1774 Hz; dotted marks are where the string scale puts A6's first partial and A5's second. Equal-tempered: two separate clusters about 5.5 Hz apart, as predicted. Stretch-tuned: one cluster where both predictions coincide (1767.35 Hz). Each cluster is itself split by about 0.9 Hz, because the model's three unison strings are detuned by ±0.8 cents. That split makes both clips wobble about once a second, and it masks the 5.5 Hz octave beat by ear.
Stretch relative to equal-tempered first partials (cents), and the inharmonicity B of every key (right axis, log), both computed from the dumped string scale.

The bottom and the top

A0 is a single 2.01 m wound string with B = 6.8×10⁻⁵, so its 20th partial lies 23 cents and its 40th 89 cents sharp of the harmonic series. C6 has three short plain strings and a much shorter hammer contact.

0.00 s / 4.00 s
peak 1.3 Paduration 4.00 srender 1,732 sslower than real time 433×energy closure -1.5×10−16 Jplayback gain -3.3 dB

Strings keep partials to 21.6 kHz; the board and its radiation are resolved to 2.4 kHz (128-mode Ritz reduction).

Run evidence
percussion grand_piano --preset steinway-d --wav-format float32 --performance a0-mf.csv --duration 4 --board-band-hz 2400 --board-reduction 128,64,200,400,800,1600,2300 --render a0-mf.wav
mechanical rate: 192 kHz
string partials: 18,167
soundboard modes: 128
board band: 2,400 Hz
energy input: 0.0302 J
energy closure: -1.5×10⁻¹⁶ J
worst substep defect: 7.5×10⁻¹⁶ J
felt loss: 0.00674 J
damper loss: 0.00227 J

RT-0425 Appendix A wrapped-string MODEL: 84 published courses plus four estimated extensions; tensions adjusted to A4=440 Hz first-partial equal temperament; L, mass and EI preserved.

GEOMETRY-DERIVED Flat plate; mixed,Approximate Model D reconstruction: Boutillon Ege Paulello 2012 Fig 2/Table 1; Steinway Model D specifications; estimated per-key bridge stations; see steinway_d.rs for estimates; explicit bridge-driven Ritz projection: 148 source modes, 128 retained, 64 unchanged low modes; mixed tail intervals certify the projected pencil only; rim compliance not modeled.

Rayleigh pressure microphone at [0.675, 1.0, 1.0] m

Solo the soundboard

Exact modal sum

A2 at 2.5 m/s, split into the pressure that each loaded soundboard mode contributes at the microphone. Mute and solo the modes: the signed sum of every channel is the rendered sound to 10⁻¹⁴, including the cancellation between modes.

Live · WebAssembly

A player piano and drum machine for any MIDI file.

A MIDI file is only a list of keys and strokes; it usually reaches you through a handful of recorded samples, and sounds like it. Here it is punched into a paper roll that plays FrankenSim's concert grand and drum kit, computed in this tab. Each note launches a felt hammer into real strings on one shared soundboard; each drum note lands a stick on a simulated head or cymbal. Pick a roll, or drop in a MIDI file of your own.

Graded against real instruments

How close is it to the real thing?

Sounding plausible is easy to fake, so we put FrankenSim's renders next to real recordings of the same notes, from the University of Iowa's free instrument samples: a Steinway & Sons Model B grand. We measured the same things on both, and the headline gap sits next to a ruler made only of the real piano: how much it changes between two dynamics. The drum kit is graded the same way, piece by piece, in its own section.

What the comparison shows

    Method: both signals are high-passed at 40–70 Hz to remove room rumble, and each pair is aligned at its note onset, measured against the recording's own noise floor. Partial frequencies come from a 1 s window, and B is fitted from (fₙ/n)² = f₀²(1+Bn²) over partials above the noise floor. Decay rates are linear fits of each partial over 0.2–2.6 s (0.2–2.0 s at C6). The Iowa piano was recorded with two microphones 8 inches above the bass and treble strings in a normal room; the bass-side channel is used, because averaging two spaced microphones can cancel partials. FrankenSim's piano is heard at one point 1 m above its board with no room, so some differences belong to the two listening positions rather than the instruments. Playback gets the same high-pass and an early-loudness match, and nothing else. The analysis is tools/verisim.py.

    Why it sounds different: tracing each gap to what the model leaves out

    A score says how far apart two sounds are, not why. Here each difference is followed back along the chain hammer → string → bridge → soundboard → air → microphone. Some links can be checked inside the simulation, which records the bridge's motion as well as the sound. Then one physical mechanism is switched on at a time and the note is rendered again. A suspicion counts as confirmed only when that experiment moves the measured gap.

    Method and honesty

    What is computed, what is estimated, what is absent.

    These instruments are descriptions, not instrument code. A drum is a short list of radii, thicknesses, moduli and tensions; the piano is composed out of FrankenSim's general physics crates (plates and shells, modal solvers, contact, port-Hamiltonian integration, boundary elements), and the kit out of one plate solver, fs-vkplate. The same crates serve the project's thermal, structural and fluid work.

    The instrument is a description

    The kit's snare, verbatim from crates/fs-vkplate/src/kit.rs. Edit a number and the solver builds a different drum.

    DrumSpec {
        name: "snare 14x6",
        radius: 0.1703,
        depth: 0.1524,
        // recording: ~0.55 s T60 across the mid bands, with off-centre strike exciting (1,1) at ~235 Hz and wire rattle
        batter: Head { thickness: PLY1, tension: 1450.0, t60: [(150.0, 0.50), (3000.0, 0.45)] },
        reso: Head { thickness: SNARE_SIDE, tension: 2250.0, t60: [(150.0, 0.50), (3000.0, 0.45)] },
        grid: 3.5e-3,
        oversample: 2,
        strike_xy: (0.072, 0.025),
        striker: (0.0060, hertz_stick(0.005, MYLAR.0, MYLAR.1), 0.0),
        muffle: None,
        wires: Some(Wires::estimated()),
        port: None,
        mic: [0.35, 0.25, 0.9], // an overhead about 1 m away, 25 degrees off the drum's axis
        floor: Some(-0.65),
    }

    The crash: radius, bow and bell thickness, rise and grid. Thickness and height become functions of radius; the solver lays them on the grid.

    name: "crash 18",
    radius: 0.2286,
    bow_thickness: 0.95e-3,
    bell_thickness: 1.6e-3,
    bell_radius: 0.075,
    bow_rise: 0.025,
    bell_rise: 0.015,
    grid: 6.0e-3,
    t60: [(500.0, 10.0), (10000.0, 2.0)]

    Six of the grand piano's 88 string courses, as the solver read them. Frequencies follow from these numbers; none is typed in.

    keystringslengthmass/lengthtensionstiffness EIBf₁
    A012.010 m140.27 g/m1714 N4.76e-2 N·m²6.78e-527.50 Hz
    A121.762 m31.57 g/m1186 N2.10e-2 N·m²5.64e-555.00 Hz
    C331.259 m6.97 g/m756 N1.27e-2 N·m²1.04e-4130.81 Hz
    C430.657 m6.24 g/m737 N1.02e-2 N·m²3.15e-4261.63 Hz
    A430.404 m5.53 g/m698 N7.97e-3 N·m²6.91e-4440.00 Hz
    C730.095 m4.26 g/m668 N4.73e-3 N·m²7.74e-32093.00 Hz

    Three kinds of number

    Published, transcribed from sources

    RT-0425 string scale (84 courses)Model D board outline, ribs, bridgesSpruce & maple elastic constantsB20 bronze constantsKit sizes (Salamander Drumkit)Per-key hammer mass & stiffness laws

    Estimated, labelled in every run log

    Head tensions (tuned to the recording)Loss from the recordings' decay timesFelt crush & relaxationCymbal thickness & riseStick, beater & felt lawsSnare wire mass, tension, preloadHi-hat rim contactFour extrapolated end keys

    Not modelled

    Piano room & lidDrum shells, hoops & rimsCavity modes (kit)Hi-hat frictionWire radiationSympathetic buzz between kit piecesMicrophone capsuleReal-time offline engine

    It says no

    Real refusals from this campaign. A render that cannot be supported is refused rather than quietly approximated.

    A mistake in our own score: Satie's melody holds F♯4 while the left-hand chord also asks for F♯4. One physical key cannot be struck again while it is held, so the performance was refused before the 41-minute render. The chord now leaves out the held key.

    grand_piano: audio sample 713760 after 32 frames in block: sample 713760, event 83: hammer/key has not returned for another strike

    An adaptive soundboard reduction to 3.2 kHz was refused against its declared work budget before it started. The renders here use an explicit 128-mode Ritz reduction of the 0–2.4 kHz board instead.

    grand_piano: adaptive bridge response work estimate 9667910336 exceeds 8000000000; use fewer source modes, retained modes or admitted bridge ports

    Numbers behind this page

    Every offline clip carries its exact command, run time and energy closure in its “Run evidence” drawer. Totals:

    offline clips
    31
    seconds of sound
    85.6s
    CPU time to render
    8.0h
    worst piano energy closure
    1.7×10−14J
    comparison groups
    12