X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Flearning%2Ffundamental.itely;h=8e8fd91b6e898fd5e54da600fc431d88f6465fce;hb=5d84bfad4626892bcffd05adcced53c8a2329047;hp=e895d268ca057c932474c6b38d616e334bee3601;hpb=31edfca6b2df921056bf24f2a0d0ab5573454639;p=lilypond.git diff --git a/Documentation/learning/fundamental.itely b/Documentation/learning/fundamental.itely index e895d268ca..8e8fd91b6e 100644 --- a/Documentation/learning/fundamental.itely +++ b/Documentation/learning/fundamental.itely @@ -8,7 +8,7 @@ Guide, node Updating translation committishes.. @end ignore -@c \version "2.19.21" +@c \version "2.19.22" @node Fundamental concepts @chapter Fundamental concepts @@ -68,9 +68,7 @@ There are many variations of this basic pattern, but this example serves as a useful starting place. @funindex \book -@funindex book @funindex \score -@funindex score @cindex book @cindex score @@ -154,11 +152,8 @@ things, such as @end example @funindex \header -@funindex header @funindex \layout -@funindex layout @funindex \midi -@funindex midi @cindex header @cindex layout @cindex midi @@ -178,13 +173,12 @@ Two more commands you have not previously seen are shown they will cause LilyPond to produce a printed output and a MIDI output respectively. They are described fully in the Notation Reference -- @ruser{Score layout}, and -@ruser{Creating MIDI files}. +@ruser{Creating MIDI output}. @cindex scores, multiple @cindex book block, implicit @cindex implicit book block @funindex \book -@funindex book You may code multiple @code{\score} blocks. Each will be treated as a separate score, but they will be all combined into @@ -252,7 +246,6 @@ For a complete definition of the input format, see @subsection Score is a (single) compound musical expression @funindex \score -@funindex score @cindex score @cindex contents of a score block @cindex score block, contents of @@ -519,8 +512,8 @@ So, for example, a phrasing slur can start before a manually inserted beam and end before the end of the beam -- not very musical, perhaps, but possible: -@lilypond[quote,verbatim,ragged-right,relative=2] -g8\( a b[ c b\) a] g4 +@lilypond[quote,verbatim,ragged-right] +\relative { g'8\( a b[ c b\) a] g4 } @end lilypond In general, different kinds of brackets, bracket-like constructs, @@ -530,11 +523,13 @@ a slur extending into a tuplet (line 2), a beam and a slur extending into a tuplet, a tie crossing two tuplets, and a phrasing slur extending out of a tuplet (lines 3 and 4). -@lilypond[quote,verbatim,ragged-right,relative=1] -r16[ g \tuplet 3/2 { r16 e'8] } -g,16( a \tuplet 3/2 { b16 d) e } -g,8[( a \tuplet 3/2 { b8 d) e~] } | -\tuplet 5/4 { e32\( a, b d e } a4.\) +@lilypond[quote,verbatim,ragged-right] +\relative { + r16[ g' \tuplet 3/2 { r16 e'8] } + g,16( a \tuplet 3/2 { b16 d) e } + g,8[( a \tuplet 3/2 { b8 d) e~] } | + \tuplet 5/4 { e32\( a, b d e } a4.\) +} @end lilypond @@ -586,9 +581,11 @@ A single voice can contain many notes in a chord, of course, so when exactly are multiple voices needed? Look first at this example of four chords: -@lilypond[quote,verbatim,ragged-right,relative=1] -\key g \major -4 +@lilypond[quote,verbatim,ragged-right] +\relative { + \key g \major + 4 +} @end lilypond This can be expressed using just the single angle bracket chord @@ -621,22 +618,26 @@ of polyphony. Here's how we split the chords above into two voices and add both the passing note and a slur: -@lilypond[quote,verbatim,ragged-right,relative=2] -\key g \major -% Voice "1" Voice "2" -<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@lilypond[quote,verbatim,ragged-right] +\relative { + \key g \major + % Voice = "1" Voice = "2" + << { g'4 fis8( g) a4 g } \\ { d4 d d d } >> +} @end lilypond Notice how the stems of the second voice now point down. Here's another simple example: -@lilypond[quote,verbatim,ragged-right,relative=2] -\key d \minor -% Voice "1" Voice "2" -<< { r4 g g4. a8 } \\ { d,2 d4 g } >> | -<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | -<< { a2. r4 } \\ { fis2. s4 } >> | +@lilypond[quote,verbatim,ragged-right] +\relative { + \key d \minor + % Voice = "1" Voice = "2" + << { r4 g' g4. a8 } \\ { d,2 d4 g } >> | + << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> | + << { a2. r4 } \\ { fis2. s4 } >> | +} @end lilypond It is not necessary to use a separate @code{<< \\ >>} construct @@ -645,19 +646,20 @@ can help the legibility of the code, but if there are many notes in each bar it may be better to split out each voice separately, like this: -@lilypond[quote,verbatim,ragged-right,relative=2] -\key d \minor -<< { - % Voice "1" - r4 g g4. a8 | - bes4 bes c bes | - a2. r4 | -} \\ { - % Voice "2" - d,2 d4 g | - g4 g g8( a) g4 | - fis2. s4 | -} >> +@lilypond[quote,verbatim,ragged-right] +<< + \key d \minor + \relative { % Voice = "1" + r4 g' g4. a8 | + bes4 bes c bes | + a2. r4 | + } \\ + \relative { % Voice = "2" + d'2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | + } +>> @end lilypond @@ -681,12 +683,30 @@ of slurs, stems, ties, dynamics etc., is set appropriately. \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 @@ -796,6 +816,7 @@ later sections. @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 @@ -806,7 +827,6 @@ later sections. \once \override NoteColumn.force-hshift = #0.5 des2 } - \\ % No voice three \\ % Voice four { \override NoteColumn.force-hshift = #0 @@ -843,6 +863,7 @@ not understand. @lilypond[quote,ragged-right] \new Staff \relative { \key aes \major + \voices 1,2,4 % No Voice three (we want stems down) << { % Voice one \voiceOneStyle @@ -856,7 +877,6 @@ not understand. \once \override NoteColumn.force-hshift = #0.5 des2 } - \\ % No Voice three (we want stems down) \\ % Voice four { \voiceThreeStyle \override NoteColumn.force-hshift = #0 @@ -893,17 +913,19 @@ odd-numbered voices taking upward stems and the even-numbered 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 { 2 des } - \\ % Omit Voice three \\ % Voice four { aes'2 f4 fes } >> | @@ -935,15 +957,10 @@ Notation Reference: @ruser{Multiple voices}. @subsection Explicitly instantiating voices @funindex \voiceOne -@funindex voiceOne @funindex \voiceTwo -@funindex voiceTwo @funindex \voiceThree -@funindex voiceThree @funindex \voiceFour -@funindex voiceFour @funindex \oneVoice -@funindex oneVoice @funindex \new Voice @cindex voice contexts, creating @@ -1026,7 +1043,7 @@ markup, ties, slurs, and dynamics: } @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. @@ -1062,6 +1079,37 @@ permitting a phrasing slur to be drawn over them. } @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 @@ -1130,13 +1178,9 @@ as here: @cindex collisions, notes @cindex shift commands @funindex \shiftOff -@funindex shiftOff @funindex \shiftOn -@funindex shiftOn @funindex \shiftOnn -@funindex shiftOnn @funindex \shiftOnnn -@funindex shiftOnnn Closely spaced notes in a chord, or notes occurring at the same time in different voices, are arranged in two, occasionally more, @@ -1187,7 +1231,6 @@ expressions -- notes and lyrics. @funindex \new Lyrics @funindex \lyricsto -@funindex lyricsto @funindex Lyrics @cindex Lyrics context, creating @cindex lyrics, linking to voice @@ -1223,7 +1266,6 @@ explicitly. @cindex lyrics and beaming @cindex beaming and lyrics @funindex \autoBeamOff -@funindex autoBeamOff The automatic beaming which LilyPond uses by default works well for instrumental music, but not so well for music with lyrics, @@ -1234,7 +1276,6 @@ melismata in the lyrics. In the example above we use the command @funindex \new ChoirStaff @funindex ChoirStaff @funindex \lyricmode -@funindex lyricmode @cindex vocal score structure @cindex choir staff @@ -1374,8 +1415,8 @@ appear explicitly in the input file must be added to the output. For example, compare the input and output of the following example: -@lilypond[quote,verbatim,relative=2] -cis4 cis2. | a4 a2. | +@lilypond[quote,verbatim] +\relative { cis''4 cis2. | a4 a2. | } @end lilypond The input is rather sparse, but in the output, bar lines, @@ -1442,16 +1483,16 @@ Notation Reference: @ruser{Contexts explained}. @subsection Creating contexts @funindex \new -@funindex new @cindex new contexts @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, @@ -1644,9 +1685,7 @@ Internals reference: @rinternals{Engravers and Performers}. @cindex context properties, modifying @cindex modifying context properties @funindex \set -@funindex set @funindex \unset -@funindex unset Contexts are responsible for holding the values of a number of context @emph{properties}. Many of them can be changed to @@ -1718,27 +1757,28 @@ in which context they operate. Sometimes this is obvious, 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. @@ -1756,7 +1796,7 @@ such features, it is recommended to check the property name in the 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 @@ -1814,17 +1854,19 @@ font size, which affects the size of the note heads (among other things) several times. The change is from the default value, not the most recently set value. -@lilypond[quote,verbatim,ragged-right,relative=1] -c4 d -% make note heads smaller -\set fontSize = #-4 -e4 f | -% make note heads larger -\set fontSize = #2.5 -g4 a -% return to default size -\unset fontSize -b4 c | +@lilypond[quote,verbatim,ragged-right] +\relative { + c'4 d + % make note heads smaller + \set fontSize = #-4 + e4 f | + % make note heads larger + \set fontSize = #2.5 + g4 a + % return to default size + \unset fontSize + b4 c | +} @end lilypond We have now seen how to set the values of several different types of @@ -1838,7 +1880,6 @@ general way by using the very powerful @code{\markup} command. @subsubheading Setting context properties with @code{\with} @funindex \with -@funindex with @cindex context properties, setting with \with The default value of context properties may be set at the time the @@ -1887,7 +1928,6 @@ with @code{\set}, this new default value may be restored with the @cindex context properties, setting with \context @funindex \context -@funindex context The values of context properties may be set in @emph{all} contexts of a particular type, such as all @code{Staff} contexts, with a single @@ -1966,9 +2006,7 @@ Internals Reference: @cindex removing engravers @funindex \consists -@funindex consists @funindex \remove -@funindex remove We have seen that contexts each contain several engravers, each of which is responsible for producing a particular part of the @@ -2064,7 +2102,6 @@ the notes in all the voices on that staff: @subsubheading Changing all contexts of the same type @funindex \layout -@funindex layout The examples above show how to remove or add engravers to individual contexts. It is also possible to remove or add @@ -2393,8 +2430,9 @@ lower = \relative { \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 @@ -2403,24 +2441,31 @@ lower = \relative { \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 @@ -2430,8 +2475,8 @@ lower = \relative { \bassWords } >> % end ChoirStaff - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" + \new PianoStaff \with { instrumentName = #"Piano" } + << \new Staff = "upper" \upper \new Staff = "lower" \lower >> @@ -2469,8 +2514,9 @@ Doing this gives for our ChoirStaff: @example \new ChoirStaff << - \new Staff = "sopranos" << - \set Staff.instrumentName = #"Soprano" + \new Staff = "sopranos" + \with @{ instrumentName = #"Soprano" @} + << \new Voice = "sopranos" @{ \global \sopranoMusic @@ -2479,8 +2525,9 @@ Doing this gives for our ChoirStaff: \new Lyrics \lyricsto "sopranos" @{ \sopranoWords @} - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" + \new Staff = "altos" + \with @{ instrumentName = #"Alto" @} + << \new Voice = "altos" @{ \global \altoMusic @@ -2489,8 +2536,9 @@ Doing this gives for our ChoirStaff: \new Lyrics \lyricsto "altos" @{ \altoWords @} - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" + \new Staff = "tenors" + \with @{ instrumentName = #"Tenor" @} + << \new Voice = "tenors" @{ \global \tenorMusic @@ -2499,8 +2547,9 @@ Doing this gives for our ChoirStaff: \new Lyrics \lyricsto "tenors" @{ \tenorWords @} - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" + \new Staff = "basses" + \with @{ instrumentName = #"Bass" @} + << \new Voice = "basses" @{ \global \bassMusic @@ -2517,8 +2566,8 @@ easy - we just pull out the piano part from the @q{Solo piano} template: @example -\new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " +\new PianoStaff \with @{ instrumentName = #"Piano " @} +<< \new Staff = "upper" \upper \new Staff = "lower" \lower >> @@ -2574,8 +2623,8 @@ stacked one above the other: @} >> % end ChoirStaff - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano" + \new PianoStaff \with @{ instrumentName = #"Piano" @} + << \new Staff = "upper" \upper \new Staff = "lower" \lower >> @@ -2627,8 +2676,9 @@ lower = \relative { \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 @@ -2637,8 +2687,9 @@ lower = \relative { \new Lyrics \lyricsto "sopranos" { \sopranoWords } - \new Staff = "altos" << - \set Staff.instrumentName = #"Alto" + \new Staff = "altos" + \with { instrumentName = #"Alto" } + << \new Voice = "altos" { \global \altoMusic @@ -2647,8 +2698,9 @@ lower = \relative { \new Lyrics \lyricsto "altos" { \altoWords } - \new Staff = "tenors" << - \set Staff.instrumentName = #"Tenor" + \new Staff = "tenors" + \with { instrumentName = #"Tenor" } + << \new Voice = "tenors" { \global \tenorMusic @@ -2657,8 +2709,9 @@ lower = \relative { \new Lyrics \lyricsto "tenors" { \tenorWords } - \new Staff = "basses" << - \set Staff.instrumentName = #"Bass" + \new Staff = "basses" + \with { instrumentName = #"Bass" } + << \new Voice = "basses" { \global \bassMusic @@ -2669,8 +2722,9 @@ lower = \relative { } >> % end ChoirStaff - \new PianoStaff << - \set PianoStaff.instrumentName = #"Piano " + \new PianoStaff + \with { instrumentName = #"Piano " } + << \new Staff = "upper" \upper \new Staff = "lower" \lower >> @@ -3071,7 +3125,7 @@ can think of these as functions). @lilypond[quote,verbatim,ragged-right] padText = #(define-music-function - (parser location padding) + (padding) (number?) #{ \once \override TextScript.padding = #padding