ScoreScript Language wiki

Lyrics and chord symbols

A lyric row follows its music

Write lyrics: immediately below the musical row. Separate syllables with spaces and align lyric barlines with the music's barlines.

ScoreScript sourceDownload source
4C5 D E F | 2G E
lyrics: Sing- ing a song | for you
Generated notationNotation for the preceding Lyrics and chord symbols example
Canonical spelling
4C5 D E F | 2G E
lyrics: Sing- ing a song | for you

Sing- ing divides a word across two notes. _ extends the previous syllable over the next note, * skips a note, and ~ joins two words on one note. A second lyric row, or lyrics 2:, supplies another verse.

ScoreScript sourceDownload source
4C5 D E F
lyrics: Joy _ * to~you
Generated notationNotation for the preceding Lyrics and chord symbols example
Canonical spelling
4C5 D E F
lyrics: Joy _ * to~you

Every row of one verse is one sung line, so a word divided at a system break — sus- under one row and tain- under the next — stays one word.

A multirest is one printed column even when it occupies several semantic measures. Lyric alignment counts the row's columns. The checker reports misaligned bars. A music continuation backslash does not join a lyric row to the music above it.

A map writes the same words away from the notes

A whole sung line can be written once, at the head of the part body, addressed by bar instead of by position. The syllables are identical — a map and a row reach the same lyrics.

ScoreScript sourceDownload source
scorescript 0.3
score "Praise" {
  meter 4/4
  key G

  parts {
    soprano
  }

  soprano {
    lyrics-map {
      m1: Praise to the | Lord, the Al- | might- y, the
      m4: King of cre- | a- tion!
    }

    m1-5 {
      4D4 G A B | A G F# E | D G A B | A B C D | G F# 2E
    }
  }
}
Generated notationNotation for the preceding Lyrics and chord symbols example
Canonical spelling
scorescript 0.3
score "Praise" {
  meter 4/4
  key G

  parts {
    soprano
  }

  soprano {
    lyrics-map {
      m1: Praise to the | Lord, the Al- | might- y, the
      m4: King of cre- | a- tion!
    }

    m1-5 {
      4D4 G A B | A G F# E | D G A B | A B C D | G F# 2E
    }
  }
}

An entry starts at a bar and | opens the next one. A map is sparse: the bars between two entries are simply unsung, and a word may still hyphenate across the gap. m1-3: claims three bars and the checker holds the entry to that count.

The head states only what is not the default. A bare number is the verse and vN is the voice, so lyrics-map 2 v2 { … } is the second verse sung by voice 2; a second bare map on one voice is that voice's next verse.

format --normalize lyrics=top collects the rows of a part into maps, and lyrics=inline writes the maps back as rows under the music. Both directions keep the same words in the same places.

Exceptions name their own time

Everything after lyrics: or after an entry's mN: is read as text, so a syllable can contain any glyph. A bracket at the start of a word is the one exception: it is a directive that says where the syllable after it goes.

lyrics-map {
  m20: Lord, [b2+1/2] the Al- | might- y
}
WrittenMeans
[b3]beat 3 of this bar, counted from 1 at the barline
[b2+1/2]halfway through beat 2 — exact, never rounded
[b8=3]the third eighth, when the meter's own beat is not what you are counting
[n4]the fourth attack a syllable could land on
[v2 b3]beat 3 of voice 2, for this one syllable
[_ b3]the extension running here stops at beat 3
[_]the extension holds on and nothing says where it stops

A beat may be written 2+1/2, 5/2 or 2.5; the formatter writes 2+1/2. The default beat is the meter's own denominator, so in 6/8 [b4] is the fourth eighth; write [b4.=2] to count dotted quarters.

A word whose time falls on a rest, a cue note or the middle of a held note is kept exactly where it was written and reported (lyric.unsung-anchor). Nothing is invented to carry it and it is never moved to another singer. A time nothing covers at all is lyric.no-target, and only that syllable is affected — the rest of the phrase does not shift.

A map may follow a staff instead of a voice

lyrics-map staff top {
  m1: Praise to the | Lord
}

staff top takes the highest sounding voice at each attack and staff bottom the lowest. The policy is required: a soprano/alto label or a two-note chord is not a reason to invent a second singer. Two voices attacking together at the same pitch report lyric.ambiguous-target; name the voice ([v2 b1]) and the choice is yours.

Chord symbols stand above the music

Prefix a chord symbol with @: @F7, @fm7, or @Bbmaj7. A chord symbol is text/harmony information; it does not add sounding chord notes. See chord spellings for the full implemented quality vocabulary, explicit sounding chords, and the requested compact-chord grammar.

ScoreScript sourceDownload source
@C 4C5 D E F | @G7 1G
Generated notationNotation for the preceding Lyrics and chord symbols example
Canonical spelling
@C 4C5 D E F | @G7 1G

Without @, F7 is the pitch F in octave 7. Lowercase roots can carry minor-side quality; case never substitutes for an octave. Seventh qualities include maj7, m7, mMaj7, dd7, dm7, +M7, and +m7. Extended chords use forms such as m9b5, 9#5, and 13. no5 describes an omitted fifth; it does not remove separately written pitches. Unknown suffixes can survive checking, so a successful check is not complete chord validation. See the chord reference for slash-bass and formatter limitations.

Figured bass

Figured bass appears in the element registry as an incomplete feature. The statement reader recognizes it, but the resolved model does not yet carry a complete figured-bass realization. It is not a supported finished engraving workflow. Ordinary quoted text can print figures as text, but that does not give them figured-bass semantics.