UNPKG

smoosic

Version:

<sub>[Github site](https://github.com/Smoosic/smoosic) | [source documentation](https://smoosic.github.io/Smoosic/release/docs/modules.html) | [change notes](https://aarondavidnewman.github.io/Smoosic/changes.html) | [application](https://smoosic.github.i

1,806 lines (1,805 loc) 49.3 kB
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://aarondavidnewman.github.io/Smoosic/tools/smoosic-schema.json", "$title": "Serialization of Musical Objects", "type": "object", "properties": { "metadata": { "$ref": "#/definitions/scoreModifierSchema/ScoreMetadata" }, "staves": { "type": "array", "items": { "$ref": "#/definitions/SmoSystemStaff" } }, "textGroups": { "type": "array", "items": { "$ref": "#/definitions/scoreTextSchema/SmoTextGroup" } }, "systemGroups": { "type": "array", "items": { "$ref": "#/definitions/scoreModifierSchema/SmoSystemGroup" } }, "audioSettings": { "$ref": "#/definitions/scoreModifierSchema/SmoAudioPlayerSettings" }, "layoutManager": { "$ref": "#/definitions/scoreLayoutSchema/SmoLayoutManager" }, "measureFormats": { "type": "array", "items": { "$ref": "#/definitions/scoreModifierSchema/SmoFormattingManager" } }, "columnAttributeMap": { "$rer": "#/definitions/scoreModifierSchema/ColumnParameters" } }, "definitions": { "commonSchema": { "$comment": "utility objects for description of musical objects", "stringMap": { "$comment": "create a string-string map, often used for measure to measure maps", "type": "object", "additionalProperties": { "type": "string" } }, "SmoAttrs": { "description": "describes the id of an object instance", "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "string" } }, "$required": [ "id" ] }, "Ticks": { "description": "a tuple that describes a duration of time (as in, of a rest or pitch). 4096/1 is 1/4 note", "properties": { "numerator": { "type": "number", "default": 4096 }, "denominator": { "type": "number", "default": 1 }, "remainder": { "type": "integer", "default": 0 } } }, "Pitch": { "type": "object", "properties": { "letter": { "type": "string", "default": "c" }, "accidental": { "type": "string", "default": "n" }, "octave": { "type": "integer", "default": 4 }, "cautionary": { "type": "boolean", "default": false }, "forced": { "type": "boolean", "default": false } } }, "FontInfo": { "description": "description for a font. Purpose can be used descriptively, e.g. lyrics or time signature", "type": "object", "properties": { "name": { "type": "string" }, "family": { "type": "string" }, "size": { "type": "number", "default": 12 }, "purpose": { "type": "number" }, "style": { "type": "string", "default": "normal" }, "weight": { "type": "string", "default": "normal" } } }, "SmoSelector": { "description": "a tuple that describes a location in a score: stave, measure, and optionally voice, note (tick) and pitch indices", "$comment": "tick here refers to an index of the note, and not the number of ticks. This is maybe unfortunate", "type": "object", "properties": { "staff": { "type": "integer" }, "measure": { "type": "integer" }, "tick": { "type": "integer" }, "pitches": { "type": "array", "items": { "type": "integer" } } }, "required": [ "staff", "measure" ] } }, "noteModifierSchema": { "$comment": "objects that modify a single note in a score", "SmoClefChange": { "description": "change the clef mid-measure", "type": "object", "properties": { "ctor": { "const": "SmoClefChange" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "clef": { "type": "string", "default": "treble" } }, "required": [ "ctor" ] }, "SmoGraceNote": { "type": "object", "properties": { "ctor": { "const": "SmoGraceNote" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "ticks": { "$ref": "#/definitions/commonSchema/Ticks" }, "pitches": { "type": "array", "items": { "$ref": "#/definitions/commonSchema/Pitch" } }, "flagState": { "$comment": "default is auto-stem direction", "type": "number", "default": 0 }, "noteType": { "type": "string", "default": "n" }, "beamBeats": { "type": "integer", "default": 4096 }, "endBeam": { "type": "boolean", "default": false }, "slash": { "type": "boolean", "default": false }, "clef": { "type": "string", "default": "treble" } }, "required": [ "ctor" ] }, "SmoArpeggio": { "description": "indicate an arpeggio decoration on a note", "type": "object", "properties": { "ctor": { "const": "SmoArpeggio" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "typecode": { "type": "integer", "default": 0 } }, "required": [ "ctor" ] }, "SmoMicrotone": { "description": "since microtones serve many purposes, they are treated more like ornaments than accidentals", "type": "object", "properties": { "ctor": { "const": "SmoMicrotone" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "tone": { "type": "string", "default": "flat25sz" }, "typecode": { "pitch": "number", "default": 0 } }, "required": [ "ctor" ] }, "SmoOrnament": { "type": "object", "examples": [ "mordent", "mordentInverted", "turn", "turnInverted", "trill", "upprall", "prallup", "pralldown", "upmordent", "downmordent", "lineprall", "prallprall", "scoop", "fall_short", "dropLong", "doit", "doitLong", "flip", "smear" ], "properties": { "ctor": { "const": "SmoOrnament" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "position": { "type": "string", "default": "above" }, "offset": { "type": "string", "default": "on" }, "ornament": { "type": "string", "default": "mordent" } }, "required": [ "ctor" ] }, "SmoArticulation": { "type": "object", "examples": [ "accent", "staccato", "marcato", "tenuto", "upStroke", "downStroke", "pizzicato", "fermata" ], "properties": { "ctor": { "const": "SmoArticulation" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "position": { "type": "string", "default": "above" }, "offset": { "type": "string", "default": "on" }, "articulation": { "type": "string", "default": "accent" } }, "required": [ "ctor" ] }, "SmoDynamicText": { "type": "object", "examples": [ "pp", "p", "mp", "mf", "f", "ff", "sfz" ], "properties": { "ctor": { "const": "SmoDynamicText" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "xOffset": { "type": "number", "default": 0 }, "yOffsetLine": { "type": "number", "default": 11 }, "yOffsetPixels": { "type": "number", "default": 0 }, "fontSize": { "type": "integer", "default": 30 }, "text": { "type": "string", "default": "mp" } }, "required": [ "ctor" ] }, "SmoLyric": { "type": "object", "description": "used for lyrics, chord changes, and other text annotations that apply at the note level", "properties": { "ctor": { "const": "SmoLyric" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "fontInfo": { "$ref": "#/definitions/commonSchema/FontInfo" }, "classes": { "type": "string", "default": "" }, "translateX": { "type": "integer", "default": 0 }, "translateY": { "type": "integer", "default": 0 }, "verse": { "type": "integer", "default": 0 }, "adjustNoteWidthLyric": { "type": "boolean", "default": true }, "adjustNoteWidthChord": { "type": "boolean", "default": false }, "fill": { "type": "string", "default": "" }, "parser": { "type": "integer", "default": 0 }, "text": { "type": "string", "default": "\\xa0" } }, "required": [ "ctor" ] } }, "SmoNote": { "type": "object", "description": "a note represents pitches (or rest) that occur at a certain time in the score", "properties": { "ctor": { "const": "SmoNote" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "ticks": { "$ref": "#/definitions/commonSchema/Ticks" }, "pitches": { "type": "array", "items": { "$ref": "#/definitions/commonSchema/Pitch" } }, "flagState": { "$comment": "default is auto-stem direction", "type": "number", "default": 0 }, "noteType": { "type": "string", "default": "n" }, "isCue": { "description": "indicates the note should be displayed in a smaller size, and not played", "type": "boolean", "default": "false" }, "noteHead": { "type": "string", "default": "" }, "beamBeats": { "description": "when beaming mode is auto, this determines how many ticks get a beam", "type": "integer", "default": 4096 }, "endBeam": { "type": "boolean", "default": false }, "hidden": { "description": "indicates the note takes up ticks, but is not displayed", "description": "often useful for piano parts where there are voices that don't persist the measure", "type": "boolean", "default": false }, "clef": { "type": "string", "default": "treble" }, "tupletId": { "$comment": "reference to attribute ID a tuplet, if applicable", "type": "string" }, "textModifiers": { "type": "array", "items": { "anyOf": [{ "$ref": "#/definitions/noteModifierSchema/SmoDynamicText" }, { "$ref": "#/definitions/noteModifierSchema/SmoLyric" } ] } }, "articulations": { "type": "array", "items": { "$ref": "#/definitions/noteModifierSchema/SmoArticulation" } }, "ornaments": { "type": "array", "items": { "$ref": "#/definitions/noteModifierSchema/SmoOrnament" } }, "graceNotes": { "type": "array", "items": { "$ref": "#/definitions/noteModifierSchema/SmoGraceNote" } }, "microtones": { "type": "array", "items": { "$ref": "#/definitions/noteModifierSchema/SmoMicrotone" } } }, "required": [ "ctor" ] }, "measureModifierSchema": { "description": "many modifiers affect an entire system, and some (volta) have a range of measures.", "description": "and therefore could have been staffModifiers", "SmoMeasureFormat": { "description": "change to default visual formatting within a measure or column of measures", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoMeasureFormat" }, "customStretch": { "description": "in pixels, add to the space we reserve for a measure", "type": "number", "default": 0 }, "proportionality": { "description": "proportionality constant, higher numbers make shorter notes more 'clustered'", "type": "number" }, "autoJustify": { "description": "turn off vertical justification for this measure/system", "type": "boolean", "default": false }, "systemBreak": { "description": "line break system before this measure", "type": "boolean", "default": false }, "pageBreak": { "description": "break page before this measure", "type": "boolean", "default": false }, "restBreak": { "description": "force break of a multi-measure rest in parts", "type": "boolean", "default": false }, "skipMeasureCount": { "description": "skip measure count, if system measure count is set for the score", "type": "boolean", "default": false }, "padLeft": { "description": "pixels of left padding before starting this measure", "type": "number", "default": 0 }, "padAllInSystem": { "description": "indicates left padding applies to system", "type": "boolean", "default": false } } }, "SmoBarlineEnum": { "enum": [ "singleBar", "doubleBar", "endBar", "startRepeat", "endRepeat", "noBar" ] }, "SmoBarlinePosition": { "enum": [ "start", "end" ] }, "SmoBarline": { "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoBarline" }, "position": { "type": "number", "default": 0 } }, "barline": { "position": { "type": "number", "default": 0 } } }, "SmoRepeatSymbolEnum": { "enum": [ "None", "Coda", "Segno", "Dc", "ToCoda", "DcAlCoda", "DcAlFine", "Ds", "DsAlCoda", "DsAlFine", "Fine" ] }, "SmoRepeatSymbol": { "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoRepeatSymbol" }, "position": { "type": "number", "default": 0 } }, "barline": { "symbol": { "type": "number", "default": 0 } } }, "SmoVolta": { "$comment": "first, second ending, etc.", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoVolta" }, "startBar": { "type": "number", "default": 0 }, "endBar": { "type": "number", "default": 0 }, "xOffsetStart": { "type": "number", "default": 0 }, "xOffsetEnd": { "type": "number", "default": 0 }, "yOffset": { "type": "number", "default": 0 }, "number": { "type": "number", "default": 0 } } }, "HorizontalJustificationEnum": { "enum": [ "left", "right", "center", "centerStem" ] }, "SmoMeasureTextPositionEnum": { "enum": [ "above", "below", "left", "right", "none" ] }, "SmoMeasureText": { "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoMeasureText" }, "position": { "type": "number", "default": 0 }, "fontInfo": { "$ref": "#/definitions/commonSchema/FontInfo", "default": 0 }, "text": { "type": "string", "default": 0 }, "adjustX": { "type": "number", "default": 0 }, "adjustY": { "type": "number", "default": 0 }, "number": { "type": "number", "justification": 0 } } }, "SmoRehearsalMarkCardinalityEnum": { "enum": [ "capitals", "lowerCase", "numbers" ] }, "SmoRehearsalMark": { "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoRehearsalMark" }, "symbol": { "type": "string", "default": "A" }, "cardinality": { "type": "number", "default": 0 }, "increment": { "type": "boolean", "default": true } } }, "SmoTempoModeEnum": { "enum": [ "duration", "text", "custom" ] }, "SmoTempoText": { "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoTempoText" }, "tempoMode": { "type": "string", "default": "duration" }, "bpm": { "type": "number", "default": 120 }, "beatDuration": { "type": "number", "default": 4096 }, "tempoText": { "type": "string", "default": "allegro" }, "customText": { "type": "string", "default": "" }, "display": { "type": "boolean", "default": false } } }, "TimeSignature": { "$comment": "maybe should be SmoTimeSignature?", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "TimeSignature" }, "actualBeats": { "type": "number", "default": 4 }, "beatDuration": { "type": "number", "default": 4 }, "useSymbol": { "type": "boolean", "default": false }, "displayString": { "type": "string", "default": "" }, "display": { "type": "boolean", "default": true } } } }, "tupletSchema": { "description": "tuplets are containers of notes, like measures. So they have their own place in the schema", "SmoTupletNote": { "description": "used as a reference to a note within a tuplet", "ticks": { "$ref": "#/definitions/commonSchema/Ticks" }, "noteId": { "type": "string" }, "tupletId": { "type": "string" } }, "SmoTuplet": { "description": "triplet, etc.", "type": "object", "properties": { "ctor": { "const": "SmoTuplet" }, "id": { "type": "string" }, "notes": { "$comment": "measure contains both tuplets and notes, referenced via note ID and tuplet ID", "type": "array", "items": { "$ref": "#/definitions/tupletSchema/SmoTupletNote" } }, "numNotes": { "type": "number", "default": 3 }, "stemTicks": { "type": "number", "default": 2048 }, "totalTicks": { "type": "number", "default": 4096 }, "durationMap": { "type": "array", "items": { "type": "number" } }, "ratioed": { "type": "boolean", "default": false }, "bracketed": { "type": "boolean", "default": true }, "voice": { "type": "number", "default": 0 }, "startIndex": { "type": "number", "default": 0 } } } }, "SmoVoice": { "description": "A voice is just a container for notes. A measure can contain multiple voices.", "type": "object", "required": [ "notes" ], "properties": { "notes": { "type": "array", "items": { "$ref": "#/definitions/SmoNote" } } } }, "SmoMeasure": { "description": "All the information contained in a single measure of music", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoMeasure" }, "timeSignature": { "$ref": "#/definitions/measureModifierSchema/TimeSignature" }, "keySignature": { "type": "string", "default": "c" }, "lines": { "type": "number", "default": 5 }, "clef": { "type": "string", "default": "treble" }, "tempo": { "$ref": "#/definitions/measureModifierSchema/SmoTempoText" }, "format": { "$ref": "#/definitions/measureModifierSchema/TimeSignature" }, "tuplets": { "type": "array", "items": { "$ref": "#/definitions/tupletSchema/SmoTuplet" } }, "voices": { "type": "array", "items": { "$ref": "#/definitions/SmoVoice" } }, "repeatSymbol": { "$comment": "indicates the measure contents are replaced with a repeat symbol", "type": "boolean", "default": false }, "repeatCount": { "$comment": "if repeatSymbol, indicates the number of measures", "type": "number", "default": 0 }, "modifiers": { "type": "array", "items": { "anyOf": [{ "$ref": "#/definitions/measureModifierSchema/SmoRepeatSymbol" }, { "$ref": "#/definitions/measureModifierSchema/SmoBarline" }, { "$ref": "#/definitions/measureModifierSchema/SmoMeasureText" } ] } } } }, "staffModifierSchema": { "$comment": "Here start staff modifiers.", "$comment": "All staff modifiers contain a range of the score that they apply to.", "SmoInstrument": { "description": "an instrument configuration for a part. A single instrument is", "description:": "active at any given time on a stave or part", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoInstrument" }, "startSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "endSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "family": { "type": "string" }, "instrument": { "type": "string" }, "abbreviation": { "type": "string" }, "keyOffset": { "type": "integer" }, "midiInstrument": { "type": "integer" }, "midichannel": { "type": "integer" }, "midiport": { "type": "integer" }, "clef": { "type": "string" }, "mutes": { "type": "string" } } }, "SmoStaffTextBracket": { "description": "a line of text that spans some measures", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoStaffTextBracket" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "startSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "endSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "position": { "$comment": "-1 bottom, 1 top", "type": "number", "default": 0 }, "text": { "type": "string", "default": "" }, "superscript": { "type": "string", "default": "" } } }, "SmoStaffHairpin": { "description": "crescendo, dimenuendo, etc", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoStaffHairpin" }, "startSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "endSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "xOffsetLeft": { "type": "number", "default": -2 }, "xOffsetRight": { "type": "number", "default": 0 }, "yOffset": { "type": "number", "default": -50 }, "height": { "type": "number", "default": 10 }, "position": { "type": "integer", "default": 0 }, "hairpinType": { "type": "integer", "default": 0 } } }, "SmoSlur": { "description": "A phrase curve between measures", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoSlur" }, "startSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "endSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "spacing": { "type": "number", "default": 2 }, "thickness": { "type": "number", "default": 2 }, "xOffset": { "type": "number", "default": -2 }, "cp1x": { "type": "number", "default": -2 }, "cp1y": { "type": "number", "default": -2 }, "cp2x": { "type": "number", "default": -2 }, "cp2y": { "type": "number", "default": -2 }, "yOffset": { "type": "number", "default": -50 }, "position": { "type": "integer", "default": 0 }, "position_end": { "type": "integer", "default": 0 } } }, "SmoTieLine": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "type": "number" }, "to": { "type": "number" } } }, "SmoTie": { "description": "A phrase curve between measures", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoTie" }, "startSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "endSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "tie_spacing": { "type": "number", "default": 2 }, "cp1": { "type": "number", "default": -2 }, "cp2": { "type": "number", "default": -2 }, "first_x_shift": { "type": "number" }, "cp2y": { "type": "number", "default": -2 }, "yOffset": { "type": "number", "default": -50 }, "position": { "type": "integer", "default": 0 }, "position_end": { "type": "integer", "default": 0 }, "lines": { "type": "array", "items": { "$ref": "#/definitions/staffModifierSchema/SmoTieLine" } } } } }, "scoreLayoutSchema": { "$comment": "SmoGlobalLayout, SmoPageLayout, and SmoLayoutManager are technically score modifiers. But we have independent", "$comment": "layouts for parts vs. the score, so we need to define these before we define parts", "$comment": "the same thing can be said of score text classes", "SmoGlobalLayout": { "description": "layout describes the physical media on which the music is visually rendered.", "type": "object", "properties": { "svgScale": { "description": "This is the scaling of the music, independent of the container. i.e., smaller value means smaller notes", "type": "number", "default": 0.55 }, "zoomScale": { "description": "the scaling of the physical media (zoom level)", "type": "number", "default": 2.0 }, "noteSpacing": { "$comment": "additional pixels reserved between notes", "type": "number", "default": 1 }, "pageWidth": { "$comment": "default is US letter", "type": "number", "default": 816 }, "pageHeight": { "$comment": "default is US letter", "type": "number", "default": 1056 }, "proportionality": { "$comment": "formatting constant, higher makes short notes more clustered", "type": "number", "default": 5 }, "maxMeasureSystem": { "$comment": "automatic system break. 0 means break is based on measure width", "type": "number", "default": 0 } } }, "SmoPageLayout": { "$comment": "everything in pixels", "type": "object", "properties": { "leftMargin": { "type": "number", "default": 30 }, "rightMargin": { "type": "number", "default": 30 }, "topMargin": { "type": "number", "default": 144 }, "bottomMargin": { "type": "number", "default": 72 }, "interGap": { "$comment": "between systems", "type": "number", "default": 30 }, "intraGap": { "$comment": "between staves in a system", "type": "number", "default": 10 } } }, "SmoLayoutManager": { "description": "the overall physical layout of the music on the media", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoLayoutManager" }, "globalLayout": { "$ref": "#/definitions/scoreLayoutSchema/SmoGlobalLayout" }, "pageLayout": { "$ref": "#/definitions/scoreLayoutSchema/SmoPageLayout" } } } }, "scoreTextSchema": { "$comment": "here start the score text classes.", "description": "Score text necessarily is not associated with a musical element, e.g. page footers and headers", "description": "They can be attached to a point in the score (SmoSelector) but not an individual note", "description": "pagination settings", "SmoScoreText": { "description": "SmoScoreText is a single line of text, with a single font, at a point on a page.", "description": "SmoScoreText instances are combined into a SmoTextGroup defined below", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoScoreText" }, "x": { "type": "number", "default": 0 }, "y": { "type": "number", "default": 0 }, "width": { "$comment": "this can usually be ignored, as it is determined by the bounding box and font", "type": "number" }, "height": { "$comment": "this can usually be ignored, as it is determined by the bounding box and font", "type": "number" }, "fontInfo": { "$ref": "#/definitions/commonSchema/FontInfo" }, "fill": { "type": "string" }, "classes": { "type": "string" } } }, "SmoTextGroupPositionEnum": { "$comment": "positions in a group for multiple SmoText instances", "enum": [ "ABOVE", "BELOW", "LEFT", "RIGHT" ] }, "SmoTextGroupPaginationEnum": { "description": "for page-oriented text like title, footer etc", "enum": [ "EVERY", "EVEN", "ODD", "ONCE", "SUBSEQUENT" ] }, "SmoTextBlock": { "description": "a SmoScoreText in a SmoTextGroup", "text": { "$ref": "#/definitions/scoreTextSchema/SmoScoreText" }, "position": { "description": "one of SmoTextGroupPositionEnum", "type": "number", "default": 0 } }, "SmoTextGroup": { "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoTextGroup" }, "attrs": { "$ref": "#/definitions/commonSchema/SmoAttrs" }, "justification": { "type": "number", "default": 0 }, "relativePosition": { "type": "number", "default": 0 }, "purpose": { "description": "This can be used by applications to identify a text group as a certain role, e.g. title", "type": "string" }, "pagination": { "type": "number", "default": 0 }, "spacing": { "description": "this is the spacing between text blocks", "type": "number", "default": 2 }, "attachToSelector": { "description": "indicates the text group is attached to a musical element", "type": "boolean" }, "selector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "textBlocks": { "type": "array", "items": { "$ref": "#/definitions/scoreTextSchema/SmoTextBlock" } } } } }, "SmoPartInfo": { "description": "A part is a mini-score involving one or more staves. Parts can have their own text and layout settings.", "description": "a SmoSystemStaff will contain a part. Parts split between staves should be the same for each stave, except for the ", "description": "stavesBefore or stavesAfter field.", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoPartInfo" }, "partName": { "type": "string" }, "partAbbreviation": { "type": "string" }, "layoutManager": { "$ref": "#/definitions/scoreLayoutSchema/SmoLayoutManager" }, "measureFormatting": { "type": "object", "additionalProperties": { "$ref": "#/definitions/scoreLayoutSchema/SmoLayoutManager" } }, "textGroups": { "type": "array", "items": { "$ref": "#/definitions/scoreTextSchema/SmoTextGroup" } }, "stavesAfter": { "type": "number" }, "stavesBefore": { "type": "number" }, "preserveTextGroups": { "description": "indicates part should use different text groups than the score.", "description": " this is almost always what you want", "description": "Smotocol doesn't specify how to share text between score and parts, but you could do it with 'Purpose'", "type": "boolean", "default": true }, "cueInScore": { "description": "indicates cue size in score, like in a concerto", "type": "boolean", "default": false }, "midiDevice": { "type": "string" }, "midiInstrument": { "type": "object", "properties": { "channel": { "type": "number" }, "patch": { "type": "number" }, "volume": { "type": "number" }, "pan": { "type": "number" } } }, "expandMultimeasureRests": { "description": "if false, block rests are the default", "type": "boolean" } } }, "SmoSystemStaff": { "description": "a measure container representing a stave in the system, throughout the score", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoSystemStaff" }, "staffId": { "type": "integer" }, "partInfo": { "$ref": "#/definitions/SmoPartInfo" }, "keySignatureMap": { "$ref": "#/definitions/commonSchema/stringMap" }, "measureInstrumentMap": { "type": "object", "additionalProperties": { "$ref": "#/definitions/staffModifierSchema/SmoInstrument" } }, "measures": { "type": "array", "items": { "$ref": "#/definitions/SmoMeasure" } }, "textBrackets": { "type": "array", "items": { "$ref": "#/definitions/staffModifierSchema/SmoStaffTextBracket" } }, "modifiers": { "type": "array", "items": { "anyOf": [{ "$ref": "#/definitions/staffModifierSchema/SmoStaffHairpin" }, { "$ref": "#/definitions/staffModifierSchema/SmoSlur" }, { "$ref": "#/definitions/staffModifierSchema/SmoTie" } ] } } } }, "scoreModifierSchema": { "SmoScorePreferences": { "$comment": "overrides for UI behavior", "type": "object", "properties": { "autoPlay": { "type": "boolean", "default": "true" }, "autoAdvance": { "type": "boolean", "default": "true" }, "showPiano": { "type": "boolean", "default": "false" }, "hideEmptyLines": { "type": "boolean", "default": "false" }, "transposingScore": { "type": "boolean", "default": "false" }, "defaultDupleDuration": { "type": "integer", "default": 4096 }, "defaultTripleDuration": { "type": "integer", "default": 6144 } } }, "SmoScoreInfo": { "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" }, "subTitle": { "type": "string" }, "composer": { "type": "string" }, "copyright": { "type": "string" }, "version": { "type": "integer" } } }, "ScoreMetadata": { "type": "object", "properties": { "fonts": { "type": "array", "items": { "$ref": "#/definitions/commonSchema/FontInfo" } }, "preferences": { "$ref": "#/definitions/scoreModifierSchema/SmoScorePreferences" }, "renumberingMap": { "$comment": "number to number map. May also be serialized as strings", "$ref": "#/definitions/commonSchema/stringMap" }, "scoreInfo": { "$ref": "#/definitions/scoreModifierSchema/SmoScoreInfo" } } }, "SmoFormattingManager": { "description": "not really a class, but a map of measure formats to parts, persisted in the score", "type": "object", "properties": { "partIndex": { "type": "number" }, "measureFormats": { "type": "array", "items": { "$ref": "#/definitions/measureModifierSchema/SmoMeasureFormat" } } } }, "SmoAudioPlayerSettings": { "description": "a very minimal configuration for global audio settings", "type": "object", "required": ["ctor"], "properties": { "ctor": { "const": "SmoAudioPlayerSettings" }, "playerType": { "description": "either 'sampler' or 'string'", "type": "string" }, "reverbEnable": { "type": "boolean" }, "reverbDelay": { "type": "number" }, "reverbDecay": { "type": "number" } } }, "SmoSystemGroup": { "description": "a grouping of staves within the full score. Applications may format these vertically, and implement visual grouping", "type": "object", "required": [ "ctor" ], "properties": { "ctor": { "const": "SmoSystemGroup" }, "leftConnector": { "type": "number" }, "rightConnector": { "type": "number" }, "justify": { "description": "indicates whether to justify the staves in this group", "type": "boolean" }, "startSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" }, "endSelector": { "$ref": "#/definitions/commonSchema/SmoSelector" } } }, "ColumnParameters": { "definition": "keep track of sparsely mapped measure and staff parameters for score serialization", "type": "object", "properties": { "keySignature": { "$ref": "#/definitions/commonSchema/stringMap" }, "renumberingMap": { "$ref": "#/definitions/commonSchema/stringMap" }, "timeSignature": { "type": "object", "additionalProperties": { "$ref": "#/definitions/measureModifierSchema/TimeSignature" } }, "tempo": { "type": "object", "additionaProperties": { "$ref": "#/definitions/measureModifierSchema/SmoTempoText" } } } } } } }