Instrument simulation challenges: cymbal2#
This repository defines four simulation challenges on one geometrically nonlinear thin-shell model of a 16 inch crash cymbal struck by a drum stick, and publishes the comparison of every registered solution at challenges/cymbal2/site. It follows the arrangement of the string, plate and cymbal repositories: the model is defined in the continuum, solutions live in separate registered repositories, and the shared challenge-tools package scores them against a reference chosen from among the submissions.
The model is defined once, in MODEL.md: a shallow shell with in-plane inertia, Saint Venant-Kirchhoff through the thickness, Kelvin-Voigt and mass-proportional damping, free at both edges, struck by a point mass through a Hertz contact, radiating to a listener 1.5 m away through the Rayleigh integral. Each challenge fixes the profile, the thickness and the strike point. Three of the four share the cymbal's geometry (a paraboloidal bow, a cosine-dome bell around the mounting hole, and a thickness that tapers from the bell to the rim) and differ only in where the stick lands, so that the difference in sound between a crash near the rim and a ping on the bell comes out of the same equations; the fourth is a flat annulus of uniform thickness, as a baseline.
| ID | Geometry | Strike point | Deliverable |
|---|---|---|---|
| cymbal2-flat-v1 | flat annulus, 1.0 mm | 0.85 R | 6 s mono wav, 48 kHz, float32 |
| cymbal2-rim-v1 | bow, bell, taper 1.2 to 0.7 mm | 0.85 R | 6 s mono wav, 48 kHz, float32 |
| cymbal2-mid-v1 | bow, bell, taper 1.2 to 0.7 mm | 0.5 R | 6 s mono wav, 48 kHz, float32 |
| cymbal2-bell-v1 | bow, bell, taper 1.2 to 0.7 mm | on the bell, 35 mm | 6 s mono wav, 48 kHz, float32 |
Each challenge lives in challenges/<challenge-id>/ as a README.md, which together with MODEL.md is the specification, and a challenge.json with the parameters, output format, error measures and field-export grid in machine-readable form. The stick parameters and the output scales are provisional until the first solutions have been heard; once a solution is published, a challenge is never changed, and a corrected model gets a new ID.
Solution repositories and the registry#
The repositories that take part in the comparison are listed in registry/solution-repos.json. To register one, open a pull request adding an entry (repository, branch, path of its solutions directory). A solution repository contains solutions/<challenge-id>/<submission-id>.json files following the submission schema, with wav files beside them or at URLs, and optionally field exports. The comparison workflow clones every registered repository at the head of its branch and runs on any push to this repository or when dispatched by hand (mochi workflow run .mochi/workflows/results.yml --repo challenges/cymbal2).
Scoring#
Every solution is compared with the reference under the two error measures of MODEL.md; the spectrogram error ranks, because the response is chaotic and waveforms of equally good solutions diverge within the first tenth of a second. The reference is chosen automatically from the accuracy orderings that submissions assert about their own solutions, by the rule described in the string repository README and implemented in challenge-tools. A challenge may override the choice by naming a solution in reference_solution in its challenge.json.