ScoreScript Playground

ScoreScript playground

Type the music the way it prints — what comes before a note prints before it. Every note is a node.

Rust core · WebAssembly · Bravura glyphs baked in · zero dependencies · the one-page card

Source
Staff
Loading the engine…
No diagnostics yet.
What the parser saw

      
The one-page card (v0.3, the node model)
closers   [tempo · expression · text]   (articulations)   duration   NODE   [expression · text]   openers
< > ~ :|   *"Andante" (dolce) "text"      (>) (.) (..)      4 8 16    Eb'    (p) (mf) ((p))         < > ~ |:
                                          (-) (^) (!)      4. 2..    r
                                                            1/6      [Eb G Bb]
  • Every note is a node. What prints before the note is written before it; what prints after, after. Before = above the staff, after = below.
  • Duration comes first, as a number (4Eb, 8.F) or a lowercase letter (qEb); it sticks for the rest of the line.
  • Octave: a number after the pitch is explicit (E5); none means the nearest octave to the previous note; ' pushes up, , down.
  • Chords are the only thing in brackets: 2[Eb G Bb]. Marks are the only thing in parentheses: (>.) articulations, (p) dynamics, ((p)) editorial.
  • Connectors draw the figure: trailing Eb< opens a crescendo, leading <D closes it at D; ~ is a slur, or a tie when the pitch repeats.
  • The grid: declare parts once (part flute: Flute 1, instrument first — duplicates are numbered for you), then system blocks { m1-10: with one row per part and | between bars.
  • & completes the dotted note before it: q.Eb &G. Brackets also hold changes and boxes: [clef bass] [meter 3/4] [instrument piccolo] [[A]] [[12]].
  • Lines: bare lines are measures, | splits one line into several, m1: labels are optional. A full score "…" { } needs scorescript 0.3 on top.