![]() |
GNU LilyPond-- -- |
||||||||||
|
Fine tuning a pieceIn this section we show some ways to fine tune the final output of a
piece. We do so using a single measure of a moderately complex piano
piece: a Brahms intermezzo (opus 119, no. 1). Both fragments (the
tuned and the untuned versions) are in The code for the untuned example shows us some new things. \version "1.7.6" \score { \notes\context PianoStaff < \context Staff = up \relative c'' < { \key d\major fis4-3_\p-(-~ fis16 a-)-5 } \\ { fis16-(-\> d b-\! \translator Staff = down \clef treble g-~ <<g e>>8-) } \\ { s16 d' ~ <<d b>>4 } > \context Staff = down { \key d \major \time 3/8 \clef bass s4. } > \paper { linewidth = -1. } } %% new-chords-done %% Hairpin dynamics can be easily added to Lilypond scores. Beginning a
crescendo is indicated with Fingering indications are entered with Now that we have the basic piece of music entered, we want to fine tune it so that we get something that resembles the original printed edition by Schott/Universal Edition: Fine tuning involves overriding the defaults of the printing system.
We do this by setting variables which control how Lilypond prints
symbols. Printed symbols are called graphical objects (often
abbreviated to grob). Each object is described by a bunch of
settings. Every setting is a variable: it has a name and a value
which you can change. These values determine the fonts, offsets,
sub-routines to be called on the object, etc. The initial values of
these settings are set in the Scheme file
We start with the slur in the upper part, running from F sharp to A. In the printed edition, this slur runs from stem to stem; in our version, the slur begins at the note head of the F sharp. The following property setting forces all slurs to run from stem to stem (not from or to note heads!). \property Voice.Slur \set #'attachment = #'(stem . stem) More precisely, this command modifies the definition of the Although this fixes the slur, it isn't very helpful for fine tuning in
general: the lilypond back-end supports approximately 240 variables
like The interesting information is how you can figure out which properties to tune for your own scores. To discover this, you must have a copy of the internals document. This is a set of HTML pages which should be included if you installed a binary distribution1. These HTML pages are also available on the web: go to the lilypond website, click "Documentation: Index" on the side bar, look in the "Information for uses" section, and click on "Documentation of internals". You might want to bookmark either the HTML files on your disk, or the one on the web (the HTML on your hard drive will load much faster than the ones on the web!). One word of caution: the internals documentation is generated from the definitions that lily uses. For that reason, it is strongly tied to the version of LilyPond that you use. Before you proceed, please make sure that you are using the documentation that corresponds to the version of LilyPond that you are using. Suppose that you wanted to tune the behavior of the slur. The first step is to get some general information on slurs in lilypond. Turn to the index, and look up "slur". The section on slurs says The grob for this object is Slur , generally in Voice context. So the graphical object for this object is called Now you get a list of all the properties that the slur object
supports, along with their default values. Among the properties we
find the \property Voice.Slur \set #'attachment = #'(stem . stem) If you ran the previous example, you have unknowingly already used
this kind of command. The stemUp = \property Voice.Stem \set #'direction = #1 Next we want to move the fingering `3'. In the printed edition it is
not above the stem, but a little lower and slightly left of the stem.
From the user manual we find that the associated graphical object is
called Fingering grobs are created by: Fingering_engraver Clicking Fingering_engraver is part of contexts: Voice and TabVoiceso tuning the settings for Fingering should be done using either \property Voice.Fingering \set ...or \property TabVoice.Fingering \set ... Since the For shifting the fingering, we use the property \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8)The extra-offset is a low-level feature: it moves around
objects in the printout; the formatting engine is completely oblivious
to these offsets. The unit of these offsets are staff-spaces. The
first number controls left-right movement; a positive number will move
the object to the right. The second number controls up-down movement;
a positive number will move it higher.
We only want to offset a single object, so after the F-sharp we must undo the setting. The technical term is to revert the property. \property Voice.Fingering \revert #'extra-offset There are three different types of variables in LilyPond, something
which can be confusing at first (and for some people it stays confusing
:). Variables such as The second fingering instruction should be moved up a little to avoid
a collision with the slur. This could be achieved with
a-)^" "^\markup { \finger "5" } A fingering instruction, which would be entered as Normally one would specify all dynamics in the same voice, so that dynamics (such as f and p) will be aligned with hairpins. But in this case, we don't want the decrescendo to be aligned with the piano sign. We achieve this by putting the dynamic markings in different voices. The crescendo should be above the upper staff. This can be forced by using the precooked command \dynamicsUp However, if you do that the decrescendo will be too close to the
upper voice and collide with the stems. Looking at the manual for
dynamics, we notice that "Vertical positioning of these symbols is
handled by the DynamicLineSpanner
grob.". If we turn
to the documentation of For the moment we are interested in side positioning: side-position-interfaceBetween the object and its support (in this case the notes in the voice going down), there should be more space. This space is controlled by padding , so we increase it.
\property Voice.DynamicLineSpanner \override #'padding = #5.0 This command is almost like the command for setting slur attachments,
but subtly different in its details. Grob properties can be
manipulated with two commands: Brahms uses music notation is a slightly unorthodox way. Ties usually happen only within one voice. In this piece, the composer gladly produces ties that jump voices. We deal with this by faking these ties: whenever we need such a tie, we insert a notehead in a different voice, and blank the stem. This is done in the following snippet of code. \property Voice.Stem \set #'transparent = ##t d'Blanking the stem should be done for only one object. One of the ways to achieve that, is by setting the property before a note. Reverting it afterwards is tedious, so for setting a property only once, we have the syntax \once : it reverts the property directly before
proceeding to the next step in time.
The Finally, the last tie is forced up using Here's the complete "fine tuned" version, which includes all the modifications we discussed in this section: \version "1.7.6" \score { \notes\context PianoStaff < \context Staff = up \relative c'' < { \key d\major \property Voice.Slur \set #'attachment = #'(stem . stem) \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8) fis4-3_\p-(-~ \property Voice.Fingering \revert #'extra-offset fis16 a-)^" "^\markup { \finger "5" } } \\ { \dynamicUp \property Voice.DynamicLineSpanner \override #'padding = #5.0 \tieUp fis16-(-\> d b-\! \translator Staff = down \stemUp \clef treble g-~ <<g e>>8-) } \\ { s16 \property Voice.Stem \set #'transparent = ##t d' \property Voice.Stem \revert #'transparent ~ <<d b>>4 } > \context Staff = down { \key d \major \time 3/8 \clef bass s4. } > \paper { linewidth = -1. } } %% new-chords-done %% |
||||||||||
Go back to index of LilyPond.
Please send GNU LilyPond questions and comments to lilypond-user@gnu.org. Please send comments on these web pages to (address unknown) Copyright (c) 1997--2002 Han-Wen Nienhuys and Jan Nieuwenhuizen. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. |
This page was built from LilyPond-1.7.14 (development-branch) by