Specify the Score Bundle Format, and make tempo an integer
The bundle is documented as a standalone format rather than as a note between two programs: producers and consumers are generic, the marker vocabulary is defined musically rather than by what a viewer does with it, and image properties are stated as guarantees with the reasoning where it is not obvious. Anything that reads scores can implement it without knowing this tool exists. Taking that view changed the substance in three places. Marker types now carry their musical meaning rather than a UI mapping. The rule against re-importing became a statement about identity - indices mean something only within one bundle, so two bundles of a piece are independent documents. And forward-compatibility rules were added, which a protocol needs and a handover note did not: ignore unknown fields and marker types, refuse an unknown version. Tempo is now an integer, beats per minute, exported as a JSON number and omitted when blank; the editor accepts digits only. A figure can drive a metronome or a click track where a verbal marking cannot, and readers do not agree on what Andante means. This needs the consumer's column changed from free-form text, which the format document flags. Every figure in the document comes from a real export.
This commit is contained in:
+9
-3
@@ -343,13 +343,19 @@ Otherwise: plain zip, no manifest beyond this, no checksums, hand-fixable.
|
||||
Python's `zipfile` is stdlib; the import side needs one zero-dep library
|
||||
(`fflate`), since Bun has zlib but no zip reader.
|
||||
|
||||
**Contents:** slices, markers, the original PDF, and song-level text metadata
|
||||
(title, subtitle, composer, original artist, arranger, lyricist, translator,
|
||||
**Contents:** slices, markers, the original PDF, and song-level metadata (title,
|
||||
subtitle, composer, original artist, arranger, lyricist, translator, tempo,
|
||||
voice list). Metadata is included not because the slicer transforms it but
|
||||
because you have to read the title block anyway to mark the header slice
|
||||
discarded — typing eight fields while it's on screen beats reopening the PDF
|
||||
discarded — typing the fields while it's on screen beats reopening the PDF
|
||||
later.
|
||||
|
||||
**Title is required**; everything else is optional and omitted when blank.
|
||||
**Tempo is an integer**, beats per minute — a number can drive a metronome and
|
||||
a starting-chord playback where *Andante* cannot, and two people will not agree
|
||||
what *Andante* means. noteman's column is currently free-form text and needs
|
||||
changing; see [`bundle-format.md`](bundle-format.md).
|
||||
|
||||
Rehearsal MIDI and MP3s are deliberately out of the first bundle.
|
||||
|
||||
### One rule for the import side
|
||||
|
||||
Reference in New Issue
Block a user