The score’s master bus: an optional gain trim (dB), an optional
compressor, and the limiter — deliverable #4/#5, on by default
(limiter defaults to true; omitting master entirely still applies
it). See super::dsp::apply_limiter’s doc for why it is a hard
guarantee, not a best-effort setting.
The full synth block — Scenario::audio’s object form
(schema::scenario::AudioConfig) carries one of these directly. See
the issue’s JSON example: voices + score + master, with bpm/
beat_offset living one level up on AudioConfig (and, when absent
there, on the scenario itself — see AudioConfig::as_score’s caller in
rustmotion’s encode crate for exactly how that fallback works).
One entry of score: trigger voice once at at, or repeatedly every
every between from (default: the scenario’s start) and to
(default: the scenario’s end), phase-shifted by offset. Exactly one
of at/every must be given — Score::resolve_hits rejects an
event with neither.