Deploy workflow: plain npm ci (rollup's native binary is an optional dependency)
3 changed files+98−4
.github/workflows/deploy.ymlmodified+3−3View file
@@ -25,9 +25,9 @@ jobs:
2525 with:
2626 node-version: 24
2727 cache: npm
28- # --omit=optional skips the Dawn (webgpu) binary, which is only for the
29- # experimental command-line engine and needs a recent glibc.
30- - run: npm ci --omit=optional
28+ # The optional Dawn (webgpu) binding installs fine here; it is only loaded
29+ # by the experimental command-line engine, never by the build.
30+ - run: npm ci
3131 # Discretization tests run on the CPU (no GPU needed).
3232 - run: npm test
3333 # Type check, Vite build, and a copy of docs/gallery into dist/docs/gallery.
docs/gallery/clips/strike-mass-0.pngmodified+0−0View file
Binary file not shown.
docs/gallery/index.htmlmodified+95−1View file
@@ -14,7 +14,7 @@ ul.toc { columns: 2; }
1414 </style></head><body>
1515 <h1>Steel sheet gong: how the parameters shape the sound</h1>
1616 <p>Each section varies one property of the simulated sheet or of the excitation while everything else stays at the simulator defaults: a 12 by 18 inch, 22 gauge (0.79 mm) stainless steel sheet hanging in portrait orientation with a 3 mm bow across its width, heard 1 m in front of its center, recorded for 4 s. The clips are computed with the simulator's default numerical settings (8 mm grid), so the 'Open in simulator' links reproduce them exactly. Click a player to hear a clip. Every clip is rendered at the simulator's default playback level (+20 dB relative to 1 Pa at full scale, with the same soft clipper), so loudness differences within and between sections are the ones the model predicts, and a clip sounds as it does in the app. The numbers under each clip are the peak pressure and sound pressure level at the listener, the RMS pressure over the clip, the spectral centroid of the sound between 0.2 and 1.2 s (a measure of brightness), and fitted 60 dB decay times of a low and a high band.</p>
17-<ul class="toc"><li><a href="#strike-speed">Drumstick: stick speed</a></li><li><a href="#strike-mass">Drumstick: stick mass</a></li><li><a href="#strike-stiffness">Drumstick: tip hardness</a></li><li><a href="#strike-position">Drumstick: strike position</a></li></ul>
17+<ul class="toc"><li><a href="#strike-speed">Drumstick: stick speed</a></li><li><a href="#strike-mass">Drumstick: stick mass</a></li><li><a href="#strike-stiffness">Drumstick: tip hardness</a></li><li><a href="#strike-position">Drumstick: strike position</a></li><li><a href="#push-amount">Push and release: push amount</a></li><li><a href="#push-sign">Push and release: with or against the bow</a></li></ul>
1818 <section id="strike-speed">
1919 <h2>Drumstick: stick speed</h2>
2020 <p>A wooden stick tip (30 g effective mass) strikes the sheet at 70 percent of its width and 35 percent of its height. Speed sets both the loudness and the character: the contact force grows with speed, the contact shortens, and more energy reaches the high modes. The sound grows brighter as well as louder.</p>
@@ -287,5 +287,99 @@ ul.toc { columns: 2; }
287287 <a href="../../?excitation=strike&strikeFracX=0.92&strikeFracY=0.08">Open in simulator</a>
288288 </div></div>
289289 </section>
290+<section id="push-amount">
291+<h2>Push and release: push amount</h2>
292+<p>The corner is pushed by a given amount, held until the sheet settles, and released over 20 ms. A larger push stores more energy and, because the stiffness rises with deflection, produces a stronger pitch glide and a stronger transfer of energy to the higher partials.</p>
293+<p class="dim">Playback gain +20 dB relative to 1 Pa = 0 dBFS (the simulator's default is +20 dB); loud onsets are soft-clipped. Spectrograms: 0 to 5 kHz over the clip, 80 dB range, one color scale per section.</p>
294+<div class="cards"><div class="card">
295+ <div class="label">2 mm</div>
296+ <audio controls preload="none" src="clips/push-amount-0.wav"></audio>
297+ <img src="clips/push-amount-0.png" alt="spectrogram" width="640" height="200">
298+ <div class="metrics">
299+ <div>peak 0.012 Pa (56 dB SPL)</div>
300+ <div>RMS 0.1 mPa</div>
301+ <div>centroid 427 Hz</div>
302+ <div>T60 100-500 Hz 4.8 s, 2-8 kHz 17.5 s</div>
303+
304+ <div class="dim">wav peak -18.2 dBFS</div>
305+ </div>
306+ <a href="../../?pushAmount=0.002">Open in simulator</a>
307+</div>
308+<div class="card">
309+ <div class="label">5 mm</div>
310+ <audio controls preload="none" src="clips/push-amount-1.wav"></audio>
311+ <img src="clips/push-amount-1.png" alt="spectrogram" width="640" height="200">
312+ <div class="metrics">
313+ <div>peak 0.018 Pa (59 dB SPL)</div>
314+ <div>RMS 0.4 mPa</div>
315+ <div>centroid 179 Hz</div>
316+ <div>T60 100-500 Hz 4.7 s, 2-8 kHz 10.7 s</div>
317+
318+ <div class="dim">wav peak -14.7 dBFS</div>
319+ </div>
320+ <a href="../../?pushAmount=0.005">Open in simulator</a>
321+</div>
322+<div class="card">
323+ <div class="label">10 mm</div>
324+ <audio controls preload="none" src="clips/push-amount-2.wav"></audio>
325+ <img src="clips/push-amount-2.png" alt="spectrogram" width="640" height="200">
326+ <div class="metrics">
327+ <div>peak 0.046 Pa (67 dB SPL)</div>
328+ <div>RMS 3.3 mPa</div>
329+ <div>centroid 196 Hz</div>
330+ <div>T60 100-500 Hz 4.0 s, 2-8 kHz 7.7 s</div>
331+
332+ <div class="dim">wav peak -6.7 dBFS</div>
333+ </div>
334+ <a href="../../?pushAmount=0.01">Open in simulator</a>
335+</div>
336+<div class="card">
337+ <div class="label">20 mm</div>
338+ <audio controls preload="none" src="clips/push-amount-3.wav"></audio>
339+ <img src="clips/push-amount-3.png" alt="spectrogram" width="640" height="200">
340+ <div class="metrics">
341+ <div>peak 0.147 Pa (77 dB SPL)</div>
342+ <div>RMS 6.8 mPa</div>
343+ <div>centroid 411 Hz</div>
344+ <div>T60 100-500 Hz 4.2 s, 2-8 kHz 4.2 s</div>
345+
346+ <div class="dim">wav peak 3.3 dBFS (soft-clipped)</div>
347+ </div>
348+ <a href="../../?pushAmount=0.02">Open in simulator</a>
349+</div></div>
350+</section>
351+<section id="push-sign">
352+<h2>Push and release: with or against the bow</h2>
353+<p>The sheet has a 3 mm bow across its width. Pushing the corner in the direction of the bow and against it are not equivalent: the shell stiffness is asymmetric, so the two cases have different low-mode frequencies and a different wobble.</p>
354+<p class="dim">Playback gain +20 dB relative to 1 Pa = 0 dBFS (the simulator's default is +20 dB); loud onsets are soft-clipped. Spectrograms: 0 to 5 kHz over the clip, 80 dB range, one color scale per section.</p>
355+<div class="cards"><div class="card">
356+ <div class="label">+10 mm (with the bow)</div>
357+ <audio controls preload="none" src="clips/push-sign-0.wav"></audio>
358+ <img src="clips/push-sign-0.png" alt="spectrogram" width="640" height="200">
359+ <div class="metrics">
360+ <div>peak 0.046 Pa (67 dB SPL)</div>
361+ <div>RMS 3.3 mPa</div>
362+ <div>centroid 196 Hz</div>
363+ <div>T60 100-500 Hz 4.0 s, 2-8 kHz 7.7 s</div>
364+
365+ <div class="dim">wav peak -6.7 dBFS</div>
366+ </div>
367+ <a href="../../?pushAmount=0.01">Open in simulator</a>
368+</div>
369+<div class="card">
370+ <div class="label">-10 mm (against the bow)</div>
371+ <audio controls preload="none" src="clips/push-sign-1.wav"></audio>
372+ <img src="clips/push-sign-1.png" alt="spectrogram" width="640" height="200">
373+ <div class="metrics">
374+ <div>peak 0.021 Pa (61 dB SPL)</div>
375+ <div>RMS 2.0 mPa</div>
376+ <div>centroid 114 Hz</div>
377+ <div>T60 100-500 Hz 5.1 s, 2-8 kHz 7.6 s</div>
378+
379+ <div class="dim">wav peak -13.5 dBFS</div>
380+ </div>
381+ <a href="../../?pushAmount=-0.01">Open in simulator</a>
382+</div></div>
383+</section>
290384 <p class="dim">Generated by <code>steelsim gallery</code>; parameters not listed take the simulator defaults.</p>
291385 </body></html>