X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fuser%2Fsimultaneous.itely;h=1d35377b76638874e9754e437e12a3ad6ee0c8b8;hb=1b67b706db8d1098bd2724e99f99a22132c99c68;hp=b0cca0000cd2af0f88813879df79c407c865c259;hpb=1ee79e6b8d4386a5885960a3eafb87db933d7f63;p=lilypond.git diff --git a/Documentation/user/simultaneous.itely b/Documentation/user/simultaneous.itely index b0cca0000c..1d35377b76 100644 --- a/Documentation/user/simultaneous.itely +++ b/Documentation/user/simultaneous.itely @@ -6,7 +6,8 @@ version that you are working on. See TRANSLATION for details. @end ignore -@c \version "2.11.51" +@c \version "2.12.0" + @node Simultaneous notes @section Simultaneous notes @@ -18,8 +19,8 @@ in a piece of music. Polyphony in LilyPond refers to having more than one voice on the same staff. @menu -* Single voice:: -* Multiple voices:: +* Single voice:: +* Multiple voices:: @end menu @@ -29,31 +30,41 @@ than one voice on the same staff. This section discusses simultaneous notes inside the same voice. @menu -* Chorded notes:: -* Clusters:: +* Chorded notes:: +* Simultaneous expressions:: +* Clusters:: @end menu + @node Chorded notes @unnumberedsubsubsec Chorded notes @cindex chords @cindex brackets, angle +@cindex angle brackets +@cindex relative pitch in chords + @funindex < @funindex > @funindex <...> -A chord is formed by a enclosing a set of pitches between @code{<} and -@code{>}. A chord may be followed by a duration and/or a set of -articulations, just like simple notes: +A chord is formed by enclosing a set of pitches between @code{<} +and @code{>}. A chord may be followed by a duration and/or a set +of articulations, just like simple notes: @lilypond[verbatim,quote,relative=1] 2 4-> -. @end lilypond +Relative mode can be used for pitches in chords. The octave of each +pitch is chosen using the preceding pitch as a reference except in +the case of the first pitch in a chord: the reference for the first +pitch is the @emph{first} pitch of the preceding chord. + For more information about chords, see @ref{Chord notation}. -@seealso +@seealso Music Glossary: @rglos{chord}. @@ -66,25 +77,58 @@ Notation Reference: Snippets: @rlsr{Simultaneous notes}. -@ignore -@knownissues -For some reason, music expressions like @code{<< @{ g8 e8 @} a4 >>} -that should automatically turn into chords, appear split in two -staves. To avoid this, use explicit chords instead as in -@code{8 8}. -@end ignore +@node Simultaneous expressions +@unnumberedsubsubsec Simultaneous expressions + +One or more music expressions enclosed in double angle brackets are +taken to be simultaneous. If the first expression begins with a +single note or if the whole simultaneous expression appears +explicitly within a single voice, the whole expression is placed on +a single staff; otherwise the elements of the simultaneous +expression are placed on separate staves. + +The following examples show simultaneous expressions on one staff: + +@lilypond[quote,verbatim,relative=2] +\new Voice { % explicit single voice + << {a4 b g2} {d4 g c,2} >> +} +@end lilypond + +@lilypond[quote,verbatim,relative=2] +% single first note +a << {a4 b g} {d4 g c,} >> +@end lilypond + +This can be useful if the simultaneous sections have identical +rhythms, but attempts to attach notes with different durations +to the same stem will cause errors. + +The following example shows how simultaneous expressions can +generate multiple staves implicitly: + +@lilypond[quote,verbatim,relative=2] +% no single first note +<< {a4 b g2} {d4 g2 c,4} >> +@end lilypond + +Here different rhythms cause no problems. + @node Clusters @unnumberedsubsubsec Clusters @cindex cluster +@cindex note cluster + @funindex \makeClusters +@funindex makeClusters -A cluster indicates a continuous range of pitches to be played. They -can be denoted as the envelope of a set of notes. They are entered by -applying the function @code{\makeClusters} to a sequence of chords, -e.g., +A cluster indicates a continuous range of pitches to be played. +They can be denoted as the envelope of a set of notes. They are +entered by applying the function @code{\makeClusters} to a sequence +of chords, e.g., @lilypond[quote,relative=2,verbatim] \makeClusters { 2 } @@ -94,8 +138,8 @@ Ordinary notes and clusters can be put together in the same staff, even simultaneously. In such a case no attempt is made to automatically avoid collisions between ordinary notes and clusters. -@seealso +@seealso Music Glossary: @rglos{cluster}. @@ -107,14 +151,18 @@ Internals Reference: @rinternals{ClusterSpannerBeacon}, @rinternals{Cluster_spanner_engraver}. + @knownissues Clusters look good only if they span at least two chords; otherwise they appear too narrow. Clusters do not have a stem and cannot indicate durations by -themselves. Separate clusters would need a separating rest between -them. +themselves, but the length of the printed cluster is determined by +the durations of the defining chords. Separate clusters need a +separating rest between them. + +Clusters do not produce MIDI output. @node Multiple voices @subsection Multiple voices @@ -123,33 +171,108 @@ This section discusses simultaneous notes in multiple voices or multiple staves. @menu -* Single-staff polyphony:: -* Voice styles:: -* Collision resolution:: -* Automatic part combining:: -* Writing music in parallel:: +* Single-staff polyphony:: +* Voice styles:: +* Collision resolution:: +* Automatic part combining:: +* Writing music in parallel:: @end menu + @node Single-staff polyphony @unnumberedsubsubsec Single-staff polyphony -To typeset parallel pieces of music that have the same rhythm, they -can be combined into a single @code{Voice} context, thus forming -chords. To achieve this, enclose them in a simultaneous music -construction: +@cindex single-staff polyphony +@cindex polyphony, single-staff +@cindex voice +@cindex lyrics assigned to one voice -@lilypond[quote,relative=2,verbatim] -\new Voice << - { e4 f8 d e16 f g8 d4 } - { c4 d8 b c16 d e8 b4 } +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceOne ... \voiceFour +@funindex Voice +@funindex \oneVoice +@funindex oneVoice + +@strong{@i{Explicitly instantiating voices}} + +The basic structure needed to achieve multiple independent +voices in a single staff is illustrated in the following example: + +@lilypond[quote,relative=3,verbatim] +\new Staff << + \new Voice = "first" + { \voiceOne r8 r16 g e8. f16 g8[ c,] f e16 d } + \new Voice= "second" + { \voiceTwo d16 c d8~ d16 b c8~ c16 b c8~ c16 b8. } >> @end lilypond -This method leads to strange beamings and warnings if the pieces of -music do not have the same rhythm. To typeset multiple, truly -independent voices in a single staff, the @code{<<@{...@} \\ -@{...@}>>} construction is used, where the two (or more) voices are -separated by double backslashes. +Here, voices are instantiated explicitly and are given names. The +@code{\voiceOne} ... @code{\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 @code{\oneVoice} +command returns all the voice settings to the neutral default +directions. + +@strong{@i{Temporary polyphonic passages}} + +A temporary polyphonic passage can be created with the following +construct: + +@example +<< @{ \voiceOne ... @} + \new Voice @{ \voiceTwo ... @} +>> \oneVoice +@end example + +Here, the first expression within a temporary polyphonic passage is +placed into the @code{Voice} context which was in use immediately +before the polyphonic passage, and that same @code{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: + +@lilypond[quote, verbatim, relative=2] +<< + \new Voice = "melody" { + a4 + << + { + \voiceOne + g f + } + \new Voice { + \voiceTwo + d2 + } + >> + \oneVoice + e4 + } + \new Lyrics \lyricsto "melody" { + This is my song. + } +>> +@end lilypond + +Here, the @code{\voiceOne} and @code{\voiceTwo} commands are +required to define the settings of each voice. + +@strong{@i{The double backslash construct}} + +The @code{<< @{...@} \\ @{...@} >>} construct, where the two (or +more) expressions are separated by double backslashes, behaves +differently to the similar construct without the double backslashes: +@emph{all} the expressions within this contruct are assigned +to new @code{Voice} contexts. These new @code{Voice} contexts +are created implicitly and are given the fixed names @code{"1"}, +@code{"2"}, etc. + +The first example could be typeset as follows: @lilypond[quote,relative=3,verbatim] << @@ -159,40 +282,66 @@ separated by double backslashes. >> @end lilypond -First and third voices get stems up, second and fourth voices get -stems down, third and fourth voice noteheads are horizontally shifted, -and rests move to avoid collisions. +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 +@code{\voiceOne} ... @code{\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. @lilypond[quote,relative=3,verbatim] << - { r8 g g g g f16 es f8 d } - \\ - { es,8 r es r d r d r } + { r8 g g g g f16 ees f8 d } + \\ + { ees,8 r ees r d r d r } \\ { d'8 s c s bes s a s } >> @end lilypond -For these purposes, the @code{\voiceOne} ... @code{\voiceFour} -commands can be used instead. Spacing rests are often used to avoid -too many rests, as seen in the example avobe. +In all but the simplest works it is advisable to create explicit +@code{Voice} contexts as explained in @rlearning{Contexts and engravers} and +@rlearning{Explicitly instantiating voices}. -@predefined +@strong{@i{Identical rhythms}} -@funindex \voiceOne +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 +@code{Voice} context, thus forming chords. To achieve this, enclose +them in a simple simultaneous music construct within an explicit voice: + +@lilypond[quote,relative=2,verbatim] +\new Voice << + { e4 f8 d e16 f g8 d4 } + { c4 d8 b c16 d e8 b4 } +>> +@end lilypond + +This method leads to strange beamings and warnings if the pieces of +music do not have the same rhythm. + + +@predefined @code{\voiceOne}, -@funindex \voiceTwo @code{\voiceTwo}, -@funindex \voiceThree @code{\voiceThree}, -@funindex \voiceFour -@code{\voiceFour}. +@code{\voiceFour}, +@code{\oneVoice}. +@endpredefined @seealso - Learning Manual: -@rlearning{Voices contain music}. +@rlearning{Voices contain music}, +@rlearning{Explicitly instantiating voices}. + +Notation Reference: +@ref{Percussion staves}, +@ref{Invisible rests}. Snippets: @rlsr{Simultaneous notes}. @@ -204,6 +353,11 @@ Snippets: @cindex voice styles @cindex styles, voice @cindex coloring voices +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle Voices may be given distinct colors and shapes, allowing them to be easily identified: @@ -220,37 +374,20 @@ easily identified: >> @end lilypond -To revert the standard presentation, the @code{\voiceNeutralstyle} -command is used. - -These styles are arbitrarily defined but can be changed. For example, -the initial definition for @code{\voiceOneStyle} is as follows: - -@example -voiceOneStyle = @{ - \override NoteHead #'style = #'diamond - \override NoteHead #'color = #red - \override Stem #'color = #red - \override Beam #'color = #red -@} -@end example +The @code{\voiceNeutralstyle} command is used to revert to the +standard presentation. @predefined - -@funindex \voiceOneStyle @code{\voiceOneStyle}, -@funindex \voiceTwoStyle @code{\voiceTwoStyle}, -@funindex \voiceThreeStyle @code{\voiceThreeStyle}, -@funindex \voiceFourStyle @code{\voiceFourStyle}, -@funindex \voiceNeutralStyle @code{\voiceNeutralStyle}. +@endpredefined -@seealso +@seealso Learning Manual: @rlearning{I'm hearing Voices}, @rlearning{Other sources of information}. @@ -258,21 +395,42 @@ Learning Manual: Snippets: @rlsr{Simultaneous notes}. + @node Collision resolution @unnumberedsubsubsec Collision resolution @cindex merging notes @cindex note collisions @cindex collisions +@cindex shift note +@cindex multiple voices +@cindex voices, multiple +@cindex polyphonic music +@cindex shifting voices +@cindex voices, multiple +@cindex shift rest, automatic @funindex \shiftOn +@funindex shiftOn @funindex \shiftOnn +@funindex shiftOnn @funindex \shiftOnnn +@funindex shiftOnnn @funindex \shiftOff -@cindex shift rest, automatic +@funindex shiftOff +@funindex \mergeDifferentlyDottedOn +@funindex mergeDifferentlyDottedOn +@funindex \mergeDifferentlyDottedOff +@funindex mergeDifferentlyDottedOff +@funindex \mergeDifferentlyHeadedOn +@funindex mergeDifferentlyHeadedOn +@funindex \mergeDifferentlyHeadedOff +@funindex mergeDifferentlyHeadedOff -Note heads with equal durations are automatically merged, while -note heads with unequal durations are not merged. Rests opposite -a stem are shifted vertically. +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. @lilypond[quote,verbatim,relative=2] << @@ -290,7 +448,7 @@ a stem are shifted vertically. >> @end lilypond -Note heads with different note heads may be merged, with the +Notes with different note heads may be merged, with the exception of half-note heads and quarter-note heads: @lilypond[quote,verbatim,relative=2] @@ -330,16 +488,15 @@ Note heads with different dots may be merged: >> @end lilypond -@cindex shift note -The collision on the second measure happens because -@code{merge-differently-headed} cannot successfully complete the -merge when three or more notes line up in the same column -- in -fact, you will obtain a warning for this reason. To allow the -merge to work properly, apply a @code{\shift} to the note that -should not be merged. Here, @code{\shiftOn} is applied to move -the top @code{g} out of the column, and -@code{merge-differently-headed} works properly. +The half note and eighth note at the start of the second measure +are incorrectly merged because @code{\mergeDifferentlyHeadedOn} +cannot successfully complete the merge when three or more notes +line up in the same column, and in this case a warning is given. +To allow the merge to work properly a @code{\shift} must be applied +to the note that should not be merged. Here, @code{\shiftOn} is +applied to move the top @notation{g} out of the column, and +@code{\mergeDifferentlyHeadedOn} then works properly. @lilypond[quote,relative=2,verbatim] << @@ -368,37 +525,22 @@ two) have @code{\shiftOff}, while the inner voices (three and four) have @code{\shiftOn}. @code{\shiftOnn} and @code{\shiftOnnn} define further shift levels. -Notes are only merged if they have opposing stem directions (i.e., in +Notes are only merged if they have opposing stem directions (e.g. in @code{Voice} 1 and 2). -@cindex multiple voices -@cindex polyphonic music -@cindex shifting voices - @predefined - -@funindex \mergeDifferentlyDottedOn @code{\mergeDifferentlyDottedOn}, -@funindex \mergeDifferentlyDottedOff @code{\mergeDifferentlyDottedOff}, -@funindex \mergeDifferentlyHeadedOn @code{\mergeDifferentlyHeadedOn}, -@funindex \mergeDifferentlyHeadedOff @code{\mergeDifferentlyHeadedOff}. -@funindex \oneVoice -@code{\oneVoice}. - - -@funindex \shiftOn @code{\shiftOn}, -@funindex \shiftOnn @code{\shiftOnn}, -@funindex \shiftOnnn @code{\shiftOnnn}, -@funindex \shiftOff @code{\shiftOff}. +@endpredefined + @snippets @@ -408,8 +550,8 @@ Notes are only merged if they have opposing stem directions (i.e., in @lilypondfile[verbatim,lilyquote,texidoc,doctitle] {forcing-horizontal-shift-of-notes.ly} -@seealso +@seealso Music Glossary: @rglos{polyphony}. @@ -429,14 +571,16 @@ Internals Reference: @knownissues -When using @code{merge-differently-headed} with an upstem eighth +When using @code{\mergeDifferentlyHeadedOn} with an upstem eighth or a shorter note, and a downstem half note, the eighth note stem gets a slightly wrong offset because of the different width of the half note head symbol. -@c investigate! Sometimes it works, sometimes not. --FV -It is not clear in which circumpstances you can succesfully merge -different note heads that are at the same time differently dotted. +@ignore +@c TODO investigate! Sometimes it works, sometimes not. --FV +The requirements for successfully merging different note heads that +are at the same time differently dotted are not clear. +@end ignore There is no support for chords where the same note occurs with different accidentals in the same chord. In this case, it is @@ -450,7 +594,10 @@ cluster notation (see @ref{Clusters}). @cindex automatic part combining @cindex part combiner @cindex combining parts +@cindex a due part +@cindex solo part @funindex \partcombine +@funindex partcombine Automatic part combining is used to merge two parts of music onto a staff. It is aimed at typesetting orchestral scores. When the @@ -494,15 +641,15 @@ instrumentTwo = \relative g' { >> @end lilypond -The notes in the third measure appear only once, although they -were specified in both parts. Stem, slur, and tie directions are -set automatically, depending whether there is a solo or unison. -When needed in polyphony situations, the first part (with context -called @code{one}) always gets up stems, while the second (called -@code{two}) always gets down stems. In solo situations, the parts -get marked with @q{Solo} and @q{Solo II}, respectively. The -unisono (@notation{a due}) parts are marked by default with the -text @qq{a2}. +The notes in the third measure appear only once, although they were +specified in both parts. Stem, slur, and tie directions are set +automatically, depending whether there is a solo or unison. When +needed in polyphony situations, the first part (with context called +@code{one}) always gets up stems, while the second (called @code{two}) +always gets down stems. In solo situations, the first and second +parts get marked with @q{Solo} and @q{Solo II}, respectively. The +unisono (@notation{a due}) parts are marked by default with the text +@qq{a2}. Both arguments to @code{\partcombine} will be interpreted as @code{Voice} contexts. If using relative octaves, @@ -522,33 +669,14 @@ has no effect on the pitches of @var{musicexpr1} and @snippets -Parts may be merged without printing text: - -@lilypond[quote,verbatim] -\new Staff << - \set Staff.printPartCombineTexts = ##f - \partcombine - \relative g' { g a( b) r } - \relative g' { g r4 r f } ->> -@end lilypond - -The printed text may be changed: +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{combining-two-parts-on-the-same-staff.ly} -@lilypond[quote,verbatim] -\new Staff << - \set Score.soloText = #"girl" - \set Score.soloIIText = #"boy" - \set Score.aDueText = #"together" - \partcombine - \relative g' { g4 g r r a2 g } - \relative g' { r4 r a( b) a2 g } ->> -@end lilypond +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{changing-partcombine-texts.ly} @seealso - Music Glossary: @rglos{a due}, @rglos{part}. @@ -559,13 +687,15 @@ Notation Reference: Snippets: @rlsr{Simultaneous notes}. - Internals Reference: @rinternals{PartCombineMusic}, @rinternals{Voice}. + @knownissues +@code{\partcombine} can only accept two voices. + When @code{printPartCombineTexts} is set, if the two voices play the same notes on and off, the part combiner may typeset @code{a2} more than once in a measure. @@ -575,18 +705,26 @@ more than once in a measure. @code{\partcombine} cannot be inside @code{\relative}. Internally, the @code{\partcombine} interprets both arguments as -@code{Voice}s named @code{one} and @code{two}, and then decides -when the parts can be combined. Consequently, if the arguments -switch to differently named @rinternals{Voice} contexts, the -events in those will be ignored. +@code{Voice}s and decides when the parts can be combined. When they have +different durations they cannot be combined and are given the names +@code{one} and @code{two}. Consequently, if the arguments switch to +differently named @rinternals{Voice} contexts, the events in those will +be ignored. Likewise, partcombining isn't designed to work with lyrics; +when one of the voices is explicitly named in order to attach lyrics to +it, the partcombining stops working. + +@code{\partcombine} only observes onset times of notes. It cannot +determine whether a previously started note is playing or not, leading +to various problems. -@c IIRC in users list someone pointed out more issues. TODO: lookup FV @node Writing music in parallel @unnumberedsubsubsec Writing music in parallel -@cindex Writing music in parallel -@cindex Interleaved music +@cindex writing music in parallel +@cindex interleaved music +@cindex parallel music +@funindex \parallelMusic @funindex parallelMusic Music for multiple parts can be interleaved in input code. The @@ -600,19 +738,21 @@ print the music. be of the same length.} @lilypond[quote,verbatim] -\parallelMusic #'(voiceA voiceB voiceC) { +\parallelMusic #'(voiceA voiceB voiceC) { % Bar 1 - r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c'' e''] | - c'2 c'2 | - r16 e'8.~ e'4 r16 e'8.~ e'4 | + r8 g'16 c'' e'' g' c'' e'' r8 g'16 c'' e'' g' c'' e'' | + r16 e'8.~ e'4 r16 e'8.~ e'4 | + c'2 c'2 | + % Bar 2 - r8 a'16[ d''] f''[ a' d'' f''] r8 a'16[ d''] f''[ a' d'' f''] | - c'2 c'2 | - r16 d'8.~ d'4 r16 d'8.~ d'4 | + r8 a'16 d'' f'' a' d'' f'' r8 a'16 d'' f'' a' d'' f'' | + r16 d'8.~ d'4 r16 d'8.~ d'4 | + c'2 c'2 | + } \new StaffGroup << - \new Staff << \voiceA \\ \voiceC >> - \new Staff { \clef bass \voiceB } + \new Staff << \voiceA \\ \voiceB >> + \new Staff { \clef bass \voiceC } >> @end lilypond @@ -626,17 +766,18 @@ note in the input -- in other words, relative notes for \parallelMusic #'(voiceA voiceB voiceC) { % Bar 1 r8 g16 c e g, c e r8 g,16 c e g, c e | - c2 c | r16 e8.~ e4 r16 e8.~ e4 | + c2 c | % Bar 2 r8 a,16 d f a, d f r8 a,16 d f a, d f | - c2 c | r16 d8.~ d4 r16 d8.~ d4 | + c2 c | + } \new StaffGroup << - \new Staff << \relative c'' \voiceA \\ \relative c' \voiceC >> - \new Staff \relative c' { \clef bass \voiceB } + \new Staff << \relative c'' \voiceA \\ \relative c' \voiceB >> + \new Staff \relative c' { \clef bass \voiceC } >> @end lilypond @@ -687,8 +828,8 @@ global = { } @end lilypond -@seealso +@seealso Learning Manual: @rlearning{Organizing pieces with variables}.