From 674711ca217b28bc8d149adc43bda986c63761ca Mon Sep 17 00:00:00 2001 From: Graham Percival Date: Tue, 18 Sep 2007 19:21:16 -0700 Subject: [PATCH] Split Simultaneous notes (was: polyphony). --- Documentation/user/advanced-notation.itely | 129 ---- Documentation/user/basic-notation.itely | 844 --------------------- Documentation/user/notation.itely | 10 +- Documentation/user/simultaneous.itely | 587 ++++++++++++++ 4 files changed, 594 insertions(+), 976 deletions(-) create mode 100644 Documentation/user/simultaneous.itely diff --git a/Documentation/user/advanced-notation.itely b/Documentation/user/advanced-notation.itely index 1e7cec1ae5..2ad8bbadf8 100644 --- a/Documentation/user/advanced-notation.itely +++ b/Documentation/user/advanced-notation.itely @@ -1100,104 +1100,6 @@ some common problems in orchestral music. @end menu -@anchor{Automatic part combining} -@unnumberedsubsubsec Automatic part combining -@cindex automatic part combining -@cindex part combiner - -Automatic part combining is used to merge two parts of music onto a -staff. It is aimed at typesetting orchestral scores. When the two -parts are identical for a period of time, only one is shown. In -places where the two parts differ, they are typeset as separate -voices, and stem directions are set automatically. Also, solo and -@emph{a due} parts are identified and can be marked. - -The syntax for part combining is - -@example -\partcombine @var{musicexpr1} @var{musicexpr2} -@end example - - -The following example demonstrates the basic functionality of the part -combiner: putting parts on one staff, and setting stem directions and -polyphony - -@lilypond[quote,verbatim,ragged-right,fragment] -\new Staff \partcombine - \relative g' { g g a( b) c c r r } - \relative g' { g g r4 r e e g g } -@end lilypond - -The first @code{g} appears only once, although it was -specified twice (once in each part). Stem, slur, and tie directions are -set automatically, depending whether there is a solo or unisono. The -first part (with context called @code{one}) always gets up stems, and -@q{Solo}, while the second (called @code{two}) always gets down stems and -@q{Solo II}. - -If you just want the merging parts, and not the textual markings, you -may set the property @code{printPartCombineTexts} to false - -@lilypond[quote,verbatim,ragged-right,fragment,relative=2] -\new Staff << - \set Staff.printPartCombineTexts = ##f - \partcombine - \relative g' { g a( b) r } - \relative g' { g r4 r f } ->> -@end lilypond - -To change the text that is printed for solos or merging, you may -set the @code{soloText}, @code{soloIIText}, and @code{aDueText} -properties. - -@lilypond[quote,verbatim,ragged-right,fragment,relative=2] -\new Staff << - \set Score.soloText = #"ichi" - \set Score.soloIIText = #"ni" - \set Score.aDueText = #"tachi" - \partcombine - \relative g' { g4 g a( b) r } - \relative g' { g4 g r r f } ->> -@end lilypond - -Both arguments to @code{\partcombine} will be interpreted as -@internalsref{Voice} contexts. If using relative octaves, -@code{\relative} should be specified for both music expressions, i.e., - -@example -\partcombine - \relative @dots{} @var{musicexpr1} - \relative @dots{} @var{musicexpr2} -@end example - -@noindent -A @code{\relative} section that is outside of @code{\partcombine} has -no effect on the pitches of @var{musicexpr1} and @var{musicexpr2}. - -@seealso - -Program reference: @internalsref{PartCombineMusic}. - -@refbugs - -When @code{printPartCombineTexts} is set, when the two voices play the -same notes on and off, the part combiner may typeset @code{a2} more -than once in a measure. - -@code{\partcombine} cannot be inside @code{\times}. - -@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 @internalsref{Voice} contexts, the events in those -will be ignored. - - @anchor{Hiding staves} @unnumberedsubsubsec Hiding staves @@ -1488,37 +1390,6 @@ see those sections of the documentation. -@anchor{Clusters} -@unnumberedsubsubsec Clusters - -@cindex cluster - -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,ragged-right,relative=2,fragment,verbatim] -\makeClusters { } -@end lilypond - -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 - -Program reference: @internalsref{ClusterSpanner}, -@internalsref{ClusterSpannerBeacon}, -@internalsref{Cluster_spanner_engraver}. - -Examples: @lsr{contemporary,cluster@/.ly}. - -@refbugs - -Music expressions like @code{<< @{ g8 e8 @} a4 >>} are not printed -accurately. Use @code{8 8} instead. - - @anchor{Special noteheads} @unnumberedsubsubsec Special noteheads diff --git a/Documentation/user/basic-notation.itely b/Documentation/user/basic-notation.itely index ce5ad1bfaf..74f63969b2 100644 --- a/Documentation/user/basic-notation.itely +++ b/Documentation/user/basic-notation.itely @@ -18,403 +18,12 @@ This chapter explains how to use basic notation features. @menu -* Polyphony:: * Staff notation:: * Connecting notes:: * Expressive marks old:: -* Repeats:: @end menu - -@node Polyphony -@section Polyphony - -Polyphony in music refers to having more than one voice occurring in -a piece of music. Polyphony in LilyPond refers to having more than -one voice on the same staff. - -@menu -* Chords:: -* Stems:: -* Basic polyphony:: -* Explicitly instantiating voices:: -* Collision Resolution:: -@end menu - - -@anchor{Chords} -@unnumberedsubsubsec Chords - -@cindex Chords - -A chord is formed by a enclosing a set of pitches between @code{<} -and @code{>}. A chord may be followed by a duration, and a set of -articulations, just like simple notes - -@lilypond[verbatim,ragged-right,fragment,quote,relative=1] -4 8 -@end lilypond - -For more information about chords, see @ref{Chord names}. - - -@c I don't like having this here, but I can't think of -@c anywhere else to put it. :( -gp -@anchor{Stems} -@unnumberedsubsubsec Stems - -Whenever a note is found, a @internalsref{Stem} object is created -automatically. For whole notes and rests, they are also created but -made invisible. - -@refcommands - -@funindex \stemUp -@code{\stemUp}, -@funindex \stemDown -@code{\stemDown}, -@funindex \stemNeutral -@code{\stemNeutral}. - - -@commonprop - -To change the direction of stems in the middle of the staff, use - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -a4 b c b -\override Stem #'neutral-direction = #up -a4 b c b -\override Stem #'neutral-direction = #down -a4 b c b -@end lilypond - - -@anchor{Basic polyphony} -@unnumberedsubsubsec Basic polyphony - -@cindex polyphony - -The easiest way to enter fragments with more than one voice on a staff -is to enter each voice as a sequence (with @code{@{...@}}), and combine -them simultaneously, separating the voices with @code{\\} - -@funindex \\ - -@lilypond[quote,verbatim,fragment] -\new Staff \relative c' { - c16 d e f - << - { g4 f e | d2 e2 } \\ - { r8 e4 d c8 ~ | c b16 a b8 g ~ g2 } \\ - { s2. | s4 b4 c2 } - >> -} -@end lilypond - -The separator causes @internalsref{Voice} contexts@footnote{Polyphonic -voices are sometimes called @q{layers} in other notation packages} -@cindex layers -to be instantiated. They bear the names @code{"1"}, @code{"2"}, etc. In -each of these contexts, vertical direction of slurs, stems, etc., is set -appropriately. - -These voices are all separate from the voice that contains the notes just -outside the @code{<< \\ >>} construct. This should be noted when making -changes at the voice level. This also means that slurs and ties cannot go -into or out of a @code{<< \\ >>} construct. Conversely, parallel voices -from separate @code{<< \\ >>} constructs on the same staff are the -same voice. Here is the same example, with different noteheads and -colors for each -voice. Note that the change to the note-head style in the main voice does -not affect -the inside of the @code{<< \\ >>} constructs. Also, the change to the -second -voice in the first @code{<< \\ >>} construct is effective in the second -@code{<< \\ >>}, and the voice is tied across the two constructs. - -@cindex note heads, styles - -@lilypond[quote,verbatim,fragment] -\new Staff \relative c' { - \override NoteHead #'style = #'cross - \override NoteHead #'color = #red - c16 d e f - << - { g4 f e } \\ - { \override NoteHead #'style = #'triangle - \override NoteHead #'color = #blue - r8 e4 d c8 ~ } - >> | - << - { d2 e2 } \\ - { c8 b16 a b8 g ~ g2 } \\ - { \override NoteHead #'style = #'slash - \override NoteHead #'color = #green - s4 b4 c2 } - >> -} -@end lilypond - -Polyphony does not change the relationship of notes within a -@code{\relative @{ @}} block. Each note is calculated relative -to the note immediately preceding it. - -@example -\relative @{ noteA << noteB \\ noteC >> noteD @} -@end example - -@code{noteC} is relative to @code{noteB}, not @code{noteA}; -@code{noteD} is relative to @code{noteC}, not @code{noteB} or -@code{noteA}. - - -@anchor{Explicitly instantiating voices} -@unnumberedsubsubsec Explicitly instantiating voices - -@internalsref{Voice} contexts can also be instantiated manually -inside a @code{<< >>} block to create polyphonic music, using -@code{\voiceOne}, up to @code{\voiceFour} to assign stem directions -and a horizontal shift for each part. - -Specifically, -@example -<< \upper \\ \lower >> -@end example - -@noindent -is equivalent to - -@example -<< - \new Voice = "1" @{ \voiceOne \upper @} - \new Voice = "2" @{ \voiceTwo \lower @} ->> -@end example - -The @code{\voiceXXX} commands set the direction of stems, slurs, ties, -articulations, text annotations, augmentation dots of dotted -notes, and fingerings. @code{\voiceOne} and @code{\voiceThree} make -these objects point upwards, while @code{\voiceTwo} and @code{\voiceFour} -make them point downwards. -The command @code{\oneVoice} will revert back to the normal setting. - -An expression that appears directly inside a @code{<< >>} belongs to -the main voice. This is useful when extra voices appear while the main -voice is playing. Here is a more correct rendition of the example from -the previous section. The crossed colored noteheads demonstrate that the main -melody is now in a single voice context. - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - \override NoteHead #'style = #'cross - \override NoteHead #'color = #red - c16 d e f - \voiceOne - << - { g4 f e | d2 e2 } - \new Voice="1" { \voiceTwo - r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 - \oneVoice - } - \new Voice { \voiceThree - s2. | s4 b4 c2 - \oneVoice - } - >> - \oneVoice -} -@end lilypond - -The correct definition of the voices allows the melody to be slurred. -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - c16^( d e f - \voiceOne - << - { g4 f e | d2 e2) } - \context Voice="1" { \voiceTwo - r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 - \oneVoice - } - \new Voice { \voiceThree - s2. s4 b4 c2 - \oneVoice - } - >> - \oneVoice -} -@end lilypond - -Avoiding the @code{\\} separator also allows nesting polyphony -constructs, which in some case might be a more natural way to typeset -the music. - -@lilypond[quote,ragged-right,verbatim] -\new Staff \relative c' { - c16^( d e f - \voiceOne - << - { g4 f e | d2 e2) } - \context Voice="1" { \voiceTwo - r8 e4 d c8 ~ | - << - {c8 b16 a b8 g ~ g2} - \new Voice { \voiceThree - s4 b4 c2 - \oneVoice - } - >> - \oneVoice - } - >> - \oneVoice -} -@end lilypond - -In some instances of complex polyphonic music, you may need additional -voices to avoid collisions between notes. Additional voices are added -by defining an identifier, as shown below: - -@lilypond[quote,verbatim,ragged-right,relative=2] -voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) - -\relative c''' << - { \voiceOne g4 ~ \stemDown g32[ f( es d c b a b64 )g] } \\ - { \voiceThree b4} \\ - { \voiceFive d,} \\ - { \voiceTwo g,} ->> -@end lilypond - - -@anchor{Collision Resolution} -@unnumberedsubsubsec Collision Resolution - -Normally, note heads with a different number of dots are not merged, but -when the object property @code{merge-differently-dotted} is set in -the @internalsref{NoteCollision} object, they are merged: - -@lilypond[quote,verbatim,fragment,ragged-right,relative=2] -\new Voice << { - g8 g8 - \override Staff.NoteCollision - #'merge-differently-dotted = ##t - g8 g8 -} \\ { g8.[ f16] g8.[ f16] } >> -@end lilypond - -Similarly, you can merge half note heads with eighth notes, by setting -@code{merge-differently-headed}: - -@lilypond[quote,ragged-right,fragment,relative=2,verbatim] -\new Voice << { - c8 c4. - \override Staff.NoteCollision - #'merge-differently-headed = ##t -c8 c4. } \\ { c2 c2 } >> -@end lilypond - -@noindent -@code{merge-differently-headed} and @code{merge-differently-dotted} -only apply to opposing stem directions (ie. Voice 1 & 2). - -LilyPond also vertically shifts rests that are opposite of a stem, -for example - -@lilypond[quote,ragged-right,fragment,verbatim] -\new Voice << c''4 \\ r4 >> -@end lilypond - -If three or more notes line up in the same column, -@code{merge-differently-headed} cannot -successfully complete the merge of the two notes that should be merged. -To allow the merge to work properly, apply a @code{\shift} to the note that -should not be merged. In the first measure of following example, -@code{merge-differently-headed} does not work (the half-note head is -solid). In the second measure, @code{\shiftOn} is applied to move the -top @code{g} out of the column, and @code{merge-differently-headed} -works properly. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\override Staff.NoteCollision #'merge-differently-headed = ##t -<< - { d=''2 g2 } \\ - { \oneVoice d=''8 c8 r4 e,8 c'8 r4 } \\ - { \voiceFour e,,2 e'2} ->> -<< - { d'=''2 \shiftOn g2 } \\ - { \oneVoice d=''8 c8 r4 e,8 c'8 r4 } \\ - { \voiceFour e,,2 e'2} ->> -@end lilypond - - -@refcommands - -@funindex \oneVoice -@code{\oneVoice}, -@funindex \voiceOne -@code{\voiceOne}, -@funindex \voiceTwo -@code{\voiceTwo}, -@funindex \voiceThree -@code{\voiceThree}, -@funindex \voiceFour -@code{\voiceFour}. - -@funindex \shiftOn -@code{\shiftOn}, -@funindex \shiftOnn -@code{\shiftOnn}, -@funindex \shiftOnnn -@code{\shiftOnnn}, -@funindex \shiftOff -@code{\shiftOff}: these commands specify the -degree to which chords of the current voice should be shifted. -The outer voices (normally: voice one and -two) have @code{\shiftOff}, while the inner voices (three and four) -have @code{\shiftOn}. @code{\shiftOnn} and @code{\shiftOnnn} define -further shift levels. - -When LilyPond cannot cope, the @code{force-hshift} -property of the @internalsref{NoteColumn} object and pitched rests can -be used to override typesetting decisions. - -@lilypond[quote,verbatim,ragged-right] -\relative << -{ - - -} \\ { - - \once \override NoteColumn #'force-hshift = #1.7 - -} >> -@end lilypond - - -@seealso - -Program reference: the objects responsible for resolving collisions are -@internalsref{NoteCollision} and @internalsref{RestCollision}. - - -@refbugs - -When using @code{merge-differently-headed} with an upstem eighth or a -shorter note, and a downstem half note, the eighth note gets the wrong -offset. - -There is no support for clusters where the same note occurs with -different accidentals in the same chord. In this case, it is -recommended to use enharmonic transcription, or to use special cluster -notation (see @ref{Clusters}). - - - @node Staff notation @section Staff notation @@ -570,70 +179,6 @@ Program reference: @internalsref{StaffSymbol}. Examples: @lsrdir{staff} -@anchor{Writing music in parallel} -@unnumberedsubsubsec Writing music in parallel - -@cindex Writing music in parallel -@cindex Interleaved music - -Music for multiple parts can be interleaved - -@lilypond[quote,fragment,verbatim] -\parallelMusic #'(voiceA voiceB) { - r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c'' e''] | - c'2 c'2 | - r8 a'16[ d''] f''[ a' d'' f''] r8 a'16[ d''] f''[ a' d'' f''] | - c'2 c'2 | -} -\new StaffGroup << - \new Staff \new Voice \voiceA - \new Staff \new Voice \voiceB ->> -@end lilypond - -This works quite well for piano music - -@lilypond[quote,verbatim] -music = { - \key c \major - \time 4/4 - \parallelMusic #'(voiceA voiceB voiceC voiceD) { - % Bar 1 - r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c'' -e''] | - c'2 c'2 | - r8 a16[ d'] f'[ a d' f'] r8 a16[ d'] f'[ a d' f'] | - c2 c2 | - - % Bar 2 - a'8 b' c'' d'' e'' f'' g'' a'' | - d'4 d' d' d' | - c16 d e f d e f g e f g a f g a b | - a,4 a,4 a,4 a,4 | - - % Bar 3 ... - } -} - -\score { - \new PianoStaff << - \music - \new Staff << - \voiceA \\ - \voiceB - >> - \new Staff { - \clef bass - << - \voiceC \\ - \voiceD - >> - } - >> -} -@end lilypond - - @node Connecting notes @section Connecting notes @@ -728,393 +273,4 @@ Examples: @lsr{expressive,fingering-chords.ly} -@node Repeats -@section Repeats - -Repetition is a central concept in music, and multiple notations exist -for repetitions. - -@menu -* Repeat types:: -* Repeat syntax:: -* Repeats and MIDI:: -* Manual repeat commands:: -* Tremolo repeats:: -* Tremolo subdivisions:: -* Measure repeats:: -@end menu - - -@anchor{Repeat types} -@unnumberedsubsubsec Repeat types - -@cindex repeats - -The following types of repetition are supported - -@table @code -@item unfold -Repeated music is fully written (played) out. This is useful when -entering repetitious music. This is the only kind of repeat that -is included in MIDI output. - -@item volta -Repeats are not written out, but alternative endings (volte) are -printed, left to right with brackets. This is the standard notation -for repeats with alternatives. These are not played in MIDI output by -default. - - -@item tremolo -Make tremolo beams. These are not played in MIDI output by default. - -@item percent -Make beat or measure repeats. These look like percent signs. These -are not played in MIDI output by default. Percent repeats must be -declared within a @code{Voice} context. - -@end table - - -@anchor{Repeat syntax} -@unnumberedsubsubsec Repeat syntax - -@cindex volta -@cindex prima volta -@cindex seconda volta -@funindex \repeat - -LilyPond has one syntactic construct for specifying different types of -repeats. The syntax is - -@example -\repeat @var{variant} @var{repeatcount} @var{repeatbody} -@end example - -If you have alternative endings, you may add -@funindex \alternative -@example -\alternative @{ - @var{alternative1} - @var{alternative2} - @var{alternative3} - @dots{} -@} -@end example - -@noindent -where each @var{alternative} is a music expression. If you do not -give enough alternatives for all of the repeats, the first alternative -is assumed to be played more than once. - -Standard repeats are used like this - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -c1 -\repeat volta 2 { c4 d e f } -\repeat volta 2 { f e d c } -@end lilypond - -With alternative endings - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -c1 -\repeat volta 2 {c4 d e f} -\alternative { {d2 d} {f f,} } -@end lilypond - -Repeats with upbeats may be created. - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\new Staff { - \partial 4 e | - \repeat volta 4 { c2 d2 | e2 f2 | } - \alternative { { g4 g g e } { a a a a | b2. } } -} -@end lilypond - -@noindent -or - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -\new Staff { - \partial 4 - \repeat volta 4 { e | c2 d2 | e2 f2 | } - \alternative { { \partial 4*3 g4 g g } { a a a a | b2. } } -} -@end lilypond - - - -@funindex \repeatTie - -Ties may be added to a second ending, - -@lilypond[quote,ragged-right,fragment,verbatim,relative=2] -c1 -\repeat volta 2 {c4 d e f ~ } -\alternative { {f2 d} {f\repeatTie f,} } -@end lilypond - -It is possible to shorten volta brackets -by setting @code{voltaSpannerDuration}. In the next example, the -bracket only lasts one measure, which is a duration of 3/4. - -@lilypond[verbatim,ragged-right,quote] -\relative c''{ - \time 3/4 - c c c - \set Score.voltaSpannerDuration = #(ly:make-moment 3 4) - \repeat volta 5 { d d d } - \alternative { { e e e f f f } - { g g g } } -} -@end lilypond - -If you want to start a repeat at the beginning of a line and have a -double bar at the end of the previous line, use -@example -@dots{} \bar "||:" \break -\repeat volta 2 @{ @dots{} -@end example -see @ref{Bar lines} for more information. - -@seealso - -Program reference: @internalsref{VoltaBracket}, -@internalsref{RepeatedMusic}, -@internalsref{VoltaRepeatedMusic}, and -@internalsref{UnfoldedRepeatedMusic}. - -Examples: - -Brackets for the repeat are normally only printed over the topmost -staff. This can be adjusted by moving @code{Volta_engraver} to the -Staff context where you want the brackets to appear; -see @ref{Modifying context plug-ins} and - -@lsr{repeats,volta@/-multi@/-staff@/.ly}. - - -@refbugs - -@cindex repeat, ambiguous - -A nested repeat like - -@example -\repeat @dots{} -\repeat @dots{} -\alternative -@end example - -@noindent -is ambiguous, since it is is not clear to which @code{\repeat} the -@code{\alternative} belongs. This ambiguity is resolved by always -having the @code{\alternative} belong to the inner @code{\repeat}. -For clarity, it is advisable to use braces in such situations. - -Timing information is not remembered at the start of an alternative, -so after a repeat timing information must be reset by hand; for -example, by setting @code{Score.measurePosition} or entering -@code{\partial}. Similarly, slurs or ties are also not repeated. - - -@anchor{Repeats and MIDI} -@unnumberedsubsubsec Repeats and MIDI - -@cindex expanding repeats -@funindex \unfoldRepeats - -With a little bit of tweaking, all types of repeats can be present -in the MIDI output. This is achieved by applying the -@code{\unfoldRepeats} music function. This function changes all -repeats to unfold repeats. - -@lilypond[quote,verbatim,fragment,line-width=8.0\cm] -\unfoldRepeats { - \repeat tremolo 8 {c'32 e' } - \repeat percent 2 { c''8 d'' } - \repeat volta 2 {c'4 d' e' f'} - \alternative { - { g' a' a' g' } - {f' e' d' c' } - } -} -\bar "|." -@end lilypond - -When creating a score file using @code{\unfoldRepeats} for MIDI, -it is necessary to make two @code{\score} blocks: one for MIDI (with -unfolded repeats) and one for notation (with volta, tremolo, and -percent repeats). For example, - -@example -\score @{ - @var{..music..} - \layout @{ .. @} -@} -\score @{ - \unfoldRepeats @var{..music..} - \midi @{ .. @} -@} -@end example - - -@anchor{Manual repeat commands} -@unnumberedsubsubsec Manual repeat commands - -@funindex repeatCommands - -The property @code{repeatCommands} can be used to control the layout of -repeats. Its value is a Scheme list of repeat commands. - -@table @asis -@item @code{start-repeat} -Print a @code{|:} bar line. - -@item @code{end-repeat} -Print a @code{:|} bar line. - -@item @code{(volta @var{text})} -Print a volta bracket saying @var{text}: The text can be specified as -a text string or as a markup text, see @ref{Text markup}. Do not -forget to change the font, as the default number font does not contain -alphabetic characters; - -@item @code{(volta #f)} -Stop a running volta bracket. -@end table - -@lilypond[quote,ragged-right,verbatim,fragment,relative=2] -c4 - \set Score.repeatCommands = #'((volta "93") end-repeat) -c4 c4 - \set Score.repeatCommands = #'((volta #f)) -c4 c4 -@end lilypond - - -@seealso - -Program reference: @internalsref{VoltaBracket}, -@internalsref{RepeatedMusic}, -@internalsref{VoltaRepeatedMusic}, and -@internalsref{UnfoldedRepeatedMusic}. - - -@anchor{Tremolo repeats} -@unnumberedsubsubsec Tremolo repeats - -@cindex tremolo beams - -To place tremolo marks between notes, use @code{\repeat} with tremolo -style -@lilypond[quote,verbatim,ragged-right] -\new Voice \relative c' { - \repeat tremolo 8 { c16 d16 } - \repeat tremolo 4 { c16 d16 } - \repeat tremolo 2 { c16 d16 } -} -@end lilypond - -Tremolo marks can also be put on a single note. In this case, the -note should not be surrounded by braces. -@lilypond[quote,verbatim,ragged-right] -\repeat tremolo 4 c'16 -@end lilypond - -Similar output is obtained using the tremolo subdivision, described in -@ref{Tremolo subdivisions}. - - -@seealso - -In this manual: @ref{Tremolo subdivisions}, @ref{Repeats}. - -Program reference: @internalsref{Beam}, @internalsref{StemTremolo}. - - -@anchor{Tremolo subdivisions} -@unnumberedsubsubsec Tremolo subdivisions - -@cindex tremolo marks -@funindex tremoloFlags - -Tremolo marks can be printed on a single note by adding -@q{@code{:}[@var{number}]} after the note. The number indicates the -duration of the subdivision, and it must be at least 8. A -@var{length} value of 8 gives one line across the note stem. If the -length is omitted, the last value (stored in @code{tremoloFlags}) is -used - -@lilypond[quote,ragged-right,verbatim,fragment] -c'2:8 c':32 | c': c': | -@end lilypond - - -@refbugs - -Tremolos entered in this way do not carry over into the MIDI output. - - -@seealso - -In this manual: @ref{Tremolo repeats}. - -Elsewhere: @internalsref{StemTremolo}. - - -@anchor{Measure repeats} -@unnumberedsubsubsec Measure repeats - -@cindex percent repeats -@cindex measure repeats - -In the @code{percent} style, a note pattern can be repeated. It is -printed once, and then the pattern is replaced with a special sign. -Patterns of one and two measures are replaced by percent-like signs, -patterns that divide the measure length are replaced by slashes. -Percent repeats must be declared within a @code{Voice} context. - -@lilypond[quote,verbatim,ragged-right] -\new Voice \relative c' { - \repeat percent 4 { c4 } - \repeat percent 2 { c2 es2 f4 fis4 g4 c4 } -} -@end lilypond - -Measure repeats of more than 2 measures get a counter, if you switch -on the @code{countPercentRepeats} property, - -@lilypond[relative=2,fragment,quote,verbatim,ragged-right] -\new Voice { -\set countPercentRepeats = ##t - \repeat percent 4 { c1 } -} -@end lilypond - - - -Isolated percents can also be printed. This is done by putting a -multi-measure rest with a different print function, - -@lilypond[fragment,verbatim,quote] -\override MultiMeasureRest #'stencil - = #ly:multi-measure-rest::percent -R1 -@end lilypond - - - - -@seealso - -Program reference: @internalsref{RepeatSlash}, -@internalsref{PercentRepeat}, @internalsref{DoublePercentRepeat}, -@internalsref{DoublePercentRepeatCounter}, -@internalsref{PercentRepeatCounter}, -@internalsref{PercentRepeatedMusic}. - - diff --git a/Documentation/user/notation.itely b/Documentation/user/notation.itely index 8809e9396f..579854a4fd 100644 --- a/Documentation/user/notation.itely +++ b/Documentation/user/notation.itely @@ -6,13 +6,17 @@ This chapter explains how to create musical notation. @menu -* Pitches:: Writing and display the pitches of notes. -* Rhythms:: Writing and displaying the durations of notes. -* Expressive marks:: Adding expression to notes. +* Pitches:: Writing and display the pitches of notes. +* Rhythms:: Writing and displaying the durations of notes. +* Expressive marks:: Adding expression to notes. +* Repeats:: Repeat music. +* Simultaneous notes:: More than one note at once. @end menu @include pitch.itely @include rhythms.itely @include expressive.itely +@include repeats.itely +@include simultaneous.itely diff --git a/Documentation/user/simultaneous.itely b/Documentation/user/simultaneous.itely new file mode 100644 index 0000000000..9af8f61c8e --- /dev/null +++ b/Documentation/user/simultaneous.itely @@ -0,0 +1,587 @@ +@c -*- coding: utf-8; mode: texinfo; -*- + +@node Simultaneous notes +@section Simultaneous notes + +Polyphony in music refers to having more than one voice occurring in +a piece of music. Polyphony in LilyPond refers to having more than +one voice on the same staff. + +@menu +* Single voice:: +* Multiple voices:: +@end menu + + +@node Single voice +@subsection Single voice + +@anchor{Chords} +@unnumberedsubsubsec Chords + +@cindex Chords + +A chord is formed by a enclosing a set of pitches between @code{<} +and @code{>}. A chord may be followed by a duration, and a set of +articulations, just like simple notes + +@lilypond[verbatim,ragged-right,fragment,quote,relative=1] +4 8 +@end lilypond + +For more information about chords, see @ref{Chord names}. + + +@c I don't like having this here, but I can't think of +@c anywhere else to put it. :( -gp +@anchor{Stems} +@unnumberedsubsubsec Stems + +Whenever a note is found, a @internalsref{Stem} object is created +automatically. For whole notes and rests, they are also created but +made invisible. + +@refcommands + +@funindex \stemUp +@code{\stemUp}, +@funindex \stemDown +@code{\stemDown}, +@funindex \stemNeutral +@code{\stemNeutral}. + + +@commonprop + +To change the direction of stems in the middle of the staff, use + +@lilypond[quote,ragged-right,fragment,relative=2,verbatim] +a4 b c b +\override Stem #'neutral-direction = #up +a4 b c b +\override Stem #'neutral-direction = #down +a4 b c b +@end lilypond + + +@anchor{Clusters} +@unnumberedsubsubsec Clusters + +@cindex cluster + +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,ragged-right,relative=2,fragment,verbatim] +\makeClusters { } +@end lilypond + +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 + +Program reference: @internalsref{ClusterSpanner}, +@internalsref{ClusterSpannerBeacon}, +@internalsref{Cluster_spanner_engraver}. + +Examples: @lsr{contemporary,cluster@/.ly}. + +@refbugs + +Music expressions like @code{<< @{ g8 e8 @} a4 >>} are not printed +accurately. Use @code{8 8} instead. + + + +@node Multiple voices +@subsection Multiple voices + +@anchor{Basic polyphony} +@unnumberedsubsubsec Basic polyphony + +@cindex polyphony + +The easiest way to enter fragments with more than one voice on a staff +is to enter each voice as a sequence (with @code{@{...@}}), and combine +them simultaneously, separating the voices with @code{\\} + +@funindex \\ + +@lilypond[quote,verbatim,fragment] +\new Staff \relative c' { + c16 d e f + << + { g4 f e | d2 e2 } \\ + { r8 e4 d c8 ~ | c b16 a b8 g ~ g2 } \\ + { s2. | s4 b4 c2 } + >> +} +@end lilypond + +The separator causes @internalsref{Voice} contexts@footnote{Polyphonic +voices are sometimes called @q{layers} in other notation packages} +@cindex layers +to be instantiated. They bear the names @code{"1"}, @code{"2"}, etc. In +each of these contexts, vertical direction of slurs, stems, etc., is set +appropriately. + +These voices are all separate from the voice that contains the notes just +outside the @code{<< \\ >>} construct. This should be noted when making +changes at the voice level. This also means that slurs and ties cannot go +into or out of a @code{<< \\ >>} construct. Conversely, parallel voices +from separate @code{<< \\ >>} constructs on the same staff are the +same voice. Here is the same example, with different noteheads and +colors for each +voice. Note that the change to the note-head style in the main voice does +not affect +the inside of the @code{<< \\ >>} constructs. Also, the change to the +second +voice in the first @code{<< \\ >>} construct is effective in the second +@code{<< \\ >>}, and the voice is tied across the two constructs. + +@cindex note heads, styles + +@lilypond[quote,verbatim,fragment] +\new Staff \relative c' { + \override NoteHead #'style = #'cross + \override NoteHead #'color = #red + c16 d e f + << + { g4 f e } \\ + { \override NoteHead #'style = #'triangle + \override NoteHead #'color = #blue + r8 e4 d c8 ~ } + >> | + << + { d2 e2 } \\ + { c8 b16 a b8 g ~ g2 } \\ + { \override NoteHead #'style = #'slash + \override NoteHead #'color = #green + s4 b4 c2 } + >> +} +@end lilypond + +Polyphony does not change the relationship of notes within a +@code{\relative @{ @}} block. Each note is calculated relative +to the note immediately preceding it. + +@example +\relative @{ noteA << noteB \\ noteC >> noteD @} +@end example + +@code{noteC} is relative to @code{noteB}, not @code{noteA}; +@code{noteD} is relative to @code{noteC}, not @code{noteB} or +@code{noteA}. + + +@anchor{Explicitly instantiating voices} +@unnumberedsubsubsec Explicitly instantiating voices + +@internalsref{Voice} contexts can also be instantiated manually +inside a @code{<< >>} block to create polyphonic music, using +@code{\voiceOne}, up to @code{\voiceFour} to assign stem directions +and a horizontal shift for each part. + +Specifically, +@example +<< \upper \\ \lower >> +@end example + +@noindent +is equivalent to + +@example +<< + \new Voice = "1" @{ \voiceOne \upper @} + \new Voice = "2" @{ \voiceTwo \lower @} +>> +@end example + +The @code{\voiceXXX} commands set the direction of stems, slurs, ties, +articulations, text annotations, augmentation dots of dotted +notes, and fingerings. @code{\voiceOne} and @code{\voiceThree} make +these objects point upwards, while @code{\voiceTwo} and @code{\voiceFour} +make them point downwards. +The command @code{\oneVoice} will revert back to the normal setting. + +An expression that appears directly inside a @code{<< >>} belongs to +the main voice. This is useful when extra voices appear while the main +voice is playing. Here is a more correct rendition of the example from +the previous section. The crossed colored noteheads demonstrate that the main +melody is now in a single voice context. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \override NoteHead #'style = #'cross + \override NoteHead #'color = #red + c16 d e f + \voiceOne + << + { g4 f e | d2 e2 } + \new Voice="1" { \voiceTwo + r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 + \oneVoice + } + \new Voice { \voiceThree + s2. | s4 b4 c2 + \oneVoice + } + >> + \oneVoice +} +@end lilypond + +The correct definition of the voices allows the melody to be slurred. +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + \voiceOne + << + { g4 f e | d2 e2) } + \context Voice="1" { \voiceTwo + r8 e4 d c8 ~ | c8 b16 a b8 g ~ g2 + \oneVoice + } + \new Voice { \voiceThree + s2. s4 b4 c2 + \oneVoice + } + >> + \oneVoice +} +@end lilypond + +Avoiding the @code{\\} separator also allows nesting polyphony +constructs, which in some case might be a more natural way to typeset +the music. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + \voiceOne + << + { g4 f e | d2 e2) } + \context Voice="1" { \voiceTwo + r8 e4 d c8 ~ | + << + {c8 b16 a b8 g ~ g2} + \new Voice { \voiceThree + s4 b4 c2 + \oneVoice + } + >> + \oneVoice + } + >> + \oneVoice +} +@end lilypond + +In some instances of complex polyphonic music, you may need additional +voices to avoid collisions between notes. Additional voices are added +by defining an identifier, as shown below: + +@lilypond[quote,verbatim,ragged-right,relative=2] +voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) + +\relative c''' << + { \voiceOne g4 ~ \stemDown g32[ f( es d c b a b64 )g] } \\ + { \voiceThree b4} \\ + { \voiceFive d,} \\ + { \voiceTwo g,} +>> +@end lilypond + + +@anchor{Collision Resolution} +@unnumberedsubsubsec Collision Resolution + +Normally, note heads with a different number of dots are not merged, but +when the object property @code{merge-differently-dotted} is set in +the @internalsref{NoteCollision} object, they are merged: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\new Voice << { + g8 g8 + \override Staff.NoteCollision + #'merge-differently-dotted = ##t + g8 g8 +} \\ { g8.[ f16] g8.[ f16] } >> +@end lilypond + +Similarly, you can merge half note heads with eighth notes, by setting +@code{merge-differently-headed}: + +@lilypond[quote,ragged-right,fragment,relative=2,verbatim] +\new Voice << { + c8 c4. + \override Staff.NoteCollision + #'merge-differently-headed = ##t +c8 c4. } \\ { c2 c2 } >> +@end lilypond + +@noindent +@code{merge-differently-headed} and @code{merge-differently-dotted} +only apply to opposing stem directions (ie. Voice 1 & 2). + +LilyPond also vertically shifts rests that are opposite of a stem, +for example + +@lilypond[quote,ragged-right,fragment,verbatim] +\new Voice << c''4 \\ r4 >> +@end lilypond + +If three or more notes line up in the same column, +@code{merge-differently-headed} cannot +successfully complete the merge of the two notes that should be merged. +To allow the merge to work properly, apply a @code{\shift} to the note that +should not be merged. In the first measure of following example, +@code{merge-differently-headed} does not work (the half-note head is +solid). In the second measure, @code{\shiftOn} is applied to move the +top @code{g} out of the column, and @code{merge-differently-headed} +works properly. + +@lilypond[quote,ragged-right,fragment,verbatim,relative=2] +\override Staff.NoteCollision #'merge-differently-headed = ##t +<< + { d=''2 g2 } \\ + { \oneVoice d=''8 c8 r4 e,8 c'8 r4 } \\ + { \voiceFour e,,2 e'2} +>> +<< + { d'=''2 \shiftOn g2 } \\ + { \oneVoice d=''8 c8 r4 e,8 c'8 r4 } \\ + { \voiceFour e,,2 e'2} +>> +@end lilypond + + +@refcommands + +@funindex \oneVoice +@code{\oneVoice}, +@funindex \voiceOne +@code{\voiceOne}, +@funindex \voiceTwo +@code{\voiceTwo}, +@funindex \voiceThree +@code{\voiceThree}, +@funindex \voiceFour +@code{\voiceFour}. + +@funindex \shiftOn +@code{\shiftOn}, +@funindex \shiftOnn +@code{\shiftOnn}, +@funindex \shiftOnnn +@code{\shiftOnnn}, +@funindex \shiftOff +@code{\shiftOff}: these commands specify the +degree to which chords of the current voice should be shifted. +The outer voices (normally: voice one and +two) have @code{\shiftOff}, while the inner voices (three and four) +have @code{\shiftOn}. @code{\shiftOnn} and @code{\shiftOnnn} define +further shift levels. + +When LilyPond cannot cope, the @code{force-hshift} +property of the @internalsref{NoteColumn} object and pitched rests can +be used to override typesetting decisions. + +@lilypond[quote,verbatim,ragged-right] +\relative << +{ + + +} \\ { + + \once \override NoteColumn #'force-hshift = #1.7 + +} >> +@end lilypond + + +@seealso + +Program reference: the objects responsible for resolving collisions are +@internalsref{NoteCollision} and @internalsref{RestCollision}. + + +@refbugs + +When using @code{merge-differently-headed} with an upstem eighth or a +shorter note, and a downstem half note, the eighth note gets the wrong +offset. + +There is no support for clusters where the same note occurs with +different accidentals in the same chord. In this case, it is +recommended to use enharmonic transcription, or to use special cluster +notation (see @ref{Clusters}). + + +@anchor{Automatic part combining} +@unnumberedsubsubsec Automatic part combining +@cindex automatic part combining +@cindex part combiner + +Automatic part combining is used to merge two parts of music onto a +staff. It is aimed at typesetting orchestral scores. When the two +parts are identical for a period of time, only one is shown. In +places where the two parts differ, they are typeset as separate +voices, and stem directions are set automatically. Also, solo and +@emph{a due} parts are identified and can be marked. + +The syntax for part combining is + +@example +\partcombine @var{musicexpr1} @var{musicexpr2} +@end example + + +The following example demonstrates the basic functionality of the part +combiner: putting parts on one staff, and setting stem directions and +polyphony + +@lilypond[quote,verbatim,ragged-right,fragment] +\new Staff \partcombine + \relative g' { g g a( b) c c r r } + \relative g' { g g r4 r e e g g } +@end lilypond + +The first @code{g} appears only once, although it was +specified twice (once in each part). Stem, slur, and tie directions are +set automatically, depending whether there is a solo or unisono. The +first part (with context called @code{one}) always gets up stems, and +@q{Solo}, while the second (called @code{two}) always gets down stems and +@q{Solo II}. + +If you just want the merging parts, and not the textual markings, you +may set the property @code{printPartCombineTexts} to false + +@lilypond[quote,verbatim,ragged-right,fragment,relative=2] +\new Staff << + \set Staff.printPartCombineTexts = ##f + \partcombine + \relative g' { g a( b) r } + \relative g' { g r4 r f } +>> +@end lilypond + +To change the text that is printed for solos or merging, you may +set the @code{soloText}, @code{soloIIText}, and @code{aDueText} +properties. + +@lilypond[quote,verbatim,ragged-right,fragment,relative=2] +\new Staff << + \set Score.soloText = #"ichi" + \set Score.soloIIText = #"ni" + \set Score.aDueText = #"tachi" + \partcombine + \relative g' { g4 g a( b) r } + \relative g' { g4 g r r f } +>> +@end lilypond + +Both arguments to @code{\partcombine} will be interpreted as +@internalsref{Voice} contexts. If using relative octaves, +@code{\relative} should be specified for both music expressions, i.e., + +@example +\partcombine + \relative @dots{} @var{musicexpr1} + \relative @dots{} @var{musicexpr2} +@end example + +@noindent +A @code{\relative} section that is outside of @code{\partcombine} has +no effect on the pitches of @var{musicexpr1} and @var{musicexpr2}. + +@seealso + +Program reference: @internalsref{PartCombineMusic}. + +@refbugs + +When @code{printPartCombineTexts} is set, when the two voices play the +same notes on and off, the part combiner may typeset @code{a2} more +than once in a measure. + +@code{\partcombine} cannot be inside @code{\times}. + +@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 @internalsref{Voice} contexts, the events in those +will be ignored. + + +@anchor{Writing music in parallel} +@unnumberedsubsubsec Writing music in parallel + +@cindex Writing music in parallel +@cindex Interleaved music + +Music for multiple parts can be interleaved + +@lilypond[quote,fragment,verbatim] +\parallelMusic #'(voiceA voiceB) { + r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c'' e''] | + c'2 c'2 | + r8 a'16[ d''] f''[ a' d'' f''] r8 a'16[ d''] f''[ a' d'' f''] | + c'2 c'2 | +} +\new StaffGroup << + \new Staff \new Voice \voiceA + \new Staff \new Voice \voiceB +>> +@end lilypond + +This works quite well for piano music + +@lilypond[quote,verbatim] +music = { + \key c \major + \time 4/4 + \parallelMusic #'(voiceA voiceB voiceC voiceD) { + % Bar 1 + r8 g'16[ c''] e''[ g' c'' e''] r8 g'16[ c''] e''[ g' c'' +e''] | + c'2 c'2 | + r8 a16[ d'] f'[ a d' f'] r8 a16[ d'] f'[ a d' f'] | + c2 c2 | + + % Bar 2 + a'8 b' c'' d'' e'' f'' g'' a'' | + d'4 d' d' d' | + c16 d e f d e f g e f g a f g a b | + a,4 a,4 a,4 a,4 | + + % Bar 3 ... + } +} + +\score { + \new PianoStaff << + \music + \new Staff << + \voiceA \\ + \voiceB + >> + \new Staff { + \clef bass + << + \voiceC \\ + \voiceD + >> + } + >> +} +@end lilypond + + + -- 2.39.5