Instrument simulation challenges: cymbal2#
This repository defines two 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 with its six rigid motions held, 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 and the thickness. In both, the same stick lands three times, two seconds apart: on the bell (or where the bell would be), at half the radius, and near the rim, so that the difference in sound between a ping on the bell and a crash near the rim comes out of the same equations within one seven-second recording.
| ID | Geometry | Deliverable |
|---|---|---|
| cymbal2-flat-v1 | flat annulus, 1.0 mm | 7 s mono wav, 48 kHz, float32 |
| cymbal2-crash-v1 | bow, cosine bell, taper 1.2 to 0.7 mm | 7 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.