X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fuser%2Fchanging-defaults.itely;h=b63980e924431bc738d5dba35a20ff9a648fa636;hb=1423508c355989fa26a8cfe5985b0d6e1ab0a538;hp=9962c220d07507995ebf9eda8f04adadbdfca5b4;hpb=5c9c9c0ae6cd4bed8f7a2c62b2c014f3659a188a;p=lilypond.git diff --git a/Documentation/user/changing-defaults.itely b/Documentation/user/changing-defaults.itely index 9962c220d0..b63980e924 100644 --- a/Documentation/user/changing-defaults.itely +++ b/Documentation/user/changing-defaults.itely @@ -7,7 +7,7 @@ version that you are working on. See TRANSLATION for details. @end ignore -@c \version "2.11.65" +@c \version "2.12.0" @node Changing defaults @chapter Changing defaults @@ -57,6 +57,7 @@ This section describes what contexts are, and how to modify them. @menu * Contexts explained:: * Creating contexts:: +* Keeping contexts alive:: * Modifying context plug-ins:: * Changing context default settings:: * Defining new contexts:: @@ -402,6 +403,156 @@ these forms @end itemize +@node Keeping contexts alive +@subsection Keeping contexts alive + +@cindex contexts, keeping alive +@cindex contexts, lifetime + +Contexts are usually terminated at the first musical moment in +which they have nothing to do. So @code{Voice} contexts die as +soon as they contain no events; @code{Staff} contexts die as soon +as all the @code{Voice} contexts within them contain no events; etc. +This can cause difficulties if earlier contexts which have died +have to be referenced, for example, when changing staves with +@code{\change} commands, associating lyrics with a voice with +@code{\lyricsto} commands, or when adding further musical events to +an earlier context. + +There is an exception to this general rule: just one of the +@code{Voice} contexts in a @code{Staff} context or in a +@code{<<...>>} construct will always persist to the end of the +enclosing @code{Staff} context or @code{<<...>>} construct, even +though there may be periods when it has nothing to do. The context +to persist in this way will be the first one encountered in the +first enclosed @code{@{...@}} construct, ignoring any in enclosed +@code{<<...>>} constructs. + +Any context can be kept alive by ensuring it has something to do at +every musical moment. @code{Staff} contexts are kept alive by +ensuring one of their voices is kept alive. One way of doing this +is to add spacer rests to a voice in parallel with the real music. +These need to be added to every @code{Voice} context which needs to +be kept alive. If several voices are to be used sporadically it is +safest to keep them all alive rather than attempting to rely on the +exceptions mentioned above. + +In the following example, both voice A and voice B are kept alive +in this way for the duration of the piece: + +@lilypond[quote,verbatim] +musicA = \relative c'' { d4 d d d } +musicB = \relative c'' { g4 g g g } +keepVoicesAlive = { + << + \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars + \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars + >> +} + +music = { + \context Voice = "A" { + \voiceOneStyle + \musicA + } + \context Voice = "B" { + \voiceTwoStyle + \musicB + } + \context Voice = "A" { \musicA } + \context Voice = "B" { \musicB } + \context Voice = "A" { \musicA } +} + +\score { + \new Staff << + \keepVoicesAlive + \music + >> +} +@end lilypond + +@cindex lyrics, aligning with sporadic melody + +The following example shows how a sporadic melody line with lyrics +might be written using this approach. In a real situation the +melody and accompaniment would consist of several different +sections, of course. + +@lilypond[quote,verbatim] +melody = \relative c'' { a4 a a a } +accompaniment = \relative c' { d4 d d d } +words = \lyricmode { These words fol -- low the mel -- o -- dy } +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + s1*4 % Keep Voice "melody" alive for 4 bars + } + { + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + \context Voice = "accompaniment" { \accompaniment } + << + \context Voice = "melody" { \melody } + \context Voice = "accompaniment" { \accompaniment } + >> + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + +An alternative way, which may be better in many circumstances, is +to keep the melody line alive by simply including spacer notes to +line it up correctly with the accompaniment: + +@lilypond[quote,verbatim] +melody = \relative c'' { + s1 % skip a bar + a4 a a a + s1 % skip a bar + a4 a a a +} +accompaniment = \relative c' { + d4 d d d + d4 d d d + d4 d d d + d4 d d d +} +words = \lyricmode { These words fol -- low the mel -- o -- dy } + +\score { + << + \new Staff = "music" { + << + \new Voice = "melody" { + \voiceOne + \melody + } + \new Voice = "accompaniment" { + \voiceTwo + \accompaniment + } + >> + } + \new Lyrics \with { alignAboveContext = #"music" } + \lyricsto "melody" { \words } + >> +} +@end lilypond + @node Modifying context plug-ins @subsection Modifying context plug-ins @@ -602,6 +753,7 @@ to indicate improvisation in jazz pieces, \name ImproVoice \type "Engraver_group" \consists "Note_heads_engraver" + \consists "Rhythmic_column_engraver" \consists "Text_engraver" \consists Pitch_squash_engraver squashedPosition = #0 @@ -1480,7 +1632,7 @@ command to remain immediately adjacent to the object to which it is to apply after the input file has been converted to a music stream. This is often not the case, as many additional elements are inserted into the music stream implicitly. For example, when a note which is -not part of a chord is processed, Lilypond implicitly inserts a +not part of a chord is processed, LilyPond implicitly inserts a @code{ChordEvent} event before the note, so separating the tweak from the note. However, if chord symbols are placed round the tweak and the note, the @code{\tweak} command comes after the @@ -1521,12 +1673,12 @@ and @code{\tweak} may be used to modify any single occurrence of these items. Notably the @code{\tweak} command cannot be used to modify stems, -beams or accidentals, since these are generated later by note heads, -rather than by music elements in the input stream. Nor can a -@code{\tweak} command be used to modify clefs or time signatures, -since these become separated from any preceding @code{\tweak} -command in the input stream by the automatic insertion of extra -elements required to specify the context. +beams or accidentals directly, since these are generated later by +note heads, rather than by music elements in the input stream. +Nor can a @code{\tweak} command be used to modify clefs or time +signatures, since these become separated from any preceding +@code{\tweak} command in the input stream by the automatic +insertion of extra elements required to specify the context. But the @code{\tweak} command can be used as an alternative to the @code{\override} command to modify those notational elements @@ -1799,6 +1951,15 @@ indicator is @strong{always} required before @item articulation shortcuts, e.g. @code{-.}, @code{->}, @code{--} @end itemize +These indications affect only the next note. + +@lilypond[verbatim,quote,relative=2] +c2( c) +c2_( c) +c2( c) +c2^( c) +@end lilypond + @strong{The direction property} The position or direction of many layout objects is controlled @@ -1836,6 +1997,17 @@ TrillPitchAccidental - not tried TrillPitchGroup - not tried @end ignore +These indications affect all notes until they are cancelled. + +@lilypond[verbatim,quote,relative=2] +c2( c) +\slurDown +c2( c) +c2( c) +\slurNeutral +c2( c) +@end lilypond + @node Distances and measurements @@ -3109,6 +3281,11 @@ Notation Reference: @node Modifying ties and slurs @unnumberedsubsubsec Modifying ties and slurs +@cindex slurs, modifying +@cindex ties, modifying +@cindex Bézier curves +@cindex Bézier control points + Ties, slurs and phrasing slurs are drawn as third-order Bézier curves. If the shape of the tie or slur which is calculated automatically is not optimum, the shape may be modified manually by @@ -3157,13 +3334,16 @@ scaling can be achieved by applying the same transformation to the curve's control points. For the example above the following override gives a satisfactory -tie: +tie. Note the placement -- it has to be immediately before the note +to which the start of the tie (or slur) is attached. @lilypond[verbatim,quote,relative=1] << - \once \override Tie - #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) - { e1 ~ e1 } + { + \once \override Tie + #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) + e1 ~ e1 + } \\ { r4 4 } >>