4.4.3 Building a score from scratch (LilyPond Learning Manual)

#### 4.4.3 Building a score from scratch

After gaining some facility with writing LilyPond code, you may find that it is easier to build a score from scratch rather than modifying one of the templates. You can also develop your own style this way to suit the sort of music you like. Let’s see how to put together the score for an organ prelude as an example.

We begin with a header section. Here go the title, name of composer, etc, then come any variable definitions, and finally the score block. Let’s start with these in outline and fill in the details later.

We’ll use the first two bars of Bach’s prelude based on Jesu, meine Freude which is written for two manuals and pedal organ. You can see these two bars of music at the bottom of this section. The top manual part has two voices, the lower and pedal organ one each. So we need four music definitions and one to define the time signature and key:

    \version "2.26.0"
    \header {
      title = "Jesu, meine Freude"
      composer = "J S Bach"
    }
    keyTime = { \key c \minor \time 4/4 }
    ManualOneVoiceOneMusic = { s1 }
    ManualOneVoiceTwoMusic = { s1 }
    ManualTwoMusic = { s1 }
    PedalOrganMusic = { s1 }

    \score {
    }

For now we’ve just used a spacer note, `s1`, instead of the real music. We’ll add that later.

Next let’s see what should go in the score block. We simply mirror the staff structure we want. Organ music is usually written on three staves, one for each manual and one for the pedals. The manual staves should be bracketed together, so we need to use a `PianoStaff` for them. The first manual part needs two voices and the second manual part just one.

    \new PianoStaff <<
      \new Staff = "ManualOne" <<
        \new Voice {
          \ManualOneVoiceOneMusic
        }
        \new Voice {
          \ManualOneVoiceTwoMusic
        }
      >>  % end ManualOne Staff context
      \new Staff = "ManualTwo" <<
        \new Voice {
          \ManualTwoMusic
        }
      >>  % end ManualTwo Staff context
    >>  % end PianoStaff context

Next we need to add a staff for the pedal organ. This goes underneath the `PianoStaff`, but it must be simultaneous with it, so we need angle brackets around the two. Missing these out would generate an error in the log file. It’s a common mistake which you’ll make sooner or later! Try copying the final example at the end of this section, remove these angle brackets, and compile it to see what errors it generates.

    <<  % PianoStaff and Pedal Staff must be simultaneous
      \new PianoStaff <<
        \new Staff = "ManualOne" <<
          \new Voice {
            \ManualOneVoiceOneMusic
          }
          \new Voice {
            \ManualOneVoiceTwoMusic
          }
        >>  % end ManualOne Staff context
        \new Staff = "ManualTwo" <<
          \new Voice {
            \ManualTwoMusic
          }
        >>  % end ManualTwo Staff context
      >>  % end PianoStaff context
      \new Staff = "PedalOrgan" <<
        \new Voice {
          \PedalOrganMusic
        }
      >>
    >>

It is not necessary to use the simultaneous construct `<< … >>` for the manual two staff and the pedal organ staff, since they contain only one music expression, but it does no harm, and always using angle brackets after `\new Staff` is a good habit to cultivate in case there are multiple voices. The opposite is true for `Voice` contexts: these should habitually be followed by braces `{ … }` in case your music is coded in several variables which need to run consecutively.

Let’s add this structure to the score block, and adjust the indenting. We also add the appropriate clefs, ensure stems, ties and slurs in each voice on the upper staff point to the right direction with `\voiceOne` and `\voiceTwo`, and enter the key and time signature to each staff using our predefined variable, `\keyTime`.

    \score {
      <<  % PianoStaff and Pedal Staff must be simultaneous
        \new PianoStaff <<
          \new Staff = "ManualOne" <<
            \keyTime  % set key and time signature
            \clef "treble"
            \new Voice {
              \voiceOne
              \ManualOneVoiceOneMusic
            }
            \new Voice {
              \voiceTwo
              \ManualOneVoiceTwoMusic
            }
          >>  % end ManualOne Staff context
          \new Staff = "ManualTwo" <<
            \keyTime
            \clef "bass"
            \new Voice {
              \ManualTwoMusic
            }
          >>  % end ManualTwo Staff context
        >>  % end PianoStaff context
        \new Staff = "PedalOrgan" <<
          \keyTime
          \clef "bass"
          \new Voice {
            \PedalOrganMusic
          }
        >>  % end PedalOrgan Staff
      >>
    }  % end Score context

The above layout of the organ staves is almost perfect; however, there is a slight defect which is not visible by looking at just a single system: The distance of the pedal staff to the left hand staff should behave approximately the same as the right hand staff to the left hand staff. In particular, the stretchability of staves in a `PianoStaff` context is limited (so that the distance between the staves for the left and right hand can’t become too large), and the pedal staff should behave similarly.

Stretchability of staves can be controlled with the `staff-staff-spacing` property of the `VerticalAxisGroup` ‘graphical object’ (commonly called grob within the LilyPond documentation) – don’t worry about the details right now; this is fully explained later. For the curious, have a look at Overview of modifying properties. In this case, we want to modify the `stretchability` sub-property only. Any values not changed will use the default value. Again, for the curious, you can find the default values for the `staff-staff-spacing` property in file `scm/define-grobs.scm` by looking up the definition of the `default-staff-staff-spacing` property of the `VerticalAxisGroup` grob. The value for `stretchability` below is taken from the definition of the `StaffGrouper` grob (in file `scm/define-grobs.scm`) so that the values are identical.

    \score {
      <<  % PianoStaff and Pedal Staff must be simultaneous
        \new PianoStaff <<
          \new Staff = "ManualOne" <<
            \keyTime  % set key and time signature
            \clef "treble"
            \new Voice {
              \voiceOne
              \ManualOneVoiceOneMusic
            }
            \new Voice {
              \voiceTwo
              \ManualOneVoiceTwoMusic
            }
          >>  % end ManualOne Staff context
          \new Staff = "ManualTwo" \with {
            \override VerticalAxisGroup
                      .staff-staff-spacing.stretchability = 5
          } <<
            \keyTime
            \clef "bass"
            \new Voice {
              \ManualTwoMusic
            }
          >>  % end ManualTwo Staff context
        >>  % end PianoStaff context
        \new Staff = "PedalOrgan" <<
          \keyTime
          \clef "bass"
          \new Voice {
            \PedalOrganMusic
          }
        >>  % end PedalOrgan Staff
      >>
    }  % end Score context

That completes the structure. Any three-staff organ music will have a similar structure, although the number of voices may vary. All that remains now is to add the music, and combine all the parts together.

>     \header {
>       title = "Jesu, meine Freude"
>       composer = "J S Bach"
>     }
>     keyTime = { \key c \minor \time 4/4 }
>     ManualOneVoiceOneMusic = \relative {
>       g'4 g f ees |
>       d2 c |
>     }
>     ManualOneVoiceTwoMusic = \relative {
>       ees'16 d ees8~ 16 f ees d c8 d~ d c~ |
>       8 c4 b8 c8. g16 c b c d |
>     }
>     ManualTwoMusic = \relative {
>       c'16 b c8~ 16 b c g a8 g~ 16 g aes ees |
>       f16 ees f d g aes g f ees d ees8~ 16 f ees d |
>     }
>     PedalOrganMusic = \relative {
>       r8 c16 d ees d ees8~ 16 a, b g c b c8 |
>       r16 g ees f g f g8 c,2 |
>     }

>     \score {
>       <<  % PianoStaff and Pedal Staff must be simultaneous
>         \new PianoStaff <<
>           \new Staff = "ManualOne" <<
>             \keyTime  % set key and time signature
>             \clef "treble"
>             \new Voice {
>               \voiceOne
>               \ManualOneVoiceOneMusic
>             }
>             \new Voice {
>               \voiceTwo
>               \ManualOneVoiceTwoMusic
>             }
>           >>  % end ManualOne Staff context
>           \new Staff = "ManualTwo" \with {
>             \override VerticalAxisGroup
>                       .staff-staff-spacing.stretchability = 5
>           } <<
>             \keyTime
>             \clef "bass"
>             \new Voice {
>               \ManualTwoMusic
>             }
>           >>  % end ManualTwo Staff context
>         >>  % end PianoStaff context
>         \new Staff = "PedalOrgan" <<
>           \keyTime
>           \clef "bass"
>           \new Voice {
>             \PedalOrganMusic
>           }
>         >>  % end PedalOrgan Staff context
>       >>
>     }  % end Score context

#### See also

Music Glossary: system.

#### LilyPond Learning Manual v2.26.0 (stable-branch).

- 1 Installing
  - 1.1 Graphical setup
  - 1.2 Command line setup
- 2 Tutorial
  - 2.1 Compiling a file
  - 2.2 How to write input files
    - 2.2.1 Input characters
    - 2.2.2 Simple notation
      - Pitches
      - Durations (rhythms)
      - Rests
      - Time signature
      - Tempo marks
      - Clef
      - All together
    - 2.2.3 Working on input files
  - 2.3 Dealing with errors
  - 2.4 How to read the manuals
    - 2.4.1 Omitted material
    - 2.4.2 Clickable examples
    - 2.4.3 Overview of manuals
- 3 Common notation
  - 3.1 Single-staff notation
    - 3.1.1 Bar lines and bar checks
      - Bar lines
      - Bar checks
    - 3.1.2 Pitches and key signatures
      - Pitch alterations
      - Key signatures
      - Warning: key signatures and pitches
    - 3.1.3 Ties and slurs
      - Ties
      - Slurs
      - Phrasing slurs
      - Warnings: slurs vs. ties
    - 3.1.4 Articulations and dynamics
      - Articulations
      - Fingerings
      - Dynamics
    - 3.1.5 Adding text
    - 3.1.6 Automatic and manual beams
    - 3.1.7 Advanced rhythmic commands
      - Partial measure
      - Tuplets
      - Grace notes
  - 3.2 Multiple notes at once
    - 3.2.1 Music expressions explained
      - Analogy: mathematical expressions
      - Simultaneous music expressions: multiple staves
      - Simultaneous music expressions: single-staff
    - 3.2.2 Multiple staves
    - 3.2.3 Staff groups
    - 3.2.4 Combining notes into chords
    - 3.2.5 Single-staff polyphony
  - 3.3 Songs
    - 3.3.1 Setting simple songs
    - 3.3.2 Aligning lyrics to a melody
    - 3.3.3 Lyrics to multiple staves
  - 3.4 Final touches
    - 3.4.1 Organizing pieces with variables
    - 3.4.2 Adding titles
    - 3.4.3 Absolute note names
    - 3.4.4 After the tutorial
- 4 Fundamental concepts
  - 4.1 How LilyPond input files work
    - 4.1.1 Introduction to the LilyPond file structure
    - 4.1.2 A score is a (single) compound musical expression
    - 4.1.3 Nesting music expressions
    - 4.1.4 Structure of a note entry
    - 4.1.5 On the un-nestedness of brackets and ties
  - 4.2 Voices contain music
    - 4.2.1 I’m hearing voices
    - 4.2.2 Explicitly instantiating voices
    - 4.2.3 Voices and vocals
  - 4.3 Contexts and engravers
    - 4.3.1 Contexts explained
    - 4.3.2 Creating contexts
    - 4.3.3 Engravers explained
    - 4.3.4 Modifying context properties
    - 4.3.5 Adding and removing engravers
  - 4.4 Extending the templates
    - 4.4.1 Soprano and cello
    - 4.4.2 Four-part SATB vocal score
    - 4.4.3 Building a score from scratch
    - 4.4.4 Saving typing with variables and functions
    - 4.4.5 Scores and parts
- 5 Tweaking output
  - 5.1 Tweaking basics
    - 5.1.1 Objects and interfaces
    - 5.1.2 Naming conventions of objects and properties
    - 5.1.3 Tweaking methods
      - The `\override` command
      - The `\revert` command
      - The `\once` prefix
      - The `\tweak` and `\offset` commands
      - The `\single` prefix
  - 5.2 The Internals Reference manual
    - 5.2.1 Properties of layout objects
    - 5.2.2 Properties found in interfaces
    - 5.2.3 Types of properties
  - 5.3 Appearance of objects
    - 5.3.1 Visibility and color of objects
      - The `stencil` property
      - The `break-visibility` property
      - The `transparent` property
      - The `color` property
    - 5.3.2 Size of objects
    - 5.3.3 Length and thickness of objects
  - 5.4 Offsets and alignments
  - 5.5 Placement of objects
    - 5.5.1 Automatic behavior
    - 5.5.2 Within-staff objects
      - The `direction` property
      - Fingering
    - 5.5.3 Outside-staff objects
      - The `outside-staff-priority` property
      - The `\textLengthOn` command
      - Dynamics placement
      - Grob sizing
  - 5.6 Vertical spacing
  - 5.7 Collisions of objects
    - 5.7.1 Moving objects
    - 5.7.2 Fixing overlapping notation
      - The `padding` property
      - The `right-padding` property
      - The `staff-padding` property
      - The `self-alignment-X` property
      - The `staff-position` property
      - The `extra-offset` property
      - The `positions` property
      - The `force-hshift` property
    - 5.7.3 Real music example
  - 5.8 Further tweaking
    - 5.8.1 Other uses for tweaks
      - Tying notes across voices
      - Simulating a fermata in MIDI
    - 5.8.2 Using variables for layout adjustments
    - 5.8.3 Style sheets
    - 5.8.4 Other sources of information
    - 5.8.5 Advanced tweaks with Scheme
- Appendix A Templates
  - A.1 Built-in templates
    - A.1.1 SATB template
    - A.1.2 SSAATTBB template
  - A.2 Single staff templates
    - A.2.1 Notes only
    - A.2.2 Notes and lyrics
    - A.2.3 Notes and chords
    - A.2.4 Notes, lyrics, and chords
  - A.3 Piano templates
    - A.3.1 Solo piano
    - A.3.2 Piano and melody with lyrics
    - A.3.3 Piano-centered lyrics
  - A.4 String quartet templates
    - A.4.1 String quartet
    - A.4.2 String quartet parts
  - A.5 Vocal ensembles templates
    - A.5.1 SATB vocal score
    - A.5.2 SATB vocal score and automatic piano reduction
    - A.5.3 SATB with aligned contexts
    - A.5.4 SATB on four staves
    - A.5.5 Solo verse and two-part refrain
    - A.5.6 Hymn tunes
    - A.5.7 Psalms
  - A.6 Orchestral templates
    - A.6.1 Orchestra, choir and piano
  - A.7 Ancient notation templates
    - A.7.1 Transcription of mensural music
    - A.7.2 Gregorian transcription template
  - A.8 Other templates
    - A.8.1 Jazz combo
- Appendix B GNU Free Documentation License
- Appendix C Index