Guide, node Updating translation committishes..
@end ignore
-@c \version "2.13.4"
+@c \version "2.19.21"
@node Music engraving
@chapter Music engraving
while the newer edition seems cold and mechanical.
It is hard to immediately see what makes the difference with the newer
-edition. Everything looks neat and tiny, possibly even @qq{better}
-because it looks more computerized and uniform. This really puzzled us
-for quite a while. We wanted to improve computer notation, but we first
+edition. Everything looks neat and tidy, possibly even @qq{better}
+because it looks more computerized and uniform. This really puzzled us
+for quite a while. We wanted to improve computer notation, but we first
had to figure out what was wrong with it.
The answer lies in the precise, mathematical uniformity of the newer
There are other differences as well: in the hand-engraved edition the
vertical lines are all stronger, the slurs lie closer to the note heads,
-and there is more variety in the slopes of the beams. Although such
+and there is more variety in the slopes of the beams. Although such
details may seem like nitpicking, the result is a score that is easier
-to read. In the computer-generated output, each line is nearly identical
+to read. In the computer-generated output, each line is nearly identical
and if the musician looks away for a moment she will be lost on the
page.
@c mechanical look, which makes them unpleasant to play from.
@menu
-* Music fonts::
-* Optical spacing::
-* Ledger lines::
-* Optical sizing::
-* Why work so hard?::
+* Music fonts::
+* Optical spacing::
+* Ledger lines::
+* Optical sizing::
+* Why work so hard?::
@end menu
@node Music fonts
In spacing, the distribution of space should reflect the durations
between notes. However, as we saw in the Bach Suite above, many modern
scores adhere to the durations with mathematical precision, which leads
-to poor results. In the next example a motive is printed twice: the
+to poor results. In the next example a motif is printed twice: the
first time using exact mathematical spacing, and the second with
corrections. Which do you prefer?
}
music = {
- c'4 e''4 e'4 b'4 |
+ c'4 e''4 e'4 b'4
\stemDown
b'8[ e'' a' e'']
\stemNeutral
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.0
- \override NoteSpacing #'same-direction-correction = #0.0
- \override StaffSpacing #'stem-spacing-correction = #0.0
+ \override NoteSpacing.stem-spacing-correction = #0.0
+ \override NoteSpacing.same-direction-correction = #0.0
+ \override StaffSpacing.stem-spacing-correction = #0.0
}
}
}
\layout {
\context {
\Staff
- \override NoteSpacing #'stem-spacing-correction = #0.6
+ \override NoteSpacing.stem-spacing-correction = #0.6
}
}
}
notes. A master engraver would adjust the spacing as needed to please
the eye.
-The spacing algorthims in LilyPond even take the barlines into account,
+The spacing algorithms in LilyPond even take the barlines into account,
which is why the final up-stem in the properly spaced example has been
given a little more space before the barline to keep it from looking
-crowded. A down-stem would not need this adjustment.
+crowded. A down-stem would not need this adjustment.
@node Ledger lines
@unnumberedsubsec Ledger lines
At smaller sizes, LilyPond uses proportionally heavier lines so the
music will still read well.
-@ignore
This also allows staves of different sizes to coexist peacefully when
used together on the same page:
-@c TODO: are the stems in this example the right thickness? How should
-@c line weights be scaled for small staves?
-
@c Grieg's Violin Sonata Op. 45
-@lilypond[indent=1.5cm]
+@lilypond[indent=1.5\cm]
global = {
\time 6/8
\key c \minor
}
-\new Score <<
- \new Staff \with {
- fontSize = #-4
- \override StaffSymbol #'staff-space = #(magstep -4)
- \override StaffSymbol #'thickness = #(magstep -3)
+\score {
+ <<
+ \new Staff \with {
+ \magnifyStaff #2/3
}
\relative c' {
\global
g8.(^> b16 c ees) g8-.^> r r
R2.
}
- \new PianoStaff <<
- \set PianoStaff.instrumentName = #"Piano"
- \new Staff \relative c' {
- \global
- s2.
- s4. s8 r8 r16 <c f aes c>
- <c f aes c>4.^> <c ees g>8 r r
- }
- \new Staff \relative c {
- \global
- \clef "bass"
- << {
- \once \override DynamicText #'X-offset = #-3
- <ees g c>2.~->^\f
- <ees g c>4.~ <ees g c>8
- } \\ {
- <c g c,>2.~
- <c g c,>4.~ <c g c,>8
- } >>
- r8 r16 <f, c' aes'>16
- <f c' aes'>4.-> <c' g'>8 r r
- }
+ \new PianoStaff <<
+ \set PianoStaff.instrumentName = #"Piano"
+ \new Staff \relative c' {
+ \global
+ s2.
+ s4. s8 r8 r16 <c f aes c>
+ <c f aes c>4.^> <c ees g>8 r r
+ }
+ \new Staff \relative c {
+ \global
+ \clef "bass"
+ <<
+ {
+ \once \override DynamicText.X-offset = #-3
+ <ees g c>2.~->^\f
+ <ees g c>4.~ <ees g c>8
+ } \\ {
+ <c g c,>2.~
+ <c g c,>4.~ <c g c,>8
+ }
+ >>
+ r8 r16 <f, c' aes'>16
+ <f c' aes'>4.-> <c' g'>8 r r
+ }
+ >>
>>
->>
+}
@end lilypond
-@end ignore
+
@node Why work so hard?
@unnumberedsubsec Why work so hard?
computer and a lot of detailed comparisons with real engravings.
@menu
-* Beauty contests::
-* Improvement by benchmarking::
-* Getting things right::
+* Beauty contests::
+* Improvement by benchmarking::
+* Getting things right::
@end menu
@node Beauty contests
@lilypond
\relative c {
- \clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
- e8[( f] g[ a b d,)] r4
- \once \override Slur #'positions = #'(2 . 3)
- e8[( f] g[ a b d,)] r4
- e8[( f] g[ a b d,)] r4
+ \clef bass
+ \once \override Slur.positions = #'(1.5 . 1)
+ e8[( f] g[ a b d,)] r4
+ \once \override Slur.positions = #'(2 . 3)
+ e8[( f] g[ a b d,)] r4
+ e8[( f] g[ a b d,)] r4
}
@end lilypond
choose the least ugly configuration.
For example, here are three possible slur configurations, and LilyPond
-has given each one a score in @q{ugly points}. The first example gets
+has given each one a score in @q{ugly points}. The first example gets
15.39 points for grazing one of the noteheads:
@lilypond
\relative c {
- \clef bass
- \once \override Slur #'positions = #'(1.5 . 1)
- e8[(_"15.39" f] g[ a b d,)] r4
+ \clef bass
+ \once \override Slur.positions = #'(1.5 . 1)
+ e8[(_"15.39" f] g[ a b d,)] r4
}
@end lilypond
@lilypond
\relative c {
- \clef bass
- \once \override Slur #'positions = #'(2 . 3)
- e8[(_"13.08" f] g[ a b d,)] r4
+ \clef bass
+ \once \override Slur.positions = #'(2 . 3)
+ e8[(_"13.08" f] g[ a b d,)] r4
}
@end lilypond
selects this one:
@lilypond
-\relative c {
- \clef bass
- e8[(_"12.04" f] g[ a b d,)] r4
+\relative {
+ \clef bass
+ e8[(_"12.04" f] g[ a b d,)] r4
}
@end lilypond
\key d \minor
\time 3/4
\mergeDifferentlyDottedOn
- << {\slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e)}
- \\ {d4_2 a2}
+ <<
+ { \slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e) }
+ \\
+ { d4_2 a2 }
>>
\slurDashed
<f' a, d,>4. e8( d c)
\slurSolid
- bes g' f e16( f g_1 a_2 bes_3 d,_2)
+ bes8 g' f e16( f g_1 a_2 bes_3 d,_2)
\slurDashed
cis4.-\trill b8_3( a g)
- << {\slurDashed d'8.( e16) e4.-\trill( d16 e)}
- \\ {<f, a>4 a2}
+ <<
+ { \slurDashed d'8.( e16) e4.-\trill( d16 e) }
+ \\
+ { <f, a>4 a2 }
>>
}
@end lilypond
automatically by comparing LilyPond's output to the output of a
commercial software product. In this case we have chosen Finale 2008,
which is one of the most popular commercial score writers, particularly
-in North America. Sibelius is their major rival and they appear to be
+in North America. Sibelius is its major rival and appears to be
especially strong in the European market.
For our comparison we selected Bach's Fugue in G minor from the
Well-Tempered Clavier, Book I, BWV 861, whose opening subject is
@lilypond
-\relative c' {
+\relative {
\key g \minor
\clef "treble_8"
- r8 d ees g, fis4 g
+ r8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a bes8
}
@end lilypond
the subject returns in a three-part stretto and leads into the closing
section. In the Finale version, we have resisted the temptation to make
any adjustments to the default output because we are trying to show the
-things that each software package gets right without assistance. The
+things that each software package gets right without assistance. The
only major edits that we made were adjusting the page size to match this
essay and forcing the music onto two systems to make the comparison
-easier. By default Finale would have engraved two systems of three
+easier. By default Finale would have engraved two systems of three
measures each and a final, full-width system containing a single
measure.
@end ifnottex
@lilypond[staffsize=19.5,line-width=14\cm]
-global = {\key g \minor}
+global = { \key g \minor }
partI = \relative c' {
\voiceOne
d4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
}
+
partIII = \relative c' {
\voiceOne
r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
}
+
partIV = \relative c {
\voiceTwo
d4 r r2
\new Voice = "voiceI" { \partI }
\new Voice = "voiceII" { \partII }
>>
-
- \new Staff = "LH" <<
+ \new Staff = "LH"
+ <<
\clef "bass"
\global
\new Voice = "voiceIII" { \partIII }
}
\context {
\PianoStaff
- \override StaffGrouper #'between-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}
@item Most of the beams extend too far off the staff. A beam that points
towards the center of the staff should have a length of about one
octave, but engravers shorten this when the beam points away from the
-staff in multi-voice music. The Finale beaming can be easily improved
+staff in multi-voice music. The Finale beaming can easily be improved
with their Patterson Beams plug-in, but we elected to skip that step for
this example.
@item Finale doesn't adjust the positions of interlocking note heads,
lower voices exchange positions temporarily:
@lilypond
-collide = \once \override NoteColumn #'force-hshift = #0
-\new Score <<
- \new Voice = "sample" \relative c''{
- \key g \minor
- <<
- {\voiceOne g4 \collide g4}
- \new Voice {\voiceTwo bes \collide bes}
- >>
- }
- \new Lyrics \lyricsto "sample" \lyricmode { "good " " bad" }
->>
+collide = \once \override NoteColumn.force-hshift = #0
+
+\score {
+ <<
+ \new Voice = "sample" \relative c''{
+ \key g \minor
+ <<
+ { \voiceOne g4 \collide g4 }
+ \new Voice { \voiceTwo bes \collide bes }
+ >>
+ }
+ \new Lyrics \lyricsto "sample" { "good " " bad" }
+ >>
+}
@end lilypond
@item Finale has placed all of the rests at fixed heights on the staff.
@end itemize
This example is not intended to suggest that Finale cannot be used to
-produce publication-quality output. On the contrary, in the hands of a
-skilled user it can and does, but it requires skill and time. One of the
+produce publication-quality output. On the contrary, in the hands of a
+skilled user it can and does, but it requires skill and time. One of the
fundamental differences between LilyPond and commercial scorewriters is
that LilyPond hopes to reduce the amount of human intervention to an
absolute minimum, while other packages try to provide an attractive
If you are interested in examining these examples in more detail, the
full seven-measure excerpt can be found at the end of this essay along
-with four different published engravings. Close examination reveals that
-there is some acceptible variation among the hand-engravings, but that
-LilyPond compares reasonably well to that acceptible range. There are
+with four different published engravings. Close examination reveals that
+there is some acceptable variation among the hand-engravings, but that
+LilyPond compares reasonably well to that acceptable range. There are
still some shortcomings in the LilyPond output, for example, it appears
-a bit too agressive in shortening some of the stems, so there is room
+a bit too aggressive in shortening some of the stems, so there is room
for further development and fine-tuning.
Of course, typography relies on human judgment of appearance, so people
the source code.
When designing the structures used in LilyPond, we made some different
-decisions than are apparent in other software. Consider the heirarchical
+decisions than are apparent in other software. Consider the hierarchical
nature of music notation:
@lilypond[quote,fragment]
<<
-\new Staff \relative c'' {
- \key g \major
- \time 3/4
- d4 g,8 a b c d4 g, g
-}
-\new Staff \relative c' {
- \clef "bass"
- \key g \major
- <g b d>2 a4 b2.
-}
+ \new Staff \relative {
+ \key g \major
+ \time 3/4
+ d''4 g,8 a b c d4 g, g
+ }
+ \new Staff \relative {
+ \clef "bass"
+ \key g \major
+ <g b d>2 a4 b2.
+ }
>>
@end lilypond
\new Voice = "I" \relative c''' {
\time 3/4
\voiceOne
- \times 6/7 {g8 g g g g g g}
+ \tuplet 7/6 { g8 g g g g g g }
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
\new Voice = "II" \relative c' {
\voiceTwo
c4
- \times 4/5 {
+ \tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
\stemUp g,( c}
r4
- \override Stem #'cross-staff = ##t
- \override Stem #'length = #12
+ \override Stem.cross-staff = ##t
+ \override Stem.length = #12
<fis, b>) r\fermata
}
>>
\new Staff = "LH" <<
- \new Voice = "III" \relative c' {
+ \new Voice = "III" \relative {
\time 2/4
\clef "bass"
g4 \stopStaff s
In this example, staves start and stop at will, voices jump around
between staves, and the staves have different time signatures. Many
-software packages would struggle with reporducing this example because
+software packages would struggle with reproducing this example because
they are built on the nested box structure. With LilyPond, on the other
hand, we have tried to keep the input format and the structure as
-flexbile as possible.
+flexible as possible.
@node What symbols to engrave?
@unnumberedsubsec What symbols to engrave?
\remove "Phrasing_slur_engraver"
\remove "Slur_engraver"
\remove "Script_engraver"
+ \remove "New_fingering_engraver"
\remove "Beam_engraver"
\remove "Auto_beam_engraver"
}
\remove "Phrasing_slur_engraver"
\remove "Slur_engraver"
\remove "Script_engraver"
+ \remove "New_fingering_engraver"
\remove "Beam_engraver"
\remove "Auto_beam_engraver"
}
\remove "Phrasing_slur_engraver"
\remove "Slur_engraver"
\remove "Script_engraver"
+ \remove "New_fingering_engraver"
\remove "Beam_engraver"
\remove "Auto_beam_engraver"
}
\remove "Phrasing_slur_engraver"
\remove "Slur_engraver"
\remove "Script_engraver"
+ \remove "New_fingering_engraver"
\remove "Beam_engraver"
\remove "Auto_beam_engraver"
}
chord has all directions up (right).
@lilypond[quote,ragged-right]
-\new Score \with {
- \override SpacingSpanner #'spacing-increment = #3
- \override TimeSignature #'transparent = ##t
-} \relative c' {
- \stemDown <e g b>4_>-\arpeggio
- \override Arpeggio #'direction = #RIGHT
- \stemUp <e g b>4^>-\arpeggio
+\score {
+ \relative c' {
+ \stemDown <e g b>4_>-\arpeggio
+ \override Arpeggio.direction = #RIGHT
+ \stemUp <e g b>4^>-\arpeggio
+ }
+ \layout {
+ \context {
+ \Score
+ \override SpacingSpanner.spacing-increment = #3
+ \hide TimeSignature
+ }
+ }
}
@end lilypond
<<
\new Staff \fragment
\new Staff \with {
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #0.5
- \override Bar #'thickness = #3.6
- \override Tie #'thickness = #2.2
- \override StaffSymbol #'thickness = #3.0
- \override Tie #'extra-offset = #'(0 . 0.3)
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #0.5
+ \override Bar.thickness = #3.6
+ \override Tie.thickness = #2.2
+ \override StaffSymbol.thickness = #3.0
+ \override Tie.extra-offset = #'(0 . 0.3)
}
\fragment
>>
\set autoBeaming = ##f
\time 2/4
<d f g>4
- \once \override NoteHead #'stencil = #note-head::brew-ez-stencil
- \once \override NoteHead #'font-size = #-7
- \once \override NoteHead #'font-family = #'sans
- \once \override NoteHead #'font-series = #'bold
+ \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+ \once \override NoteHead.font-size = #-7
+ \once \override NoteHead.font-family = #'sans
+ \once \override NoteHead.font-series = #'bold
<d f g>4
- \once \override NoteHead #'style = #'cross
+ \once \override NoteHead.style = #'cross
<d f g>4
\applyOutput #'Voice #mc-squared
<d f g>4
<<
\chords { c2 c f2 c }
\new Staff
- \relative c' {
+ \relative {
\time 2/4
- c4 c g' g a a g2
+ c'4 c g' g a a g2
}
\addlyrics { twin -- kle twin -- kle lit -- tle star }
>>
\time 4/8
\key c \minor
<< {
- \revert Stem #'direction
+ \revert Stem.direction
\change Staff = down
\set subdivideBeams = ##t
g16.[
\set followVoice = ##t
c'''32([ b''16 a''16 gis''16 g''32)]
} \\ {
- s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d'']
+ s4 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
} \\ {
s4 \autoBeamOff d''8.. f''32
} \\ {
\clef bass
\key c \minor
\set subdivideBeams = ##f
- \override Stem #'french-beaming = ##t
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #4.0
+ \override Stem.french-beaming = ##t
+ \override Beam.beam-thickness = #0.3
+ \override Stem.thickness = #4.0
g'16[ b16 fis16 g16]
<< \makeClusters {
as16 <as b>
<g b>
<g cis>
} \\ {
- \override Staff.Arpeggio #'arpeggio-direction =#down
+ \override Staff.Arpeggio.arpeggio-direction =#down
<cis, e, gis, b, cis>4\arpeggio
}
>> }
>>
\midi {
- \context {
- \Score
- tempoWholesPerMinute = #(ly:make-moment 60 8)
- }
+ \tempo 8 = 60
}
\layout {
\context {
\Staff
- \consists Horizontal_bracket_engraver
+ \consists "Horizontal_bracket_engraver"
}
}
}
@command{lilypond-book} program, included with LilyPond, the input
fragments can be replaced by music images in the resulting PDF or HTML
output files. Another example is the third-party OOoLilyPond extension
-for OpenOffice.org, which makes it extremely easy to embed musical
-examples in documents.
+for OpenOffice.org or LibreOffice, which makes it extremely easy to
+embed musical examples in documents.
-For more examples of LilyPond in action, full documentaion, and the
+For more examples of LilyPond in action, full documentation, and the
software itself, see our main website: www.lilypond.org.
@page
fis8 d' ees g, fis4 g
r8 a16 bes c8 bes16 a d8 r r4
r2 r8 d16 ees f8 ees16 d
- ees4 ~ ees16 d c bes a4 r8 ees'16 d
+ ees4 ~ 16 d c bes a4 r8 ees'16 d
c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
- a8 d, g f ees d c bes
+ 8 d, g f ees d c bes
a2 g\fermata \bar "|."
}
d4 r4 r8 d'16 c bes8 c16 d
ees8 d c ees a, r r4
r8 fis16 g a8 g16 fis g2 ~
- g2 r8 d' ees g,
+ 2 r8 d' ees g,
fis4 g r8 a16 bes c8 bes16 a
bes4. <g b>8 <a c> r <d, g> r
<ees g>4 <d fis> d2
partIII = \relative c' {
\voiceOne
r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
- bes2 ~ bes8 b16 a g8 a16 b
+ bes2 ~ 8 b16 a g8 a16 b
c4 r r2
R1
r8 d ees g, fis4 g
d4 r r2
r8 d ees g, fis4 a
d,8 d'16 c bes8 c16 d ees2 ~
- ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
+ 8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
d,8 d'16 c bes8 c16 d ees8 c a fis'
g f ees d c bes a g
c a d d, g2\fermata
}
\context {
\PianoStaff
- \override StaffGrouper #'between-staff-spacing #'padding = #1
+ \override StaffGrouper.staff-staff-spacing.padding = #1
}
}
}