\new Staff \relative {
% Main voice
c'16 d e f
- % Voice = "1" Voice = "2" Voice = "3"
+ % Voice = "1" Voice = "2" Voice = "3"
<< { g4 f e } \\ { r8 e4 d c8~ } >> |
<< { d2 e } \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}
@end lilypond
+@funindex \voices
+If you prefer entering the voices in a different order, like top
+to bottom, you can specify the respective voice numbers in front
+of one @code{<< @dots{} >>} construct using the @code{\voices}
+command, like
+
+@lilypond[quote,verbatim]
+\new Staff \relative {
+ % Main voice
+ c'16 d e f
+ % Voice = "1" Voice = "2"
+ << { g4 f e } \\ { r8 e4 d c8~ } >> |
+ \voices 1,3,2
+ % Voice = "1" Voice = "3" Voice = "2"
+ << { d2 e } \\ { s4 b c2 } \\ { c8 b16 a b8 g~ 2 } >> |
+}
+@end lilypond
+
These voices are all separate from the main voice that contains
the notes just outside the @code{<< @dots{} >>} construct. Let's call
this the @emph{simultaneous construct}. Slurs and ties may only
@lilypond[quote,ragged-right]
\new Staff \relative {
\key aes \major
+ \voices 1,2,4 % No voice three
<< % Voice one
{ c''2 aes4. bes8 }
\\ % Voice two
\once \override NoteColumn.force-hshift = #0.5
des2
}
- \\ % No voice three
\\ % Voice four
{
\override NoteColumn.force-hshift = #0
@lilypond[quote,ragged-right]
\new Staff \relative {
\key aes \major
+ \voices 1,2,4 % No Voice three (we want stems down)
<<
{ % Voice one
\voiceOneStyle
\once \override NoteColumn.force-hshift = #0.5
des2
}
- \\ % No Voice three (we want stems down)
\\ % Voice four
{ \voiceThreeStyle
\override NoteColumn.force-hshift = #0
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 @code{\\}.
+and placing the music in voice four. This could be done by simply
+adding another pair of @code{\\}, but we use the @code{\voices}
+command instead (which would also allow us to enter the voices in
+different order if we preferred doing that):
@lilypond[quote,verbatim,ragged-right]
\new Staff \relative {
\key aes \major
+ \voices 1,2,4 % Omit Voice three
<< % Voice one
{ c''2 aes4. bes8 }
\\ % Voice two
{ <ees, c>2 des }
- \\ % Omit Voice three
\\ % Voice four
{ aes'2 f4 fes }
>> |
}
@end lilypond
-Now let's look at three different ways to notate the same passage of
+Now let's look at four different ways to notate the same passage of
polyphonic music, each of which is advantageous in different
circumstances, using the example from the previous section.
}
@end lilypond
+@cindex voices, continued
+@funindex \voices
+
+The @code{\voices} command can also be used for continuing a main
+voice into the simultaneous construct:
+
+@lilypond[quote,ragged-right,verbatim]
+\new Staff \relative {
+ \new Voice = "main" {
+ \voiceOneStyle
+ % This section is homophonic
+ c'16^( d e f
+ % Start simultaneous section of three voices
+ \voices "main",2,3
+ <<
+ % Continue the main voice in parallel
+ { g4 f e | d2 e) | }
+ % Initiate second voice
+ \\
+ % Set stems, etc., down
+ { r8 e4 d c8~ | 8 b16 a b8 g~ 2 | }
+ \\
+ % Initiate third voice
+ % Set stems, etc, up
+ { s2. | s4 b c2 | }
+ >>
+ }
+}
+@end lilypond
+
+
@cindex nesting music expressions
@cindex nesting simultaneous constructs
@cindex nesting voices
@cindex creating contexts
@cindex contexts, creating
-In an input file a score block, introduced with a @code{\score}
-command, contains a single music expression and an associated
-output definition (either a @code{\layout} or a @code{\midi} block).
-The @code{Score} context is usually left to be created automatically
-when the interpretation of that music expression starts.
+In an input file, a score block (introduced with a @code{\score}
+command) contains a single music expression; but it can also contain
+associated output definitions too -- either a @code{\layout} block, a
+@code{\midi} block or both. The @code{Score} context is usually left to
+be created automatically when the interpretation of that music
+expression starts.
For scores with only one voice and one staff, the @code{Voice} and
@code{Staff} contexts may also be left to be created automatically,
but occasionally it can be tricky. If the wrong context
is specified, no error message is produced, but the expected
action will not take place. For example, the
-@code{instrumentName} clearly lives in the @code{Staff} context, since
-it is the staff that is to be named.
-In this example the first staff is labeled, but not the second,
-because we omitted the context name.
+@code{clefGlyph} clearly lives in the @code{Staff} context, since
+it is the staff's clef glyph that is to be changed.
+In this example the first staff's clef is printed correctly, but not the
+second -- which prints the default treble clef instead of the
+expected bass (or F) clef -- because we omitted the context name.
@lilypond[quote,verbatim,ragged-right]
<<
\new Staff \relative {
- \set Staff.instrumentName = #"Soprano"
+ \set Staff.clefGlyph = "clefs.C"
c''2 c
}
\new Staff \relative {
- \set instrumentName = #"Alto" % Wrong!
+ \set clefGlyph = "clefs.F" % Wrong!
d'2 d
}
>>
@end lilypond
Remember the default context name is @code{Voice}, so the second
-@code{\set} command set the property @code{instrumentName} in the
-@code{Voice} context to @qq{Alto}, but as LilyPond does not look
+@code{\set} command set the property @code{clefGlyph} in the
+@code{Voice} context to @code{clefs.F}, but as LilyPond does not look
for any such property in the @code{Voice} context, no
further action took place. This is not an error, and no error
message is logged in the log file.
Internals Reference: see @rinternals{Tunable context properties}, or
@rinternals{Contexts}.
-The @code{instrumentName} property will take effect only
+The @code{clefGlyph} property will take effect only
if it is set in the @code{Staff} context, but
some properties can be set in more than one context.
For example, the property @code{extraNatural} is by
\score {
<< % combine ChoirStaff and PianoStaff in parallel
\new ChoirStaff <<
- \new Staff = "sopranos" <<
- \set Staff.instrumentName = #"Soprano"
+ \new Staff = "sopranos"
+ \with { instrumentName = #"Soprano" }
+ <<
\new Voice = "sopranos" {
\global
\sopranoMusic
\new Lyrics \lyricsto "sopranos" {
\sopranoWords
}
- \new Staff = "altos" <<
- \set Staff.instrumentName = #"Alto"
+ \new Staff = "altos"
+ \with { instrumentName = #"Alto" }
+ <<
\new Voice = "altos" {
\global
\altoMusic
}
>>
- \new Lyrics \lyricsto "altos" { \altoWords }
- \new Staff = "tenors" <<
- \set Staff.instrumentName = #"Tenor"
+ \new Lyrics \lyricsto "altos" {
+ \altoWords
+ }
+ \new Staff = "tenors"
+ \with { instrumentName = #"Tenor" }
+ <<
\new Voice = "tenors" {
\global
\tenorMusic
}
>>
- \new Lyrics \lyricsto "tenors" { \tenorWords }
- \new Staff = "basses" <<
- \set Staff.instrumentName = #"Bass"
+ \new Lyrics \lyricsto "tenors" {
+ \tenorWords
+ }
+ \new Staff = "basses"
+ \with { instrumentName = #"Bass" }
+ <<
\new Voice = "basses" {
\global
\bassMusic
\bassWords
}
>> % end ChoirStaff
- \new PianoStaff <<
- \set PianoStaff.instrumentName = #"Piano"
+ \new PianoStaff \with { instrumentName = #"Piano" }
+ <<
\new Staff = "upper" \upper
\new Staff = "lower" \lower
>>
@example
\new ChoirStaff <<
- \new Staff = "sopranos" <<
- \set Staff.instrumentName = #"Soprano"
+ \new Staff = "sopranos"
+ \with @{ instrumentName = #"Soprano" @}
+ <<
\new Voice = "sopranos" @{
\global
\sopranoMusic
\new Lyrics \lyricsto "sopranos" @{
\sopranoWords
@}
- \new Staff = "altos" <<
- \set Staff.instrumentName = #"Alto"
+ \new Staff = "altos"
+ \with @{ instrumentName = #"Alto" @}
+ <<
\new Voice = "altos" @{
\global
\altoMusic
\new Lyrics \lyricsto "altos" @{
\altoWords
@}
- \new Staff = "tenors" <<
- \set Staff.instrumentName = #"Tenor"
+ \new Staff = "tenors"
+ \with @{ instrumentName = #"Tenor" @}
+ <<
\new Voice = "tenors" @{
\global
\tenorMusic
\new Lyrics \lyricsto "tenors" @{
\tenorWords
@}
- \new Staff = "basses" <<
- \set Staff.instrumentName = #"Bass"
+ \new Staff = "basses"
+ \with @{ instrumentName = #"Bass" @}
+ <<
\new Voice = "basses" @{
\global
\bassMusic
@q{Solo piano} template:
@example
-\new PianoStaff <<
- \set PianoStaff.instrumentName = #"Piano "
+\new PianoStaff \with @{ instrumentName = #"Piano " @}
+<<
\new Staff = "upper" \upper
\new Staff = "lower" \lower
>>
@}
>> % end ChoirStaff
- \new PianoStaff <<
- \set PianoStaff.instrumentName = #"Piano"
+ \new PianoStaff \with @{ instrumentName = #"Piano" @}
+ <<
\new Staff = "upper" \upper
\new Staff = "lower" \lower
>>
\score {
<< % combine ChoirStaff and PianoStaff in parallel
\new ChoirStaff <<
- \new Staff = "sopranos" <<
- \set Staff.instrumentName = #"Soprano"
+ \new Staff = "sopranos"
+ \with { instrumentName = #"Soprano" }
+ <<
\new Voice = "sopranos" {
\global
\sopranoMusic
\new Lyrics \lyricsto "sopranos" {
\sopranoWords
}
- \new Staff = "altos" <<
- \set Staff.instrumentName = #"Alto"
+ \new Staff = "altos"
+ \with { instrumentName = #"Alto" }
+ <<
\new Voice = "altos" {
\global
\altoMusic
\new Lyrics \lyricsto "altos" {
\altoWords
}
- \new Staff = "tenors" <<
- \set Staff.instrumentName = #"Tenor"
+ \new Staff = "tenors"
+ \with { instrumentName = #"Tenor" }
+ <<
\new Voice = "tenors" {
\global
\tenorMusic
\new Lyrics \lyricsto "tenors" {
\tenorWords
}
- \new Staff = "basses" <<
- \set Staff.instrumentName = #"Bass"
+ \new Staff = "basses"
+ \with { instrumentName = #"Bass" }
+ <<
\new Voice = "basses" {
\global
\bassMusic
}
>> % end ChoirStaff
- \new PianoStaff <<
- \set PianoStaff.instrumentName = #"Piano "
+ \new PianoStaff
+ \with { instrumentName = #"Piano " }
+ <<
\new Staff = "upper" \upper
\new Staff = "lower" \lower
>>