Changelog: the arrangement export
Format versions (exportVersion), newest first. Each lists what changed for a reader. Releases of Signals & Sorcery's arrangement semantics (contractVersion) are listed under the format version that was current then, with what they changed in an export's audio or meaning, or "nothing".
1.2.0
Optional fields only, so 1.0 and 1.1 readers keep working.
Added:
score: the arrangement resolved for a reader. It holds:- the tempo map, the meter map and the bar grid;
- the sections with their scenes;
- per layer: its role, bucket and drum piece, where it sounds (spans with level and fades), the effects placed on it, and, when asked, its notes in frames.
See Score.
scoreHash: SHA-256 of the score's payload. It changes with what the layers play, notes included. See Change detection.options.scoreandoptions.scoreNotes: whether the export wrote the score, and whether the score includes the notes.The schema for 1.2.0, and
v1/schema.json: the latest 1.x, which every 1.x file validates against.
Changed: nothing. timingHash and arrangementHash cover exactly what they did.
1.1.0
Optional fields only, so a 1.0 reader keeps working.
Added:
$schema: the exact schema version's URL.exportVersion: this format's version.exportId: a UUID per export.arrangement.revision{seq, docHash}: which edit of the arrangement the export was made from.arrangement.endFrame: the last bar's end, insampleRateframes.timingHash,arrangementHash: one comparison tells a re-timing from a re-arrangement from a re-render. See Change detection.files[].layerIds: the layers a stem carries.files[].startFrame(always 0) andfiles[].latencyMs(known uncompensated latency, 0).options.pathFree: leave every absolute path out.options.destinationandmaster.input.path/master.output.pathbecome optional in the schema (absent withpathFree).
Changed:
files[].filealways uses/as its separator. It used the operating system's.
Documented for the first time (no behaviour change): the specification, the JSON Schemas for 1.0.0 and 1.1.0, and fixtures for every rule in SPEC.md.
Arrangement releases while 1.1.0 was current:
- 0.11.0 (2026-10-10): alternatives groups (a vocal reading's takes, a kit's fills) play one unit per section, by the section's position or picked; the others rest. A scene's fills, which played in every section, now rotate. The format didn't change;
arrangementHashchanges for arrangements with groups, because what plays changed. See Alternatives (takes).
1.0.0 (2026-10-04)
The first versioned shape. Compared with the exports before it:
- Added the top-level
name: the export's name, and the base of its folder and file names. tailgainedmode:{mode: "auto", capSeconds, floorDbfs}or{mode: "fixed", seconds}.optionsgainednameandtail.
Arrangement releases while 1.0.0 was current:
- 0.10.0 (2026-10-08): the Arrange view's row order is saved with the arrangement. It is view state, so nothing in an export changes.
- 0.9.0 (2026-10-08): scene gains ("Normalize kick levels"). A scene's gain now adds to every lane of its layers wherever they play, so exported levels follow it. The format didn't change.
- 0.8.0 (2026-10-02, already current when 1.0.0 began): mute and solo in the arrangement. A silenced layer is left out of the mix and the master, and gets no stem.
Before 1.0.0 (2026-09-29 to 2026-10-03, unversioned)
- No top-level
name.tailwas{capSeconds, floorDbfs}(always automatic).optionshad nonameortail. These files don't validate against the 1.0.0 schema. Read their tail asmode: "auto". - Changes in meaning during that period:
- placed effects and exact run edges rendered into the audio (2026-09-29);
- arrangement audio no longer silent at tempos where a beat isn't a whole number of frames (0.7.1, 2026-10-02);
- silenced layers get no stem, and only the arrangement's own mute and solo count (2026-10-02 and 10-03).
The format itself: Arrangement export format. The source: github.com/shiehn/sas-arrangement-export-contract.