5. Structure of a score, naming staff groups

A typical score hierarchy

A full score typically consists of several levels of staves and staff groupings, which can also be understood as a hierarchy of staves. We will assign each level in this hierarchy an identifier (written in red in the example). For example, the score on the left has the tree:

So, the "FullScore" consists of parallel music of the following staves/groups: "Woodwinds", "Strings", "Vocal" and "VcB". Similarly, "Choir" is a ChoirStaff and consists of the individual staves "S", "A", "T" and "B". To be able to generate such a score automatically, lilypond needs to know the structure of the tree. For this, it suffices to know the type and all children of each group, e.g. which staves/groups are direct children of "FullScore", which of "Vocal", etc. No information about the individual staves is needed yet.

5.1 How to define this hierarchy in OrchestralLily

This structure can be easily defined in OrchestralLily by calling \orchestral-score-structure with a simple list describing the hierarchy:

orchestral-score-structure #'(
  ("FullScore" "SimultaneousMusic" ("Woodwinds" "Strings" "Vocal" "VcB"))
  ("Woodwinds" "StaffGroup" ("Fl" "Ob"))
  ("Fl" "PartCombinedStaff" ("FlI" "FlII"))
  ("Ob" "PartCombinedStaff" ("ObI" "ObII"))
  ("Strings" "StaffGroup" ("Violins" "Va"))
  ("Violins" "GrandStaff" ("VI" "VII"))
  ("Vocal" "SimultaneousMusic" ("Solo" "Choir"))
  ("Solo" "SimultaneousMusic" ("SSolo" "TSolo"))
  ("Choir" "ChoirStaff" ("S" "A" "T" "B"))
  ("VcB" "StaffGroup" ("Vc"))
  ; Staff types
  ("Percussion" "RhythmicStaff" ())

Please note the apostrophe before the list! There are no apostrophes needed in front of the staff group types (because the whole is list is already quoted!).

Each entry of the list describes one grouping of staves or voices and has three possible forms:

; Staff group of given type
  ("Identifier" "StaffGroupType" ("List" "of" "child" "identifiers"))
     ; Staves connected without a bracket
  ("Identifier" "SimultaneousMusic"|"ParallelMusic" ("List" "children" ))
     ; One staff with multiple voices
  ("Identifier" "ParallelVoicesStaff" ("List" "of" "voices"))
     ; Staff with two part-combined voices
  ("Identifier" "PartCombinedStaff" ("Two" "voices"))@c
     ; Non-default staff type
  ("Identifier" "StaffType" ())
  ("Identifier" "StaffType" ("ChildVoiceName"))

The first entry creates a staff group of type StaffGroupType (e.g. StaffGroup, GrandStaff, PianoStaff, ChoirStaff), the second one (i.e. giving either "SimultaneousMusic" or "ParallelMusic" as staff type) creates parallel staves connected by a simple line, but no bracket. In lilypond syntax, this is equivalent to << Staff1 Staff2 >>. The third and fourth forms are not really staff groups, but staves containing multiple voices. The third one with #f as staff type generates a staff with multiple voices (\voiceOne, \voiceTwo, etc.), possibly with lyrics, while the fourth one with #t (for combined=##t) as staff type staff with two part-combined voices (e.g. Flute 1 and Flute 2 combined in one staff for Flute). Internally, \partcombine is used for this (with all its limitations!).

If an identifier from the list of child identifiers is not defined in that hierarchy list, it is assumed to be a simple staff.

5.2 Different staff and voice types

Lilypond supports more types than just ordinary staves: DrumStaff, FiguredBass, etc. In OrchestralLily, the type of a staff (e.g. DrumStaff, RhythmicStaff, etc.) can also be defined directly in the score structure by an entry like

; Non-default staff type
  ("Identifier" "StaffType" ())
  ("Identifier" "StaffType" ("ChildVoiceName"))

TODO: Voice types

5.3 The advantage of giving each level a name

One of the advantages of assigning each group a name is that you can now tell OrchestralLily to generate e.g. a vocal score (containing only the "Vocal" staff group). Whether you want to generate an individual instrumental score, a full score, or a score for a group of instruments, is then no difference to OrchestralLily: You simply tell OrchestralLily to generate the score for a given identifier, and you will end up with the correct PDF. If you tell OrchestralLily to build the "FullScore" score, you’ll get a score with the group named "FullScore" (which happens to be the full score), if you tell it to build "Fl", you’ll get a score with just one staff, namely the one for the flutes. Similarly, to generate a pure choral score, simply tell OrchestralLily to build the score for the "Choir" group.

Table of Contents

This document was generated by Reinhold Kainhofer on June, 4 2008 using texi2html 1.79.