[ << Musical notation ] | [Top][Contents][Index] | [ Specialist notation >> ] |
[ < Clusters ] | [ Up : Simultaneous notes ] | [ Single-staff polyphony > ] |
1.5.2 Multiple voices
This section discusses simultaneous notes in multiple voices or multiple staves.
Single-staff polyphony | ||
Voice styles | ||
Collision resolution | ||
Merging rests | ||
Automatic part combining | ||
Writing music in parallel |
[ << Musical notation ] | [Top][Contents][Index] | [ Specialist notation >> ] |
[ < Multiple voices ] | [ Up : Multiple voices ] | [ Voice styles > ] |
Single-staff polyphony
Explicitly instantiating voices
The basic structure needed to achieve multiple independent voices in a single staff is illustrated in the following example:
\new Staff << \new Voice = "first" \relative { \voiceOne r8 r16 g'' e8. f16 g8[ c,] f e16 d } \new Voice= "second" \relative { \voiceTwo d''16 c d8~ 16 b c8~ 16 b c8~ 16 b8. } >>
Here, voices are instantiated explicitly and are given names. The
\voiceOne
… \voiceFour
commands set up the voices
so that first and third voices get stems up, second and fourth
voices get stems down, third and fourth voice note heads are
horizontally shifted, and rests in the respective voices are
automatically moved to avoid collisions. The \oneVoice
command returns all the voice settings to the neutral default
directions.
Note that Voice
is a bottom-level context
(see Bottom-level contexts – voices).
In TabStaff
one would use TabVoice
instead.
Temporary polyphonic passages
A temporary polyphonic passage can be created with the following construct:
<< { \voiceOne … } \new Voice { \voiceTwo … } >> \oneVoice
Here, the first expression within a temporary polyphonic passage is
placed into the Voice
context which was in use immediately
before the polyphonic passage, and that same Voice
context
continues after the temporary section. Other expressions within
the angle brackets are assigned to distinct temporary voices.
This allows lyrics to be assigned to one continuing voice before,
during and after a polyphonic section:
\relative << \new Voice = "melody" { a'4 << { \voiceOne g f } \new Voice { \voiceTwo d2 } >> \oneVoice e4 } \new Lyrics \lyricsto "melody" { This is my song. } >>
Here, the \voiceOne
and \voiceTwo
commands are
required to define the settings of each voice.
In TabStaff
one needs to use TabVoice
.
If the same music should appear in Staff
and TabStaff
the
general Bottom
context may be used
(see Bottom-level contexts – voices).
mus = \relative \new Bottom = "melody" { a'4 << { \voiceOne g f } \new Bottom { \voiceTwo d2 } >> \oneVoice e4 } << \new Staff \mus \new Lyrics \lyricsto "melody" { This is my song. } >> << \new TabStaff \mus \new Lyrics \lyricsto "melody" { This is my song. } >>
The double backslash construct
The << {…} \\ {…} >>
construct, where the two (or
more) expressions are separated by double backslashes, behaves
differently to the similar construct without the double backslashes:
all the expressions within this construct are assigned
to new Bottom
contexts of the current type, typically Voice
or
TabVoice
(see Bottom-level contexts – voices).
These new Bottom
contexts are created implicitly and are given the fixed
names "1"
, "2"
, etc.
The first example could be typeset as follows:
<< \relative { r8 r16 g'' e8. f16 g8[ c,] f e16 d } \\ \relative { d''16 c d8~ 16 b c8~ 16 b c8~ 16 b8. } >>
This syntax can be used where it does not matter that temporary
voices are created and then discarded. These implicitly created
voices are given the settings equivalent to the effect of the
\voiceOne
… \voiceFour
commands, in the order in
which they appear in the code.
In the following example, the intermediate voice has stems up, therefore we enter it in the third place, so it becomes voice three, which has the stems up as desired. Spacer rests are used to avoid printing doubled rests.
<< \relative { r8 g'' g g g f16 ees f8 d } \\ \relative { ees'8 r ees r d r d r } \\ \relative { d''8 s c s bes s a s } >>
In all but the simplest works it is advisable to create explicit
Voice
contexts as explained in
Contexts and engravers and
Explicitly instantiating voices.
Voice order
When entering multiple voices in the input file, use the following order:
Voice 1: highest Voice 2: lowest Voice 3: second highest Voice 4: second lowest Voice 5: third highest Voice 6: third lowest etc.
Though this may seem counterintuitive, it simplifies the automatic layout process. Note that the odd-numbered voices are given upstems, and the even-numbered voices are given downstems:
\new Staff << \time 2/4 { f''2 } % 1: highest \\ { c'2 } % 2: lowest \\ { d''2 } % 3: second-highest \\ { e'2 } % 4: second-lowest \\ { b'2 } % 5: third-highest \\ { g'2 } % 6: third-lowest >>
When a different voice entry order is desired, the command
\voices
may be convenient:
\new Staff \voices 1,3,5,6,4,2 << \time 2/4 { f''2 } % 1: highest \\ { d''2 } % 3: second-highest \\ { b'2 } % 5: third-highest \\ { g'2 } % 6: third-lowest \\ { e'2 } % 4: second-lowest \\ { c'2 } % 2: lowest >>
Note: Lyrics and spanners (such as slurs, ties, hairpins, etc.) cannot be created ‘across’ voices.
Identical rhythms
In the special case that we want to typeset parallel pieces of music
that have the same rhythm, we can combine them into a single
Voice
context, thus forming chords. To achieve this, enclose
them in a simple simultaneous music construct within an explicit voice:
\new Voice << \relative { e''4 f8 d e16 f g8 d4 } \relative { c''4 d8 b c16 d e8 b4 } >>
This method leads to strange beamings and warnings if the pieces of music do not have the same rhythm.
Predefined commands
\voiceOne
,
\voiceTwo
,
\voiceThree
,
\voiceFour
,
\oneVoice
.
See also
Learning Manual: Voices contain music, Explicitly instantiating voices.
Notation Reference: Percussion staves, Invisible rests, Stems.
Snippets: Simultaneous notes.
[ << Musical notation ] | [Top][Contents][Index] | [ Specialist notation >> ] |
[ < Single-staff polyphony ] | [ Up : Multiple voices ] | [ Collision resolution > ] |
Voice styles
Voices may be given distinct colors and shapes, allowing them to be easily identified:
<< \relative { \voiceOneStyle d''4 c2 b4 } \\ \relative { \voiceTwoStyle e'2 e } \\ \relative { \voiceThreeStyle b2. c4 } \\ \relative { \voiceFourStyle g'2 g } >>
The \voiceNeutralStyle
command is used to revert to the
standard presentation.
Predefined commands
\voiceOneStyle
,
\voiceTwoStyle
,
\voiceThreeStyle
,
\voiceFourStyle
,
\voiceNeutralStyle
.
See also
Learning Manual: I'm hearing Voices, Other sources of information.
Snippets: Simultaneous notes.
[ << Musical notation ] | [Top][Contents][Index] | [ Specialist notation >> ] |
[ < Voice styles ] | [ Up : Multiple voices ] | [ Merging rests > ] |
Collision resolution
The note heads of notes in different voices with the same pitch, same note head and opposite stem direction are automatically merged, but notes with different note heads or the same stem direction are not. Rests opposite a stem in a different voice are shifted vertically. The following example shows three different circumstances, on beats 1 and 3 in bar 1 and beat 1 in bar 2, where the automatic merging fails.
<< \relative { c''8 d e d c d c4 g'2 fis } \\ \relative { c''2 c8. b16 c4 e,2 r } \\ \relative { \oneVoice s1 e'8 a b c d2 } >>
Notes with different note heads may be merged as shown below. In this example the note heads on beat 1 of bar 1 are now merged:
<< \relative { \mergeDifferentlyHeadedOn c''8 d e d c d c4 g'2 fis } \\ \relative { c''2 c8. b16 c4 e,2 r } \\ \relative { \oneVoice s1 e'8 a b c d2 } >>
Quarter and half notes are not merged in this way, since it would be difficult to tell them apart.
Note heads with different dots as shown in beat 3 of bar 1 may be also be merged:
<< \relative { \mergeDifferentlyHeadedOn \mergeDifferentlyDottedOn c''8 d e d c d c4 g'2 fis } \\ \relative { c''2 c8. b16 c4 e,2 r } \\ \relative { \oneVoice s1 e'8 a b c d2 } >>
The half note and eighth note at the start of the second measure
are incorrectly merged because the automatic merge cannot
successfully complete the merge when three or more notes line up in
the same note column, and in this case the merged note head is
incorrect. To allow the merge to select the correct note head
a \shift
must be applied to the note that should not be
merged. Here, \shiftOn
is applied to move the top
g out of the column, and \mergeDifferentlyHeadedOn
then works properly.
<< \relative { \mergeDifferentlyHeadedOn \mergeDifferentlyDottedOn c''8 d e d c d c4 \shiftOn g'2 fis } \\ \relative { c''2 c8. b16 c4 e,2 r } \\ \relative { \oneVoice s1 e'8 a b c d2 } >>
The \shiftOn
command allows (but does not force) the notes
in a voice to be shifted. When \shiftOn
is applied to a
voice, a note or chord in that voice is shifted only if its stem
would otherwise collide with a stem from another voice, and only
if the colliding stems point in the same direction. The
\shiftOff
command prevents this type of shifting from
occurring.
By default, the outer voices (normally voices one and two) have
\shiftOff
specified, while the inner voices (three and
above) have \shiftOn
specified. When a shift is applied,
voices with upstems (odd-numbered voices) are shifted to the
right, and voices with downstems (even-numbered voices) are
shifted to the left.
Here is an example to help you visualize how an abbreviated polyphonic expression would be expanded internally.
Note: Note that with three or more voices, the vertical order of voices in your input file should not be the same as the vertical order of voices on the staff!
\new Staff \relative { %% abbreviated entry << { f''2 } % 1: highest \\ { g,2 } % 2: lowest \\ { d'2 } % 3: upper middle \\ { b2 } % 4: lower middle >> %% internal expansion of the above << \new Voice = "1" { \voiceOne \shiftOff f'2 } \new Voice = "2" { \voiceTwo \shiftOff g,2 } \new Voice = "3" { \voiceThree \shiftOn d'2 } % shifts right \new Voice = "4" { \voiceFour \shiftOn b2 } % shifts left >> }
Two additional commands, \shiftOnn
and \shiftOnnn
provide further shift levels which may be specified temporarily to
resolve collisions in complex situations – see
Real music example.
Notes are only merged if they have opposing stem directions (as they have, for example, in voices one and two by default or when the stems are explicitly set in opposite directions).
Predefined commands
\mergeDifferentlyDottedOn
,
\mergeDifferentlyDottedOff
,
\mergeDifferentlyHeadedOn
,
\mergeDifferentlyHeadedOff
.
\shiftOn
,
\shiftOnn
,
\shiftOnnn
,
\shiftOff
.
Selected Snippets
Additional voices to avoid collisions
In some instances of complex polyphonic music, additional voices are
necessary to prevent collisions between notes. If more than four
parallel voices are needed, additional voices can be added by defining
a variable using the Scheme function context-spec-music
.
voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) \relative c'' { \time 3/4 \key d \minor \partial 2 << \new Voice { \voiceOne a4. a8 e'4 e4. e8 f4 d4. c8 } \new Voice { \voiceTwo d,2 d4 cis2 d4 bes2 } \new Voice { \voiceThree f'2 bes4 a2 a4 s2 } \new Voice { \voiceFive s2 g4 g2 f4 f2 } >> }
Moving dotted notes in polyphony
When a dotted note in the upper voice is moved to avoid a collision
with a note in another voice, the default is to move the upper note to
the right. This behaviour can be over-ridden by using the
prefer-dotted-right
property of NoteCollision
.
\new Staff \relative c' << { f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##f f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##t f2. f4 } \\ { e4 e e e e e e e e e e e } >>
Forcing horizontal shift of notes
When the typesetting engine cannot cope, the following syntax can be used to override typesetting decisions. The units of measure used here are staff spaces.
\relative c' << { <d g>2 <d g> } \\ { <b f'>2 \once \override NoteColumn.force-hshift = #1.7 <b f'>2 } >>
See also
Music Glossary: polyphony.
Learning Manual: Multiple notes at once, Voices contain music, Real music example.
Snippets: Simultaneous notes.
Internals Reference: NoteColumn, NoteCollision, RestCollision.
Known issues and warnings
Using \override NoteColumn.ignore-collision = ##t
will cause
differently headed notes in different voices to merge incorrectly.
\mergeDifferentlyHeadedOn << \relative { c'16 a' b a } \\ \relative { c'2 } >> \override NoteColumn.ignore-collision = ##t << \relative { c'16 a' b a } \\ \relative { c'2 } >>
[ << Musical notation ] | [Top][Contents][Index] | [ Specialist notation >> ] |
[ < Collision resolution ] | [ Up : Multiple voices ] | [ Automatic part combining > ] |
Merging rests
When using multiple voices it is common to merge rests which occur in both
parts. This can be accomplished using Merge_rests_engraver
.
voiceA = \relative { d''4 r d2 | R1 | } voiceB = \relative { fis'4 r g2 | R1 | } \score { << \new Staff \with { instrumentName = "unmerged" } << \new Voice { \voiceOne \voiceA } \new Voice { \voiceTwo \voiceB } >> \new Staff \with { instrumentName = "merged" \consists Merge_rests_engraver } << \new Voice { \voiceOne \voiceA } \new Voice { \voiceTwo \voiceB } >> >> }
Setting the context property suspendRestMerging
to #t
allows for turning off rest merging temporarily.
[ << Musical notation ] | [Top][Contents][Index] | [ Specialist notation >> ] |
[ < Merging rests ] | [ Up : Multiple voices ] | [ Writing music in parallel > ] |
Automatic part combining
Automatic part combining is used to merge two separate parts of music
onto a single staff. This can be especially helpful when typesetting
orchestral scores. A single Voice
is printed while the two parts
of music are the same, but in places where they differ, a second
Voice
is printed. Stem directions are set up & down accordingly
while Solo and a due parts are also identified and marked
appropriately.
The syntax for automatic part combining is:
\partCombine musicexpr1 musicexpr2
The following example demonstrates the basic functionality, putting parts on a single staff as polyphony and setting stem directions accordingly. The same variables are used for the independent parts and the combined staff.
instrumentOne = \relative { c'4 d e f | R1 | d'4 c b a | b4 g2 f4 | e1 | } instrumentTwo = \relative { R1 | g'4 a b c | d4 c b a | g4 f( e) d | e1 | } << \new Staff \instrumentOne \new Staff \instrumentTwo \new Staff \partCombine \instrumentOne \instrumentTwo >>
Both parts have identical notes in the third measure, so only one
instance of the notes is printed. Stem, slur, and tie directions are
set automatically, depending on whether the parts are playing solo or in
unison. When needed in polyphony situations, the first part (with
context called one
) gets “up” stems, while the second (called
two
) always gets “down” stems. In solo situations, the first
and second parts get marked with “Solo” and “Solo II”,
respectively. The unison (a due) parts are marked with the
text “a2”.
By default, the partCombiner merges two notes of the same pitch as an
a due note, combines notes with the same
rhythm less than a ninth apart as chords and separates notes more than
a ninth apart (or when the voices cross) into
separate voices. This can be overridden with an optional argument of a pair
of numbers after the \partCombine
command: the first specifies
the interval where notes start to be combined (the default is zero) and the
second where the notes are split into separate voices. Setting the second
argument to zero means that the partCombiner splits notes with an interval of
a second or more, setting it to one splits notes of a third or more, and so on.
instrumentOne = \relative { a4 b c d | e f g a | b c d e | } instrumentTwo = \relative { c'4 c c c | c c c c | c c c c | } << \new Staff \partCombine \instrumentOne \instrumentTwo \new Staff \partCombine #'(2 . 3) \instrumentOne \instrumentTwo >>
Both arguments to \partCombine
will be interpreted as separate
Voice
contexts, so if the music is being specified in relative
mode then both parts must contain a \relative
function,
i.e.,
\partCombine \relative … musicexpr1 \relative … musicexpr2
A \relative
section that encloses a \partCombine
has no
effect on the pitches of musicexpr1
or
musicexpr2
.
In professional scores, voices are often kept apart from each other for
long passages of music even if some of the notes are the same in both
voices, and could just as easily be printed as unison. Combining notes
into a chord, or showing one voice as solo is, therefore, not ideal as
the \partCombine
function considers each note separately. In this
case the \partCombine
function can be overridden with one of the
following commands. All of the commands may be preceded with
\once
in order to have them only apply to the next note in
the music expression.
-
\partCombineApart
keeps the notes as two separate voices, even if they can be combined into a chord or unison. -
\partCombineChords
combines the notes into a chord. -
\partCombineUnisono
combines both voices as “unison”. -
\partCombineSoloI
prints only voice one, and marks it as a “Solo”. -
\partCombineSoloII
prints only voice two and marks it as a “Solo”. -
\partCombineAutomatic
ends the functions of the commands above, and reverts back to the standard\partCombine
functionality.
instrumentOne = \relative c' { \partCombineApart c2^"apart" e | \partCombineAutomatic e2^"auto" e | \partCombineChords e'2^"chord" e | \partCombineAutomatic c2^"auto" c | \partCombineApart c2^"apart" \once \partCombineChords e^"chord once" | c2 c | } instrumentTwo = \relative { c'2 c | e2 e | a,2 c | c2 c' | c2 c | c2 c | } << \new Staff { \instrumentOne } \new Staff { \instrumentTwo } \new Staff { \partCombine \instrumentOne \instrumentTwo } >>
Using \partCombine
with lyrics
The \partCombine
command is not designed to work with
lyrics; if one of the voices is explicitly named in order to
attach lyrics to it, the partCombiner will stop working. However,
this effect can be achieved using a NullVoice
context. See
Polyphony with shared lyrics.
Selected Snippets
Combining two parts on the same staff
The part combiner tool ( \partCombine
command ) allows the
combination of several different parts on the same staff. Text
directions such as “solo” or “a2” are added by default; to remove
them, simply set the property printPartCombineTexts
to f
.
For vocal scores (hymns), there is no need to add “solo/a2” texts, so they should be switched off. However, it might be better not to use it if there are any solos, as they won’t be indicated. In such cases, standard polyphonic notation may be preferable.
This snippet presents the three ways two parts can be printed on a same
staff: standard polyphony, \partCombine
without texts, and
\partCombine
with texts.
%% Combining pedal notes with clef changes musicUp = \relative c'' { \time 4/4 a4 c4.( g8) a4 | g4 e' g,( a8 b) | c b a2. } musicDown = \relative c'' { g4 e4.( d8) c4 | r2 g'4( f8 e) | d2 \stemDown a } \score { << \new Staff \with { instrumentName = "Standard polyphony" } << \musicUp \\ \musicDown >> \new Staff \with { instrumentName = "PartCombine without text" printPartCombineTexts = ##f } \partCombine \musicUp \musicDown \new Staff \with { instrumentName = "PartCombine with text" } \partCombine \musicUp \musicDown >> \layout { indent = 6.0\cm \context { \Score \override SystemStartBar.collapse-height = #30 } } }
Changing partcombine texts
When using the automatic part combining feature, the printed text for the solo and unison sections may be changed:
\new Staff << \set Staff.soloText = #"girl" \set Staff.soloIIText = #"boy" \set Staff.aDueText = #"together" \partCombine \relative c'' { g4 g r r a2 g } \relative c'' { r4 r a( b) a2 g } >>
See also
Notation Reference: Writing parts.
Snippets: Simultaneous notes.
Internals Reference: PartCombineMusic, Voice.
Known issues and warnings
All \partCombine…
functions can only accept two voices.
\partCombine…
functions cannot be placed inside a \tuplet
or \relative
block.
If printPartCombineTexts
is set and the two voices play the same
notes “on and off”, in the same measure, the part combiner may
typeset a2
more than once in that measure.
\partCombine
only knows when a note starts in a Voice
; it
cannot, for example, remember if a note in one Voice
has already
started when combining notes that have just started in the other
Voice
. This can lead to a number of unexpected issues including
“Solo” or “Unison” marks being printed incorrectly.
\partCombine
keeps all spanners (slurs, ties, hairpins, etc.) in
the same Voice
so that if any such spanners start or end in a
different Voice
, they may not be printed properly or at all.
If the \partCombine
function cannot combine both music
expressions (i.e., when both voices have different durations), it will
give the voices, internally, its own custom names: one
and
two
respectively. This means if there is any “switch” to a
differently named Voice
context, the events in that differently
named Voice
will be ignored.
Refer also to Known issues and warnings when using
\partCombine
with tablature in Default tablatures and the
Note in Automatic beams when using automatic beaming.
[ << Musical notation ] | [Top][Contents][Index] | [ Specialist notation >> ] |
[ < Automatic part combining ] | [ Up : Multiple voices ] | [ Staff notation > ] |
Writing music in parallel
Music for multiple parts can be interleaved in input code. The
function \parallelMusic
accepts a list with the names of a
number of variables to be created, and a musical expression. The
content of alternate measures from the expression become the value
of the respective variables, so you can use them afterwards to
print the music.
Note: Bar checks |
must be used, and the measures must
be of the same length.
\parallelMusic voiceA,voiceB,voiceC { % Bar 1 r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | r16 e'8.~ 4 r16 e'8.~ 4 | c'2 c'2 | % Bar 2 r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | r16 d'8.~ 4 r16 d'8.~ 4 | c'2 c'2 | } \new StaffGroup << \new Staff << \voiceA \\ \voiceB >> \new Staff { \clef bass \voiceC } >>
Relative mode may be used. Note that the \relative
command
is not used inside \parallelMusic
itself. The notes are
relative to the preceding note in the voice, not to the previous
note in the input – in other words, relative notes for
voiceA
ignore the notes in voiceB
.
\parallelMusic voiceA,voiceB,voiceC { % Bar 1 r8 g16 c e g, c e r8 g,16 c e g, c e | r16 e8.~ 4 r16 e8.~ 4 | c2 c | % Bar 2 r8 a,16 d f a, d f r8 a,16 d f a, d f | r16 d8.~ 4 r16 d8.~ 4 | c2 c | } \new StaffGroup << \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> \new Staff \relative c' { \clef bass \voiceC } >>
This works quite well for piano music. This example maps four consecutive measures to four variables:
global = { \key g \major \time 2/4 } \parallelMusic voiceA,voiceB,voiceC,voiceD { % Bar 1 a8 b c d | d4 e | c16 d e fis d e fis g | a4 a | % Bar 2 e8 fis g a | fis4 g | e16 fis g a fis g a b | a4 a | % Bar 3 ... } \score { \new PianoStaff << \new Staff { \global << \relative c'' \voiceA \\ \relative c' \voiceB >> } \new Staff { \global \clef bass << \relative c \voiceC \\ \relative c \voiceD >> } >> }
See also
Learning Manual: Organizing pieces with variables.
Snippets: Simultaneous notes.
[ << Musical notation ] | [Top][Contents][Index] | [ Specialist notation >> ] |
[ < Automatic part combining ] | [ Up : Multiple voices ] | [ Staff notation > ] |