lilypond-learning: I'm hearing Voices
3.2.1 I’m hearing Voices
------------------------
The lowest, most fundamental or innermost layers in a LilyPond score are
called ‘Voice contexts’ or just ‘Voices’ for short. Voices are
sometimes called ‘layers’ in other notation packages.
In fact, a Voice layer or context is the only one which can contain
music. If a Voice context is not explicitly declared one is created
automatically, as we saw at the beginning of this chapter. Some
instruments such as an Oboe can play only one note at a time. Music
written for such instruments requires just a single voice. Instruments
which can play more than one note at a time like the piano will often
require multiple voices to encode the different concurrent notes and
rhythms they are capable of playing.
A single voice can contain many notes in a chord, of course, so when
exactly are multiple voices needed? Look first at this example of four
chords:
\key g \major
<d g>4 <d fis> <d a'> <d g>
[image src="" alt="[image of music]" text="image of music" ]
This can be expressed using just the single angle bracket chord
symbols, ‘< ... >’, and for this just a single voice is needed. But
suppose the F-sharp were actually an eighth-note followed by an
eighth-note G, a passing note on the way to the A? Now we have two notes
which start at the same time but have different durations: the
quarter-note D and the eighth-note F-sharp. How are these to be coded?
They cannot be written as a chord because all the notes in a chord must
have the same duration. And they cannot be written as two sequential
notes as they need to start at the same time. This is when two voices
are required.
Let us see how this is done in LilyPond input syntax.
The easiest way to enter fragments with more than one voice on a
staff is to enter each voice as a sequence (with ‘{ ... }’), and combine
them simultaneously with angle brackets, ‘<< ... >>’. The fragments
must also be separated with double backward slashes, ‘\\’, to place them
in separate voices. Without these, the notes would be entered into a
single voice, which would usually cause errors. This technique is
particularly suited to pieces of music which are largely homophonic with
occasional short sections of polyphony.
Here’s how we split the chords above into two voices and add both the
passing note and a slur:
\key g \major
% Voice "1" Voice "2"
<< { g4 fis8( g) a4 g } \\ { d4 d d d } >>
[image src="" alt="[image of music]" text="image of music" ]
Notice how the stems of the second voice now point down.
Here’s another simple example:
\key d \minor
% Voice "1" Voice "2"
<< { r4 g g4. a8 } \\ { d,2 d4 g } >> |
<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> |
<< { a2. r4 } \\ { fis2. s4 } >> |
[image src="" alt="[image of music]" text="image of music" ]
It is not necessary to use a separate ‘<< \\ >>’ construct for each
bar. For music with few notes in each bar this layout can help the
legibility of the code, but if there are many notes in each bar it may
be better to split out each voice separately, like this:
\key d \minor
<< {
% Voice "1"
r4 g g4. a8 |
bes4 bes c bes |
a2. r4 |
} \\ {
% Voice "2"
d,2 d4 g |
g4 g g8( a) g4 |
fis2. s4 |
} >>
[image src="" alt="[image of music]" text="image of music" ]
This example has just two voices, but the same construct may be used
to encode three or more voices by adding more back-slash separators.
The Voice contexts bear the names ‘"1"’, ‘"2"’, etc. The first
contexts set the _outer_ voices, the highest voice in context ‘"1"’ and
the lowest voice in context ‘"2"’. The inner voices go in contexts
‘"3"’ and ‘"4"’. In each of these contexts, the vertical direction of
slurs, stems, ties, dynamics etc., is set appropriately.
\new Staff \relative c' {
% Main voice
c16 d e f
% Voice "1" Voice "2" Voice "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >> |
<< { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> |
}
[image src="" alt="[image of music]" text="image of music" ]
These voices are all separate from the main voice that contains the
notes just outside the ‘<< ... >>’ construct. Let’s call this the
_simultaneous construct_. Slurs and ties may only connect notes within
the same voice, so slurs and ties cannot go into or out of a
simultaneous construct. Conversely, parallel voices from separate
simultaneous constructs on the same staff are the same voice. Other
voice-related properties also carry across simultaneous constructs.
Here is the same example, with different colors and note heads for each
voice. Note that changes in one voice do not affect other voices, but
they do persist in the same voice later. Note also that tied notes may
be split across the same voices in two constructs, shown here in the
blue triangle voice.
\new Staff \relative c' {
% Main voice
c16 d e f
<< % Bar 1
{
\voiceOneStyle
g4 f e
}
\\
{
\voiceTwoStyle
r8 e4 d c8~
}
>> |
<< % Bar 2
% Voice 1 continues
{ d2 e }
\\
% Voice 2 continues
{ c8 b16 a b8 g~ g2 }
\\
{
\voiceThreeStyle
s4 b c2
}
>> |
}
[image src="" alt="[image of music]" text="image of music" ]
The commands ‘\voiceXXXStyle’ are mainly intended for use in
educational documents such as this one. They modify the color of the
note head, the stem and the beams, and the style of the note head, so
that the voices may be easily distinguished. Voice one is set to red
diamonds, voice two to blue triangles, voice three to green crossed
circles, and voice four (not used here) to magenta crosses;
‘\voiceNeutralStyle’ (also not used here) reverts the style back to the
default. We shall see later how commands like these may be created by
DONTPRINTYET the user. See Visibility and color of objects and *noteUsing
DONTPRINTYET the user. See Visibility and color of objects and Using
variables for layout adjustments.
Polyphony does not change the relationship of notes within a
‘\relative’ block. Each note is still calculated relative to the note
immediately preceding it, or to the first note of the preceding chord.
So in
\relative c' { noteA << < noteB noteC > \\ noteD >> noteE }
‘noteB’ is relative to ‘noteA’
‘noteC’ is relative to ‘noteB’, not ‘noteA’;
‘noteD’ is relative to ‘noteB’, not ‘noteA’ or ‘noteC’;
‘noteE’ is relative to ‘noteD’, not ‘noteA’.
An alternative way, which may be clearer if the notes in the voices
are widely separated, is to place a ‘\relative’ command at the start of
each voice:
\relative c' { noteA ... }
<<
\relative c'' { < noteB noteC > ... }
\\
\relative g' { noteD ... }
>>
\relative c' { noteE ... }
Let us finally analyze the voices in a more complex piece of music.
Here are the notes from the first two bars of the second of Chopin’s
Deux Nocturnes, Op 32. This example will be used at later stages in
this and the next chapter to illustrate several techniques for producing
notation, so please ignore for now anything in the underlying code which
looks mysterious and concentrate just on the music and the voices – the
complications will all be explained in later sections.
[image src="" alt="[image of music]" text="image of music" ]
The direction of the stems is often used to indicate the continuity
of two simultaneous melodic lines. Here the stems of the highest notes
are all pointing up and the stems of the lower notes are all pointing
down. This is the first indication that more than one voice is
required.
But the real need for multiple voices arises when notes which start
at the same time have different durations. Look at the notes which
start at beat three in the first bar. The A-flat is a dotted quarter
note, the F is a quarter note and the D-flat is a half note. These
cannot be written as a chord as all the notes in a chord must have the
same duration. Neither can they be written as sequential notes, as they
must start at the same time. This section of the bar requires three
voices, and the normal practice would be to write the whole bar as three
voices, as shown below, where we have used different note heads and
colors for the three voices. Again, the code behind this example will
be explained later, so ignore anything you do not understand.
[image src="" alt="[image of music]" text="image of music" ]
Let us try to encode this music from scratch. As we shall see, this
encounters some difficulties. We begin as we have learnt, using the ‘<<
\\ >>’ construct to enter the music of the first bar in three voices:
\new Staff \relative c'' {
\key aes \major
<<
{ c2 aes4. bes8 } \\ { <ees, c>2 des } \\ { aes'2 f4 fes }
>> |
<c ees aes c>1 |
}
[image src="" alt="[image of music]" text="image of music" ]
The stem directions are automatically assigned with the odd-numbered
voices taking upward stems and the even-numbered voices downward ones.
The stems for voices 1 and 2 are right, but the stems in voice 3 should
go down in this particular piece of music. We can correct this by
skipping voice three and placing the music in voice four. This is done
by simply adding another pair of ‘\\’.
\new Staff \relative c'' {
\key aes \major
<< % Voice one
{ c2 aes4. bes8 }
\\ % Voice two
{ <ees, c>2 des }
\\ % Omit Voice three
\\ % Voice four
{ aes'2 f4 fes }
>> |
<c ees aes c>1 |
}
[image src="" alt="[image of music]" text="image of music" ]
We see that this fixes the stem direction, but the horizontal placement
of notes is not what we want. LilyPond shifts the inner notes when they
or their stems would collide with outer voices, but this is not
appropriate for piano music. In other situations, the shifts LilyPond
applies might fail to clear the collisions. LilyPond provides several
ways to adjust the horizontal placing of notes. We are not quite ready
yet to see how to correct this, so we shall leave this problem until a
later section — see the ‘force-hshift’ property in Fixing
overlapping notation.
Note: Lyrics, spanners (such as slurs, ties, hairpins etc.)
cannot be created ‘across’ voices.
See also
........
Notation Reference: (lilypond-notation)Multiple voices.