X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fuser%2Frefman.itely;h=d56184a5f1337b4b7fd88ce2a82a65a98045dd0b;hb=fac0d2eb9cbaf9ae45f36a7e1aa651d25932d459;hp=90e9e53e42441d1174090dbc90c6e4ac77602e1f;hpb=3379da1fe0fe84cd2c8939abf97bc9f48102f8f8;p=lilypond.git diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index 90e9e53e42..7d7ece992f 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -1,1617 +1,2346 @@ -@c -*-texinfo-*- -@c TODO: -@c - Reinsert subsection commands that were lost in the -@c ancient conversion from YODL! /MB -@c - Restructure! Separate internal commands from user level commands. /MB -@c - Add some words about Guile. /MB -@c - Fix indexing (keyindex) so it doesn't add line breaks /MB - -@node Reference Manual, , , Top -@chapter Reference Manual - -@menu -* Overview:: Overview -* Top level:: Top level -* Pitch names:: Pitch names -* Lexical conventions:: Lexical conventions -* Other languages:: Note names in various languages -* Lexical modes:: modes -* Types:: Types -* Music expressions:: Music expressions -* Atomic music expressions:: Atomic music expressions -* Note specification:: notedesc -* barlines:: barlines -* Manual beams:: Manual beam -* stem tremolo:: tremolo -* Compound music expressions:: Compound music expressions -* relative:: relative -* Repeats:: Repeats -* transpose:: transpose -* Ambiguities:: Ambiguities -* Notation conversion specifics:: Notation conversion specifics -* autobeam:: autobeam -* lyricprint:: lyricprint -* Notation Contexts:: Notation Contexts -* Properties:: Changing formatting -* Notation output definitions:: Notation output definitions -* paper:: paper -* Paper variables:: papervars -* contextdefs:: contextdefs -* Sound output:: Sound output -* midilist:: midilist -* Grobs:: Graphical objects -* Molecule:: Molecules -* Pre-defined Identifiers:: Pre-defined Identifiers -@c May be fragile. Better make single link to generated doco? -* Interpretation contexts:(lilypond-internals)LilyPond interpretation contexts. -* Engravers:(lilypond-internals)LilyPond engravers. -* Backend:(lilypond-internals)LilyPond backend. -@end menu +@c Note: -*-texinfo-*- +@c +@c A menu is needed before every deeper *section nesting of @node's; run +@c M-x texinfo-all-menus-update +@c to automagically fill in these menus before saving changes +@c FIXME: singular vs. plural: Beams/Beam -@node Overview, , , Reference Manual -@section Overview +@macro refbugs +@strong{BUGS} +@end macro -This document@footnote{This document has been revised for LilyPond 1.2.} -describes the the GNU LilyPond input format This format represents a -piece of music in an elegant way, but contains enough information for -both automatic typesetting and automatic performances. -LilyPond input can be classified into three types: -@itemize @bullet - @item musical expressions: a musical expression is some combination of -rest, notes, lyrics - @item output definitions: recipes for translating those musical -expressions into performances (MIDI) or graphics (eg. PostScript). +@c .{Reference Manual} - @item declarations: by declaring and naming musical expressions, you -can enter and edit them in manageable chunks. -@end itemize +@node Reference Manual +@chapter Reference Manual +@html + +@end html +This document describes GNU LilyPond and its input format. The last +revision of this document was made for LilyPond 1.6.2. It assumes +that you already know a little bit about LilyPond input (how to +make an input file, how to create sheet music from that input file, +etc). New users are encouraged to study the tutorial before reading +this manual. -@node Top level, , , Reference Manual -@section Top level -@cindex top level +@menu +* Note entry:: +* Easier music entry:: +* Staff notation:: +* Polyphony:: +* Beaming:: +* Accidentals:: +* Expressive marks:: +* Ornaments:: +* Repeats:: +* Rhythmic music:: +* Piano music:: +* Tablatures:: +* Chords:: +* Writing parts:: +* Ancient notation :: +* Tuning output:: +* Global layout:: +* Sound:: +@end menu -This section describes what you may enter at top level. +@c FIXME: Note entry vs Music entry at top level menu is confusing. +@c . {Note entry} +@node Note entry +@section Note entry +@cindex Note entry +Notes constitute the most basic elements of LilyPond input, but they do +not form valid input on their own without a @code{\score} block. However, +for the sake of brevity and simplicity we will generally omit +@code{\score} blocks and @code{\paper} declarations in this manual. -@cindex score definition +@menu +* Notes:: +* Pitches:: +* Chromatic alterations:: +* Rests:: +* Skips:: +* Durations:: +* Ties:: +* Automatic note splitting :: +* Tuplets:: +* Easy Notation note heads :: +@end menu -The output is generated combining a music expression with an output -definition. A score block has the following syntax: +@c . {Notes} +@node Notes +@subsection Notes -@example - \score @{ @var{musicexpr} @var{outputdefs} @} -@end example -@var{outputdefs} are zero or more output definitions. If no output -definition is supplied, the default @code{\paper} block will be added. +A note is printed by specifying its pitch and then its duration. +@lilypond[fragment,verbatim] + cis'4 d'8 e'16 c'16 +@end lilypond -@cindex header +@c . {Pitches} +@node Pitches +@subsection Pitches -@keyindex{header} +@cindex Pitch names +@cindex Note specification +@cindex pitches +@cindex entering notes -The syntax is +The verbose syntax for pitch specification is +@cindex @code{\pitch} @example - \header @{ @var{key1} = @var{val1}; - @var{key2} = @var{val2}; @dots{} @} + \pitch @var{scmpitch} @end example -A header describes the file's contents. It can also appear in a -@code{\score} block. Tools like @code{ly2dvi}@indexcode{ly2dvi} can use this -information for generating titles. Key values that are used by -@code{ly2dvi} are: title, subtitle, composer, opus, poet, instrument, -metre, arranger, piece and tagline. - -It is customary to put the @code{\header} at the top of the file. +where @var{scmpitch} is a pitch scheme object. +In Note and Chord mode, pitches may be designated by names. The default +names are the Dutch note names. The notes are specified by the letters +@code{a} through @code{g}, while the octave is formed with notes ranging +from @code{c} to @code{b}. The pitch @code{c} is an octave below +middle C and the letters span the octave above that C. Here's an example +which should make things more clear: -@node Pitch names, , , Reference Manual +@lilypond[fragment,verbatim] +\clef bass + a,4 b, c d e f g a b c' d' e' \clef treble f' g' a' b' c'' +@end lilypond -Note names and chord modifiers can be customised for nationalities. -languages and conventions. The syntax is as follows. -@example - \pitchnames @keyindex{pitchnames} @var{scheme-alist} - \chordmodifiers@keyindex{chordmodifiers} @var{scheme-alist} -@end example +@cindex note names, Dutch -See @file{ly/nederlands.ly} and @file{ly/chord-modifiers.ly} for -specific examples how to do this. tables can be tailored specified -using. Some national note names have been provided, see @ref{Other -languages}. +In Dutch, a sharp is formed by adding @code{-is} to the end of a pitch +name and a flat is formed by adding @code{-es}. Double sharps and double +flats are obtained by adding @code{-isis} or @code{-eses}. @code{aes} +and @code{ees} are contracted to @code{as} and @code{es} in Dutch, but +both forms are accepted. -A @code{\paper} block at top level sets the default paper block. A -@code{\midi} block at top level works similarly. +LilyPond has predefined sets of note names for various other languages. +To use them, simply include the language specific init file. For +example: @code{\include "english.ly"}. The available language files and +the note names they define are: +@anchor{note name} +@anchor{note names} +@example + Note Names sharp flat +nederlands.ly c d e f g a bes b -is -es +english.ly c d e f g a bf b -s/-sharp -f/-flat +deutsch.ly c d e f g a b h -is -es +norsk.ly c d e f g a b h -iss/-is -ess/-es +svenska.ly c d e f g a b h -iss -ess +italiano.ly do re mi fa sol la sib si -d -b +catalan.ly do re mi fa sol la sib si -d/-s -b +espanol.ly do re mi fa sol la sib si -s -b +@end example -Identifier assignments may appear at top level. Semicolons are -forbidden after top level assignments. +@cindex @code{'} +@cindex @code{,} -@node Lexical conventions, , , Reference Manual -@section Lexical conventions +The optional octave specification takes the form of a series of +single quote (`@code{'}') characters or a series of comma +(`@code{,}') characters. Each @code{'} raises the pitch by one +octave; each @code{,} lowers the pitch by an octave. -@cindex lexical conventions +@lilypond[fragment,verbatim,center] + c' c'' es' g' as' gisis' ais' +@end lilypond +@node Chromatic alterations +@subsection Chromatic alterations +Normally accidentals are printed automatically, but you may also +print them manually. A reminder accidental +@cindex reminder accidental +@cindex @code{?} +can be forced by adding an exclamation mark @code{!} +after the pitch. A cautionary accidental +@cindex cautionary accidental +@cindex parenthesized accidental +(an accidental within parentheses) can be obtained by adding the +question mark `@code{?}' after the pitch. -@cindex comment +@lilypond[fragment,verbatim] + cis' cis' cis'! cis'? +@end lilypond -@indexcode{%} +The automatic production of accidentals can be tuned in many +ways. For more information, refer to @ref{Accidentals}. -A one line comment is introduced by a `@code{%}' character. -Block comments are started by `@code{%@{}' and ended by `@code{%@}}'. -They cannot be nested. +@c . {Rests} +@node Rests +@subsection Rests +@cindex Rests -@indexcode{#} +Rests are entered like notes, with a ``note name'' of `@code{r}': -LilyPond contains a Scheme interpreter (the GUILE library) for -internal use. The interpreter is accessed by the pound sign: +@lilypond[singleline,verbatim] +r1 r2 r4 r8 +@end lilypond -Whereever the syntax allows Scheme expressions, you may enter one as +Whole bar rests, centered in middle of the bar, are specified using +@code{R} (capital R); see @ref{Multi measure rests}. See also +@seeinternals{Rest}. -@example - #@var{scheme} -@end example +For some music, you may wish to explicitly specify the rest's vertical +position. This can be achieved by entering a note with the @code{\rest} +keyword appended. Rest collision testing will leave these rests alone. -Evaluates the specified Scheme code. If this is used at toplevel, then -the result is discarded. Example: -@example - \property Staff.TestObject \override #'symbol = #(+ 1 2) -@end example +@lilypond[singleline,verbatim] +a'4\rest d'4\rest +@end lilypond -(in this case, @code{\override} expects two Scheme expressions. -[refer appendix/ online intro on Scheme] +@c . {Skips} +@c FIXME: naming. +@node Skips +@subsection Skips +@cindex Skip +@cindex Invisible rest +@cindex Space note -@cindex keyword +An invisible rest (also called a `skip') can be entered like a note +with note name `@code{s}' or with @code{\skip @var{duration}}: -Keywords start with a backslash, followed by a number of lower case -alphabetic characters. These are all the keywords. +@lilypond[singleline,verbatim] +a2 s4 a4 \skip 1 a4 +@end lilypond -@example -apply arpeggio autochange spanrequest commandspanrequest -simultaneous sequential accepts alternative bar breathe -char chordmodifiers chords clef cm consists consistsend -context denies duration dynamicscript elementdescriptions -font grace header in lyrics key mark musicalpitch -time times midi mm name pitchnames notes outputproperty -override set revert partial paper penalty property pt -relative remove repeat addlyrics partcombine score -script stylesheet skip textscript tempo translator -transpose type -@end example +@c FIXME: in Lyrics mode, we have " " and _ -@cindex integer +In Lyrics mode, invisible rests are entered using either `@code{" "}' +or `@code{_}': +@lilypond[singleline,verbatim] +< + \context Lyrics \lyrics { lah2 di4 " " dah2 _4 di } + \notes\relative c'' { a2 a4 a a2 a4 a } +> +@end lilypond -Formed from an optional minus sign followed by digits. Arithmetic -operations cannot be done with integers, and integers cannot be mixed -with reals. +Note that the @code{s} syntax is only available in Note mode and Chord +mode. In other situations, you should use the @code{\skip} command, +which will work outside of those two modes: -@cindex real - +@lilypond[singleline,verbatim] +\score { + \context Staff < + { \time 4/8 \skip 2 \time 4/4 } + \notes\relative c'' { a2 a1 } + > +} +@end lilypond -Formed from an optional minus sign and a sequence of digits followed -by a @emph{required} decimal point and an optional exponent such as -@code{-1.2e3}. Reals can be built up using the usual operations: -`@code{+}@indexcode{+}', `@code{-}@indexcode{-}', `@code{*}@indexcode{*}', and -`@code{/}@indexcode{/}', with parentheses for grouping. +The skip command is merely an empty musical placeholder. It doesn't +produce any output, not even transparent output. -A real constant can be followed by one of the dimension -keywords: -@cindex dimensions - @code{\mm}@keyindex{mm}, -@code{\pt}@keyindex{pt}, @code{\in}@keyindex{in}, or -@code{\cm}@keyindex{cm}, for millimeters, points, inches and -centimeters, respectively. This converts the number to a real that -is the internal representation of dimensions. +@c . {Durations} +@node Durations +@subsection Durations -@cindex string - -Begins and ends with the `@code{"}' character. To include a `@code{"}' -character in a string write `@code{\"}'. Various other backslash -sequences have special interpretations as in the C language. A string -that contains no spaces can be written without the quotes. See -@ref{Lexical modes} for details on unquoted strings; their interpretation varies -depending on the situation. Strings can be concatenated with the -`@code{+}' operator. +@cindex duration +@cindex @code{\duration} -The tokenizer accepts the following commands. They have no grammatical -function, hence they can appear anywhere in the input. +In Note, Chord, and Lyrics mode, durations are designated by numbers +and dots: durations are entered as their reciprocal values. For example, +a quarter note is entered using a @code{4} (since it's a 1/4 note), while +a half note is entered using a @code{2} (since it's a 1/2 note). For notes +longer than a whole you must use identifiers. +@c FIXME: what's an identifier? I don't think it's been introduced yet. +@c and if it has, I obviously skipped that part. - Graham -@example - \maininput@keyindex{maininput} -@end example +@example +c'\breve +c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 +r\longa r\breve +r1 r2 r4 r8 r16 r32 r64 r64 +@end example -This command is used in init files to signal that the user file must -be read. This command cannot be used in a user file. +@lilypond[noindent,noquote] +\score { + \notes \relative c'' { + a\breve \autoBeamOff + a1 a2 a4 a8 a16 a32 a64 a64 + r\longa r\breve + r1 r2 r4 r8 r16 r32 r64 r64 + } + \paper { + \translator { + \StaffContext + \remove "Clef_engraver" + \remove "Staff_symbol_engraver" + \remove "Time_signature_engraver" + \consists "Pitch_squash_engraver" + } + } +} +@end lilypond -@example - \include@keyindex{include} @var{file} -@end example -Include @var{file}. The argument @var{file} may be a quoted string (an -unquoted string will not work here!) or a string identifier. The full -filename including the @file{.ly} extension must be given, +If the duration is omitted then it is set to the previously entered +duration. At the start of parsing, a quarter note is assumed. The +duration can be followed by dots (`@code{.}') in order to obtain dotted +note lengths: +@cindex @code{.} -@example - \version@keyindex{version} @var{string} ; -@end example +@lilypond[fragment,verbatim,center] + a' b' c''8 b' a'4 a'4. b'4.. c'8. +@end lilypond +@cindex @code{r} +@cindex @code{s} -Specify the version of LilyPond that a file was written for. The -argument is a version string in quotes, for example @code{"1.2.0"}. -This is used to detect invalid input, and to aid -@code{convert-ly}, a tool that automatically upgrades input files. +You can alter the length of duration by a fraction @var{N/M} +appending `@code{*}@var{N/M}' (or `@code{*}@var{N}' if @var{M=1}). This +won't affect the appearance of the notes or rests produced. +@lilypond[fragment,verbatim] + a'2*2 b'4*2 a'8*4 a'4*3/2 gis'4*3/2 a'4*3/2 a'4 +@end lilypond +Durations can also be produced through GUILE extension mechanism. +@lilypond[verbatim,fragment] + c'\duration #(ly:make-duration 2 1) +@end lilypond -@cindex other languages -@node Other languages, , , Reference Manual +@refbugs -Note name definitions have been provided in various languages. -Simply include the language specific init file. For example: -`@code{\include "english.ly"}'. The available language files and the -names they define are: +Dot placement for chords is not perfect. In some cases, dots overlap: +@lilypond[] + <>4. +@end lilypond -@example - Note Names sharp flat -nederlands.ly c d e f g a bes b -is -es -english.ly c d e f g a bf b -s/-sharp -f/-flat -deutsch.ly c d e f g a b h -is -es -norsk.ly c d e f g a b h -iss/-is -ess/-es -svenska.ly c d e f g a b h -iss -ess -italiano.ly do re mi fa sol la sib si -d -b -catalan.ly do re mi fa sol la sib si -d/-s -b -@end example -Pitch names can be redefined using the @code{\pitchnames} command, see -@ref{Pitch names}. +@node Ties +@subsection Ties -@cindex Lexical Modes +@cindex Tie +@cindex ties +@cindex @code{~} -@cindex modes +A tie connects two adjacent note heads of the same pitch. The tie in +effect extends the length of a note. Ties should not be confused with +slurs, which indicate articulation, or phrasing slurs, which indicate +musical phrasing. A tie is entered using the tilde symbol `@code{~}'. -@node Lexical modes, , , Reference Manual +@lilypond[fragment,verbatim,center] + e' ~ e' <> ~ <> +@end lilypond -To simplify entering notes, lyrics, and chords, @emph{Lilypond} has three -special input modes on top of the default mode. In each mode, words -are identified on the input. If @code{"word"} is encountered, it is -treated as a string. If @code{\word} is encountered, it is treated as -a keyword or as an identifier. The behavior of the modes differs in -two ways: Different modes treat unquoted words differently, and -different modes have different rules for deciding what is a word. +When a tie is applied to a chord, all note heads (whose pitches match) are +connected. If you try to tie together chords that have no common pitches, +no ties will be created. -@table @samp - @item Normal mode. -@cindex mode!normal - - At the start of parsing, @emph{Lilypond} is in Normal mode. In Normal - mode, a word is an alphabetic character followed by alphanumeric - characters. If @code{word} is encountered on the input it is - treated as a string. - - @item Note mode. -@cindex mode!note - - Note mode is introduced by the keyword - @code{\notes}@keyindex{notes}. In Note mode, words can only - contain alphabetic characters. If @code{word} is encountered, - LilyPond first checks for a notename of @code{word}. If no - notename is found, then @code{word} is treated as a string. - - Since combinations of numbers and dots are used for indicating - durations, it is not possible to enter real numbers in this mode. - - @item Chord mode. -@cindex mode!chord - - Chord mode is introduced by the keyword - @code{\chords}@keyindex{chords}. It is similar to Note mode, but - words are also looked up in a chord modifier table (containing - @code{maj}, @code{dim}, etc). - - Since combinations of numbers and dots are used for indicating - durations, you can not enter real numbers in this mode. Dashes - and carets are used to indicate chord additions and subtractions, - so scripts can not be entered in Chord mode. - - @item Lyrics mode. -@cindex mode!lyric - - Lyrics mode is introduced by the keyword - @code{\lyrics}@keyindex{lyrics}. This mode has rules that make it - easy to include punctuation and diacritical marks in words. A - word in Lyrics mode begins with: an alphabetic character, - `@code{_}', `@code{?}', `@code{!}', `@code{:}', `@code{'}', the - control characters @code{^A} through @code{^F}, @code{^Q} through - @code{^W}, @code{^Y}, @code{^^}, any 8-bit character with ASCII code - over 127, or a two-character combination of a backslash followed - by one of `@code{`}', `@code{'}', `@code{"}', or - `@code{^}'.@footnote{The purpose of Lyrics mode is that you can - enter lyrics in @TeX{} format or a standard encoding without - needing quotes. The precise definition of this mode indeed is - ludicrous. This will remain so until the authors of LilyPond - acquire a deeper understanding of character encoding, or someone - else steps up to fix this.} - - Subsequent characters of a word can be any character that is not - a digit and not white space. One important consequence of this - is that a word can end with `@code{@}}', which may be confusing if - you thought the closing brace was going to terminate Lyrics - mode.@footnote{LilyPond will issue a warning, though.} Any - `@code{_}' character which appears in an unquoted word is - converted to a space. This provides a mechanism for introducing - spaces into words without using quotes. Quoted words can also be - used in Lyrics mode to specify words that cannot be written with - the above rules. Here are some examples. Not all of these words - are printable by @TeX{}. +If you want less ties created for a chord, you can set +@code{Voice.sparseTies} to true. In this case, a single tie is used +for every tied chord. +@lilypond[fragment,verbatim,center] + \property Voice.sparseTies = ##t + <> ~ <> +@end lilypond -@example -Ah! % a word -2B_||_!2B % not a word because it starts with a digit -``Hello'' % not a word because it starts with ` -_ _ _ _ % 4 words, each one a space -@end example +In its meaning a tie is just a way of extending a note duration, similar +to the augmentation dot: the following example are two ways of notating +exactly the same concept. +@c +@lilypond[fragment, singleline] +\time 3/4 c'2. c'2 ~ c'4 +@end lilypond +If you need to tie notes over bars, it may be easier to use +@ref{Automatic note splitting}. - Since combinations of numbers and dots are used for indicating - durations, you can not enter real numbers in this mode. -@end table +See also @seeinternals{Tie}. -[todo: include short table showign differences] -@node Types, , , Reference Manual -@section Types +@refbugs -@cindex Identifiers +At present, the tie is represented as a separate event, temporally +located in between the notes. Tying only a subset of the note heads +of a chord is not supported in a simple way. It can be achieved by +moving the tie-engraver into the Thread context and turning on and off +ties per Thread. -[say something about types] +Switching staves when a tie is active will not work. -All of the information in a LilyPond input file, is represented as a -Scheme value. In addition to normal Scheme data types (such as pair, -number, boolean, etc.), LilyPond has a number of specialized data types, +@node Automatic note splitting +@subsection Automatic note splitting +@c FIXME: This subsection doesn't belong in @ref{Note entry}. -@itemize @bullet - @item Input - @item c++-function - @item Music: see @ref{Music expressions} - @item Identifier - @item Translator_def: -See section @ref{contextdefs} for more information - - @item Duration - @item Pitch - @item Score (TODO, smobme) -@item Music_output_def (TODO, smobme) - - @item Moment (rational number) -@end itemize +LilyPond can automatically converting long notes to tied notes. This +is done by replacing the @code{Note_heads_engraver} by the +@code{Completion_heads_engraver}. -LilyPond also includes some transient object types. Objects of these -types are built during a LilyPond run, and do not `exist' per se within -your input file. These objects are created as a result of your input -file, so you can include commands in the input to manipulate them, -during a lilypond run . +@lilypond[verbatim,noindent,noquote] +\score{ + \notes\relative c'{ \time 2/4 + c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 + } + \paper{ \translator{ + \ThreadContext + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + } } } +@end lilypond -@itemize @bullet - @item Grob: short for Graphical object. See @ref{Grobs}. - @item Molecule: device-independent paper output object, - including dimensions. Produced by some Grob functions - @item Translator: object that produces audio objects or Grobs +This engraver splits all running notes at the bar line, and inserts +ties. One of its uses is to debug complex scores: if the measures are +not entirely filled, then the ties exactly show how much each measure +is off. - @item Font_metric: object representing a font. (Not yet user accessible.) - @item Audio_element: (TODO, smobme) -@end itemize +@refbugs -Identifiers allow objects to be assigned to names during the parse -stage. To assign an identifier, you use `@var{name}=@var{value}' and to -refer to an identifier, you preceed its name with a backslash: -`@code{\}@var{name}'. Identifier assignments must appear at top level -in the @emph{Lilypond} file. Semicolons are forbidden after assignments -appearing at top level but they are obligatory after assignments -appearing in the @code{\paper} block, see Section @ref{paper}. +Not all durations (especially those containing tuplets) can be +represented exactly; the engraver will not insert tuplets. -@var{value} is any valid Scheme value or any of the input-types listed -above. +@node Tuplets +@subsection Tuplets -An identifier can be created with any string for its name, but you -will only be able to refer to identifiers whose names begin with a -letter, being entirely alphanumeric. It is impossible to refer to an -identifier whose name is the same as the name of a keyword. +@cindex tuplets +@cindex triplets +@cindex @code{\times} -The right hand side of an identifier assignment is parsed completely -before the assignment is done, so it is allowed to redefine an -identifier in terms of its old value, e.g. +Tuplets are made out of a music expression by multiplying all durations +with a fraction. +@cindex @code{\times} @example - foo = \foo * 2.0 + \times @var{fraction} @var{musicexpr} @end example -When an identifier is referenced, the information it points to is -copied. For this reason, an identifier reference must always be the - first item in a block. -@example -\paper @{ - foo = 1.0 - \paperIdent % wrong and invalid -@} +The duration of @var{musicexpr} will be multiplied by the fraction. +In the sheet music, the fraction's denominator will be printed over +the notes, optionally with a bracket. The most common tuplet is the +triplet in which 3 notes have the length of 2, so the notes are 2/3 +of their written length: -\paper @{ - \paperIdent % correct - foo = 1.0 -@} -@end example +@lilypond[fragment,verbatim,center] + g'4 \times 2/3 {c'4 c' c'} d'4 d'4 +@end lilypond + +The property @code{tupletSpannerDuration} specifies how long each bracket +should last. With this, you can make lots of tuplets while typing +@code{\times} only once, saving you lots of typing. +@lilypond[fragment, relative, singleline, verbatim] +\property Voice.tupletSpannerDuration = #(ly:make-moment 1 4) +\times 2/3 { c'8 c c c c c } +@end lilypond -@node Music expressions, , , Reference Manual -@section Music expressions +The format of the number is determined by the property +@code{tupletNumberFormatFunction}. The default prints only the +denominator, but if you set it to the Scheme function +@code{fraction-tuplet-formatter}, Lilypond will print @var{num}:@var{den} +instead. -@cindex music expressions -Music in @emph{Lilypond} is entered as a music expression. Notes, rests, -lyric syllables are music expressions (the atomic -expressions) -@cindex atomic music expressions -, and you can combine -music expressions to form new ones. This example forms a compound -expressions out of the quarter @code{c} note and a @code{d} -note: +@cindex @code{tupletNumberFormatFunction} +@cindex tuplet formatting -@example -\sequential @{ c4 d4 @} -@end example +See also @seeinternals{TupletBracket}. -The meaning of this compound expression is to play the `@code{c}' -first, and then the `@code{d}' (as opposed to playing them -simultaneously, for instance). +@refbugs -Atomic music expression are discussed in -subsection @ref{Atomic music expressions}. Compound music expressions are -discussed in subsection @ref{Compound music expressions}. +Nested tuplets are not formatted automatically. In this case, outer +tuplet brackets should be moved automatically. +@node Easy Notation note heads +@subsection Easy Notation note heads +@cindex easy notation +@cindex Hal Leonard -@node Atomic music expressions, , , Reference Manual -@section Atomic music expressions +A entirely different type of note head is the "easyplay" note head: a +note head that includes a note name. It is used in some publications by +Hal-Leonard Inc. music publishers. +@lilypond[singleline,verbatim,26pt] +\score { + \notes { c'2 e'4 f' | g'1 } + \paper { \translator { \EasyNotation } } +} +@end lilypond +Note that @code{EasyNotation} overrides a @internalsref{Score} context. You +probably will want to print it with magnification or a large font size to +make it more readable. To print with magnification, you must create a dvi +(with @file{ly2dvi}) and then enlarge it with something like @file{dvips -x +2000 file.dvi}. See @file{man dvips} for details. To print with a larger +font, see @ref{Font Size}. -@cindex pitch +@cindex Xdvi +@cindex ghostscript -@cindex duration - +If you view the result with Xdvi, then staff lines will show through +the letters. Printing the PostScript file obtained with ly2dvi does +produce the correct result. -The syntax for pitch specification is +@node Easier music entry +@section Easier music entry +@cindex Music entry +@menu +* Graphical interfaces:: +* Relative octaves:: +* Bar check:: +* Point and click:: +* Skipping corrected music:: +@end menu -@example - \musicalpitch@keyindex{musicalpitch} @{ @var{octave} @var{note} @var{shift} @} -@end example +When entering music with LilyPond, it is easy to introduce errors. This +section deals with tricks and features that help you enter music, and +find and correct mistakes. -@var{octave} is specified by an integer, zero for the octave -containing middle C. @var{note} is a number from 0 to 7, with 0 -corresponding to C and 7 corresponding to B. The shift is zero for a -natural, negative to add flats, or positive to add sharps. +@node Graphical interfaces +@subsection Graphical interfaces -In Note and Chord mode, pitches may be designated by names. See -section @ref{Other languages} for pitch names in different languages. +@cindex GUI +@cindex graphical interface +@cindex sequencer +@cindex RoseGarden +@cindex Denemo +@cindex NoteEdit +@cindex MIDI -The syntax for duration specification is +One way to avoid entering notes using the keyboard is to use a +graphical user interface. The following programs are known to have +a lilypond export option: -@example - \duration@keyindex{duration} - @{ @var{length} @var{dotcount} @} -@end example +@itemize @bullet +@item +Denemo was once intended as +a LilyPond graphical user interface. It run on Gnome/GTK. -@var{length} is the negative logarithm (base 2) of the duration: -1 is a half note, 2 is a quarter note, 3 is an eighth -note, etc. The number of dots after the note is given by -@var{dotcount}. +@quotation +@uref{http://denemo.sourceforge.net/} +@end quotation -In Note, Chord, and Lyrics mode, durations may be designated by -numbers and dots. +@item + Noteedit, a graphical score editor that runs under KDE/Qt. +@quotation +@uref{http://rnvs.informatik.tu-chemnitz.de/~jan/noteedit/noteedit.html,} +@end quotation +@item +RoseGarden was once the inspiration for naming LilyPond. Nowadays it +has been rewritten from scratch and supports LilyPond export as of +version 0.1.6. -@node Note specification, , , Reference Manual +@quotation +@uref{http://rosegarden.sf.net/} +@end quotation +@end itemize -@cindex note specification +Another option is to enter the music using your favorite MIDI +sequencer, and then import it using midi2ly. midi2ly is described in +@ref{Invoking midi2ly}. -@cindex pitches -@cindex entering notes +@c . {Relative} +@node Relative octaves +@subsection Relative octaves +@cindex Relative +@cindex relative octave specification -A note specification has the form +Octaves are specified by adding @code{'} and @code{,} to pitch names. +When you copy existing music, it is easy to accidentally put a pitch in +the wrong octave and hard to find such an error. To prevent these +errors, LilyPond features octave entry. +@cindex @code{\relative} @example - @var{pitch}[@var{octavespec}][!][?][@var{duration}] + \relative @var{startpitch} @var{musicexpr} @end example -The pitch of the note is specified by the note's name. - - -The default names are the Dutch note names. The notes are specified -by the letters `@code{c}' through `@code{b}', where `@code{c}' is an -octave below middle C and the letters span the octave above that C. -In Dutch, -@cindex notenames!Dutch -a sharp is formed by adding `@code{-is}' to the end of a pitch name. A -flat is formed by adding `@code{-es}'. Double sharps and double flats -are obtained by adding `@code{-isis}' or `@code{-eses}'. `@code{aes}' -and `@code{ees}' are contracted to `@code{as}' and `@code{es}' in Dutch, -but both forms will be accepted. - -LilyPond has predefined sets of notenames for various languages. See -@ref{Other languages}. - - - -The optional octave specification takes the form of a series of -single quote (`@code{'}@indexcode{'}') characters or a series of comma -(`@code{,}@indexcode{,}') characters. Each @code{'} raises the pitch by one -octave; each @code{,} lowers the pitch by an octave. - -@lilypond[fragment,verbatim,center] - c' d' e' f' g' a' b' c'' +The octave of notes that appear in @var{musicexpr} are calculated as +follows: If no octave changing marks are used, the basic interval +between this and the last note is always taken to be a fourth or less +(This distance is determined without regarding alterations; a +@code{fisis} following a @code{ceses} will be put above the +@code{ceses}) + +The octave changing marks @code{'} and @code{,} can be added to raise or +lower the pitch by an extra octave. Upon entering relative mode, an +absolute starting pitch must be specified that will act as the +predecessor of the first note of @var{musicexpr}. + +Entering music that changes octave frequently is easy in relative mode. +@lilypond[fragment,singleline,verbatim,center] + \relative c'' { + b c d c b c bes a + } @end lilypond +And octave changing marks are used for intervals greater than a fourth. @lilypond[fragment,verbatim,center] - cis' dis' eis' fis' gis' ais' bis' + \relative c'' { + c g c f, c' a, e'' } @end lilypond -@lilypond[fragment,verbatim,center] - ces' des' es' fes' ges' as' bes' -@end lilypond +If the preceding item is a chord, the first note of the chord is used +to determine the first note of the next chord. However, other notes +within the second chord are determined by looking at the immediately +preceding note. @lilypond[fragment,verbatim,center] - cisis' eisis' gisis' aisis' beses' -@end lilypond + \relative c' { + c <> + <> + <> + } +@end lilypond +@cindex @code{\notes} -@lilypond[fragment,verbatim,center] - ceses' eses' geses' ases' beses' -@end lilypond +The pitch after the @code{\relative} contains a note name. To parse +the pitch as a note name, you have to be in note mode, so there must +be a surrounding @code{\notes} keyword (which is not +shown here). -Whenever a C-sharp is desired, you must specify a C-sharp. LilyPond -will determine what accidentals to typeset depending on the key and -context. A reminder accidental -@cindex reminder accidental - can be -forced by adding an exclamation mark `@code{!}' after the pitch. A -cautionary accidental, -@cindex cautionary accidental - i.e., an -accidental within parentheses can be obtained by adding the question -mark `@code{?}@indexcode{?}' after the pitch. +The relative conversion will not affect @code{\transpose}, +@code{\chords} or @code{\relative} sections in its argument. If you +want to use relative within transposed music, you must place an +additional @code{\relative} inside the @code{\transpose}. -@lilypond[fragment,verbatim,center] - cis' d' e' cis' c'? d' e' c'! -@end lilypond +@c . {Bar check} +@node Bar check +@subsection Bar check +@cindex Bar check -@cindex duration +@cindex bar check +@cindex @code{barCheckSynchronize} +@cindex @code{|} -Durations are entered as their reciprocal values. For notes longer -than a whole note, use identifiers. -@quotation +Whenever a bar check is encountered during interpretation, a warning +message is issued if it doesn't fall at a measure boundary. This can +help you find errors in the input. Depending on the value of +@code{barCheckSynchronize}, the beginning of the measure will be +relocated, so this can also be used to shorten measures. -@example -c'\longa c'\breve -c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 -@end example +A bar check is entered using the bar symbol, @code{|}: +@example + \time 3/4 c2 e4 | g2. +@end example -@end quotation -@quotation -@lilypond[] -\score { - \notes \relative c'' { - a\longa a\breve - a1 a2 a4 a8 a16 a32 a64 a64 - } - \paper { -%{ \translator { - \StaffContext - \remove "Clef_engraver"; - \remove "Staff_symbol_engraver"; - } %} - } -} -@end lilypond -@end quotation +@cindex skipTypesetting -@quotation +Failed bar checks are most often caused by entering incorrect +durations. Incorrect durations often completely garble up the score, +especially if it is polyphonic, so you should start correcting the score +by scanning for failed bar checks and incorrect durations. To speed up +this process, you can use @code{skipTypesetting} (See @ref{Skipping +corrected music})). -@example -r\longa r\breve -r1 r2 r4 r8 r16 r32 r64 r64 -@end example +@c . {Point and click} +@node Point and click +@subsection Point and click +@cindex poind and click -@end quotation +Point and click lets you find notes in the input by clicking on them in +the Xdvi window. This makes it very easy to find input that causes some +error in the sheet music. -@quotation +To use it, you need the following software +@itemize @bullet +@item A dvi viewer that supports src specials. +@itemize @bullet +@item Xdvi, version 22.36 or newer. Available from +@uref{ftp://ftp.math.berkeley.edu/pub/Software/TeX/xdvi.tar.gz,ftp.math.berkeley.edu}. -@lilypond[] -\score { - \notes \relative c'' { - r\longa r\breve - r1 r2 r4 r8 r16 r32 r64 r64 - } - \paper { - loose_column_distance = 2.5 * \staffspace; - linewidth = -1.0; - \translator { - \StaffContext - \remove "Clef_engraver"; - \remove "Staff_symbol_engraver"; - \remove "Bar_engraver"; - } - } -} -@end lilypond -@end quotation + Note that most @TeX{} distributions ship with xdvik, which is always + a few versions behind the official Xdvi. To find out which xdvi you + are running, try @code{xdvi -version} or @code{xdvi.bin -version}. +@item KDVI. A dvi viewer for KDE. You need KDVI from KDE 3.0 or +newer. Enable option @emph{Inverse search} in the menu @emph{Settings}. -If the duration is omitted then it is set equal to the previous -duration. If there is no previous duration, a quarter note is -assumed. The duration can be followed by a dot (`@code{.}@indexcode{.}') -to obtain dotted note lengths. +@cindex Xdvi +@cindex KDVI +@cindex KDE -@lilypond[fragment,verbatim,center] - a'4. b'4. -@end lilypond -You can alter the length of duration by writing -`@code{*}@var{fraction}' after it. This will not affect the -appearance of note heads or rests. +@end itemize +@item An editor with a client/server interface (or a lightweight GUI +editor). -Rests are entered like notes, with note name `@code{r}@indexcode{r}', -or `@code{R}@indexcode{R}'. There is also a note name -`@code{s}@indexcode{s}', which produces a space of the specified -duration. `@code{R}' is specifically meant for entering parts: the -@code{R} rest can expand to fill a score with rests, or it can be -printed as a single multimeasure rest. +@cindex editor -You can control the expansion by setting the property -@code{Score.skipBars}. If this is set to true, Lily will not expand -empty measures, and the multimeasure rests automatically adds the -appropriate number. +@itemize @bullet +@item Emacs. Emacs is an extensible text-editor. It is available from +@uref{http://www.gnu.org/software/emacs/}. You need version 21 to use +column location. +@c move this elsewhere? -@cindex lyrics expressions +LilyPond also comes with support files for emacs: lilypond-mode for +emacs provides indentation, syntax coloring and handy compile +short-cuts. If lilypond-mode is not installed on your platform, then +refer to the installation instructions for more information -Syllables are entered like notes, with pitches replaced by text. For -example, `@code{Twin-4 kle4 twin-4 kle4}' enters four syllables, each -with quarter note duration. Note that the hyphen has no special -meaning for lyrics, and does not introduce special symbols. See -section @ref{Lexical modes} for a description of what is interpreted as -lyrics. +@cindex emacs +@cindex emacs mode +@cindex lilypond-mode for emacs +@cindex syntax coloring -Spaces can be introduced into a lyric either by using quotes -(`@code{"}') or by using an underscore without quotes: `@code{He_could4 -not4}'. All unquoted underscores are converted to spaces. Printing -lyrics is discussed in section @ref{lyricprint}. +@item XEmacs. Xemacs is very similar to emacs. +@cindex XEmacs +@item NEdit. NEdit runs under Windows, and Unix. + It is available from @uref{http://www.nedit.org}. -@cindex properties +@cindex NEdit -@example - \property@keyindex{property} - @var{contextname}.@var{propname} = @var{value} -@end example +@item GVim. GVim is a GUI variant of VIM, the popular VI +clone. It is available from @uref{http://www.vim.org}. -Sets the @var{propname} property of the context @var{contextname} to -the specified @var{value}. All three arguments are strings. -Depending on the context, it may be necessary to quote the strings or -to leave space on both sides of the dot. +@cindex GVim +@cindex Vim +@end itemize +@end itemize -@cindex translator switches +Xdvi must be configured to find the @TeX{} fonts and music +fonts. Refer to the Xdvi documentation for more information. +To use point-and-click, add one of these lines to the top of your .ly +file. @example - \translator@keyindex{translator} - @var{contexttype} = @var{name} +#(ly:set-point-and-click 'line) @end example +@cindex line-location + +When viewing, Control-Mousebutton 1 will take you to the originating +spot in the @file{.ly} file. Control-Mousebutton 2 will show all +clickable boxes. -A music expression indicating that the context which is a direct -child of the a context of type @var{contexttype} should be shifted to -a context of type @var{contexttype} and the specified name. +If you correct large files with point-and-click, be sure to start +correcting at the end of the file. When you start at the top, and +insert one line, all following locations will be off by a line. -Usually this is used to switch staffs in Piano music, e.g. +@cindex Emacs +For using point-and-click with emacs, add the following +In your emacs startup file (usually @file{~/.emacs}), +@example +(server-start) +@end example +Make sure that the environment variable @var{XEDITOR} is set to @example - \translator Staff = top @var{Music} +emacsclient --no-wait +%l %f @end example +@cindex @var{XEDITOR} +If you use xemacs instead of emacs, you use @code{(gnuserve-start)} in +your @file{.emacs}, and set @code{XEDITOR} to @code{gnuclient -q +%l %f} + +For using Vim, set @code{XEDITOR} to @code{gvim --remote +%l %f}, or +use this argument with xdvi's @code{-editor} option. + +@cindex NEdit +For using NEdit, set @code{XEDITOR} to @code{nc -noask +%l %f}, or +use this argument with xdvi's @code{-editor} option. + +If can also make your editor jump to the exact location of the note +you clicked. This is only supported on Emacs and VIM. Users of Emacs version +20 must apply the patch @file{emacsclient.patch}. Users of version 21 +must apply @file{server.el.patch} (version 21.2 and earlier). At the +top of the @code{ly} file, replace the @code{set-point-and-click} line +with the following line, +@example +#(ly:set-point-and-click 'line-column) +@end example +@cindex line-colomn-location +and set @code{XEDITOR} to @code{emacsclient --no-wait +%l:%c %f}. Vim +users can set @var{XEDITOR} to @code{gvim --remote +:%l:norm%c| %f}. -@cindex output properties +@refbugs -These allow you to tweak what is happening in the back-end -directly. If you want to control every detail of the output -formatting, this is the feature to use. The downside to this is that -you need to know exactly how the backend works. Example: +When you convert the @TeX{} file to PostScript using @code{dvips}, it +will complain about not finding @code{src:X:Y} files. These complaints +are harmless, and can be ignored. +@node Skipping corrected music +@subsection Skipping corrected music -@lilypond[fragment,verbatim] -\relative c'' { c4 - \context Staff \outputproperty - #(make-type-checker 'Note_head) - #'extra-offset = #'(5.0 . 7.5) - } +The property @code{Score.skipTypesetting} can be used to switch on and +off typesetting completely during the interpretation phase. When +typesetting is switched off, the music is processed much more quickly. +You can use this to skip over the parts of a score that you have already +checked for errors. + +@lilypond[fragment,singleline,verbatim] +\relative c'' { c8 d +\property Score.skipTypesetting = ##t + e f g a g c, f e d +\property Score.skipTypesetting = ##f +c d b bes a g c2 } @end lilypond -This selects all note heads occurring at current staff level, and sets -the extra-offset of those heads to (5,7.5), shifting them up and -right. -Use of this feature is entirely on your own risk: if you use this, the -result will depend very heavily on the implementation of the backend, -which we change regularly and unscrupulously. -@cindex commands +@node Staff notation +@section Staff notation -Commands are music expressions that have no duration. +This section deals with music notation that occurs on staff level, +such as keys, clefs and time signatures. +@cindex Staff notation -@example +@menu +* Staff symbol:: +* Key signature:: +* Clef:: +* Time signature:: +* Unmetered music:: +* Bar lines:: +@end menu - @code{\key}@keyindex{key} @var{pitch} @var{type} @code{;} -@end example +@node Staff symbol +@subsection Staff symbol -Change the key signature. @var{type} should be -@code{\major}@keyindex{major} or @code{\minor}@keyindex{minor} to get -@var{pitch}-major or @var{pitch}-minor, respectively. The second -argument is optional; the default is major keys. The @var{\context} -argument can also be given as an integer, which tells the number of -semitones that should be added to the pitch given in the subsequent -@code{\key}@keyindex{key} commands to get the corresponding major key, -e.g., @code{\minor}@keyindex{minor} is defined as 3. The standard -mode names @code{\ionian}@keyindex{ionian}, -@code{\locrian}@keyindex{locrian}, @code{\aeolian}@keyindex{aeolian}, -@code{\mixolydian}@keyindex{mixolydian}, @code{\lydian}@keyindex{lydian}, -@code{\phrygian}@keyindex{phrygian}, and @code{\dorian}@keyindex{dorian} -are also defined. -@example - @code{\keysignature}@keyindex{keysignature} @var{pitchseq} @code{;} -@end example +@cindex adjusting staff symbol +@cindex StaffSymbol, using \property +@cindex staff lines, setting number of -Specify an arbitrary key signature. The pitches from @var{pitch} will -be printed in the key signature in the order that they appear on the -list. - -@example - \mark@keyindex{mark} @var{unsigned}; - \mark @var{string}; -@end example -Prints a mark over or under the staff. You must add -@code{Mark_engraver}@indexcode{Mark_engraver} to the Score context for -this to work. +The lines of the staff symbol are formed by the +@internalsref{StaffSymbol} object. This object is created at the moment +that their context is created. You can not change the appearance of +the staff symbol by using @code{\override} or @code{\set}. At the +moment that @code{\property Staff} is interpreted, a Staff context is +made, and the StaffSymbol is created before any @code{\override} is +effective. You can deal with this either overriding properties in a +@code{\translator} definition, or by using @code{\outputproperty}. -@node barlines, , , Reference Manual -@example - \bar@keyindex{bar} @var{bartype}; -@end example +@refbugs -This is a short-cut for doing -@example - \property Score.whichBar = @var{bartype} -@end example +If you end a staff half way a piece, the staff symbol may not end +exactly on the barline. -You are encouraged to use @code{\repeat} for repetitions. See -@ref{Repeats}, and the documentation of @code{whichBar}. +@c . {Key} +@node Key signature +@subsection Key signature +@cindex Key +@cindex @code{\key} + +Setting or changing the key signature is done with the @code{\key} +command. @example - \time@keyindex{time} @var{numerator}@code{/}@var{denominator} @code{;} + @code{\key} @var{pitch} @var{type} @end example -A short-cut for doing +@cindex @code{\minor} +@cindex @code{\major} +@cindex @code{\minor} +@cindex @code{\ionian} +@cindex @code{\locrian} +@cindex @code{\aeolian} +@cindex @code{\mixolydian} +@cindex @code{\lydian} +@cindex @code{\phrygian} +@cindex @code{\dorian} + +Here, @var{type} should be @code{\major} or @code{\minor} to get +@var{pitch}-major or @var{pitch}-minor, respectively. +The standard mode names @code{\ionian}, +@code{\locrian}, @code{\aeolian}, @code{\mixolydian}, @code{\lydian}, +@code{\phrygian}, and @code{\dorian} are also defined. + +This command sets the context property @code{Staff.keySignature}. +Non-standard key signatures can be specified by setting this property +directly. + +The printed signature is a @internalsref{KeySignature} object, typically +created in @internalsref{Staff} context. + +@cindex @code{keySignature} + +@c . {Clef} +@node Clef +@subsection Clef +@cindex @code{\clef} + +The clef can be set or changed with the @code{\clef} command: +@lilypond[fragment,verbatim] + \key f\major c''2 \clef alto g'2 +@end lilypond + +Supported clef-names include +@c Moved standard clefs to the top /MB +@table @code +@item treble, violin, G, G2 +G clef on 2nd line +@item alto, C + C clef on 3rd line +@item tenor + C clef on 4th line +@item bass, F + F clef on 4th line +@item french + G clef on 1st line, so-called French violin clef +@item soprano + C clef on 1st line +@item mezzosoprano + C clef on 2nd line +@item baritone + C clef on 5th line +@item varbaritone + F clef on 3rd line +@item subbass + F clef on 5th line +@item percussion + percussion clef +@end table + +By adding @code{_8} or @code{^8} to the clef name, the clef is +transposed one octave down or up, respectively. Note that you have to +enclose @var{clefname} in quotes if you use underscores or digits in the +name. For example, @example - \property Score.timeSignatureFraction = #'(@var{numerator} . @var{denominator}) + \clef "G_8" @end example -See the documentation of @code{timeSignatureFraction} +The object for this symbol is @internalsref{Clef}. -@example - \tempo@keyindex{tempo} @var{duration} = @var{perminute} @code{;} -@end example +This command is equivalent to setting @code{clefGlyph}, +@code{clefPosition} (which controls the Y position of the clef), +@code{centralCPosition} and @code{clefOctavation}. A clef is created +when any of these properties are changed. -Used to specify the tempo. For example, `@code{\tempo 4 = 76;}' -requests output with 76 quarter notes per minute. -@example - \partial@keyindex{partial} @var{duration} @code{;} -@end example +@c . {Time signature} +@node Time signature +@subsection Time signature +@cindex Time signature +@cindex meter +@cindex @code{\time} -Short cut for +The time signature is set or changed by the @code{\time} +command. +@lilypond[fragment,verbatim] + \time 2/4 c'2 \time 3/4 c'2. +@end lilypond -@example - \property Score.measurePosition = @var{length of duration} -@end example +The actual symbol that's printed can be customized with the @code{style} +property. Setting it to @code{#'()} uses fraction style for 4/4 and +2/2 time. -See the documentation of @code{measurePosition}. -@cindex anacrusis +The object for this symbol is @internalsref{TimeSignature}. There are +many more options for its layout. They are selected through the +@code{style} object property. See @file{input/test/time.ly} for more +examples. -@cindex upstep +This command sets the property @code{timeSignatureFraction}, +@code{beatLength} and @code{measureLength} in the @code{Timing} +context, which is normally aliased to @internalsref{Score}. The property +@code{timeSignatureFraction} determine where bar lines should be +inserted, and how automatic beams should be generated. Changing the +value of @code{timeSignatureFraction} also causes a time signature +symbol to be printed. -@example +More options are available through the Scheme function +@code{set-time-signature}. In combination with the +@internalsref{Measure_grouping_engraver}, it will create +@internalsref{MeasureGrouping} signs. Such signs ease reading +rhythmically complex modern music. In the following example, the 9/8 +measure is subdivided in 2, 2, 2 and 3. This is passed to +@code{set-time-signature} as the third argument @code{(2 2 2 3)}. - @code{|}@indexcode{|} -@cindex bar check +@lilypond[verbatim] +\score { \notes \relative c'' { + #(set-time-signature 9 8 '(2 2 2 3)) + g8 g d d g g a8-[-( bes g-]-) | + #(set-time-signature 5 8 '(3 2)) + a4. g4 + } + \paper { + linewidth = -1.0 + \translator { \StaffContext + \consists "Measure_grouping_engraver" + }}} +@end lilypond + +@c . {Partial} +@subsection Partial +@cindex Partial +@cindex anacrusis +@cindex upbeat +@cindex partial measure +@cindex measure, partial +@cindex shorten measures +@cindex @code{\partial} + +Partial measures, for example in upbeats, are entered using the +@code{\partial} command: +@lilypond[fragment,verbatim] +\partial 4* 5/16 c'16 c4 f16 a'2. ~ a'8. a'16 | g'1 +@end lilypond +The syntax for this command is +@example + \partial @var{duration} +@end example +This is internally translated into +@example + \property Timing.measurePosition = -@var{length of duration} @end example +@cindex @code{|} +The property @code{measurePosition} contains a rational number +indicating how much of the measure has passed at this point. -@cindex shorten measures -@cindex upstep +@node Unmetered music +@subsection Unmetered music -`@code{|}' is a bar check. Whenever a bar check is encountered during -interpretation, a warning message is issued if it doesn't fall at a -measure boundary. This can help you finding errors in the input. -Depending on the value of @code{barCheckNoSynchronize} -@indexcode{barCheckNoSynchronize} The beginning of the measure will be -relocated, so this can also be used to shorten measures. +Bar lines and bar numbers are calculated automatically. For unmetered +music (e.g. cadenzas), this is not desirable. The commands +@code{\cadenzaOn} and @code{\cadenzaOff} can be used to switch off the +timing information: +@lilypond[fragment,relative,singleline,verbatim] +c'2. +\cadenzaOn +c2 +\cadenzaOff +c4 c4 c4 +@end lilypond -@example +The property @code{Score.timing} can be used to switch off this +automatic timing - \penalty@keyindex{penalty} @var{int} @code{;} -@end example +@c . {Bar lines} +@node Bar lines +@subsection Bar lines +@cindex Bar lines -Discourage or encourage line breaks. See identifiers -@code{\break}@keyindex{break} and @code{\nobreak}@keyindex{nobreak} in -section [on identifiers] [FIXME]. +@cindex @code{\bar} +@cindex measure lines +@cindex repeat bars -@example - \clef@keyindex{clef} @var{clefname} @code{;} -@end example +Bar lines are inserted automatically, but if you need a special type +of barline, you can force one using the @code{\bar} command: +@lilypond[fragment,verbatim] c4 \bar "|:" c4 +@end lilypond -Short-cut for +The following bar types are available +@lilypond[fragment, relative, singleline, verbatim] +c4 +\bar "|" c +\bar "" c +\bar "|:" c +\bar "||" c +\bar ":|" c +\bar ".|" c +\bar ".|." c +\bar "|." +@end lilypond -@example - \property Clef.clefGlyph = @var{symbol associated with clefname} - \property Clef.clefPosition = @var{clef Y-position for clefname} - \property Clef.clefOctavation = @var{extra pitch of clefname} -@end example +You are encouraged to use @code{\repeat} for repetitions. See +@ref{Repeats}. + +In scores with many staves, the barlines are automatically placed at +top level, and they are connected between different staves of a +@internalsref{StaffGroup}: +@lilypond[fragment, verbatim] +< \context StaffGroup < + \context Staff = up { e'4 d' + \bar "||" + f' e' } + \context Staff = down { \clef bass c4 g e g } > +\context Staff = pedal { \clef bass c2 c2 } > +@end lilypond -Supported clef-names include +The objects that are created at @internalsref{Staff} level. The name is +@internalsref{BarLine}. -[todo] +The command @code{\bar @var{bartype}} is a short cut for +doing @code{\property Score.whichBar = @var{bartype}} +Whenever @code{whichBar} is set to a string, a bar line of that type is +created. @code{whichBar} is usually set automatically: at the start of +a measure it is set to @code{defaultBarType}. The contents of +@code{repeatCommands} is used to override default measure bars. -@example +@code{whichBar} can also be set directly, using @code{\property} or +@code{\bar }. These settings take precedence over the automatic +@code{whichBar} settings. - \skip@keyindex{skip} @var{duration} @code{;} -@end example -Skips the amount of time specified by @var{duration}. If no other -music is played, a gap will be left for the skipped time with no -notes printed. It works in Note Mode or Lyrics Mode. In Note mode, -this has the same effect as the space rest `@code{s}'. +@cindex Bar_line_engraver +@cindex whichBar +@cindex repeatCommands +@cindex defaultBarType -@cindex beams -@node Manual beams, , , Reference Manual +@c . {Polyphony} +@node Polyphony +@section Polyphony +@cindex polyphony -A beam is specified by surrounding the beamed notes with brackets -`@code{[}@indexcode{[}' and `@code{]}@indexcode{]}'. +The easiest way to enter such fragments with more than one voice on a +staff is to split chords using the separator @code{\\}. You can use +it for small, short-lived voices (make a chord of voices) or for +single chords: -@lilypond[fragment,verbatim,center] - [a'8 a'] [a'16 a' a' a'] +@lilypond[verbatim,fragment] +\context Voice = VA \relative c'' { + c4 < { f d e } \\ { b c2 } > c4 < g' \\ b, \\ f \\ d > +} @end lilypond -Some more elaborate constructions: +The separator causes @internalsref{Voice} contexts to be instantiated, +bearing the names @code{"1"}, @code{"2"}, etc. -@lilypond[fragment,verbatim,center] - [a'16 c'' ] - \times 2/3 { [e'8 f' g'] } -@end lilypond +Sometimes, it is necessary to instantiate these contexts by hand: For +Instantiate a separate Voice context for each part, and use +@code{\voiceOne}, up to @code{\voiceFour} to assign a stem directions +and horizontal shift for each part. +@c -Beaming can be generated automatically; see section @ref{autobeam}. +@lilypond[singleline, verbatim] +\relative c'' +\context Staff < \context Voice = VA { \voiceOne cis2 b } + \context Voice = VB { \voiceThree b4 ais ~ ais4 gis4 } + \context Voice = VC { \voiceTwo fis4~ fis4 f ~ f } > +@end lilypond -[OUTDATED, FIXME] +The identifiers @code{\voiceOne} to @code{\voiceFour} set directions +ties, slurs and stems, and set shift directions. + +If you want more than four voices, you can also manually set +horizontal shifts and stem directions, as is shown in the following example: +@lilypond[fragment, verbatim] + \context Staff \notes\relative c''< + \context Voice=one { + \shiftOff \stemUp e4 + } + \context Voice=two { + \shiftOn \stemUp cis + } + \context Voice=three { + \shiftOnn \stemUp ais + } + \context Voice=four { + \shiftOnnn \stemUp fis + } + > +@end lilypond -To place tremolo marks between notes, use @code{\repeat} with tremolo -style. -@cindex tremolo beams -To create tremolo beams on a single note, simply attach -`@code{:}@var{length}' to the note itself. -@lilypond[fragment,verbatim,center] - \repeat "tremolo" 8 { c16 d16 } - \repeat "tremolo" 4 { c16 d16 } +Normally, note heads with a different number of dots are not merged, but +if you set the object property @code{merge-differently-dotted}, they are: +@lilypond[verbatim,fragment,singleline] +\context Voice < { + g'8 g'8 + \property Staff.NoteCollision \override + #'merge-differently-dotted = ##t + g'8 g'8 + } \\ { [g'8. f16] [g'8. f'16] } + > @end lilypond -@lilypond[fragment,verbatim,center] - c'4:32 +Similarly, you can merge half note heads with eighth notes, by setting +@code{merge-differently-headed}: +@lilypond[fragment, relative=2,verbatim] +\context Voice < { + c8 c4. + \property Staff.NoteCollision + \override #'merge-differently-headed = ##t + c8 c4. } \\ { c2 c2 } > @end lilypond +LilyPond also vertically shifts rests that are opposite of a stem. -@cindex --@@@code{-}@code{-} +@lilypond[singleline,fragment,verbatim] +\context Voice < c''4 \\ r4 > +@end lilypond -@indexcode{__} +See also @internalsref{NoteCollision} and @internalsref{RestCollision} -@cindex extender +@refbugs -@cindex hyphen +Resolving collisions is a very intricate subject, and LilyPond only +handles a few situations. When it can not cope, you are advised to use +@code{force-hshift} of the @internalsref{NoteColumn} object and pitched +rests to override typesetting decisions. -The syntax for an extender mark is `@code{__}'. This syntax can only -be used within lyrics mode. The syntax for a spanning hyphen (i.e., -a hyphen that will be printed between two lyric syllables) is -`@code{-}@code{-}'. +@node Beaming +@section Beaming +Beams are used to group short notes into chunks that are aligned with +the metrum. They are inserted automatically in most cases. -@cindex ties +@lilypond[fragment,verbatim, relative=2] +\time 2/4 c8 c c c \time 6/8 c c c c8. c16 c8 +@end lilypond -A tie connects two adjacent note heads of the same pitch. When used -with chords, it connects all of the note heads whose pitches match. -Ties are indicated using the tilde symbol `@code{~}@indexcode{~}'. -If you try to tie together chords which have no common pitches, a -warning message will appear and no ties will be created. +If you're not satisfied with the automatic beaming, you can enter the +beams explicitly. If you have beaming patterns that differ from the +defaults, you can also set the patterns for automatic beamer. -@lilypond[fragment,verbatim,center] - e' ~ e' ~ -@end lilypond +See also @internalsref{Beam}. +@c . {Manual beams} +@cindex Automatic beams +@subsection Manual beams +@cindex beams, manual +@cindex @code{]} +@cindex @code{[} +In some cases it may be necessary to override LilyPond's automatic +beaming algorithm. For example, the auto beamer will not beam over +rests or bar lines, If you want that, specify the begin and end point +manually using a @code{[} before the first beamed note and a @code{]} +after the last note: -[TODO: explain Requests] +@lilypond[fragment,relative,verbatim] + \context Staff { + r4 [r8 g' a r8] r8 [g | a] r8 + } +@end lilypond +@cindex @code{stemLeftBeamCount} -@cindex articulations +Normally, beaming patterns within a beam are determined automatically. +When this mechanism fouls up, the properties +@code{Voice.stemLeftBeamCount} and @code{Voice.stemRightBeamCount} can +be used to control the beam subdivision on a stem. If you set either +property, its value will be used only once, and then it is erased. -@cindex scripts +@lilypond[fragment,relative,verbatim] + \context Staff { + [f8 r16 f g a] + [f8 r16 \property Voice.stemLeftBeamCount = #1 f g a] + } +@end lilypond +@cindex @code{stemRightBeamCount} -@cindex ornaments -A variety of symbols can appear above and below notes to indicate -different characteristics of the performance. These symbols can be -added to a note with `@var{note}@code{-\}@var{name}'. Numerous symbols -are defined in @file{script.ly} and @file{script.scm}. Symbols can be -forced to appear above or below the note by writing -`@var{note}@code{^\}@var{name}' and `@var{note}@code{_\}@var{name}' -respectively. Here is a chart showing symbols above notes, with the -name of the corresponding symbol appearing underneath. +The property @code{subdivideBeams} can be set in order to subdivide +all 16th or shorter beams at beat positions. This accomplishes the +same effect as twiddling with @code{stemLeftBeamCount} and +@code{stemRightBeamCount}, but it take less typing. -@lilypond[] - \score { - < \notes { - c''-\accent c''-\marcato c''-\staccatissimo c''-\fermata - c''-\stopped c''-\staccato c''-\tenuto c''-\upbow - c''-\downbow c''^\lheel c''-\rheel c''^\ltoe - c''-\rtoe c''-\turn c''-\open c''-\flageolet - c''-\reverseturn c''-\trill c''-\prall c''-\mordent - c''-\prallprall c''-\prallmordent c''-\upprall c''-\downprall - c''-\thumb c''-\segno c''-\coda - } - \context Lyrics \lyrics { - accent__ marcato__ staccatissimo__ fermata - stopped__ staccato__ tenuto__ upbow - downbow__ lheel__ rheel__ ltoe - rtoe__ turn__ open__ flageolet - reverseturn__ trill__ prall__ mordent - prallprall__ prallmordent__ uprall__ downprall - thumb__ segno__ coda - } - > - \paper { - linewidth = 5.875\in; - indent = 0.0; +@example +[c16 c c c c c c c] +\property Voice.subdivideBeams = ##t +[c16 c c c c c c c] +[c32 c c c c c c c c c c c c c c c] +\property Score.beatLength = #(ly:make-moment 1 8) +[c32 c c c c c c c c c c c c c c c] +@end example +@lilypond[noindent,noquote] +\score { + \notes \relative c' { + [c16 c c c c c c c] + \property Voice.subdivideBeams = ##t + [c16 c c c c c c c] + [c32 c c c c c c c c c c c c c c c] + \property Score.beatLength = #(ly:make-moment 1 8) + [c32 c c c c c c c c c c c c c c c] } - } - +} @end lilypond +@cindex subdivideBeams -In addition, it is possible to place arbitrary strings of text or -@TeX{} above or below notes by using a string instead of an -identifier: `@code{c^"text"}'. Fingerings -@cindex fingering - can be -placed by simply using digits. All of these note ornaments appear in -the printed output but have no effect on the MIDI rendering of the -music. +Kneed beams are inserted automatically, when a large gap between two +adjacent beamed notes is detected. This behavior can be tuned through +the object property @code{auto-knee-gap}. -To save typing, fingering instructions (digits 0 to 9 are -supported) and single characters shorthands exist for a few -common symbols +@cindex beams, kneed +@cindex kneed beams +@cindex auto-knee-gap +@cindex hara kiri -@lilypond[] - \score { - \notes { - \property Voice.textStyle = typewriter - c''4-._"c-." s4 - c''4--_"c-{}-" s4 - c''4-+_"c-+" s4 - c''4-|_"c-|" s4 - c''4->_"c->" s4 - c''4-^_"c-\\^{ }" s4 - c''4-1_"c-1" s4 - c''4-2_"c-2" s4 - c''4-3_"c-3" s4 - c''4-4_"c-4" s4 - } - \paper { - linewidth = 5.875 \in; - indent = 0.0; - } - } +@c TODO -> why this ref? Document? +@cindex @code{neutral-direction} -@end lilypond +@refbugs -Dynamic marks are specified by using an identifier after a note: -`@code{c4-\ff}' (the dash is optional for dynamics: `@code{c4 \ff})'. -The available dynamic marks are: -@code{\ppp}@keyindex{ppp}, -@code{\pp}@keyindex{pp}, @code{\p}@keyindex{p}, @code{\mp}@keyindex{mp}, -@code{\mf}@keyindex{mf}, @code{\f}@keyindex{f}, @code{\ff}@keyindex{ff}, -@code{\fff}@keyindex{fff}, @code{\fff}@keyindex{ffff}, -@code{\fp}@keyindex{fp}, @code{\sf}@keyindex{sf}, -@code{\sff}@keyindex{sff}, @code{\sp}@keyindex{sp}, -@code{\spp}@keyindex{spp}, @code{\sfz}@keyindex{sfz}, and -@code{\rfz}@keyindex{rfz}. +Auto knee beams can not be used together with hara kiri staves. +[TODO from bugs] -@example +The Automatic beamer does not put @strong{unfinished} beams on the +last notes of a score. - \textscript@keyindex{textscript} @var{text} @var{style} -@end example +Formatting of ties is a difficult subject. LilyPond often does not +give optimal results. + +@menu +* Setting automatic beam behavior :: +@end menu -Defines a text to be printed over or under a note. @var{style} is a -string that may be one of @code{roman}, @code{italic}, @code{typewriter}, -@code{bold}, @code{Large}, @code{large}, @code{dynamic} or @code{finger}. +@ignore +@no de Beam typography +@sub section Beam typography -You can attach a general textscript request using this syntax: +One of the strong points of LilyPond is how beams are formatted. Beams +are quantized, meaning that the left and right endpoints beams start +exactly on staff lines. Without quantization, small wedges of white +space appear between the beam and staff line, and this looks untidy. -@quotation +Beams are also slope-damped: melodies that go up or down should also +have beams that go up or down, but the slope of the beams should be +less than the slope of the notes themselves. -@example -c4-\textscript "6" "finger" -c4-\textscript "foo" "normal" -@end example +Some beams should be horizontal. These are so-called concave beams. -@end quotation +[TODO: some pictures.] +@end ignore -This is equivalent to `@code{c4-6 c4-"foo"}'. +@c . {Automatic beams} +@node Setting automatic beam behavior +@subsection Setting automatic beam behavior +@cindex @code{autoBeamSettings} +@cindex @code{(end * * * *)} +@cindex @code{(begin * * * *)} +@cindex automatic beams, tuning +@cindex tuning automatic beaming -@cindex scripts +In normal time signatures, automatic beams can start on any note but can +only end in a few positions within the measure: beams can end on a beat, +or at durations specified by the properties in +@code{Voice.autoBeamSettings}. The defaults for @code{autoBeamSettings} +are defined in @file{scm/auto-beam.scm}. +The value of @code{autoBeamSettings} is changed using +@code{\override} and unset using @code{\revert}: +@example +\property Voice.autoBeamSettings \override #'(@var{BE} @var{P} @var{Q} @var{N} @var{M}) = @var{dur} +\property Voice.autoBeamSettings \revert #'(@var{BE} @var{P} @var{Q} @var{N} @var{M}) +@end example +Here, @var{BE} is the symbol @code{begin} or @code{end}. It determines +whether the rule applies to begin or end-points. The quantity +@var{P}/@var{Q} refers to the length of the beamed notes (and `@code{* +*}' designates notes of any length), @var{N}/@var{M} refers to a time +signature (wildcards, `@code{* *}' may be entered to designate all time +signatures). + +For example, if you want automatic beams to end on every quarter note, +you can use the following: @example +\property Voice.autoBeamSettings \override + #'(end * * * *) = #(ly:make-moment 1 4) +@end example +Since the duration of a quarter note is 1/4 of a whole note, it is +entered as @code{(ly:make-moment 1 4)}. - \script@keyindex{script} @var{alias} +The same syntax can be used to specify beam starting points. In this +example, automatic beams can only end on a dotted quarter note. +@example +\property Voice.autoBeamSettings \override + #'(end * * * *) = #(ly:make-moment 3 8) +@end example +In 4/4 time signature, this means that automatic beams could end only on +3/8 and on the fourth beat of the measure (after 3/4, that is 2 times +3/8 has passed within the measure). + +You can also restrict rules to specific time signatures. A rule that +should only be applied in @var{N}/@var{M} time signature is formed by +replacing the second asterisks by @var{N} and @var{M}. For example, a +rule for 6/8 time exclusively looks like +@example +\property Voice.autoBeamSettings \override + #'(begin * * 6 8) = ... @end example -Prints a symbol above or below a note. The argument is a string -which points into the script-alias table defined in @file{script.scm}. -The scheme definitions specify whether the symbol follows notes into -the staff, dependence of symbol placement on staff direction, and a -priority for placing several symbols over one note. Usually the -@code{\script}@keyindex{script} keyword is not used directly. Various -helpful identifier definitions appear in @file{script.ly}. +If you want a rule to apply to certain types of beams, you can use the +first pair of asterisks. Beams are classified according to the shortest +note they contain. For a beam ending rule that only applies to beams +with 32nd notes (and no shorter notes), you would use @code{(end 1 +32 * *)}. +@c not true +@c Automatic beams can not be put on the last note in a score. -@cindex slur +If a score ends while an automatic beam has not been ended and is still +accepting notes, this last beam will not be typeset at all. -Slurs connects chords and try to avoid crossing stems. A slur is -started with `@code{(}' and stopped with `@code{)}'. The -starting `@code{(}' appears to the right of the first note in -the slur. The terminal `@code{)}' appears to the left of the -first note in the slur. This makes it possible to put a note in -slurs from both sides: +@cindex automatic beam generation +@cindex autobeam +@cindex @code{Voice.autoBeaming} +@cindex lyrics -@lilypond[fragment,verbatim,center] - f'()g'()a' [a'8 b'(] a'4 g'2 )f'4 -@end lilypond +For melodies that have lyrics, you may want to switch off +automatic beaming. This is done by setting @code{Voice.autoBeaming} to +@code{#f}. -@cindex crescendo +@refbugs -A crescendo mark is started with @code{\cr}@keyindex{cr} and terminated -with @code{\rc}@keyindex{rc}. A decrescendo mark is started with -@code{\decr}@keyindex{decr} and terminated with -@code{\rced}@keyindex{rced}. There are also shorthands for these -marks. A crescendo can be started with @code{\<}@keyindex{<} and a -decrescendo can be started with @code{\>}@keyindex{>}. Either one can -be terminated with @code{\!}@keyindex{"!}. Note that @code{\!} -must go before the last note of the dynamic mark whereas @code{\rc} -and @code{\rced} go after the last note. Because these marks are -bound to notes, if you want to get several marks during one note, you -must use spacer notes. +It is not possible to specify beaming parameters for beams with mixed +durations, that differ from the beaming parameters of all separate +durations, i.e., you'll have to specify manual beams to get: -@lilypond[fragment,verbatim,center] - c'' \< \! c'' d'' \decr e'' \rced - < f''1 { s4 \< \! s2 \> \! s4 } > +@lilypond[singleline,fragment,relative,noverbatim] + \property Voice.autoBeamSettings + \override #'(end * * * *) = #(ly:make-moment 3 8) + \time 12/8 c'8 c c c16 c c c c c [c c c c] c8 c c4 @end lilypond +It is not possible to specify beaming parameters that act differently in +different parts of a measure. This means that it is not possible to use +automatic beaming in irregular meters such as @code{5/8}. +@node Accidentals +@section Accidentals +@cindex Accidentals +This section describes how to change the way that LilyPond automatically +inserts accidentals before the running notes. -@example +@menu +* Using the predefined accidental macros:: +* Defining your own accidental typesettings:: +@end menu - \spanrequest@keyindex{spanrequest} @var{startstop} @var{type} +@node Using the predefined accidental macros +@subsection Using the predefined accidental macros +The constructs for describing the accidental typesetting rules are +quite hairy, so non-experts should stick to the macros defined in +@file{ly/property-init.ly}. +@cindex @file{property-init.ly} + +The macros operate on the ``Current'' context (see @ref{Context properties}). This +means that the macros shuold normally be invoked right after the +creation of the context in which the accidental typesetting described +by the macro is to take effect. I.e. if you want to use +piano-accidentals in a pianostaff then you issue +@code{\pianoAccidentals} first thing after the creation of the piano +staff: +@example +\score @{ + \notes \relative c'' < + \context Staff = sa @{ cis4 d e2 @} + \context GrandStaff < + \pianoAccidentals + \context Staff = sb @{ cis4 d e2 @} + \context Staff = sc @{ es2 c @} + > + \context Staff = sd @{ es2 c @} + > +@} @end example +@lilypond[singleline] +\score { + \notes \relative c'' < + \context Staff = sa { cis4 d e2 } + \context GrandStaff < + \pianoAccidentals + \context Staff = sb { cis4 d e2 } + \context Staff = sc { es2 c } + > + \context Staff = sd { es2 c } + > + \paper { + \translator { + \StaffContext + minimumVerticalExtent = #'(-4.0 . 4.0) + } + } +} +@end lilypond + +The macros are: +@table @code +@item \defaultAccidentals + @cindex @code{\defaultAccidentals} + This is the default typesetting behaviour. It should correspond + to 18th century common practice: Accidentals are + remembered to the end of the measure in which they occur and + only on their own octave. + +@item \voiceAccidentals + @cindex @code{\voiceAccidentals} + The normal behaviour is to remember the accidentals on + Staff-level. + This macro, however, typesets accidentals individually for each + voice. + Apart from that the rule is similar to + @code{\defaultAccidentals}. + + Warning: This leads to some weird and often unwanted results + because accidentals from one voice DO NOT get cancelled in other + voices: +@lilypond[singleline,relative,fragment,verbatim] + \context Staff < + \voiceAccidentals + \context Voice=va { \voiceOne es g } + \context Voice=vb { \voiceTwo c, e } + > +@end lilypond + Hence you should only use @code{\voiceAccidentals} + if the voices are to be read solely by + individual musicians. if the staff should be readable also + by one musician/conductor then you should use + @code{\modernVoiceAccidentals} or @code{\modernVoiceCautionaries} + instead. + +@item \modernAccidentals + @cindex @code{\modernAccidentals} + This rule should correspond to the common practice in the 20th + century. + The rule is a bit more complex than @code{\defaultAccidentals}: + You get all the same accidentals, but temporary + accidentals also get cancelled in other octaves. Further more, + in the same octave, they also get cancelled in the following measure: +@lilypond[singleline,fragment,verbatim] + \modernAccidentals + cis' c'' cis'2 | c'' c' +@end lilypond -Define a spanning request. The @var{startstop} parameter is either -1 -(@code{\start}@keyindex{start}) or 1 (@code{\stop}@keyindex{stop}) and -@var{type} is a string that describes what should be started. -Supported types are @code{crescendo}, @code{decrescendo}, -@code{beam}, @code{slur}. This is an internal command. Users should -use the shorthands which are defined in the initialization file -@file{spanners.ly}. +@item \modernCautionaries + @cindex @code{\modernCautionaries} + This rule is similar to @code{\modernAccidentals}, but the + ``extra'' accidentals (the ones not typeset by + @code{\defaultAccidentals}) are typeset as cautionary accidentals + (i.e. in reduced size): +@lilypond[singleline,fragment,verbatim] + \modernCautionaries + cis' c'' cis'2 | c'' c' +@end lilypond -You can attach a (general) span request to a note using +@item \modernVoiceAccidentals + @cindex @code{\modernVoiceAccidentals} + Multivoice accidentals to be read both by musicians playing one voice + and musicians playing all voices. + + Accidentals are typeset for each voice, but they ARE cancelled + across voices in the same @internalsref{Staff}. + +@item \modernVoiceCautionaries + @cindex @code{\modernVoiceCautionaries} + The same as @code{\modernVoiceAccidentals}, but with the + extra accidentals (the ones not typeset by + @code{\voiceAccidentals}) typeset as cautionaries. + Notice that even though all accidentals typeset by + @code{\defaultAccidentals} ARE typeset by this macro then some + of them are typeset as cautionaries. + +@item \pianoAccidentals + @cindex @code{\pianoAccidentals} + 20th century practice for piano notation. Very similar to + @code{\modernAccidentals} but accidentals also get cancelled + across the staves in the same @internalsref{GrandStaff} or + @internalsref{PianoStaff}. + +@item \pianoCautionaries + @cindex @code{\pianoCautionaries} + As @code{\pianoAccidentals} but with the extra accidentals + typeset as cationaries. + +@item \noResetKey + @cindex @code{\noResetKey} + Same as @code{\defaultAccidentals} but with accidentals lasting + ``forever'' and not only until the next measure: +@lilypond[singleline,fragment,verbatim,relative] + \noResetKey + c1 cis cis c +@end lilypond -@lilypond[fragment,verbatim,center] - c'4-\spanrequest \start "slur" - c'4-\spanrequest \stop "slur" +@item \forgetAccidentals + @cindex @code{\forgetAccidentals} + This is sort of the opposite of @code{\noResetKey}: Accidentals + are not remembered at all - and hence all accidentals are + typeset relative to the key signature, regardless of what was + before in the music: +@lilypond[singleline,fragment,verbatim,relative] + \forgetAccidentals + \key d\major c4 c cis cis d d dis dis @end lilypond +@end table -The slur syntax with parentheses is a shorthand for this. +@node Defining your own accidental typesettings +@subsection Defining your own accidental typesettings + +This section must be considered gurus-only, and hence it must be +sufficient with a short description of the system and a reference to +the internal documentation. + +The idea of the algorithm is to try several different rules and then +use the rule that gives the highest number of accidentals. +Each rule cosists of +@table @asis +@item Context: + In which context is the rule applied. I.e. if context is + @internalsref{Score} then all staves share accidentals, and if + context is @internalsref{Staff} then all voices in the same + staff share accidentals, but staves don't - like normally. +@item Octavation: + Whether the accidental changes all octaves or only the current + octave. +@item Lazyness: + Over how many barlines the accidental lasts. + If lazyness is @code{-1} then the accidental is forget + immidiately, and if lazyness is @code{#t} then the accidental + lasts forever. +@end table +As described in the internal documentation of +@reng{Accidental_engraver}, the properties @code{autoAccidentals} and +@code{autoCautionaries} contain lists of rule descriptions. Notice +that the contexts must be listed from in to out - that is +@internalsref{Thread} before @internalsref{Voice}, +@internalsref{Voice} before @internalsref{Staff}, etc. +see the macros in @file{ly/property-init.ly} for examples of how the +properties are set. + +@refbugs + +Currently the simultaneous notes are considered to be entered in +sequential mode. This means that in a chord the accidentals are +typeset as if the notes in the chord happened one at a time - in the +order in which they appear in the input file. + +Of course this is only a problem when you have simultainous notes +which accidentals should depend on each other. +Notice that the problem only occurs when using non-default accidentals +- as the default accidentals only depend on other accidentals on the +same staff and same pitch and hence cannot depend on other +simultainous notes. + +This example shows two examples of the same music giving different +accidentals depending on the order in which the notes occur in the +input file: + +@lilypond[singleline,fragment,verbatim] +\property Staff.autoAccidentals = #'( Staff (any-octave . 0) ) +cis'4 <> r2 | cis'4 <> r2 | <> r | <> r | +@end lilypond +The only solution is to manually insert the problematic +accidentals using @code{!} and @code{?}. -@cindex tremolo marks +@node Expressive marks +@section Expressive marks -@node stem tremolo, , , Reference Manual +@c . {Slurs} +@menu +* Slurs :: +* Phrasing slurs:: +* Breath marks:: +* Tempo:: +* Text spanners:: +* Analysis brackets:: +@end menu -Tremolo marks can be printed on a single note by adding -`@code{:}[@var{length}]' after the note. The length must be at -least 8. A @var{length} value of 8 gives one line across -the note stem. If the length is omitted, then the last value is -used, or the value of the @code{tremoloFlags}@indexcode{tremoloFlags} property if there was -no last value. +@node Slurs +@subsection Slurs +@cindex Slurs -@lilypond[verbatim,fragment,center] - c'2:8 c':32 +A slur indicates that notes are to be played bound or @emph{legato}. +They are entered using parentheses: +@lilypond[fragment,verbatim,center] + f'()g'()a' [a'8 b'(] a'4 g'2 )f'4 @end lilypond +See also @seeinternals{Slur}. + +Slurs avoid crossing stems, and are generally attached to note heads. +However, in some situations with beams, slurs may be attached to stem +ends. If you want to override this layout you can do this through the +object property @code{attachment} of @internalsref{Slur} in +@internalsref{Voice} context It's value is a pair of symbols, specifying +the attachment type of the left and right end points. + +@lilypond[fragment,relative,verbatim] + \slurUp + \property Voice.Stem \set #'length = #5.5 + g'8(g)g4 + \property Voice.Slur \set #'attachment = #'(stem . stem) + g8(g)g4 +@end lilypond +If a slur would strike through a stem or beam, the slur will be moved +away upward or downward. If this happens, attaching the slur to the +stems might look better: -@node Compound music expressions, , , Reference Manual -@section Compound music expressions +@lilypond[fragment,relative,verbatim] + \stemUp \slurUp + d32( d'4 )d8.. + \property Voice.Slur \set #'attachment = #'(stem . stem) + d,32( d'4 )d8.. +@end lilypond -@cindex compound music expressions +@ignore +Similarly, the curvature of a slur is adjusted to stay clear of note +heads and stems. When that would increase the curvature too much, the +slur is reverted to its default shape. The threshold for this +decision is in @internalsref{Slur}'s object property @code{beautiful}. +It is loosely related to the enclosed area between the slur and the +notes. Usually, the default setting works well, but in some cases you +may prefer a curved slur when LilyPond decides for a vertically moved +one. You can indicate this preference by increasing the +@code{beautiful} value: + +@lilyp ond[verbatim,singleline,relative] + \stemDown \slurUp + c16( a' f' a a f a, )c, + c( a' f' a a f d, )c + \property Voice.Slur \override #'beautiful = #5.0 + c( a' f' a a f d, )c +@end lilypond +@end ignore -Music expressions are compound data structures. You can nest music -expressions any way you like. This simple example shows how three -chords can be expressed in two different ways: +@refbugs -@lilypond[fragment,verbatim,center] - \notes \context Staff { - \cadenzaOn - - < { a b c' } { c' d' e' } > - } -@end lilypond +Producing nice slurs is a difficult problem, and LilyPond currently +uses a simple, empiric method to produce slurs. In some cases, the +results of this method are ugly. -@cindex context selection -@c @keyindex{context} +@ignore +This is reflected by the +@code{beautiful} property, which it is an arbitrary parameter in the +slur formatter. Useful values can only be determined by trial and +error. +@end ignore -@example - \context @var{contexttype} [= @var{contextname}] @var{musicexpr} -@end example +@cindex Adjusting slurs -Interpret @var{musicexpr} within a context of type @var{contexttype}. -If the context does not exist, it will be created. The new context -can optionally be given a name. +@node Phrasing slurs +@subsection Phrasing slurs -@cindex input modes +@cindex phrasing slurs +@cindex phrasing marks -@cindex mode switch +A phrasing slur (or phrasing mark) connects chords and is used to +indicate a musical sentence. It is started using @code{\(} and @code{\)} +respectively. -Mode switching keywords form compound music expressions: @code{\notes} -@keyindex{notes} @var{musicexpr}, @code{\chords} @keyindex{chords} -@var{musicexpr}, and @code{\lyrics} @keyindex{lyrics} @var{musicexpr}. -These expressions do not add anything to the meaning of their -arguments. They are just a way to indicate that the arguments should -be parsed in indicated mode. See @ref{Lexical modes} for more -information on modes. +@lilypond[fragment,verbatim,center,relative] + \time 6/4 c' \( d () e f () e \) d +@end lilypond -@cindex sequential music +Typographically, the phrasing slur behaves almost exactly like a normal +slur. See also @seeinternals{PhrasingSlur}. But although they behave +similarily to normal slurs, phrasing slurs count as different objects. +A @code{\slurUp} will have no effect on a phrasing slur; instead, you +should use @code{\phrasingSlurUp}, @code{\phrasingSlurDown}, and +@code{\phrasingSlurBoth}. +Note that the commands +@code{\slurUp}, @code{\slurDown}, and @code{\slurBoth} will only affect +normal slurs and not phrasing slurs. +@node Breath marks +@subsection Breath marks -@example +Breath marks are entered using @code{\breathe}. See also +@seeinternals{BreathingSign}. - \sequential@keyindex{sequential} - @code{@{} @var{musicexprlist} @code{@}} -@end example +@lilypond[fragment,relative] +c'4 \breathe d4 +@end lilypond -This means that list should be played or written in sequence, i.e., -the second after the first, the third after the second. The duration -of sequential music is the the sum of the durations of the elements. -There is a shorthand, which leaves out the keyword: -@example +@c . {Tempo} +@node Tempo +@subsection Tempo +@cindex Tempo +@cindex beats per minute +@cindex metronome marking - @code{@{} @var{musicexprlist} @code{@}} -@end example +Metronome settings can be entered as follows: +@cindex @code{\tempo} +@example + \tempo @var{duration} = @var{perminute} +@end example +For example, @code{\tempo 4 = 76} requests output with 76 quarter notes +per minute. + +@refbugs + +The tempo setting is not printed, but is only used in the MIDI +output. You can trick lily into producing a metronome mark, +though. Details are in @ref{Text markup}. + -@cindex simultaneous music -@indexcode{<} -@indexcode{>} +@node Text spanners +@subsection Text spanners +@cindex Text spanners +Some textual indications, e.g. rallentando or accelerando, often extend +over many measures. This is indicated by following the text with a +dotted line. You can create such texts using text spanners. The syntax +is as follows: @example - - \simultaneous@keyindex{simultaneous} - @code{@{} @var{musicexprlist} @code{@}} + \startTextSpan + \stopTextSpan @end example +LilyPond will respond by creating a @internalsref{TextSpanner} object (typically +in @internalsref{Voice} context). The string to be printed, as well as the +style is set through object properties. + +An application---or rather, a hack---is to fake octavation indications. +@lilypond[fragment,relative,verbatim] + \relative c' { a''' b c a + \property Voice.TextSpanner \set #'type = #'dotted-line + \property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5) + \property Voice.TextSpanner \set #'edge-text = #'("8va " . "") + \property Staff.centralCPosition = #-13 + a\startTextSpan b c a \stopTextSpan } +@end lilypond -It constructs a music expression where all of its arguments start at -the same moment. The duration is the maximum of the durations of the -elements. The following shorthand is a common idiom: -@example +@node Analysis brackets +@subsection Analysis brackets +@cindex brackets +@cindex phrasing brackets +@cindex musicological analysis +@cindex note grouping bracket + +Brackets are used in musical analysis to indicate structure in musical +pieces. LilyPond supports a simple form of nested horizontal brackets. +To use this, add the @internalsref{Horizontal_bracket_engraver} to +@internalsref{Staff} context. A bracket is started with +@code{\groupOpen} and closed with @code{\groupClose}. This produces +@internalsref{HorizontalBracket} objects. + +@lilypond[singleline,verbatim] +\score { \notes \relative c'' { + c4-\groupOpen-\groupOpen + c4-\groupClose + c4-\groupOpen + c4-\groupClose-\groupClose + } + \paper { \translator { + \StaffContext \consists "Horizontal_bracket_engraver" + }}} +@end lilypond - @code{<} @var{musicexprlist} @code{>} -@end example +@c . {Ornaments} +@node Ornaments +@section Ornaments +@cindex Ornaments +@menu +* Articulations:: +* Text scripts:: +* Grace notes:: +* Glissando :: +* Dynamics:: +@end menu + +@c . {Articulation} +@node Articulations +@subsection Articulations +@cindex Articulations -If you try to use a chord as the first thing in your score, you might -get multiple staffs instead of a chord. +@cindex articulations +@cindex scripts +@cindex ornaments -@lilypond[verbatim,center] +A variety of symbols can appear above and below notes to indicate +different characteristics of the performance. They are added to a note +by adding a dash and the the character signifying the +articulation. They are demonstrated here. +@lilypond[singleline] \score { - \notes - \paper { - linewidth = -1.; + \notes \context Voice { + \property Voice.TextScript \set #'font-family = #'typewriter + \property Voice.TextScript \set #'font-shape = #'upright + c''4-._"c-." s4 + c''4--_"c-{}-" s4 + c''4-+_"c-+" s4 + c''4-|_"c-|" s4 + c''4->_"c->" s4 + c''4-^_"c-\\^{ }" s4 + c''4-__"c-\_" s4 } } @end lilypond -This happens because the chord is interpreted by a score context. -Each time a note is encountered a default Voice context (along with a -Staff context) is created. The solution is to explicitly instantiate -a Voice context: +The script is automatically placed, but if you need to force +directions, you can use @code{_} to force them down, or @code{^} to +put them up: +@lilypond[fragment, verbatim] + c''4^^ c''4_^ +@end lilypond + + +Other symbols can be added using the syntax +@var{note}@code{-\}@var{name}. Again, they can be forced up or down +using @code{^} and @code{_}. + +@cindex accent +@cindex marcato +@cindex staccatissimo +@cindex fermata +@cindex stopped +@cindex staccato +@cindex portato +@cindex tenuto +@cindex upbow +@cindex downbow +@cindex foot marks +@cindex organ pedal marks +@cindex turn +@cindex open +@cindex flageolet +@cindex reverseturn +@cindex trill +@cindex prall +@cindex mordent +@cindex prallprall +@cindex prallmordent +@cindex prall, up +@cindex prall, down +@cindex mordent +@cindex thumb marking +@cindex segno +@cindex coda -@lilypond[verbatim,center] +@lilypond[] \score { - \notes\context Voice + < + \property Score.LyricText \override #'font-family =#'typewriter + \property Score.LyricText \override #'font-shape = #'upright + \context Staff \notes { + c''-\accent c''-\marcato c''-\staccatissimo c''^\fermata + c''-\stopped c''-\staccato c''-\tenuto c''-\portato + c''-\upbow + c''-\downbow c''^\lheel c''-\rheel c''^\ltoe + c''-\rtoe c''-\turn c''-\open c''-\flageolet + c''-\reverseturn c''-\trill c''-\prall c''-\mordent + c''-\prallprall c''-\prallmordent c''-\upprall c''-\downprall + c''-\upmordent c''-\downmordent c''-\pralldown c''-\prallup + c''-\lineprall c''-\thumb c''-\segno c''-\coda + } + \context Lyrics \lyrics { + accent__ marcato__ staccatissimo__ fermata + stopped__ staccato__ tenuto__ portato + upbow + downbow__ lheel__ rheel__ ltoe + rtoe__ turn__ open__ flageolet + reverseturn__ trill__ prall__ mordent + prallprall__ prallmordent__ uprall__ downprall + upmordent__ downmordent__ pralldown__ prallup__ + lineprall__ thumb__ segno__ coda + } + > \paper { - linewidth = -1.; + linewidth = 5.1\in + indent = 0.0\mm } } @end lilypond +@cindex fingering -@cindex relative pitch specification +Fingering instructions can also be entered in this shorthand. For +finger changes, use markup texts: +@c +@lilypond[verbatim, singleline, fragment] + c'4-1 c'4-2 c'4-3 c'4-4 + c^#'(finger "2-3") +@end lilypond -@node relative, , , Reference Manual -It is easy to get confused by octave changing marks and accidentally -putting a pitch in the wrong octave. A much better way of entering a -note's octave is `the relative octave' mode. +@cindex scripts +@cindex superscript +@cindex subscript -@example +See also @seeinternals{Script} and @seeinternals{Fingering}. - \relative@keyindex{relative} @var{startpitch} @var{musicexpr} -@end example +@refbugs -The octave of notes that appear in @var{musicexpr} are calculated as -follows: If no octave changing marks are used, the basic interval -between this and the last note is always taken to be a fourth or -less.@footnote{The interval is determined without regarding -accidentals. A @code{fisis} following a @code{ceses} will be put above -the @code{ceses}.} The octave changing marks `@code{'}' and `@code{,}' -can then be added to raise or lower the pitch by an extra octave. -Upon entering relative mode, an absolute starting pitch must be -specified that will act as the predecessor of the first note of -@var{musicexpr}. +All of these note ornaments appear in the printed output but have no +effect on the MIDI rendering of the music. -Entering scales is straightforward in relative mode. +Unfortunately, there is no support for adding fingering instructions or +ornaments to individual note heads. Some hacks exist, though. See +@file{input/test/script-horizontal.ly}. -@lilypond[fragment,verbatim,center] - \relative c' { - c d e f g a b c c, - } -@end lilypond -And octave changing marks are used for intervals greater than a fourth. +@c . {Text scripts} +@node Text scripts +@subsection Text scripts +@cindex Text scripts -@lilypond[fragment,verbatim,center] - \relative c'' { - c g c f, c' a, e'' } -@end lilypond +In addition, it is possible to place arbitrary strings of text or markup +text (see @ref{Text markup}) above or below notes by using a string: +@code{c^"text"}. -If the preceding item is a chord, the first note of the chord is used -to determine the first note of the next chord. But other notes -within the second chord are determined by looking at the immediately -preceding note. +By default, these indications do not influence the note spacing, but +by using the command @code{\fatText}, the widths will be taken into +account. +@c +@lilypond[fragment,singleline,verbatim] \relative c' { +c4^"longtext" \fatText c4_"longlongtext" c4 } +@end lilypond -@lilypond[fragment,verbatim,center] - \relative c' { - c - - - } -@end lilypond +It is possible to use @TeX{} commands in the strings, but this should be +avoided because it makes it impossible for LilyPond to compute the +exact length of the string, which may lead to collisions. Also, @TeX{} +commands won't work with direct PostScript output. +@c (see @ref{PostScript output}). -The pitch after the @code{\relative} contains a notename. To parse -the pitch as a notename, you have to be in note mode, so there must -be a surrounding @code{\notes}@keyindex{notes} keyword (which is not -shown here). +Text scripts are created in form of @internalsref{TextScript} objects, in +@internalsref{Voice} context. -The relative conversion will not affect @code{\transpose} or -@code{\relative} sections in its argument. If you want to use -relative within transposed music, you must place an additional -@code{\relative} inside the @code{\transpose}. +@ref{Text markup} describes how to change the font or access +special symbols in text scripts. -It is strongly recommended to use relative pitch mode: less work, -less error-prone, and more readable. +@c . {Grace notes} +@node Grace notes +@subsection Grace notes -Chord names are a way to generate simultaneous music expressions that -correspond with traditional chord names. It can only be used in -Chord mode (see section @ref{Lexical modes}). -@example +@cindex @code{\grace} +@cindex ornaments +@cindex grace notes - @var{tonic}[@var{duration}][@code{-}@var{modifiers}][@code{^}@var{subtractions}][@code{/}@var{inversion}][@code{/+}@var{bass}]. -@end example +Grace notes are ornaments that are written out +@lilypond[relative=2,verbatim,ifragment] c4 \grace c16 c4 \grace { +[c16 d16] } c4 +@end lilypond -@var{tonic} should be the tonic note of the chord, and @var{duration} -is the chord duration in the usual notation. There are two kinds of -modifiers. One type is @emph{chord additions}, which are obtained by -listing intervals separated by dots. An interval is written by its -number with an optional `@code{+}' or `@code{-}' to indicate raising or -lowering by half a step. Chord additions has two effects: It adds -the specified interval and all lower odd numbered intervals to the -chord, and it may lower or raise the specified interval. Intervals -must be separated by a dot (`@code{.}'). +In normal notation, grace notes are supposed to take up no logical +time in a measure. Such an idea is practical for normal notation, but +is not strict enough to put it into a program. The model that LilyPond +uses for grace notes internally is that all timing is done in two +steps: -@quotation +Every point in musical time consists of two rational numbers: one +denotes the logical time, one denotes the grace timing. The above +example is shown here with timing tuples. -@lilypond[fragment,verbatim] -\transpose c'' { - \chords { - c1 c:3- c:7 c:8 - c:9 c:9-.5+.7+ c:3-.5- c:4.6.8 +@lilypond[] +\score { \notes \relative c''{ + c4^"(0,0)" \grace c16_" "_"(1/4,-1/16)" c4^"(1/4,0)" \grace { + [c16_"(2/4,-1/8)" d16^"(2/4,-1/16)" ] } c4_" "_"(2/4,0)" } +\paper { linewidth = 8.\cm } } - @end lilypond -@end quotation -The second type of modifier that may appear after the `@code{:}' is a -named modifier. Named modifiers are listed in the file -@file{chord-modifiers.ly}. The available modifiers are `@code{m}' and -`@code{min}' which lower the 3rd half a step, `@code{aug}@indexcode{aug}' which -raises the 5th, `@code{dim}@indexcode{dim}' which lowers the 5th, -`@code{maj}@indexcode{maj}' which adds a raised 7th, and `@code{sus}@indexcode{sus}' -which replaces the 5th with a 4th. +The advantage of this approach is that you can use almost any lilypond +construction together with grace notes, for example slurs and clef +changes may appear halfway in between grace notes: + +@lilypond[relative=2,verbatim,fragment] + c4 \grace { [ c16 c, \clef bass c, b(] } )c4 +@end lilypond + +The placement of these grace notes is synchronized between different +staves, using this grace timing. + +@lilypond[relative=2,verbatim,fragment] +< \context Staff = SA { e4 \grace { c16 d e f } e4 } + \context Staff = SB { c4 \grace { g8 b } c4 } > +@end lilypond -@quotation + +Unbeamed eighth notes and shorter by default have a slash through the +stem. This can be controlled with object property @code{stroke-style} of +@internalsref{Stem}. The change in formatting is accomplished by +inserting @code{\startGraceMusic} before handling the grace notes, and +@code{\stopGraceMusic} after finishing the grace notes. +You can add to these definitions to globally change grace note +formatting. The standard definitions are in @file{ly/grace-init.ly}. + +[TODO discuss Scheme functionality.] + + +Notice how the @code{\override} is carefully matched with a @code{\revert}. + +@cindex slash +@cindex grace slash @lilypond[fragment,verbatim] -\transpose c'' { - \chords { - c1:m c:min7 c:maj c:aug c:dim c:sus - } +\relative c'' \context Voice { + \grace c8 c4 \grace { [c16 c16] } c4 + \grace { + \property Voice.Stem \override #'stroke-style = #'() + c16 + \property Voice.Stem \revert #'stroke-style + } c4 } +@end lilypond + + +If you want to end a note with a grace note, then the standard trick +is to put the grace notes before a phantom ``space note'', e.g. +@lilypond[fragment,verbatim, relative=2] +\context Voice { + < { d1^\trill ( } + { s2 \grace { [c16 d] } } > + )c4 +} @end lilypond -@end quotation - -Chord subtractions are used to eliminate notes from a chord. The -notes to be subtracted are listed after a `@code{^}' character, -separated by dots. +A @code{\grace} section has some default values, and LilyPond will +use those default values unless you specify otherwise inside the +@code{\grace} section. For example, if you specify \slurUp +@emph{before} your @code{\grace} section, a slur which starts inside +the @code{\grace} won't be forced up, even if the slur ends outside +of the @code{\grace}. Note the difference between the first and +second bars in this example: -@lilypond[fragment,verbatim,center] - \transpose c'' { - \chords { - c1^3 c:7^5.3 c:8^7 - } - } -@end lilypond +@lilypond[fragment,verbatim] +\relative c'' \context Voice { + \slurUp + \grace { + a4 ( } + ) a4 a4 () a2 + \slurBoth + + \grace { + \slurUp + a4 ( } + ) a4 a4 () a2 + \slurBoth -Chord inversions can be specified by appending `@code{/}@indexcode{/}' and -the name of a single note to a chord. This has the effect of -lowering the specified note by an octave so it becomes the lowest -note in the chord. If the specified note is not in the chord, a -warning will be printed. +} +@end lilypond -@lilypond[fragment,verbatim,center] - \transpose c''' { - \chords { - c1 c/e c/g c:7/e - } - } -@end lilypond +@refbugs -Bass notes can be added by `@code{/+}@indexcode{/+}' and -the name of a single note to a chord. This has the effect of -adding the specified note to the chord, lowered by an octave, -so it becomes the lowest note in the chord. +Grace notes can not be used in the smallest size (@file{paper11.ly}). -@lilypond[fragment,verbatim,center] - \transpose c''' { - \chords { - c1 c/+c c/+g c:7/+b - } - } +Grace note synchronization can also lead to surprises. Staff notation, +such as key signatures, barlines, etc. are also synchronized. Take +care when you mix staves with grace notes and staves without. -@end lilypond +@lilypond[relative=2,verbatim,fragment] +< \context Staff = SA { e4 \bar "|:" \grace c16 d4 } + \context Staff = SB { c4 \bar "|:" d4 } > +@end lilypond -Throughout these examples, chords have been shifted around the staff -using @code{\transpose}. +Grace sections should only be used within sequential music +expressions. Nesting, juxtaposing, or ending sequential music with a +grace section is not supported, and might produce crashes or other +errors. -You should not combine @code{\relative} with named chords. +@node Glissando +@subsection Glissando +@cindex Glissando +@cindex @code{\glissando} -@cindex tuplets +A glissando line can be requested by attaching a @code{\glissando} to +a note: -Tuplets are made out of a music expression by multiplying their -duration with a fraction. +@lilypond[fragment,relative,verbatim] + c'-\glissando c' +@end lilypond -@example +@refbugs - \times@keyindex{times} @var{fraction} @var{musicexpr} -@end example +Printing of an additional text (such as @emph{gliss.}) must be done +manually. See also @seeinternals{Glissando}. -The duration of @var{musicexpr} will be multiplied by the fraction. -In print, the fraction's denominator will be printed over the notes, -optionally with a bracket. The most common tuplet is the triplet in -which 3 notes have the length of 2, so the notes are 2/3 of -their written length: -@lilypond[fragment,verbatim,center] - g'4 \times 2/3 {c'4 c' c'} d'4 d'4 -@end lilypond +@c . {Dynamics} +@node Dynamics +@subsection Dynamics +@cindex Dynamics -@cindex grace notes -@example +@cindex @code{\ppp} +@cindex @code{\pp} +@cindex @code{\p} +@cindex @code{\mp} +@cindex @code{\mf} +@cindex @code{\f} +@cindex @code{\ff} +@cindex @code{\fff} +@cindex @code{\ffff} +@cindex @code{\fp} +@cindex @code{\sf} +@cindex @code{\sff} +@cindex @code{\sp} +@cindex @code{\spp} +@cindex @code{\sfz} +@cindex @code{\rfz} - \grace@keyindex{grace} @var{musicexpr} -@end example -A grace note expression has duration 0; the next real note is -assumed to be the main note. +Absolute dynamic marks are specified using an identifier after a +note: @code{c4-\ff}. The available dynamic marks are: @code{\ppp}, +@code{\pp}, @code{\p}, @code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, +@code{\fff}, @code{\fff}, @code{\fp}, @code{\sf}, @code{\sff}, +@code{\sp}, @code{\spp}, @code{\sfz}, and @code{\rfz}. -You cannot have the grace note after the main note, in terms of -duration, and main notes, but you can typeset the grace notes to the -right of the main note using the property -@code{graceAlignPosition}@indexcode{graceAlignPosition}. +@lilypond[verbatim,singleline,fragment,relative] + c'\ppp c\pp c \p c\mp c\mf c\f c\ff c\fff + c2\sf c\rfz +@end lilypond -When grace music is interpreted, a score-within-a-score is set up: -@var{musicexpr} has its own time bookkeeping, and you could (for -example) have a separate time signature within grace notes. While in -this score-within-a-score, you can create notes, beams, slurs, etc. -Unbeamed eighth notes and shorter by default have a slash through the -stem. This behavior can be controlled with the -@code{flagStyle}@indexcode{flagStyle} property. +@cindex @code{\cr} +@cindex @code{\rc} +@cindex @code{\decr} +@cindex @code{\rced} +@cindex @code{\<} +@cindex @code{\>} +@cindex @code{\"!} + + +A crescendo mark is started with @code{\cr} and terminated with +@code{\rc} (the textual reverse of @code{cr}). A decrescendo mark is +started with @code{\decr} and terminated with @code{\rced}. There are +also shorthands for these marks. A crescendo can be started with +@code{\<} and a decrescendo can be started with @code{\>}. Either one +can be terminated with @code{\!}. Note that @code{\!} must go before +the last note of the dynamic mark whereas @code{\rc} and @code{\rced} go +after the last note. Because these marks are bound to notes, if you +want several marks during one note, you have to use spacer notes. -@quotation +@lilypond[fragment,verbatim,center] + c'' \< \! c'' d'' \decr e'' \rced + < f''1 { s4 s4 \< \! s4 \> \! s4 } > +@end lilypond -@lilypond[fragment,verbatim] -\relative c'' { - \grace c8 c4 \grace { [c16 c16] } c4 - \grace { \property Grace.flagStyle = "" c16 } c4 -} +You can also use a text saying @emph{cresc.} instead of hairpins. Here +is an example how to do it: +@lilypond[fragment,relative=2,verbatim] + c4 \cresc c4 \endcresc c4 @end lilypond -@end quotation -At present, nesting @code{\grace}@keyindex{grace} notes, e.g. -@example +@cindex crescendo +@cindex decrescendo + +You can also supply your own texts: +@lilypond[fragment,relative,verbatim] + \context Voice { + \property Voice.crescendoText = "cresc. poco" + \property Voice.crescendoSpanner = #'dashed-line + a'2\mf\< a a \!a + } +@end lilypond - @code{\grace @{ \grace c32 c16 @} c4} -@end example +@cindex diminuendo -may result in run-time errors of LilyPond. Since the meaning of such -a construct is unclear, we don't consider this a loss. Similarly, -juxtaposing two @code{\grace} sections is syntactically valid, but -makes no sense and may cause runtime errors. +Dynamics are objects of @internalsref{DynamicText} and +@internalsref{Hairpin}. Vertical positioning of these symbols is +handled by the @internalsref{DynamicLineSpanner} object. If you want to +adjust padding or vertical direction of the dynamics, you must set +properties for the @internalsref{DynamicLineSpanner} object. Predefined +identifiers to set the vertical direction are \dynamicUp and +\dynamicDown. -Ending a staff or score with grace notes may also generate a run-time -error, since there will be no main note to attach the grace notes to. +@cindex direction, of dynamics +@cindex @code{\dynamicDown} +@cindex @code{\dynamicUp} +@c . {Repeats} +@node Repeats +@section Repeats @cindex repeats +@cindex @code{\repeat} + +To specify repeats, use the @code{\repeat} keyword. Since repeats +should work differently when played or printed, there are a few +different variants of repeats. + +@table @code +@item unfold +Repeated music is fully written (played) out. Useful for MIDI +output, and entering repetitive music. -@node Repeats, , , Reference Manual +@item volta +This is the normal notation: Repeats are not written out, but +alternative endings (voltas) are printed, left to right. -In order to specify repeats, use the @code{\repeat}@keyindex{repeat} -keyword. Since repeats look and sound differently when played or -printed, there are a few different variants of repeats. +@item fold +Alternative endings are written stacked. This has limited use but may be +used to typeset two lines of lyrics in songs with repeats, see +@file{input/star-spangled-banner.ly}. -@table @samp - @item unfolded - Repeated music is fully written (played) out. Useful for MIDI - output. +@item tremolo +Make tremolo beams. - @item volta - This is the normal notation: Repeats are not written out, but - alternative endings (voltas) are printed, left to right. +@item percent +Make beat or measure repeats. These look like percent signs. - @item folded - Alternative endings are written stacked, which is useful for - lyrics. @end table +@menu +* Repeat syntax:: +* Repeats and MIDI:: +* Manual repeat commands:: +* Tremolo repeats:: +* Tremolo subdivisions:: +* Measure repeats:: +@end menu + +@node Repeat syntax +@subsection Repeat syntax + The syntax for repeats is @example - \repeat @var{variant} @var{repeatcount} @var{repeatbody} @end example If you have alternative endings, you may add - +@cindex @code{\alternative} @example - - \alternative@keyindex{alternative} - @code{@{} @var{alternative1} + \alternative @code{@{} @var{alternative1} @var{alternative2} @var{alternative3} @dots{} @code{@}} @end example - -where each @var{alternative} is a Music expression. +where each @var{alternative} is a music expression. Normal notation repeats are used like this: - -@quotation - @lilypond[fragment,verbatim] c'1 \repeat volta 2 { c'4 d' e' f' } \repeat volta 2 { f' e' d' c' } - @end lilypond -@end quotation With alternative endings: - -@quotation - @lilypond[fragment,verbatim] c'1 \repeat volta 2 {c'4 d' e' f'} \alternative { {d'2 d'} {f' f} } - @end lilypond -@end quotation -Folded repeats look like this:@footnote{Folded repeats offer little -more over simultaneous music. However, it is to be expected that -more functionality -- especially for the MIDI backend -- will be -implemented.} +Folded repeats look like this: -@quotation @lilypond[fragment,verbatim] c'1 @@ -1619,1272 +2348,2783 @@ implemented.} \alternative { {d'2 d'} {f' f} } @end lilypond -@end quotation -@quotation +If you don't give enough alternatives for all of the repeats, then +the first alternative is assumed to be repeated often enough to equal +the specified number of repeats. @lilypond[fragment,verbatim] \context Staff { \relative c' { - \partial 4; - \repeat volta 2 { e | c2 d2 | e2 f2 | } - \alternative { { g4 g g } { a | a a a a | b1 } } + \partial 4 + \repeat volta 4 { e | c2 d2 | e2 f2 | } + \alternative { { g4 g g } { a | a a a a | b2. } } } } +@end lilypond + +@node Repeats and MIDI +@subsection Repeats and MIDI + +@cindex expanding repeats + +For instructions on how to unfoldi repeats for MIDI output, see +the example file @file{input/test/unfold-all-repeats.ly}. + +@refbugs + +Notice that timing information is not remembered at the start of an +alternative, so you have to reset timing information after a repeat, +e.g. using a bar-check (See @ref{Bar check}), setting +@code{Score.measurePosition} or entering @code{\partial}. Slurs or ties +are also not repeated. + +It is possible to nest @code{\repeat}s, although this probably is only +meaningful for unfolded repeats. + +Folded repeats offer little more over simultaneous music. + +@node Manual repeat commands +@subsection Manual repeat commands + +@cindex @code{repeatCommands} + +The property @code{repeatCommands} can be used to control the layout of +repeats. Its value is a Scheme list of repeat commands, where each repeat +command can be + +@table @code +@item 'start-repeat + Print a |: bar line +@item 'end-repeat + Print a :| bar line +@item (volta . @var{text}) + Print a volta bracket saying @var{text}. +@item (volta . #f) + Stop a running volta bracket +@end table + +@lilypond[verbatim, fragment] + c''4 + \property Score.repeatCommands = #'((volta "93") end-repeat) + c''4 c''4 + \property Score.repeatCommands = #'((volta #f)) + c''4 c''4 @end lilypond -@end quotation -If you don't give enough alternatives for all of the repeats, then -the first alternative is assumed to be repeated often enough to equal -the specified number of repeats. -@quotation +Repeats brackets are @internalsref{VoltaBracket} objects. -@lilypond[fragment,verbatim] -\context Staff { - \relative c' { - \repeat volta 3 { \partial 4; e | c2 d2 | e2 f2 | } - \alternative { { g4 g g } - {\partial 1; e4 e e } - {\partial 1; a a a a | b1 } } +@node Tremolo repeats +@subsection Tremolo repeats +@cindex tremolo beams + +To place tremolo marks between notes, use @code{\repeat} with tremolo +style. +@lilypond[verbatim,center,singleline] +\score { + \context Voice \notes\relative c' { + \repeat "tremolo" 8 { c16 d16 } + \repeat "tremolo" 4 { c16 d16 } + \repeat "tremolo" 2 { c16 d16 } + \repeat "tremolo" 4 c16 } } +@end lilypond + +Tremolo beams are @internalsref{Beam} objects. Single stem tremolos are +@internalsref{StemTremolo}. The single stem tremolo @emph{must} be +entered without @code{@{} and @code{@}}. +@refbugs + +Only powers of two and undotted notes are supported repeat counts. + +@node Tremolo subdivisions +@subsection Tremolo subdivisions +@cindex tremolo marks +@cindex @code{tremoloFlags} + +Tremolo marks can be printed on a single note by adding +`@code{:}[@var{length}]' after the note. The length must be at least 8. +A @var{length} value of 8 gives one line across the note stem. If the +length is omitted, then then the last value (stored in +@code{Voice.tremoloFlags}) is used. + +@lilypond[verbatim,fragment,center] + c'2:8 c':32 | c': c': | @end lilypond -@end quotation -It is possible to nest @code{\repeat}. This is not entirely -supported: the notes will come be in the right places, but the repeat -bars will not. +@refbugs +Tremolos in this style do not carry over into the MIDI output. -@cindex transposition of pitches -@node transpose, , , Reference Manual +@node Measure repeats +@subsection Measure repeats -A music expression can be transposed with -@code{\transpose}@keyindex{transpose}. The syntax is +@cindex percent repeats +@cindex measure repeats -@example +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 a one and two measures are replaced by percent-like signs, +patterns that divide the measure length are replaced by slashes. - \transpose @var{pitch} @var{musicexpr} -@end example +@lilypond[verbatim,singleline] + \context Voice { \repeat "percent" 4 { c'4 } + \repeat "percent" 2 { c'2 es'2 f'4 fis'4 g'4 c''4 } +} +@end lilypond -This means that middle C in @var{musicexpr} is transposed to -@var{pitch}. +The signs are represented by these objects: @internalsref{RepeatSlash} and +@internalsref{PercentRepeat} and @internalsref{DoublePercentRepeat}. -@code{\transpose} distinguishes between enharmonic pitches: both -@code{\transpose cis'} or @code{\transpose des'} will transpose up half -a tone. The first version will print sharps and the second version -will print flats. +@refbugs -@quotation +You can not nest percent repeats, e.g. by filling in the first measure +with slashes, and repeating that measure with percents. -@lilypond[fragment,verbatim] -\context Staff { - \clef "F"; - { \key e \major; c d e f } - \clef "G"; - \transpose des'' { \key e \major; c d e f } - \transpose cis'' { \key e \major; c d e f } +@node Rhythmic music +@section Rhythmic music + +Sometimes you might want to show only the rhythm of a melody. This can +be done with the rhythmic staff. All pitches of notes on such a staff +are squashed, and the staff itself looks has a single staff line: + +@lilypond[fragment,relative,verbatim] + \context RhythmicStaff { + \time 4/4 + c4 e8 f g2 | r4 g r2 | g1:32 | r1 | + } +@end lilypond + +@menu +* Percussion staves:: +@end menu + +@node Percussion staves +@subsection Percussion staves +@cindex percussion +@cindex drums +To typeset more than one piece of percussion to be played by the same +musician one typically uses a multiline staff where each staff +position refers to a specific piece of percussion. + +LilyPond is shipped with a bunch of scheme functions which allows you +to do this fairly easily. + +The system is based on the general midi drum-pitches. +In order to use the drum pitches you include +@file{ly/drumpitch-init.ly}. This file defines the pitches from the scheme +variable @code{drum-pitch-names} - which definition can be read in +@file{scm/drums.scm}. You see that each piece of percussion has a full +name and an abbreviated name - and you may freely select whether to +refer to the full name or the abbreviation in your music definition. + +To typeset the music on a staff you apply the scheme function +@code{drums->paper} to the percussion music. This function takes a +list of percussion instrument names, notehead scripts and staff +positions (that is: pitches relative to the C-clef) and uses this to +transform the input music by moving the pitch, changing the notehead +and (optionally) adding a script: +@lilypond[singleline,verbatim] +\include "drumpitch-init.ly" +up = \notes { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat } +down = \notes { bassdrum4 snare8 bd r bd sn4 } +\score { + \apply #(drums->paper 'drums) \context Staff < + \clef percussion + \context Voice = up { \voiceOne \up } + \context Voice = down { \voiceTwo \down } + > } @end lilypond -@end quotation +In the above example the music was transformed using the list @code{'drums}. +Currently the following lists are defined in @file{scm/drums.scm}: +@table @code +@item 'drums +To typeset a typical drum kit on a five-line staff. + +@lilypond[noindent] +\include "drumpitch-init.ly" +nam = \lyrics { cymc cyms cymr hh hhc hho hhho hhp cb hc + bd sn ss tomh tommh tomml toml tomfh tomfl } +mus = \notes { cymc cyms cymr hh hhc hho hhho hhp cb hc + bd sn ss tomh tommh tomml toml tomfh tomfl s16 } +\score { + < + \apply #(drums->paper 'drums) \context Staff < + \clef percussion + \mus + > + \context Lyrics \nam + > + \paper { + linewidth = 100.0\mm + \translator { + \StaffContext + \remove Bar_engraver + \remove Time_signature_engraver + minimumVerticalExtent = #'(-4.0 . 5.0) + } + \translator { + \VoiceContext + \remove Stem_engraver + } + } +} +@end lilypond -If you want to use both @code{\transpose} and @code{\relative}, then -you must use @code{\transpose} first. @code{\relative} will have no -effect music that appears inside a @code{\transpose}. +Notice that the scheme supports six different toms. +If you are using fewer toms then you simply select the toms that produce +the desired result - i.e. to get toms on the three middle lines you +use @code{tommh}, @code{tomml} and @code{tomfh}. + +Because the general midi contain no rimshots we use the sidestick for +this purpose instead. +@item 'timbales +To typeset timbales on a two line staff. +@lilypond[singleline] +\include "drumpitch-init.ly" +nam = \lyrics { timh ssh timl ssl cb } +mus = \notes { timh ssh timl ssl cb s16 } +\score { + < + \apply #(drums->paper 'timbales) \context Staff < + \clef percussion + \mus + > + \context Lyrics \nam + > + \paper { + \translator { + \StaffContext + \remove Bar_engraver + \remove Time_signature_engraver + StaffSymbol \override #'line-count = #2 + StaffSymbol \override #'staff-space = #2 + minimumVerticalExtent = #'(-3.0 . 4.0) + } + \translator { + \VoiceContext + \remove Stem_engraver + } + + } +} +@end lilypond +@item 'congas +To typeset congas on a two line staff. +@lilypond[singleline] +\include "drumpitch-init.ly" +nam = \lyrics { cgh cgho cghm ssh cgl cglo cglm ssl } +mus = \notes { cgh cgho cghm ssh cgl cglo cglm ssl s16 } +\score { + < + \apply #(drums->paper 'congas) \context Staff < + \clef percussion + \mus + > + \context Lyrics \nam + > + \paper { + \translator { + \StaffContext + \remove Bar_engraver + \remove Time_signature_engraver + StaffSymbol \override #'line-count = #2 + StaffSymbol \override #'staff-space = #2 + minimumVerticalExtent = #'(-3.0 . 4.0) + } + \translator { + \VoiceContext + \remove Stem_engraver + } + } +} +@end lilypond +@item 'bongos +To typeset bongos on a two line staff. +@lilypond[singleline] +\include "drumpitch-init.ly" +nam = \lyrics { boh boho bohm ssh bol bolo bolm ssl } +mus = \notes { boh boho bohm ssh bol bolo bolm ssl s16 } +\score { + < + \apply #(drums->paper 'bongos) \context Staff < + \clef percussion + \mus + > + \context Lyrics \nam + > + \paper { + \translator { + \StaffContext + \remove Bar_engraver + \remove Time_signature_engraver + StaffSymbol \override #'line-count = #2 + StaffSymbol \override #'staff-space = #2 + minimumVerticalExtent = #'(-3.0 . 4.0) + } + \translator { + \VoiceContext + \remove Stem_engraver + } + } +} +@end lilypond +@item 'percussion +To typeset all kinds of simple percussion on one line staves. +@lilypond[singleline] +\include "drumpitch-init.ly" +nam = \lyrics { tri trio trim gui guis guil cb cl tamb cab mar hc } +mus = \notes { tri trio trim gui guis guil cb cl tamb cab mar hc s16 } +\score { + < + \apply #(drums->paper 'percussion) \context Staff < + \clef percussion + \mus + > + \context Lyrics \nam + > + \paper { + \translator { + \StaffContext + \remove Bar_engraver + \remove Time_signature_engraver + StaffSymbol \override #'line-count = #1 + minimumVerticalExtent = #'(-2.0 . 3.0) + } + \translator { + \VoiceContext + \remove Stem_engraver + } + } +} +@end lilypond +@end table + +If you don't like any of the predefined lists you can define your own +list at the top of your file: + +@lilypond[singleline, verbatim] +#(define mydrums `( + (bassdrum default #f ,(ly:make-pitch -1 2 0)) + (snare default #f ,(ly:make-pitch 0 1 0)) + (hihat cross #f ,(ly:make-pitch 0 5 0)) + (pedalhihat xcircle "stopped" ,(ly:make-pitch 0 5 0)) + (lowtom diamond #f ,(ly:make-pitch -1 6 0)) +)) +\include "drumpitch-init.ly" +up = \notes { hh8 hh hh hh hhp4 hhp } +down = \notes { bd4 sn bd toml8 toml } +\score { + \apply #(drums->paper 'mydrums) \context Staff < + \clef percussion + \context Voice = up { \voiceOne \up } + \context Voice = down { \voiceTwo \down } + > +} +@end lilypond + +To use a modified existing list instead of building your own from +scratch you can append your modifications to the start of the existing +list: + +@example +#(define mydrums (append `( + (bassdrum default #f ,(ly:make-pitch -1 2 0)) + (lowtom diamond #f ,(ly:make-pitch -1 6 0)) +) drums )) +@end example + +@c FIXME: Too many levels of headers when using subsubsections. +@c Perhaps junk subsection ``Percussion staves'' +@subsubsection Percussion staves with normal staves +When you include @file{drumpitch-init.ly} then the default pitches +are overridden so that you after the inclusion cannot use the common +dutch pitch names anymore. Hence you might wan't to reinclude +@file{nederlands.ly} after the drum-pattern-definitions: +@lilypond[singleline,verbatim] +\include "drumpitch-init.ly" +up = \notes { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat } +down = \notes { bassdrum4 snare8 bd r bd sn4 } +\include "nederlands.ly" +bass = \notes \transpose c c,, { a4. e8 r e g e } +\score { + < + \apply #(drums->paper 'drums) \context Staff = drums < + \clef percussion + \context Voice = up { \voiceOne \up } + \context Voice = down { \voiceTwo \down } + > + \context Staff = bass { \clef "F_8" \bass } + > +} +@end lilypond + +@subsubsection Percussion midi output +In order to produce correct midi output you need to produce two score +blocks - one for the paper and one for the midi. +To use the percussion channel you set the property @code{instrument} +to @code{'drums}. Because the drum-pitches themself are similar to the +general midi pitches all you have to do is to insert the voices with +none of the scheme functions to get the correct midi output: + +@example +\score @{ + \apply #(drums->paper 'mydrums) \context Staff < + \clef percussion + \context Voice = up @{ \voiceOne \up @} + \context Voice = down @{ \voiceTwo \down @} + > + \paper@{@} +@} +\score @{ + \context Staff < + \property Staff.instrument = #'drums + \up \down + > + \midi@{@} +@} +@end example + +@refbugs + +This scheme is to be considered a temporary implementation. Even +though the scheme will probably keep on working then the future might +bring some other way of typesetting drums, and probably +there will be made no great efforts in keeping things downwards +compatible. + +@c . {Piano music} +@node Piano music +@section Piano music + +Piano music is an odd type of notation. Piano staves are two normal +staves coupled with a brace. The staves are largely independent, but +sometimes voices can cross between the two staves. The +@internalsref{PianoStaff} is especially built to handle this cross-staffing +behavior. In this section we discuss the @internalsref{PianoStaff} and some +other pianistic peculiarities. + + +@menu +* Automatic staff changes:: +* Manual staff switches:: +* Pedals:: +* Arpeggio:: +* Voice follower lines:: +@end menu + +@refbugs + +There is no support for putting chords across staves. You can get +this result by increasing the length of the stem in the lower stave so +it reaches the stem in the upper stave, or vice versa. An example is +included with the distribution as @file{input/test/stem-cross-staff.ly}. +@cindex cross staff stem +@cindex stem, cross staff -@cindex automatic lyric durations +@c fixme: should have hyperlinks as well. -If you have lyrics that are set to a melody, you can import the -rhythm of that melody into the lyrics using @code{\addlyrics}. -@keyindex{addlyrics} The syntax for this is + + +@c . {Automatic staff changes} +@node Automatic staff changes +@subsection Automatic staff changes +@cindex Automatic staff changes + +Voices can switch automatically between the top and the bottom +staff. The syntax for this is @example + \autochange Staff \context Voice @{ @dots{}@var{music}@dots{} @} +@end example +The autochanger switches on basis of pitch (central C is the turning +point), and it looks ahead skipping over rests to switch rests in +advance. Here is a practical example: + +@lilypond[verbatim,singleline] +\score { \notes \context PianoStaff < + \context Staff = "up" { + \autochange Staff \context Voice = VA < \relative c' { + g4 a b c d r4 a g } > } + \context Staff = "down" { + \clef bass + s1*2 +} > } +@end lilypond +Spacer rests are used to prevent the bottom staff from +terminating too soon. + + +@node Manual staff switches +@subsection Manual staff switches + +@cindex manual staff switches +@cindex staff switch, manual - \addlyrics @var{musicexpr1 musicexpr2} +Voices can be switched between staves manually, using the following command: +@example + \translator Staff = @var{staffname} @var{music} @end example +The string @var{staffname} is the name of the staff. It switches the +current voice from its current staff to the Staff called +@var{staffname}. Typically @var{staffname} is @code{"up"} or +@code{"down"}. -This means that both @var{musicexpr1} and @var{musicexpr2} are -interpreted, but that every non-command atomic music expression -(``every syllable'') in @var{musicexpr2} is interpreted using timing -of @var{musicexpr1}. +@c . {Pedals} +@node Pedals +@subsection Pedals +@cindex Pedals -If the property @code{automaticMelismata}@indexcode{automaticMelismata} is set in the -context of @var{musicexpr1}, no lyrics will be put on slurred or tied -notes. +Piano pedal instruction can be expressed using +@code{\sustainDown}, @code{\sustainUp}, @code{\unaCorda}, +@code{\treCorde}, @code{\sostenutoDown} and @code{\sostenutoUp}. -@quotation +The symbols that are printed can be modified by setting +@code{pedal@var{X}Strings}, where @var{X} is one of the pedal types: +Sustain, Sostenuto or UnaCorda. Refer to the generated documentation of +@internalsref{SustainPedal}, for example, for more information. -@lilypond[verbatim,fragment] -\addlyrics -\transpose c'' { - \property Voice.automaticMelismata = ##t - c8 () cis d8. e16 f2 -} -\context Lyrics \lyrics { - do4 re mi fa } +Pedals can also be indicated by a sequence of brackets, by setting the +@code{pedal-type} property of SustainPedal objects: +@lilypond[fragment,verbatim] +\property Staff.SustainPedal \override #'pedal-type = #'bracket +c''4 \sustainDown d''4 e''4 a'4 +\sustainUp \sustainDown + f'4 g'4 a'4 \sustainUp @end lilypond -@end quotation -You should use a single rhythm melody, and single rhythm lyrics (a -constant duration is the obvious choice). If you do not, you will get -undesired effects when using multiple stanzas: +A third style of pedal notation is a mixture of text and brackets, +obtained by setting @code{pedal-type} to @code{mixed}: -@quotation +@lilypond[fragment,verbatim] +\property Staff.SustainPedal \override #'pedal-type = #'mixed +c''4 \sustainDown d''4 e''4 c'4 +\sustainUp \sustainDown + f'4 g'4 a'4 \sustainUp +@end lilypond -@lilypond[verbatim,fragment] -\addlyrics -\transpose c'' { - c8 () cis d8. e16 f2 -} -\context Lyrics \lyrics -< { do4 re mi fa } - { do8 re mi fa } > +The default '*Ped' style for sustain and damper pedals corresponds to +@code{\pedal-type = #'text}. However, @code{mixed} is the default style +for a sostenuto pedal: +@lilypond[fragment,verbatim] +c''4 \sostenutoDown d''4 e''4 c'4 f'4 g'4 a'4 \sostenutoUp @end lilypond -@end quotation -It is valid (but probably not very useful) to use notes instead of -lyrics for @var{musicexpr2}. +For fine-tuning of the appearance of a pedal bracket, the properties +@code{edge-width}, @code{edge-height}, and @code{shorten-pair} of +@code{PianoPedalBracket} objects (see the detailed documentation of +@rgrob{PianoPedalBracket}) can be modified. For example, the bracket +may be extended to the end of the note head. +@lilypond[fragment,verbatim] +\property Staff.PianoPedalBracket \override + #'shorten-pair = #'(0 . -1.0) +c''4 \sostenutoDown d''4 e''4 c'4 +f'4 g'4 a'4 \sostenutoUp +@end lilypond +@node Arpeggio +@subsection Arpeggio +@cindex Arpeggio +@cindex broken arpeggio +@cindex @code{\arpeggio} -@node Ambiguities, , , Reference Manual -@section Ambiguities +You can specify an arpeggio sign on a chord by attaching an +@code{\arpeggio} to a chord. -@cindex ambiguities -The grammar contains a number of ambiguities.@footnote{The authors -hope to resolve them at a later time.} +@lilypond[fragment,relative,verbatim] + <>-\arpeggio +@end lilypond -@itemize @bullet - @item The assignment +When an arpeggio crosses staves in piano music, you attach an arpeggio +to the chords in both staves, and set +@code{PianoStaff.connectArpeggios}. - @example -foo = bar -@end example +@lilypond[fragment,relative,verbatim] + \context PianoStaff < + \property PianoStaff.connectArpeggios = ##t + \context Voice = one { <>-\arpeggio } + \context Voice = other { \clef bass <>-\arpeggio} + > +@end lilypond - can be interpreted as making a string identifier @code{\foo} - containing @code{"bar"}, or a music identifier @code{\foo} - containing the syllable `bar'. +This command creates @internalsref{Arpeggio} objects. Cross staff arpeggios +are @code{PianoStaff.Arpeggio}. - @item The assignment +To add an arrow head to explicitly specify the direction of the +arpeggio, you should set the arpeggio object property +@code{arpeggio-direction}. - @example -foo = -6 -@end example +@lilypond[fragment,relative,verbatim] + \context Voice { + \property Voice.Arpeggio \set #'arpeggio-direction = #1 + <>-\arpeggio + \property Voice.Arpeggio \set #'arpeggio-direction = #-1 + <>-\arpeggio + } +@end lilypond - can be interpreted as making an integer identifier - containing -6, or a Request identifier containing the - fingering `6' (with neutral direction). +A square bracket on the left indicates that the player should not +arpeggiate the chord. To draw these brackets, set the +@code{molecule-callback} property of @code{Arpeggio} or +@code{PianoStaff.Arpeggio} objects to @code{\arpeggioBracket}, and use +@code{\arpeggio} statements within the chords as before. + +@lilypond[fragment,relative,verbatim] + \context PianoStaff < + \property PianoStaff.connectArpeggios = ##t + \property PianoStaff.Arpeggio \override + #'molecule-callback = \arpeggioBracket + \context Voice = one { <>-\arpeggio } + \context Voice = other { \clef bass <>-\arpeggio } + > +@end lilypond - @item If you do a nested repeat like - @quotation +@refbugs -@example -\repeat @dots{} -\repeat @dots{} -\alternative -@end example +It is not possible to mix connected arpeggios and unconnected +arpeggios in one PianoStaff at the same time. - @end quotation - then it is ambiguous to which @code{\repeat} the - @code{\alternative} belongs. This is the classic if-then-else - dilemma. It may be solved by using braces. - @item (an as yet unidentified ambiguity :-) -@end itemize +@node Voice follower lines +@subsection Voice follower lines + +@cindex follow voice +@cindex staff switching +@cindex cross staff +@cindex @code{followVoice} +Whenever a voice switches to another staff a line connecting the notes +can be printed automatically. This is enabled if the property +@code{PianoStaff.followVoice} is set to true: -@node Notation conversion specifics, , , Reference Manual -@section Notation conversion specifics +@lilypond[fragment,relative,verbatim] + \context PianoStaff < + \property PianoStaff.followVoice = ##t + \context Staff \context Voice { + c1 + \translator Staff=two + b2 a + } + \context Staff=two {\clef bass \skip 1*2 } + > +@end lilypond +The associated object is @internalsref{VoiceFollower}. -@cindex automatic beam generation +@node Tablatures +@section Tablatures -@node autobeam, , , Reference Manual +Tablature notation is used for notating music for plucked string +instruments. It notates pitches not by using note heads, but by +indicating on which string and fret a note must be played. LilyPond +offers limited support for tablature. -By default, LilyPond will generate beams automatically. This feature -can be disabled by setting the @code{Voice.noAutoBeaming}@indexcode{Voice.noAutoBeaming} -property to 1. It can be overridden for specific cases by -specifying explicit beams. +@menu +* Tablatures basic:: +* Non-guitar tablatures:: +* Tablature in addition to normal staff:: +@end menu +@node Tablatures basic +@subsection Tablatures basic +@cindex Tablatures basic -A large number of Voice properties are used to decide how to generate -beams. Their default values appear in @file{auto-beam-settings.ly}. -In general, beams can begin anywhere, but their ending location is -significant. Beams can end on a beat, or at durations specified by -the @code{Voice.beamAutoEnd}@indexcode{Voice.beamAutoEnd} property. To end beams every -quarter note, for example, you could set -@code{Voice.beamAutoEnd}@indexcode{Voice.beamAutoEnd} equal to `@code{"1/4"}'. To end beams -at every three eighth notes you would set it to `@code{"3/8"}'. The -same syntax can be used to specify beam starting points using -@code{Voice.beamAutoBegin}@indexcode{Voice.beamAutoBegin}. +Tablature can be typeset with Lilypond by using the +@internalsref{TabStaff} and @internalsref{TabVoice} contexts. As +tablature is a recent feature in Lilypond, most of the guitar special +effects such as bend are not yet supported. -To allow different settings for different time signatures, these -property names can start with `@code{time}@var{N}@code{_}@var{M}' to -restrict the definition to `@var{N}@code{/}@var{M}' time. For example, -to specify beams ending only for 6/8 time you would use the -property @code{Voice.time6_8beamAutoEnd}. To allow different endings -for notes of different durations, the duration can be tacked onto the -end of the property. To specify beam endings for beams that contain -32nd notes, you would use @code{Voice.beamAutoEnd_32}. +With the @internalsref{TabStaff}, the string number associated to a note +is given as a backslash followed by the string number, e.g. @code{c4\3} for a C +quarter on the third string. By default, string 1 is the highest one, and the +tuning defaults to the standard guitar tuning (with 6 strings). +@lilypond[fragment,verbatim] + \context TabStaff < + \notes { + a,4\5 c'\2 a\3 e'\1 + e\4 c'\2 a\3 e'\1 + } + > +@end lilypond +If you do not specify a string number then lilypond automatically selects one. +The selection is controlled by the translator property @code{minimumFret}. -- LilyPond +simply selects the first string that does not give a fret number less than +@code{minimumFret}. Default is 0. -@cindex chord names +Notice that LilyPond does not handle chords in any special way, and hence +the automatic string selector may easily select the same string to two notes in a chord. -@cindex chords +@example +e8 fis gis a b cis' dis' e' +\property TabStaff.minimumFret = #8 +e8 fis gis a b cis' dis' e' +@end example +@lilypond[noindent,noquote] +frag = \notes { + \key e \major + e8 fis gis a b cis' dis' e' + \property TabStaff.minimumFret = #8 + e8 fis gis a b cis' dis' e' +} +\score { + \context StaffGroup < + \context Staff { \clef "G_8" \frag } + \context TabStaff { \frag } + > +} +@end lilypond -@cindex printing!chord names +@node Non-guitar tablatures +@subsection Non-guitar tablatures +@cindex Non-guitar tablatures -For displaying printed chord names, use the @code{ChordNames}@indexcode{ChordNames} -and @code{ChordNameVoice}@indexcode{ChordNameVoice} contexts. The chords may be entered -either using the notation described above, or directly using -simultaneous music. +There are many ways to customize Lilypond tablatures. -@quotation +First you can change the number of strings, by setting the number of +lines in the @internalsref{TabStaff} (the @code{line-count} property +of TabStaff can only be changed using @code{\outputproperty}, for more +information, see @ref{Tuning per object}. You can change the strings +tuning. A string tuning is given as a Scheme list with one integer +number for each string, the number being the pitch of an open string. + +(The numbers specified for stringTuning are the numbers of semitons +to subtract --- or add --- starting the specified pitch by default +middle C, in string order: thus the notes are e, a, d & g) @lilypond[fragment,verbatim] -< - \context ChordNames { - \chords{a b c} \notes{ } + \context TabStaff < + + \outputproperty #(make-type-checker 'staff-symbol-interface) + #'line-count = #4 + \property TabStaff.stringTunings = #'(-5 -10 -15 -20) + + \notes { + a,4 c' a e' e c' a e' + } + > +@end lilypond + +Finally, it is possible to change the Scheme function to format the +tablature note text. The default is @var{fret-number-tablature-format}, +which uses the fret number, but for some instruments that may not use +this notation, just create your own tablature-format function. This +function takes three argument: the string number, the string tuning and +the note pitch. + + +@node Tablature in addition to normal staff +@subsection Tablature in addition to normal staff +@cindex Tablature in addition to normal staff + +It is possible to typeset both tablature and a "normal" staff, as +commonly done in many parts. + +A common trick for that is to put the notes in a variables, and to hide +the fingering information (which correspond to the string number) for +the standard staff. + +@c FIXME +@c @lily pond[verbatim] +@example + part = \notes @{ + a,4-2 c'-5 a-4 e'-6 + e-3 c'-5 a-4 e'-6 + @} + \score @{ + \context StaffGroup < + \context Staff < + % Hide fingering number + \property Staff.Fingering \override #'transparent = ##t + + \part + > + \context TabStaff < + \property Staff.Stem \override #'direction = #1 + + \part + > + > + @} +@end example +@c @end lilypond + +@c . {Chords} +@node Chords +@section Chords +@cindex Chords + +LilyPond has support for both entering and printing chords. +@lilypond[verbatim,singleline] +twoWays = \notes \transpose c c' { + \chords { + c1 f:sus4 bes/f } - \context Staff \notes { - a b c' d' e' + <> + <> + <> } -> +\score { + < \context ChordNames \twoWays + \context Voice \twoWays > } @end lilypond -@end quotation -LilyPond examines chords specified as lists of notes to determine a -name to give the chord. By default, LilyPond will not try to -identify chord inversions: +This example also shows that the chord printing routines do not try to +be intelligent. If you enter @code{f bes d}, it does not interpret +this as an inversion. + +As you can see chords really are a set of pitches. They are internally +stored as simultaneous music expressions. This means you can enter +chords by name and print them as notes, enter them as notes and print +them as chord names, or (the most common case) enter them by name, and +print them as name. + +@menu +* Chords mode:: +* Printing named chords:: +@end menu + +@c . {Chords mode} +@node Chords mode +@subsection Chords mode +@cindex Chords mode + +Chord mode is a mode where you can input sets of pitches using common +names. It is introduced by the keyword @code{\chords}. It is similar +to note mode, but words are also looked up in a chord modifier table +(containing @code{maj}, @code{dim}, etc). Dashes and carets are used +to indicate chord additions and subtractions, so articulation scripts +can not be entered in Chord mode. + +Throughout these examples, chords have been shifted around the staff +using @code{\transpose}. + +@lilypond[fragment,verbatim] +\transpose c c' { + \chords { + c1 c:3- c:7 c:8 + c:9 c:9-.5+.7+ c:3-.5- + } +} +@end lilypond + +@cindex @code{aug} +@cindex @code{dim} +@cindex @code{maj} +@cindex @code{sus} + +The second type of modifier that may appear after the @code{:} is a +named modifier. Named modifiers are listed in the file +@file{chord-modifiers.ly}. The available modifiers are @code{m} and +@code{min} which lower the 3rd half a step, `@code{aug}' which +raises the 5th, `@code{dim}' which lowers the 5th, +`@code{maj}' which adds a raised 7th, and `@code{sus}' +which replaces the 5th with a 4th. + +@lilypond[fragment,verbatim] +\transpose c c' { + \chords { + c1:m c:min7 c:maj c:aug c:dim c:sus + } +} +@end lilypond + + +Chord subtractions are used to eliminate notes from a chord. The +notes to be subtracted are listed after a @code{^} character, +separated by dots. @lilypond[fragment,verbatim,center] - < - \context ChordNameVoice \notes { - - } - \context Thread \notes { - + \transpose c c' { + \chords { + c1^3 c:7^5.3 c:8^7 } - > -@end lilypond + } +@end lilypond +@cindex @code{/} -If you want inversions to be recognized, you must set the property -@code{ChordNames.chordInversion}@indexcode{ChordNames.chordInversion}: +Chord inversions can be specified by appending `@code{/}' and the name +of a single note to a chord. In a chord inversion, the inverted note is +transposed down until it is the lowest note in the chord. If the note +is not in the chord, a warning will be printed. @lilypond[fragment,verbatim,center] - < - \property Score.chordInversion = ##t - \context ChordNameVoice \notes { - + \transpose c c'' { + \chords { + c1 c/e c/g c:7/e } - \context Thread \notes { - + } + +@end lilypond +@cindex @code{/+} + +Bass notes can be added by `@code{/+}' and +the name of a single note to a chord. This has the effect of +adding the specified note to the chord, lowered by an octave, +so it becomes the lowest note in the chord. + +@lilypond[fragment,verbatim,center] + \transpose c c'' { + \chords { + c1 c/+c c/+g c:7/+b } - > -@end lilypond + } +@end lilypond +The formal syntax for named chords is as follows: +@example + @var{tonic}[@var{duration}][@code{-}@var{modifiers}][@code{^}@var{subtractions}][@code{/}@var{inversion}][@code{/+}@var{bass}]. +@end example -@cindex lyrics +@var{tonic} should be the tonic note of the chord, and @var{duration} is +the chord duration in the usual notation. There are two kinds of +modifiers. One type is formed by @emph{chord additions}. Additions are +obtained by listing intervals separated by dots. An interval is written +by its number with an optional @code{+} or @code{-} to indicate raising +or lowering by half a step. Chord additions have two effects: they adds +the specified interval and all lower odd numbered intervals to the +chord, and they may lower or raise the specified interval. -@cindex printing!lyrics -@node lyricprint, , , Reference Manual +@refbugs -Lyric syllables must be interpreted within a @code{Lyrics} context +Implementation details are gory. For example @code{c:4} not only adds +a fourth, but also removes the third. -@cindex context!Lyrics - for printing them. -Here is a full example: +@c . {Printing named chords} +@node Printing named chords +@subsection Printing named chords -@quotation +@cindex printing chord names +@cindex chord names +@cindex chords + +For displaying printed chord names, use the @internalsref{ChordNames} context. +The chords may be entered either using the notation described above, or +directly using simultaneous music. + +@lilypond[verbatim,singleline] +scheme = \notes { + \chords {a1 b c} <> <> +} +\score { + \notes< + \context ChordNames \scheme + \context Staff \transpose c c' \scheme + > +} +@end lilypond + +You can make the chord changes stand out by setting +@code{ChordNames.chordChanges} to true. This will only display chord +names when there's a change in the chords scheme and at the start of a +new line. @lilypond[verbatim] +scheme = \chords { + c1:m c:m \break c:m c:m d +} +\score { + \notes < + \context ChordNames { + \property ChordNames.chordChanges = ##t + \scheme } + \context Staff \transpose c c' \scheme + > +\paper{linewidth= 9.\cm} +} +@end lilypond + +LilyPond examines chords specified as lists of notes to determine a name +to give the chord. LilyPond will not try to identify chord inversions or +an added bass note, which may result in strange chord names when chords +are entered as a list of pitches: + +@lilypond[verbatim,center,singleline] +scheme = \notes { + <>1 + <> + <> +} + \score { < - \notes \transpose c'' { - c d e c | c d e c | - e f g2 | e4 f g2 \bar "|."; - } - \context Lyrics \lyrics { - Va-4 der Ja- cob Va- der Ja- cob - Slaapt gij nog?2 Slaapt4 gij nog?2 - } + \context ChordNames \scheme + \context Staff \scheme > } +@end lilypond + + +By default, a chord name system proposed by Harald Banter (See +@ref{Literature}) is used. The system is very regular and predictable. +Typical American style chord names may be selected by setting the +@code{style} property of the @code{ChordNames.ChordName} object to +@code{'american}. Similarly @code{'jazz} selects Jazz chordnames. + +Routines that determine the names to be printed are written in Scheme, +and may be customized by the user. The code can be found in +@file{scm/chord-name.scm}. Here's an example showing the differences in +chord name styles: + +@c too long? +@c maybe just junk verbatim option? +@lilypond[verbatim,singleline,noquote] +scheme = \chords { + c1 c:5^3 c:4^3 c:5+ + c:m7+ c:m5-.7 + c:5-.7 c:5+.7 + c:9^7 +} +\score { + \notes < + \context ChordNames = banter \scheme + \context ChordNames = american { + \property ChordNames.ChordName \override + #'style = #'american \scheme } + \context ChordNames = jazz { + \property ChordNames.ChordName \override + #'style = #'jazz \scheme } + \context Staff \transpose c c' \scheme + > +} @end lilypond -@end quotation -You may want a continuous line after the syllables to show melismata. -To achieve this effect, add a `@code{__}' lyric as a separate word -after the lyric to be extended. This will create an extender, a line -that extends over the entire duration of the lyric. This line will -run all the way to the start of the next lyric, so you may want to -shorten it by using a blank lyric (using `@code{_}'). -@quotation +@node Writing parts +@section Writing parts -@lilypond[verbatim] +Orchestral music involves some special notation, both in the full score, +as in the individual parts. This section explains how to tackle common +problems in orchestral music. + + +@c . {Transpose} +@menu +* Rehearsal marks:: +* Bar numbers:: +* Instrument names:: +* Transpose:: +* Multi measure rests:: +* Automatic part combining:: +* Hara kiri staves:: +* Sound output for transposing instruments:: +@end menu + +@c . {Rehearsal marks} +@node Rehearsal marks +@subsection Rehearsal marks +@cindex Rehearsal marks +@cindex mark +@cindex @code{\mark} + +To print a rehearsal mark, use the @code{\mark} command. +@lilypond[fragment,verbatim] +\relative c'' { + c1 \mark "A" + c1 \mark \default + c1 \mark \default + c1 \mark "12" + c1 \mark \default + c1 +} +@end lilypond + +As you can see, the mark is incremented automatically if you use +@code{\mark \default}. The value to use is stored in the property +@code{rehearsalMark} is used and automatically incremented. The object +is @internalsref{RehearsalMark} in @internalsref{Score} context. See +@code{input/test/boxed-molecule.ly} if you need boxes around the +marks. + +The @code{\mark} command can also be used to put signs like coda, +segno and fermatas on a barline. The trick is to use the text markup +mechanism to access the fermata symbol. +@lilypond[fragment,verbatim,relative=1] + c1 \mark #'(music "scripts-ufermata") + c1 +@end lilypond + +The problem is that marks that occur at a line break are typeset only +at the beginning of the next line, opposite to what you want for the +fermata. This can be corrected by the following property setting +@example +\property Score.RehearsalMark \override + #'visibility-lambda = #begin-of-line-invisible +@end example + +@cindex fermatas +@cindex coda +@cindex segno +@cindex barlines, putting symbols on + + +@node Bar numbers +@subsection Bar numbers + + +@cindex bar numbers +@cindex measure numbers +@cindex currentBarNumber + +Bar numbers are printed by default at the start of the line. The +number itself is a property that can be set by modifying the +@code{currentBarNumber} property, although that is usually not +necessary, i.e. +@example + \property Score.currentBarNumber = #217 +@end example + +To typeset Bar Numbers at regular intervals instead of at the beginning of each line, +you need to change the grob property @code{break-visibility} as well as the translator +property @code{barNumberVisibility}, as illustrated in the following example which also +adds a box around the bar numbers: +@example +\property Score.BarNumber \override #'break-visibility = + #end-of-line-invisible +\property Score.barNumberVisibility = #(every-nth-bar-number-visible 5) +\property Score.BarNumber \override #'molecule-callback = + #(make-molecule-boxer 0.1 0.25 0.25 Text_item::brew_molecule) +\property Score.BarNumber \override #'font-relative-size = #0 +@end example +@lilypond[noindent,noquote] \score { - < - \notes \relative c'' { - a4 () b () c () d | c () d () b () a | c () d () b () a - } - \context Lyrics \lyrics { - foo1 __ | bar2. __ _4 | baz1 __ + \context Staff \notes \transpose c c'' { + \property Score.BarNumber \override #'break-visibility = #end-of-line-invisible + \property Score.barNumberVisibility = #(every-nth-bar-number-visible 5) + \property Score.BarNumber \override #'molecule-callback = + #(make-molecule-boxer 0.1 0.25 0.25 Text_item::brew_molecule) + \property Score.BarNumber \override #'font-relative-size = #0 + + \repeat unfold 16 c1 \bar "|." } - > } +@end lilypond + +See also @seeinternals{BarNumber}. + +@refbugs + +Barnumbers can collide with the StaffGroup, if there is one at the +top. To solve this, You have to twiddle with the +@internalsref{padding} property of @internalsref{BarNumber} if your +score starts with a @internalsref{StaffGroup}. + +@node Instrument names +@subsection Instrument names + +In scores, the instrument name is printed before the staff. This can +be done by setting @code{Staff.instrument} and +@code{Staff.instr}. This will print a string before the start of the +staff. For the first start, @code{instrument} is used, for the next +ones @code{instr} is used. + +@lilypond[verbatim,singleline] + \property Staff.instrument = "ploink " { c''4 } +@end lilypond + +You can also use markup texts to construct more complicated instrument +names: + + +@lilypond[verbatim,singleline] +#(define text-flat + '((font-relative-size . -2 ) (music "accidentals--1"))) + +\score { \notes { + \property Staff.instrument = #`((kern . 0.5) (lines + "2 Clarinetti" (columns " (B" ,text-flat ")"))) + c'' 4 } +} +@end lilypond + + +@refbugs + +When you put a name on a grand staff or piano staff the width of the +brace is not taken into account. You must add extra spaces to the end of +the name to avoid a collision. + +@node Transpose +@subsection Transpose +@cindex Transpose +@cindex transposition of pitches +@cindex @code{\transpose} + +A music expression can be transposed with @code{\transpose}. The syntax +is +@example + \transpose @var{from} @var{to} @var{musicexpr} +@end example + +This means that @var{musicexpr} is transposed to by the interval +between @var{from} is @var{to}. + +@code{\transpose} distinguishes between enharmonic pitches: both +@code{\transpose c cis} or @code{\transpose c des} will transpose up +half a tone. The first version will print sharps and the second +version will print flats. + +@lilypond[singleline, verbatim] +mus =\notes { \key d \major cis d fis g } +\score { \notes \context Staff { + \clef "F" \mus + \clef "G" + \transpose c g' \mus + \transpose c f' \mus +}} +@end lilypond + +If you want to use both @code{\transpose} and @code{\relative}, then +you must use @code{\transpose} first. @code{\relative} will have no +effect music that appears inside a @code{\transpose}. + +@c . {Multi measure rests} +@node Multi measure rests +@subsection Multi measure rests +@cindex Multi measure rests + +@cindex @code{R} + +Multi measure rests are entered using `@code{R}'. It is specifically +meant for full bar rests and for entering parts: the rest can expand to +fill a score with rests, or it can be printed as a single multimeasure +rest This expansion is controlled by the property +@code{Score.skipBars}. If this is set to true, Lily will not expand +empty measures, and the appropriate number is added automatically. + +@lilypond[fragment,verbatim] + \time 4/4 r1 | R1 | R1*2 + \property Score.skipBars = ##t R1*17 R1*4 +@end lilypond + +The @code{1} in @code{R1} is similar to the duration notation used for +notes. Hence, for time signatures other than 4/4, you must enter other +durations. This can be done with augmentation dots, or with +fractions: + +@lilypond[fragment,verbatim] + \property Score.skipBars = ##t + \time 3/4 + R2. | R2.*2 + \time 13/8 + R1*13/8 + R1*13/8*12 +@end lilypond +Notice that a @code{R} spanning a single measure is printed as a whole +rest centered in the measure, regardless of the time signature. + +[ add note about breves.] + + +@cindex whole rests for a full measure + +The object for this object is @internalsref{MultiMeasureRest}, and +@internalsref{MultiMeasureRestNumber}. + +@refbugs + +Currently, there is no way to automatically condense multiple rests +into a single multimeasure rest. Multi measure rests do not take part +in rest collisions. + +Multi-measure rests do not accept @var{note}-@code{text} syntax for +putting texts and scripts on the rest. This has to be done by setting +@code{#'text} in @internalsref{MultiMeasureRestNumber}. An identifier is +provided for a fermata: + +@cindex text on multi-measure rest +@cindex script on multi-measure rest +@cindex fermata on multi-measure rest + +@lilypond[verbatim,fragment] + \time 3/4 + \setMmRestFermata R2. +@end lilypond + + +@cindex condensing rests + +@node Automatic part combining +@subsection Automatic part combining +@cindex automatic part combining +@cindex part combiner + + +Automatic part combining is used to merge two parts of music onto a +staff in an intelligent way. It is aimed primarily 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 can be identified +and marked. + +The syntax for part combining is + +@example + \partcombine @var{context} @var{musicexpr1} @var{musicexpr2} +@end example +where the pieces of music @var{musicexpr1} and @var{musicexpr2} will be +combined into one context of type @var{context}. The music expressions +must be interpreted by contexts whose names should start with @code{one} +and @code{two}. + +The most useful function of the part combiner is to combine parts into +one voice, as common for wind parts in orchestral scores: + +@lilypond[verbatim,singleline,fragment] + \context Staff < + \context Voice=one \partcombine Voice + \context Thread=one \relative c'' { + g a () b r + } + \context Thread=two \relative c'' { + g r4 r f + } + > +@end lilypond + +Notice that 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 +`solo', while the second (called @code{two}) always gets down stems and +`Solo II'. + +If you just want the merging parts, and not the textual markings, you +may set the property @var{soloADue} to false. + +@lilypond[verbatim,singleline,fragment] + \context Staff < + \property Staff.soloADue = ##f + \context Voice=one \partcombine Voice + \context Thread=one \relative c'' { + b4 a c g + } + \context Thread=two \relative c'' { + d,2 a4 g' + } + > +@end lilypond + +There are a number of other properties that you can use to tweak the +behavior of part combining, refer to the automatically generated +documentation of @reng{Thread_devnull_engraver} and +@reng{Voice_devnull_engraver}. Look at the documentation of the +responsible engravers, @code{Thread_devnull_engraver}, +@code{Voice_devnull_engraver} and @code{A2_engraver}. + +@refbugs + +In @code{soloADue} mode, when the two voices play the same notes on and +off, the part combiner may typeset @code{a2} more than once in a +measure. + +@lilypond[fragment,singleline] + \context Staff < + \context Voice=one \partcombine Voice + \context Thread=one \relative c'' { + c b c b c a c a + } + \context Thread=two \relative c'' { + b b b b f a f a + } + > +@end lilypond + +@cindex @code{Thread_devnull_engraver} +@cindex @code{Voice_engraver} +@cindex @code{A2_engraver} -@end lilypond -@end quotation +@node Hara kiri staves +@subsection Hara kiri staves - -If you want to have hyphens centered between syllables (rather than -attached to the end of the first syllable) you can use the special -`@code{-}@code{-}' lyric as a separate word between syllables. This -will result in a hyphen which length varies depending on the space -between syllables, and which will be centered between the syllables. -For example: +In orchestral scores, staff lines that only have rests are usually removed. +This saves some space. LilyPond also supports this through the hara +kiri@footnote{Hara kiri, also called Seppuku, is the ritual suicide of +the Japanese Samourai warriors.} staff. This staff commits suicide when +it finds itself to be empty after the line-breaking process. It will +not disappear when it contains normal rests, you must use multi measure +rests. -@quotation +The hara kiri staff is specialized version of the @internalsref{Staff} +context. It is available as the context identifier +@code{\HaraKiriStaffContext}. Observe how the second staff in this +example disappears in the second line. @lilypond[verbatim] -\score { - < - \notes \transpose c'' { - c d e c | c d e c | - e f g2 | e4 f g2 \bar "|."; - } - \context Lyrics \lyrics { - Va4 -- der Ja -- cob | Va -- der Ja -- cob | - Slaapt gij nog?2 | Slaapt4 gij nog?2 - } +\score { + \notes \relative c' < + \context Staff = SA { e4 f g a \break c1 } + \context Staff = SB { c4 d e f \break R1 } > + \paper { + linewidth = 6.\cm + \translator { \HaraKiriStaffContext } + } } - @end lilypond -@end quotation +@node Sound output for transposing instruments +@subsection Sound output for transposing instruments -@node Notation Contexts, , , Reference Manual -@section Notation Contexts +When you want to make a MIDI file from a score containing transposed +and untransposed instruments, you have to instruct LilyPond the pitch +offset (in semitones) for the transposed instruments. This is done +using the @code{transposing} property. It does not affect printed +output. -@cindex notation contexts +@cindex @code{transposing} -Notation contexts are objects that only exist during a run of -LilyPond. During the interpretation phase of LilyPond, the Music -expression contained in a @code{\score} block is interpreted in time -order. This is the order in which humans read, play, and write -music. +@example + \property Staff.instrument = #"Cl. in B-flat" + \property Staff.transposing = #-2 +@end example -A context is an object that holds the reading state of the -expression; it contains information like -@itemize @bullet - @item What notes are playing at this point? - @item What symbols will be printed at this point? - @item In what style will they printed? - @item What is the current key signature, time signature, point within - the measure, etc.? -@end itemize -Contexts are grouped hierarchically: A @code{Voice} context is -contained in a @code{Staff} context (because a staff can contain -multiple voices at any point), a @code{Staff} context is contained in -a @code{Score}, @code{StaffGroup}, or @code{ChoirStaff} context (because -these can all contain multiple staffs). +@c . {Custodes} +@node Ancient notation +@section Ancient notation -Contexts associated with sheet music output are called @emph{notation -contexts}, those for sound output are called playing contexts. +@cindex Vaticana, Editio +@cindex Medicaea, Editio +@cindex hufnagel +@cindex Petrucci +@cindex mensural -Contexts are created either manually or automatically. Initially, -the top level music expression is interpreted by the top level -context (the @code{Score} context). When a atomic music expression -(i.e. a note, a rest, @code{\bar}, or @code{\time} commands), a nested -set of contexts is created that can process these atomic expressions, -as in this example: +@menu +* Ancient note heads:: +* Ancient clefs :: +* Custodes:: +* Ligatures:: +* Figured bass:: +@end menu -@example - @example -\score @{ \notes < c4 > @} -@end example +@node Ancient note heads +@subsection Ancient note heads -@end example +To get a longa note head, you have to use mensural note heads. This +is accomplished by setting the @code{style} property of the +NoteHead object to @code{mensural}. There is also a note head style +@code{baroque} which gives mensural note heads for @code{\longa} and +@code{\breve} but standard note heads for shorter notes. -The sequential music, `@code{@{ c4 @}}' is interpreted by @code{Score} -context. When the note `@code{c4}' itself is interpreted, a set of -contexts is needed that will accept notes. The default for this is a -@code{Voice} context, contained in a @code{Staff} context. Creation of -these contexts results in the staff being printed. +@lilypond[fragment,singleline,verbatim] + \property Voice.NoteHead \set #'style = #'mensural + a'\longa +@end lilypond +@node Ancient clefs +@subsection Ancient clefs -@cindex context +LilyPond supports a variety of clefs, many of them ancient. -You can also create contexts manually, and you probably have to do so -if you want to typeset complicated multiple part material. If a -`@code{\context} @var{name} @var{musicexpr}' expression is encountered -during the interpretation phase, the @var{musicexpr} argument will be -interpreted with a context of type @var{name}. If you specify a name, -the specific context with that name is searched. +For modern clefs, see section @ref{Clef}. For the percussion clef, see +section @ref{Percussion staves}. For the @code{TAB} clef, see section +@ref{Tablatures}. -If a context of the specified type and name can not be found, a new -one is created. For example, +The following table shows all ancient clefs that are supported via the +@code{\clef} command. Some of the clefs use the same glyph, but differ +only with respect to the line they are printed on. In such cases, a +trailing number in the name is used to enumerate these clefs. Still, +you can manually force a clef glyph to be typeset on an arbitrary line, +as described in section @ref{Clef}. The note printed to the right side +of each clef denotes the @code{c'} with respect to the clef. -@quotation +@table @code -@lilypond[verbatim] -\score { - \notes \relative c'' { - c4 f - } -} +@c --- This should go somewhere else: --- +@c @item modern style G clef (glyph: @code{clefs-G}) +@c +@c Supported clefs: +@c @code{treble}, @code{violin}, @code{G}, @code{G2}, @code{french} +@c +@c @lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "G" c'} +@c +@c @item modern style F clef (glyph: @code{clefs-F}) +@c +@c Supported clefs: +@c @code{varbaritone}, @code{bass}, @code{F}, @code{subbass} +@c +@c @lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "F" c'} +@c +@c @item modern style C clef (glyph: @code{clefs-C}) +@c +@c Supported clefs: +@c @code{soprano}, @code{mezzosoprano}, @code{alto}, @code{C}, +@c @code{tenor}, @code{baritone} +@c +@c @lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "C" c'} -@end lilypond -@end quotation +@item modern style mensural C clef (glyph: @code{clefs-neo_mensural_c'}) -In this example, the @code{c} and @code{d} are printed on the -default staff. For the @code{e}, a context Staff called -`@code{another}' is specified; since that does not exist, a new -context is created. Within @code{another}, a (default) Voice context -is created for the @code{e4}. When all music referring to a -context is finished, the context is ended as well. So after the -third quarter, @code{another} is removed. +Supported clefs: +@code{neo_mensural_c1}, @code{neo_mensural_c2}, +@code{neo_mensural_c3}, @code{neo_mensural_c4} -Almost all music expressions inherit their interpretation context -from their parent. In other words, suppose that the syntax for a -music expression is +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "neo_mensural_c2" c'} -@example +@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c1}) - \keyword @var{musicexpr1} @var{musicexpr2} @dots{} -@end example +Supported clefs: +@code{petrucci_c1} +for 1st staffline -When the interpretation of this music expression starts, the context -for @var{musicexpr1}, @var{musicexpr2}, etc. is that of the total -expression. +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c1" c'} -Lastly, you may wonder, why this: +@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c2}) -@quotation +Supported clefs: +@code{petrucci_c2} +for 2nd staffline -@example -\score @{ - \notes \relative c'' @{ - c4 d4 e4 - @} -@} -@end example +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c2" c'} -@end quotation +@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c3}) -doesn't result in this: +Supported clefs: +@code{petrucci_c3} +for 3rd staffline -@lilypond[] +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c3" c'} - \score { - \notes \relative c'' { - - } - } +@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c4}) -@end lilypond +Supported clefs: +@code{petrucci_c4} +for 4th staffline -For the @code{c4}, a default @code{Staff} (with a contained -@code{Voice}) context is created. After the @code{c4} ends, no -music refers to this default staff, so it would be ended, with the -result shown. To prevent this inconvenient behavior, the context to -which the sequential music refers is adjusted during the -interpretation. So after the @code{c4} ends, the context of the -sequential music is also the default @code{Voice} context. -The @code{d4} gets interpreted in the same context -as @code{c4}. +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c4" c'} +@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c5}) +Supported clefs: +@code{petrucci_c5} +for 5th staffline -These are the contexts supplied with the package. They are defined -in the initialization file @file{ly/engraver.ly}. +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c5" c'} -@table @samp -@end table +@item petrucci style mensural F clef (glyph: @code{clefs-petrucci_f}) +Supported clefs: +@code{petrucci_f} +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_f" c'} -Properties that are set in one context are inherited by all of the -contained contexts. This means that a property valid for the -@code{Voice} context can be set in the @code{Score} context (for -example) and thus take effect in all @code{Voice} contexts. +@item petrucci style mensural G clef (glyph: @code{clefs-petrucci_g}) -Properties can be preset within the @code{\translator} block -corresponding to the appropriate context. In this case, the syntax -is +Supported clefs: +@code{petrucci_g} -@example +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_g" c'} - @var{propname} @code{=} @var{value} -@end example +@item historic style mensural C clef (glyph: @code{clefs-mensural_c'}) -This assignment happens before interpretation starts, so a -@code{\property} expression will override any predefined settings. +Supported clefs: +@code{mensural_c1}, @code{mensural_c2}, @code{mensural_c3}, +@code{mensural_c4} -The @code{\property} expression will create any property you specify. -There is no guarantee that a property will be used. So if you spell -a property name wrong, there will be no error message. +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "mensural_c2" c'} -The property settings are used during the interpretation phase. They -are read by the LilyPond modules where interpretation contexts are -built of. These modules are called @emph{translators}. Translators for -notation are called @emph{engravers}, and translators for sound are -called @emph{performers}. +@item historic style mensural F clef (glyph: @code{clefs-mensural_f}) -The precise result of a property is determined by the implementation -of the translator that reads them. Therefore, the result of a -property can vary, since it is implementation and configuration -dependent. +Supported clefs: +@code{mensural_f} -In order to fully find out what properties are used, you must -currently search the source code for calls to @code{get_property}. -The rest of the section is devoted to an (incomplete) overview of -available properties. +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "mensural_f" c'} -@mbinclude properties.itely +@item historic style mensural G clef (glyph: @code{clefs-mensural_g}) -@node Notation output definitions, , , Reference Manual -@section Notation output definitions +Supported clefs: +@code{mensural_g} -@cindex output +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "mensural_g" c'} -@cindex notation output +@item Editio Vaticana style do clef (glyph: @code{clefs-vaticana_do}) -@cindex output definition +Supported clefs: +@code{vaticana_do1}, @code{vaticana_do2}, @code{vaticana_do3} -@node paper, , , Reference Manual +@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "vaticana_do2" c'} -The most important output definition is the @code{\paper} block, for -music notation. The syntax is +@item Editio Vaticana style fa clef (glyph: @code{clefs-vaticana_fa}) -@example +Supported clefs: +@code{vaticana_fa1}, @code{vaticana_fa2} - @code{\paper @{} [@var{paperidentifier}] @var{items} @code{@}} -@end example +@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "vaticana_fa2" c'} -where each of the items is one of +@item Editio Medicaea style do clef (glyph: @code{clefs-medicaea_do}) -@itemize @bullet - @item An assignment. The assignment must be terminated by a - semicolon. +Supported clefs: +@code{medicaea_do1}, @code{medicaea_do2}, @code{medicaea_do3} - @item A context definition. See section @ref{contextdefs} for - more information on context definitions. +@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "medicaea_do2" c'} - @item - FIXME now in SCM +@item Editio Medicaea style fa clef (glyph: @code{clefs-medicaea_fa}) - A margin shape declaration. The syntax is +Supported clefs: +@code{medicaea_fa1}, @code{medicaea_fa2} - @example +@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "medicaea_fa2" c'} - \shape @var{indent1}@code{,} @var{width1}@code{,} - @var{indent2}@code{,} @var{width2} @dots{} @code{;} - @end example +@item historic style hufnagel do clef (glyph: @code{clefs-hufnagel_do}) - @keyindex{shape} +Supported clefs: +@code{hufnagel_do1}, @code{hufnagel_do2}, @code{hufnagel_do3} - Each pair of @var{indent} and @var{width} values is a dimension - specifying how far to indent and how wide to make the line. - The indentation and width of successive lines are specified by - the successive pairs of dimensions. The last pair of - dimensions will define the characeristics of all lines beyond - those explicitly specified. +@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "hufnagel_do2" c'} - @item \stylesheet declaration. Its syntax is +@item historic style hufnagel fa clef (glyph: @code{clefs-hufnagel_fa}) - @example - \stylesheet @var{scm} - @end example +Supported clefs: +@code{hufnagel_fa1}, @code{hufnagel_fa2} +@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "hufnagel_fa2" c'} - See font.scm for details of @var{scm} -@end itemize +@item historic style hufnagel combined do/fa clef (glyph: @code{clefs-hufnagel_do_fa}) +Supported clefs: +@code{hufnagel_do_fa} +@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "hufnagel_do_fa" c'} -@cindex changing font size and paper size +@c --- This should go somewhere else: --- +@c @item modern style percussion clef (glyph: @code{clefs-percussion}) +@c +@c Supported clefs: +@c @code{percussion} +@c +@c @lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "percussion" c'} +@c +@c @item modern style tab clef (glyph: @code{clefs-tab}) +@c +@c Supported clefs: +@c @code{tab} +@c +@c @lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #6 \property Staff.TimeSignature \set #'transparent = ##t \clef "tab" c'} -The Feta font provides musical symbols at six different sizes. These -fonts are 11 point, 13 point, 16 point, 20 point, -23 point, and 26 point. The point size of a font is the -height of the five lines in a staff when displayed in the font. +@end table -Definitions for these sizes are the files @file{paperSZ.ly}, where -@code{SZ} is one of 11, 13, 16, 20, 23 and 26. If you include -any of these files, the identifiers @code{paper_eleven}, -@code{paper_thirteen}, @code{paper_sixteen}, @code{paper_twenty}, -@code{paper_twentythree}, and @code{paper_twentysix} are defined -respectively. The default @code{\paper} block is also set. +@emph{Modern style} means ``as is typeset in current editions of +transcribed mensural music''. -To change the paper size, you must first set the -@code{papersize}@indexcode{papersize} variable at top level. Set it to the strings -@code{a4}, @code{letter}, or @code{legal}. After this specification, -you must set the font as described above. If you want the default -font, then use the 20 point font. The new paper size will not -take effect if the font is not loaded and selected afterwards. Paper -size selection works by loading a file named after the paper size you -select. +@emph{Petrucci style} means ``inspired by printings published by the +famous engraver Petrucci (1466-1539)''. + +@emph{Historic style} means ``as was typeset or written in contemporary +historic editions (other than those of Petrucci)''. +@emph{Editio XXX style} means ``as is/was printed in Editio XXX''. +Petrucci used C clefs with differently balanced left-side vertical +beams, depending on which staffline it was printed. -@cindex paper variables +@node Custodes +@subsection Custodes -@node Paper variables, , , Reference Manual +@cindex Custos +@cindex Custodes -There is a large number of paper variables that are used to control -details of the layout. These variables control the defaults for the -entire score. Usually, they do not have to be changed; they are by -default set to values that depend on the font size in use. The -values are used by the graphic objects while formatting the score; -they are therefore implementation dependent. Most variables are -accompanied by documentation in the initalization file -@file{params.ly} or @file{paperSZ.ly}, where @code{SZ} is the staff -height in points. +A @emph{custos} (plural: @emph{custodes}; latin word for `guard') is a +staff context symbol that appears at the end of a staff line. It +anticipates the pitch of the first note(s) of the following line and +thus helps the player or singer to manage line breaks during +performance, thus enhancing readability of a score. -Nevertheless, here are some variables you may want to use or change: +@lilypond[verbatim,noquote] +\score { + \notes { c'1 \break + \property Staff.Custos \set #'style = #'mensural + d' } + \paper { + \translator { + \StaffContext + \consists Custos_engraver + } + } +} +@end lilypond -@table @samp - @item @code{indent}@indexcode{indent} - The indentation of the first line of music. +Custodes were frequently used in music notation until the 17th century. +There were different appearances for different notation styles. +Nowadays, they have survived only in special forms of musical notation +such as via the @emph{editio vaticana} dating back to the beginning of +the 20th century. - @item @code{staffspace}@indexcode{staffspace} - The distance between two staff lines, calculated from the center - of the lines. You should use either this or @code{rulethickness} - as a unit for distances you modify. - - @item @code{linewidth}@indexcode{linewidth} - Sets the width of the lines. If set to -1.0, a single - unjustified line is produced. +For typesetting custodes, just put a @code{Custos_engraver} into the +@internalsref{Staff} context when declaring the @code{\paper} block. In this +block, you can also globally control the appearance of the custos symbol +by setting the custos @code{style} property. Currently supported styles +are @code{vaticana}, @code{medicaea}, @code{hufnagel} and +@code{mensural}. - @item @code{textheight}@indexcode{textheight} - Sets the total height of the music on each page. Only used by - ly2dvi. +@example +\paper @{ + \translator @{ + \StaffContext + \consists Custos_engraver + Custos \override #'style = #'mensural + @} +@} +@end example - @item @code{interscoreline}@indexcode{interscoreline} - Sets the spacing between the score lines. Defaults to 16 pt. +The property can also be set locally, for example in a @code{\notes} +block: - @item @code{interscorelinefill}@indexcode{interscorelinefill} - If set to a positive number, the distance between the score - lines will stretch in order to fill the full page. In that - case @code{interscoreline} specifies the minimum spacing. - Defaults to 0. +@example +\notes @{ + \property Staff.Custos \override #'style = #'vaticana + c'1 d' e' d' \break c' d' e' d' +@} +@end example - @item @code{stafflinethickness}@indexcode{stafflinethickness} - Determines the thickness of staff and bar lines. -@end table +@node Ligatures +@subsection Ligatures + +@cindex Ligatures + +@c TODO: Should double check if I recalled things correctly when I wrote +@c down the following paragraph by heart. +In musical terminology, a ligature is a coherent graphical symbol that +represents at least two different notes. Ligatures originally appeared +in the manuscripts of Gregorian chant notation roughly since the 9th +century as an allusion to the accent symbols of greek lyric poetry to +denote ascending or descending sequences of notes. Both, the shape and +the exact meaning of ligatures changed tremendously during the following +centuries: In early notation, ligatures where used for monophonic tunes +(Gregorian chant) and very soon denoted also the way of performance in +the sense of articulation. With upcoming multiphony, the need for a +metric system arised, since multiple voices of a piece have to be +synchronized some way. New notation systems were invented, that used +the manifold shapes of ligatures to now denote rhythmical patterns +(e.g. black mensural notation, mannered notation, ars nova). With the +invention of the metric system of the white mensural notation, the need +for ligatures to denote such patterns disappeared. Nevertheless, +ligatures were still in use in the mensural system for a couple of +decades until they finally disappeared during the late 16th / early 17th +century. Still, ligatures have survived in contemporary editions of +Gregorian chant such as the Editio Vaticana from 1905/08. + +Syntactically, ligatures are simply enclosed by @code{\[} and @code{\]}. +Some ligature styles (such as Editio Vaticana) may need additional input +syntax specific for this particular type of ligature. By default, the +@internalsref{LigatureBracket} engraver just marks the start and end of +a ligature by small square angles: + +@lilypond[singleline,verbatim] +\score { + \notes \transpose c c' { + \[ g c a f d' \] + a g f + \[ e f a g \] + } +} +@end lilypond +To select a specific style of ligatures, a proper ligature engraver has +to be added to the @internalsref{Voice} context, as explained in the +following subsections. Currently, Lilypond only supports white mensural +ligatures with certain limitations. Support for Editio Vaticana will be +added in the future. -@node contextdefs, , , Reference Manual +@menu +* White mensural ligatures:: +@end menu -@cindex context definition +@node White mensural ligatures +@subsubsection White mensural ligatures + +@cindex Mensural ligatures +@cindex White mensural ligatures + +Lilypond has limited support for white mensural ligatures. The +implementation is still experimental; it currently may output strange +warnings or even crash in some cases or produce weird results on more +complex ligatures. To engrave white mensural ligatures, in the paper +block the @internalsref{MensuralLigature} engraver has to be put into +the @internalsref{Voice} context (and you probably want to remove the +@internalsref{LigatureBracket} engraver). There is no additional input +language to describe the shape of a white mensural ligature. The shape +is rather determined solely from the pitch and duration of the enclosed +notes. While this approach may take a new user quite a while to get +accustomed, it has a great advantage: this way, lily has full musical +information about the ligature. This is not only required for correct +MIDI output, but also allows for automatic transcription of the +ligatures. + +Example: + +@lilypond[singleline,verbatim] +\score { + \notes \transpose c c' { + \property Score.timing = ##f + \property Score.defaultBarType = "empty" + \property Voice.NoteHead \set #'style = #'neo_mensural + \property Staff.TimeSignature \set #'style = #'neo_mensural + \clef "petrucci_g" + \[ g\longa c\breve a\breve f\breve d'\longa \] + s4 + \[ e1 f1 a\breve g\longa \] + } + \paper { + \translator { + \VoiceContext + \remove Ligature_bracket_engraver + \consists Mensural_ligature_engraver + } + } +} +@end lilypond -A notation contexts is defined by the following information +Without replacing @code{Ligature_bracket_engraver} with +@code{Mensural_ligature_engraver}, the same music transcribes to the +following: -@enumerate i - @item A name. +@lilypond[singleline,verbatim] +\score { + \notes \transpose c c' { + \property Score.timing = ##f + \property Score.defaultBarType = "empty" + \property Voice.NoteHead \set #'style = #'neo_mensural + \property Staff.TimeSignature \set #'style = #'neo_mensural + \clef "petrucci_g" + \[ g\longa c\breve a\breve f\breve d'\longa \] + s4 + \[ e1 f1 a\breve g\longa \] + } +} +@end lilypond - @item The LilyPond modules that do the actual conversion of music to - notation. Each module is a so-called - @emph{engraver} -@cindex engraver -. +@node Figured bass +@subsection Figured bass - @item How these modules should cooperate, i.e. which ``cooperation - module'' should be used. This cooperation module is a special - type of engraver. +@cindex Basso continuo - @item What other contexts the context can contain, +LilyPond has limited support for figured bass: - @item What properties are defined. -@end enumerate +@lilypond[verbatim,fragment] +< + \context FiguredBass + \figures { + <_! 3+ 5- >4 + < [4 6] 8 > + } + \context Voice { c4 g8 } +> +@end lilypond -A context definition has this syntax: +The support for figured bass consists of two parts: there is an input +mode, introduced by @code{\figures}, where you can enter bass figures +as numbers, and there is a context called @internalsref{FiguredBass} +that takes care of making @internalsref{BassFigure} objects. +In figures input mode, a group of bass figures is delimited by +@code{<} and @code{>}. The duration is entered after the @code{>}. @example - - \translator @code{@{} - @var{translatorinit} @var{translatormodifierlist} - @code{@}} + <4 6> @end example +@lilypond[fragment] +\context FiguredBass +\figures { <4 6> } +@end lilypond -@var{translatorinit} can be an identifier or of the form +Accidentals are added to the numbers if you alterate them by +appending @code{-}, @code{!} and @code{+}. @example - - \type @var{typename} @code{;} + <4- 6+ 7!> @end example +@lilypond[fragment] + \context FiguredBass +\figures { <4- 6+ 7!> } +@end lilypond -@var{typename} is one of +Spaces or dashes may be inserted by using @code{_}. Brackets are +introduced with @code{[} and @code{]}. -@table @samp - @item @code{Engraver_group_engraver}@indexcode{Engraver_group_engraver} - The standard cooperation engraver. +@example + < [4 6] 8 [_ 12]> +@end example +@lilypond[fragment] + \context FiguredBass +\figures { < [4 6] 8 [_ 12]> } +@end lilypond - @item @code{Score_engraver}@indexcode{Score_engraver} - This is cooperation module that should be in the top level context. +Although the support for figured bass may superficially resemble chord +support, it works much simpler: in figured bass simply stores the +numbers, and then prints the numbers you entered. There is no +conversion to pitches, and no realizations of the bass are played in +the MIDI file. - @item @code{Grace_engraver_group}@indexcode{Grace_engraver_group} - This is a special cooperation module (resembling - @code{Score_engraver}) that is used to created an embedded - `miniscore'. -@end table -@var{translatormodifierlist} is a list of items where each item is -one of +@c . {Tuning output} +@node Tuning output +@section Tuning output -@itemize @bullet - @item @code{\consists} @var{engravername} @code{;} - Add @var{engravername} to the list of modules in this context. - The order of engravers added with @code{\consists} is - significant. - - @item @code{\consistsend} @var{engravername} @code{;} - Analogous to @code{\consists}, but makes sure that - @var{engravername} is always added to the end of the list of - engravers. - - Some engraver types need to be at the end of the list; this - insures they are put there, and stay there, if a user adds or - removes engravers. This command is usually not needed for - end-users. - - @item @code{\accepts} @var{contextname} @code{;} - Add @var{contextname} to the list of context this context can - contain. The first listed context the context to create by - default. - - @item @code{\remove} @var{engravername} @code{;} - Remove a previously added (with @code{\consists}) engraver. - - @item @code{\name} @var{contextname} @code{;} - This sets name of the context, e.g. @code{Staff}, @code{Voice}. If - the name is not specified, the translator won't do anything. +LilyPond tries to take as much formatting as possible out of your +hands. Nevertheless, there are situations where it needs some help, or +where you want to override its decisions. In this section we discuss +ways to do just that. - @item @var{propname} @code{=} @var{value} @code{;} - A property assignment. It is allowed to use reals for - @var{value}. -@end itemize +Formatting is internally done by manipulating so called objects (graphic +objects). Each object carries with it a set of properties (object +properties) specific to that object. For example, a stem object has +properties that specify its direction, length and thickness. -In the @code{\paper} block, it is also possible to define translator -identifiers. Like other block identifiers, the identifier can only -be used as the very first item of a translator. In order to define -such an identifier outside of @code{\score}, you must do +The most direct way of tuning the output is by altering the values of +these properties. There are two ways of doing that: first, you can +temporarily change the definition of a certain type of object, thus +affecting a whole set of objects. Second, you can select one specific +object, and set a object property in that object. -@quotation +@menu +* Tuning groups of objects :: +* Tuning per object :: +* Font selection:: +* Text markup:: +@end menu -@example -\paper @{ - foo = \translator @{ @dots{} @} -@} -\score @{ - \notes @{ - @dots{} - @} - \paper @{ - \translator @{ \foo @dots{} @} - @} -@} -@end example +@node Tuning groups of objects +@subsection Tuning groups of objects -@end quotation +@cindex object description + +A object definition is a Scheme association list, that is stored in a +context property. By assigning to that property (using plain +@code{\property}), you can change the resulting objects. +@lilypond[verbatim, fragment] +c'4 \property Voice.Stem = #'() +@end lilypond -@cindex paper types, engravers, and pre-defined translators +The @code{\property} assignment effectively empties the definition of +the Stem object. One of the effects is that the recipe of how it should be +printed is erased, with the effect of rendering it invisible. The above +assignment is available as a standard identifier, for the case that you +find this useful: -Some pre-defined identifiers can simplify modification of -translators. The pre-defined identifiers are: +@example + \property Voice.Stem = \turnOff +@end example -@table @samp - @item @code{StaffContext}@indexcode{StaffContext} - Default Staff context. +@cindex \override +@cindex \revert +@cindex \set - @item @code{RhythmicStaffContext}@indexcode{RhythmicStaffContext} - Default RhythmicStaff context. +This mechanism is fairly crude, since you can only set, but not modify, +the definition of a object. For this reason, there is a more advanced +mechanism. - @item @code{VoiceContext}@indexcode{VoiceContext} - Default Voice context. +The definition of a object is actually a list of default object +properties. For example, the definition of the Stem object (available in +@file{scm/grob-description.scm}), defines the following values for +@internalsref{Stem} - @item @code{ScoreContext}@indexcode{ScoreContext} - Default Score context. +@example + (thickness . 0.8) + (beamed-lengths . (0.0 2.5 2.0 1.5)) + (Y-extent-callback . ,Stem::height) + @var{...} +@end example - @item @code{ScoreWithNumbers}@indexcode{ScoreWithNumbers} - Score context with numbering at the Score level. +You can add a property on top of the existing definition, or remove a +property, thus overriding the system defaults: +@lilypond[verbatim] +c'4 \property Voice.Stem \override #'thickness = #4.0 +c'4 \property Voice.Stem \revert #'thickness +c'4 +@end lilypond +You should balance @code{\override} and @code{\revert}. If that's too +much work, you can use the @code{\set} shorthand. It performs a revert +followed by an override. The following example gives exactly the same +result as the previous one. +@lilypond[verbatim] +c'4 \property Voice.Stem \set #'thickness = #4.0 +c'4 \property Voice.Stem \set #'thickness = #0.8 +c'4 +@end lilypond +If you use @code{\set}, you must explicitly restore the default. - @item @code{BarNumberingStaffContext}@indexcode{BarNumberingStaffContext} - Staff context with numbering at the Staff level. - @item @code{HaraKiriStaffContext}@indexcode{HaraKiriStaffContext} - Staff context that does not print if it only contains rests. - Useful for orchestral scores.@footnote{Harakiri, also called - Seppuku, is the ritual suicide of the Samourai.} +Formally the syntax for these constructions is +@example +\property @var{context}.@var{grobname} \override @var{symbol} = @var{value} +\property @var{context}.@var{grobname} \set @var{symbol} = @var{value} +\property @var{context}.@var{grobname} \revert @var{symbol} +@end example +Here @var{symbol} is a Scheme expression of symbol type, @var{context} +and @var{grobname} are strings and @var{value} is a Scheme expression. - @item @code{OrchestralPartStaffContext}@indexcode{OrchestralPartStaffContext} - @item @code{OrchestralScoreContext}@indexcode{OrchestralScoreContext} -@end table +If you revert a setting which was not set in the first place, then it +has no effect. However, if the setting was set as a system default, it +may remove the default value, and this may give surprising results, +including crashes. In other words, @code{\override} and @code{\revert}, +must be carefully balanced. -Using these pre-defined values, you can remove or add items to the -translator: +These are examples of correct nesting of @code{\override}, @code{\set}, +@code{\revert}. -@quotation +A clumsy but correct form: +@example + \override \revert \override \revert \override \revert +@end example +Shorter version of the same: @example -\paper @{ - \translator @{ - \StaffContext - \remove Some_engraver; - \consists Different_engraver; - @} -@} -@end example + \override \set \set \revert +@end example -@end quotation +A short form, using only @code{\set}. This requires you to know the +default value: +@example + \set \set \set \set @var{to default value} +@end example + +If there is no default (i.e. by default, the object property is unset), +then you can use +@example + \set \set \set \revert +@end example - -@node Sound output, , , Reference Manual -@section Sound output +For the digirati, the object description is an Scheme association +list. Since a Scheme list is a singly linked list, we can treat it as a +stack, and @code{\override} and @code{\revert} are just push and pop +operations. This pushing and popping is also used for overriding +automatic beaming settings. +@refbugs +LilyPond will hang or crash if @var{value} contains cyclic references. +The backend is not very strict in type-checking object properties. If you +@code{\revert} properties that are expected to be set by default, +LilyPond may crash. -The MIDI block is analogous to the paper block, but it is simpler. -The @code{\midi} block can contain: -@cindex MIDI block -@itemize @bullet - @item a @code{\tempo} definition - @item context definitions -@end itemize -Assignments in the @code{\midi} block are not allowed. +@node Tuning per object +@subsection Tuning per object +@cindex \once +Tuning a single object is most often done with @code{\property}. The +form, +@example + \once \property @dots{} +@end example +@c +applies a setting only during one moment in the score: notice how the +original setting for stem thickness is restored automatically in the +following example +@c +@lilypond[verbatim, fragment, relative=1] + c4 + \once \property Voice.Stem \set #'thickness = #4 + c4 + c4 +@end lilypond -@cindex context definition +@cindex \once +@cindex \outputproperty -Context definitions follow precisely the same syntax as within the -\paper block. Translation modules for sound are called performers. -The contexts for MIDI output are defined in @file{ly/performer.ly}. +A second way of tuning objects is the more arcane @code{\outputproperty} +feature. The syntax is as follows: +@example +\outputproperty @var{predicate} @var{symbol} = @var{value} +@end example +Here @code{predicate} is a Scheme function taking a object argument, and +returning a boolean. This statement is processed by the +@code{Output_property_engraver}. It instructs the engraver to feed all +objects that it sees to @var{predicate}. Whenever the predicate returns +true, the object property @var{symbol} will be set to @var{value}. +This command is only single shot, in contrast to @code{\override} and +@code{\set}. +You will need to combine this statement with @code{\context} to select +the appropriate context to apply this to. -@cindex MIDI instrument names +In the following example, all note heads occurring at current staff +level, are shifted up and right by setting their @code{extra-offset} +property. -@node midilist, , , Reference Manual +@lilypond[fragment,verbatim,singleline] +\relative c'' { c4 + \context Staff \outputproperty + #(make-type-checker 'note-head-interface) + #'extra-offset = #'(0.5 . 0.75) + <>8 } +@end lilypond -The MIDI instrument name is set by the -@code{Staff.midiInstrument}@indexcode{Staff.midiInstrument} property or, -if that property is not set, the -@code{Staff.instrument}@indexcode{Staff.instrument} property. The -instrument name should be chosen from the following list. If the -selected string does not exactly match, then LilyPond uses the default -piano. +@cindex @code{extra-offset} -@c @quotation +In this example, the predicate checks the @code{text} object property, to +shift only the `m.d.' text, but not the fingering instruction "2". +@lilypond[verbatim,singleline] +#(define (make-text-checker text) + (lambda (grob) (equal? text (ly:get-grob-property grob 'text)))) -@example -"acoustic grand" "contrabass" "lead 7 (fifths)" -"bright acoustic" "tremolo strings" "lead 8 (bass+lead)" -"electric grand" "pizzicato strings" "pad 1 (new age)" -"honky-tonk" "orchestral strings" "pad 2 (warm)" -"electric piano 1" "timpani" "pad 3 (polysynth)" -"electric piano 2" "string ensemble 1" "pad 4 (choir)" -"harpsichord" "string ensemble 2" "pad 5 (bowed)" -"clav" "synthstrings 1" "pad 6 (metallic)" -"celesta" "synthstrings 2" "pad 7 (halo)" -"glockenspiel" "choir aahs" "pad 8 (sweep)" -"music box" "voice oohs" "fx 1 (rain)" -"vibraphone" "synth voice" "fx 2 (soundtrack)" -"marimba" "orchestra hit" "fx 3 (crystal)" -"xylophone" "trumpet" "fx 4 (atmosphere)" -"tubular bells" "trombone" "fx 5 (brightness)" -"dulcimer" "tuba" "fx 6 (goblins)" -"drawbar organ" "muted trumpet" "fx 7 (echoes)" -"percussive organ" "french horn" "fx 8 (sci-fi)" -"rock organ" "brass section" "sitar" -"church organ" "synthbrass 1" "banjo" -"reed organ" "synthbrass 2" "shamisen" -"accordion" "soprano sax" "koto" -"harmonica" "alto sax" "kalimba" -"concertina" "tenor sax" "bagpipe" -"acoustic guitar (nylon)" "baritone sax" "fiddle" -"acoustic guitar (steel)" "oboe" "shanai" -"electric guitar (jazz)" "english horn" "tinkle bell" -"electric guitar (clean)" "bassoon" "agogo" -"electric guitar (muted)" "clarinet" "steel drums" -"overdriven guitar" "piccolo" "woodblock" -"distorted guitar" "flute" "taiko drum" -"guitar harmonics" "recorder" "melodic tom" -"acoustic bass" "pan flute" "synth drum" -"electric bass (finger)" "blown bottle" "reverse cymbal" -"electric bass (pick)" "skakuhachi" "guitar fret noise" -"fretless bass" "whistle" "breath noise" -"slap bass 1" "ocarina" "seashore" -"slap bass 2" "lead 1 (square)" "bird tweet" -"synth bass 1" "lead 2 (sawtooth)" "telephone ring" -"synth bass 2" "lead 3 (calliope)" "helicopter" -"violin" "lead 4 (chiff)" "applause" -"viola" "lead 5 (charang)" "gunshot" -"cello" "lead 6 (voice)" -@end example +\score { + \notes\relative c''' { + \property Voice.Stem \set #'direction = #1 + \outputproperty #(make-text-checker "m.d.") + #'extra-offset = #'(-3.5 . -4.5) + a^2^"m.d." + } +} +@end lilypond + +@refbugs -@c @end quotation +If possible, avoid this feature: the semantics are not very clean, and +the syntax and semantics are up for rewrite. -@node Pre-defined Identifiers, , , Reference Manual -@section Pre-defined Identifiers +@node Font selection +@subsection Font selection -@cindex pre-defined identifiers +The most common thing to change about the appearance of fonts is +their size. The font size of a @internalsref{Voice}, +@internalsref{Staff} or @internalsref{Thread} context, can be easily +changed by setting the @code{fontSize} property for that context: +@lilypond[fragment,relative=1] + c4 c4 \property Voice.fontSize = #-1 + f4 g4 +@end lilypond + This command will not change the size of variable symbols, such as +beams or slurs. You can use this command to get smaller symbol for +cue notes, but that involves some more subtleties. An elaborate +example of those is in @file{input/test/cue-notes.ly}. + +@cindex cue notes +@cindex font size +@cindex size +@cindex symbol size +@cindex glyph size + +The font used for printing a object can be selected by setting +@code{font-name}, e.g. +@example + \property Staff.TimeSignature + \set #'font-name = #"cmr17" +@end example +You may use any font which is available to @TeX{}, such as foreign +fonts or fonts that do not belong to the Computer Modern font family. +Font selection for the standard fonts, @TeX{}'s Computer Modern fonts, +can also be adjusted with a more fine-grained mechanism. By setting +the object properties described below, you can select a different font. +All three mechanisms work for every object that supports +@code{font-interface}. + +@table @code +@item font-family + A symbol indicating the general class of the typeface. Supported are +@code{roman} (Computer Modern), @code{braces} (for piano staff +braces), @code{music} (the standard music font), @code{ancient} (the +ancient notation font) @code{dynamic} (font for dynamic signs) and +@code{typewriter}. + +@item font-shape + A symbol indicating the shape of the font, there are typically several + font shapes available for each font family. Choices are @code{italic}, + @code{caps} and @code{upright} + +@item font-series +A symbol indicating the series of the font. There are typically several +font series for each font family and shape. Choices are @code{medium} +and @code{bold}. + +@item font-relative-size + A number indicating the size relative the standard size. For example, + with 20pt staff height, relative size -1 corresponds to 16pt staff + height, and relative size +1 corresponds to 23 pt staff height. + +@item font-design-size +A number indicating the design size of the font. + +This is a feature of the Computer Modern Font: each point size has a +slightly different design. Smaller design sizes are relatively wider, +which enhances readability. +@end table + +For any of these properties, the value @code{*} (i.e. the @emph{symbol}, +@code{*}, entered as @code{#'*}), acts as a wildcard. This can be used +to override default setting, which are always present. For example: +@example + \property Lyrics.LyricText \override #'font-series = #'bold + \property Lyrics.LyricText \override #'font-family = #'typewriter + \property Lyrics.LyricText \override #'font-shape = #'* +@end example +@cindex @code{font-style} -Various identifiers are defined in the initialization files to -provide shorthands for some settings. Most of them are in -@file{ly/declarations.ly}. +There are also pre-cooked font selection qualifiers. These are +selected through the object property @code{font-style}. For example, +the style @code{finger} selects family @code{number} and relative size +@code{-3}. Styles available include @code{volta}, @code{finger}, +@code{tuplet}, @code{timesig}, @code{mmrest}, @code{script}, +@code{large}, @code{Large} and @code{dynamic}. The style sheets and +tables for selecting fonts are located in @file{scm/font.scm}. Refer +to this file for more information. -@table @samp - @item @code{\break}@keyindex{break} - Force a line break in music by using a large argument for the - keyword @code{\penalty}. +@cindex magnification - @item @code{\nobreak}@keyindex{nobreak} - Prevent a line break in music by using a large negative argument - for the keyword @code{\penalty}. +The size of the font may be scaled with the object property +@code{font-magnification}. For example, @code{2.0} blows up all +letters by a factor 2 in both directions. - @item @code{\normalkey}@keyindex{normalkey} - Select normal key signatures where each octave has the same key - signature. This sets the @code{Staff.keyoctaviation} property. +@refbugs - @item @code{\shiftoff}@keyindex{shiftOff} - Disable horizontal shifting of note heads that collide. +Relative size is not linked to any real size. - @item @code{\shiftOn}@keyindex{shiftOn} - Enable note heads that collide with other note heads to be - shifted horiztonally. +There is no style sheet provided for other fonts besides the @TeX{} +family, and the style sheet can not be modified easiyl. - @item @code{\slurBoth}@keyindex{slurBoth} - Allow slurs to be above or below notes. +@cindex font selection +@cindex font magnification +@cindex @code{font-interface} - @item @code{\slurDown}@keyindex{slurDown} - Force slurs to be below notes. - @item @code{\slurUp}@keyindex{slurUp} - Force slurs to be above notes. +@node Text markup +@subsection Text markup +@cindex text markup +@cindex markup text - @item @code{\specialkey}@keyindex{specialkey} - Allow key signatures do differ in different octaves. This sets - the @code{Staff.keyoctaviation} property. +LilyPond has an internal mechanism to typeset texts. You can +form text markup expressions by composing scheme expressions +in the following way. - @item @code{\stemBoth}@keyindex{stemBoth} - Allow stems, beams, and slurs to point either upwards or - downwards, decided automatically by LilyPond. +@lilypond[verbatim, singleline] + \relative c' { + \fatText + a^#"upright" + b_#'(bold "bold") + c^#'(italic "italic") + d_#'((bold italic) "ff") + e^#'(dynamic "ff") + f_#'(lines "one" (bold "two")) + g^#'(music "noteheads-2" ((raise . 2.4) "flags-u3")) + } +@end lilypond - @item @code{\stemdown}@keyindex{stemdown} - Force stems, beams, and slurs to point down. +Normally, the Scheme markup text is stored in the @code{text} property +of a object. Formally, it is defined as follows: - @item @code{\stemUp}@keyindex{stemUp} - Force stems, beams and slurs to point up. +@example +text: string | (head? text+) +head: markup | (markup+) +markup-item: property | abbrev +property: (@var{key} . @var{value}) +abbrev: @code{columns lines roman music bold italic named super sub} + @code{overstrike text finger volta timesig mmrest mark script} + @code{large Large dynamic} +@end example +The markup is broken down and converted into a list of object properties, +which are prepended to the property list. The @var{key}-@var{value} +pair is a object property. A list of properties available is included in +the generated documentation for @internalsref{text-interface}. + +The following abbreviations are defined: +@table @code +@item columns + horizontal mode: set all text on one line (default) +@item lines + vertical mode: set every text on a new line +@item roman + select roman font +@item music + selects the Feta font (the standard font for music notation glyphs), +and uses named lookup + +@item bold + select bold series +@item italic + select italic shape +@item named + lookup by character name +@item text + plain text lookup (by character value) +@item super + superscript +@item sub + subscript +@item overstrike + the next text or character overstrikes this one +@item finger + select fingering number fontstyle +@item volta + select volta number fontstyle +@item timesig + select time signature number fontstyle +@item mmrest + select multi measure rest number fontstyle +@item mark + select mark number fontstyle +@item script + select scriptsize roman fontstyle +@item large + select large roman fontstyle +@item Large + select Large roman fontstyle +@item dynamic + select dynamics fontstyle @end table -@node Grobs, , , Reference Manual -@section Grobs -This section is about Grobs (short for Graphical Objects), which are -formatting objects used to create the final output. This material is -normally the domain of LilyPond gurus, but occasionally, a normal user -also has to deal with grobs. +@cindex metronome mark -The most simple interaction with Grobs are when you use -@code{\override}: +One practical application of complicated markup is to fake a metronome +marking: -@example - \property Voice.Stem \override #'direction = #1 -@end example +@lilypond[verbatim] +#(define note '(columns + (music "noteheads-2" ((kern . -0.1) "flags-stem")))) +#(define eight-note `(columns ,note ((kern . -0.1) + (music ((raise . 3.5) "flags-u3"))))) +#(define dotted-eight-note + `(columns ,eight-note (music "dots-dot"))) + +\score { + \notes\relative c'' { + a1^#`((columns (font-relative-size . -1)) + ,dotted-eight-note " = 64") + } + \paper { + linewidth = -1. + \translator{ + \ScoreContext + TextScript \override #'font-shape = #'upright + } + } +} +@end lilypond + +@refbugs -This piece of lily input causes all stem objects to be stem-up -henceforth. In effect, you are telling lilypond to extend the defintion -of the "Stem" grob with the setting @code{direction := 1}. Of course -there are many more ways of customizing Lily output, and since most of -them involve Grobs in some form, this section explains some details of -how grobs work. +The syntax and semantics of markup texts are not clean, and both +syntax and semantics are slated for a rewrite. + +LilyPond does not do kerning, and there generally spaces texts +slightly too wide. + + + +@node Global layout +@section Global layout + +The global layout determined by three factors: the page layout, the +line breaks and the spacing. These all influence each other: The +choice of spacing determines how densely each system of music is set, +where line breaks breaks are chosen, and thus ultimately how many +pages a piece of music takes. In this section we will explain how the +lilypond spacing engine works, and how you can tune its results. + +Globally spoken, this procedure happens in three steps: first, +flexible distances (``springs'') are chosen, based on durations. All +possible line breaking combination are tried, and the one with the +best results---a layout that has uniform density and requires as +little stretching or cramping as possible---is chosen. When the score +is processed by @TeX{}, page are filled with systems, and page breaks +are chosen whenever the page gets full. @menu -* What is a grob?:: -* Callbacks:: -* Setting grob properties:: -* Items and Spanners:: -* Pointer substitution:: +* Vertical spacing:: +* Horizontal spacing:: +* Font Size:: +* Line breaking:: +* Page layout:: @end menu -@node What is a grob?, , , Grobs - -All grobs have an X and Y-position on the page. These X and Y positions -are stored in a relative format, so they can easily be combined by -stacking them, hanging one grob to the side of another, and coupling -them into a grouping-grob. - -Each grob has a reference point, or parent: the position of a grob is -stored relative to that reference point. For example the X-reference -point of a staccato dot usually is the note head that it applies -to. Whenever the note head is moved, the staccato dot moves along -automatically. - -If you keep following offset reference points, you will always end up at -the root-object. This root object is called @code{Line_of_score} -@ref{(lilypond-internals)Element Line_of_score}, and it represents a -system (ie. a line of music). - -All grobs carry a set of grob-properties. In the Stem example above, -the property @code{direction} is set to value @code{1}. The function -that draws the symbol (@code{Stem::brew_molecule}) uses the value of -@code{direction} to determine how to print the stem and the flag. The -appearance of a grob is determined solely by the values of its -properties. - -Often, a grob also is associated with a symbol. On the other hand, Some -grobs do not print any symbols, but take care of grouping objects. For -example, there is a separate grob that stacks staffs vertically, so they -are not printed in overstrike. The NoteCollision @ref{(lilypond-internals)Element -NoteCollision} is another example of an abstract grob. It only moves -around chords, but doesn't print anything. - -A complete list of grob types is found in @ref{(lilypond-internals)Elements} - -Grobs are created in the "Interpreting music" phase, by things in -LilyPond called engravers. In this phase of the translation, a load of -grobs are created, and they are linked into a giant network of objects. -This network of grobs forms the "specification" of the print -problem. This problem is then solved: configurations, directions, -dimensions, line breaks, etc. are calculated. Finally, the printing -description in the form of Molecules (@ref{Molecule}) is extracted from -the network. These are then dumped into the output file - -@node Callbacks, , , Grobs - -Offsets of grobs are relative to a parent reference point. Most -positions are not known when an object is created, so these are -calculated as needed. This is done by adding a callback for a specific -direction. - -Suppose you have the following code in a .ly file. -@example - #(define (my-callback gr axis) - (* 2.0 (get-gr-property grob 'direction)) - ) -.... +@node Vertical spacing +@subsection Vertical spacing + +@cindex vertical spacing +@cindex distance between staves +@cindex staff distance +@cindex between staves, distance +@cindex staffs per page - \property Voice.Stem \override #'Y-offset-callbacks = #(list - my-callback) + +The height of each system is determined automatically by lilypond, to +keep systems from bumping into each other, some minimum distances are +set. By changing these, you can put staves closer together, and thus +put more systems onto one page. + +Normally staves are stacked vertically. To make +staves maintain a distance, their vertical size is padded. This is +done with the property @code{minimumVerticalExtent}. It takes a pair +of numbers, so if you want to make it smaller from its, then you could +set +@example + \property Staff.minimumVerticalExtent = #'(-4 . 4) +@end example +This sets the vertical size of the current staff to 4 staff-space on +either side of the center staff line. The argument of +@code{minimumVerticalExtent} is interpreted as an interval, where the +center line is the 0, so the first number is generally negative. you +could also make the staff larger at the bottom by setting it to +@code{(-6 . 4)}. The default value is @code{(-6 . 6)}. + +Vertical aligment of staves is handled by the +@internalsref{VerticalAlignment} object, which lives at +@internalsref{Score} level. + +The piano staves are handled a little differently: to make cross-staff +beaming work correctly, it necessary that the distance between staves +is fixed. This is also done with a @internalsref{VerticalAlignment} +object, created in @internalsref{PianoStaff}, but a forced distance is +set. This is done with the object property #'forced-distance. If you +want to override this, use a @code{\translator} block as follows: +@example + \translator @{ + \PianoStaffContext + VerticalAlignment \override #'forced-distance = #9 + @} @end example +This would bring the staves together at a distance of 9 staff spaces, +and again this is measured from the center line of each staff. -When the Y-offset of a Stem object is needed, LilyPond will -automatically execute all callbacks for that object. In this case, it -will find @code{my-callback}, and execute that. The result is that the -stem is translated by two staff spaces in its direction. -(note: Y-offset-callbacks is also a property) +@node Horizontal spacing +@subsection Horizontal Spacing -Offset callbacks can be stacked, ie. +The spacing engine translates differences in durations into +stretchable distances (``springs'') of differing lengths. Longer +durations get more space, shorter durations get less. The basis for +assigning spaces to durations, is that the shortest durations get a +fixed amount of space, and the longer durations get more: doubling a +duration adds a fixed amount of space to the note. -@example - \property .... \override #'Y-offset-callbacks = #(list - callback1 callback2 callback3) +For example, the following piece contains lots of half, quarter and +8th notes, the eighth note is followed by 1 note head width. The The +quarter note is followed by 2 NHW, the half by 3 NHW, etc. +@lilypond[fragment, verbatim, relative=1] + c2 c4. c8 c4. c8 c4. c8 c8 c8 c4 c4 c4 +@end lilypond -@end example +These two amounts of space are @code{shortest-duration-space} +@code{spacing-increment}, object properties of +@internalsref{SpacingSpanner}. Normally @code{spacing-increment} is +set to 1.2, which is the width of a note head, and +@code{shortest-duration-space} is set to 2.0, meaning that the +shortest note gets 2 noteheads of space. For normal notes, this space +is always counted from the left edge of the symbol, so the short notes +in a score is generally followed by one note head width of space. + +If one would follow the above procedure exactly, then adding a single +32th note to a score that uses 8th and 16th notes, would widen up the +entire score a lot. The shortest note is no longer a 16th, but a 64th, +thus adding 2 noteheads of space to every note. To prevent this, the +shortest duration for spacing is not the shortest note in the score, +but the most commonly found shortest note. Notes that are even +shorter this are followed by a space that is proportonial to their +duration relative to the common shortest note. So if we were to add +only a few 16th notes to the example above, they would be followed by +half a NHW: + +@lilypond[fragment, verbatim, relative=1] + c2 c4. c8 c4. [c16 c] c4. c8 c8 c8 c4 c4 c4 +@end lilypond -The callbacks will be executed in the order callback3 callback2 -callback1. This is used for quantized positioning: the staccato dot is -above or below a note head, and it must not be on a staff-line. +The most common shortest duration is determined as follows: in every +measure, the shortest duration is determined. The most common short +duration, is taken as the basis for the spacing, with the stipulation +that this shortest duration should always be equal to or shorter than +1/8th note. The shortest duration is printed when you run lilypond +with @code{--verbose}. These durations may also be customized. If you +set the @code{common-shortest-duration} in +@internalsref{SpacingSpanner}, then this sets the base duration for +spacing. The maximum duration for this base (normally 1/8th), is set +through @code{base-shortest-duration}. + +@cindex @code{common-shortest-duration} +@cindex @code{base-shortest-duration} +@cindex @code{stem-spacing-correction} +@cindex @code{spacing} + +In the introduction it was explained that stem directions influence +spacing. This is controlled with @code{stem-spacing-correction} in +@internalsref{NoteSpacing}. The @code{StaffSpacing} object contains the +same property for controlling the stem/barline spacing. In the +following example shows these corrections, once with default settings, +and once with exaggerated corrections. + +@lilypond + \score { \notes { + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4| + \property Staff.NoteSpacing \override #'stem-spacing-correction + = #1.5 + \property Staff.StaffSpacing \override #'stem-spacing-correction + = #1.5 + c'4 e''4 e'4 b'4 | + b'4 e''4 b'4 e''4| + } + \paper { linewidth = -1. } } +@end lilypond -To achieve this, for the staccato there are two callbacks: one callback -that positions the grob above or below the note head, and one callback -that rounds the Y-position of the grob to the nearest open space. -Similarly, the size of a grob are determined through callbacks, settable -with grob properties @code{X-extent-callback} and @code{Y-extent-callback}. -There can be only one extent-callback for each axis. No callback (value #f) -means: "empty in this direction". If you fill in a pair, that pair -hard-codes the extent in that coordinate. +@refbugs -@node Setting grob properties, , , Grobs +Spacing is determined on a score wide basis. If you have a score that +changes its character (measured in durations) half way during the +score, the part containing the longer durations will be spaced too +widely. -Grob properties are stored as GUILE association lists, with symbols as -keys. From C++, element properties can be accessed using the functions +Generating optically pleasing spacing is black magic. LilyPond tries +to deal with a number of frequent cases. Here is an example that is +not handled correctly, due to the combination of chord collisions and +kneed stems. -@example - SCM get_grob_property (SCM) const; - void set_grob_property (const char * , SCM val); - void set_immutable_grob_property (const char * , SCM val); - void set_immutable_grob_property (SCM key, SCM val); - void set_grob_property (SCM , SCM val); - void set_grob_pointer (const char*, SCM val); - SCM remove_grob_property (const char* nm); -@end example +@lilypond +\score { + \context PianoStaff \notes \transpose c c'' < + \context Staff = up { s1 } + \context Staff = down { [c8 c \translator Staff=up <> c +\translator Staff=down c c c] } + > + \paper { linewidth = -1 } +} +@end lilypond + + +@c . {Font size} +@node Font Size +@subsection Font size +@cindex font size, setting +@cindex staff size, setting +@cindex @code{paper} file -In GUILE, LilyPond provides +The Feta font provides musical symbols at seven different sizes. +These fonts are 11 point, 13 point, 16 point, 19 pt, 20 point, 23 +point, and 26 point. The point size of a font is the height of the +five lines in a staff when displayed in the font. +Definitions for these sizes are the files @file{paperSZ.ly}, where +@code{SZ} is one of 11, 13, 16, 19, 20, 23 and 26. If you include any +of these files, the identifiers @code{paperEleven}, +@code{paperThirteen}, @code{paperSixteen}, @code{paperNineteen}, +@code{paperTwenty}, @code{paperTwentythree}, and @code{paperTwentysix} +are defined respectively. The default @code{\paper} block is also +set. These files should be imported at toplevel, i.e. @example - ly-get-grob-property GROB SYMBOL - ly-set-grob-property GROB SYMBOL VALUE + \include "paper26.ly" + \score @{ ... @} @end example -All lookup functions identify undefined properties with -end-of-list (ie. @code{'()} in Scheme or @code{SCM_EOL} in C) +The font definitions are generated using a Scheme function. For more +details, see the file @file{scm/font.scm}. -Properties are stored in two ways: -@itemize @bullet -@item mutable properties: -element properties that change from object to object. The storage of -these are private to a grob. Typically this is used to store lists of -pointers to other grobs - -@item immutable properties: -element properties that are shared across different grobs of the same -type. The storage is shared, and hence it is read-only. Typically, this -is used to store function callbacks, and values for shared element -properties are read from @file{scm/element-description.scm}. -@end itemize -There are two ways to manually set grob properties. +@c . {Line break} +@node Line breaking +@subsection Line breaking -You can change immutable grob properties. This is done with the -\override syntax: +@cindex line breaks +@cindex breaking lines -@example - \property Voice.Stem \override #'direction = #1 -@end example +Line breaks are normally computed automatically. They are chosen such +that it looks neither cramped nor loose, and that consecutive lines have +similar density. + +Occasionally you might want to override the automatic breaks; you can +do this by specifying @code{\break}. This will force a line break at +this point. Line breaks can only occur at places where there are bar +lines. If you want to have a line break where there is no bar line, +you can force an invisible bar line by entering @code{\bar +""}. Similarly, @code{\noBreak} forbids a line break at a certain +point. -This will push the entry @code{'(direction . 1)} on the immutable -property list for stems, in effect overriding the setting from -@file{scm/element-description.scm}. This can be undone by +@cindex regular line breaks +@cindex four bar music. + +If you want linebreaks at regular intervals, you can use the following: @example - \property Voice.stem \revert #'direction -@end example +< \repeat 7 unfold @{ s1 * 4 \break @} + @emph{real music} +> +@end example +This makes the following 28 measures (assuming 4/4 time) be broken every +4 measures. + +@node Page layout +@subsection Page layout + +@cindex page breaks +@cindex breaking pages + +@cindex @code{indent} +@cindex @code{linewidth} + +The most basic settings influencing the spacing are @code{indent} and +@code{linewidth}. They are set in the @code{\paper} block. They +control the indentation of the first line of music, and the lengths of +the lines. If @code{linewidth} set to a negative value, a single +unjustified line is produced. A similar effect for scores that are +longer than one line, can be produced by setting @code{raggedright} to +true in the @code{\paper} block. + +@cindex page layout + +The page layout process happens outside lilypond. Ly2dvi sets page +layout instructions. Ly2dvi responds to the following variables in the +@code{\paper} block. The variable @code{textheight} sets the total +height of the music on each page. The spacing between systems is +controlled with @code{interscoreline}, its default is 16pt. +The distance between the score lines will stretch in order to fill the +full page @code{interscorelinefill} is set to a positive number. In +that case @code{interscoreline} specifies the minimum spacing. + +@cindex @code{textheight} +@cindex @code{interscoreline} +@cindex @code{interscorelinefill} + +If the variable @code{lastpagefill} is defined (that is, it gets any +value assigned in the @code{\paper} block), systems are evenly +distributed vertically on the last page. This might produce ugly +results in case there are not enough systems on the last page. Note +that @command{lilypond-book} ignores @code{lastpagefill}. See +@ref{Integrating text and music with lilypond-book} for +more information. + +@cindex @code{lastpagefill} + +Page breaks are normally computed by @TeX{}, so they are not under +direct control of LilyPond. However, you can insert a commands into +the @file{.tex} output to instruct @TeX{} where to break pages. You +can insert a @code{\newpage} from within lilypond. This is done by +setting the @code{between-systems-strings} on the +@internalsref{NonMusicalPaperColumn} where the system is broken. + +@cindex paper size +@cindex page size +@cindex @code{papersize} -If you use this a lot, this gets old quickly. So we also have a -shorthand, +To change the paper size, you must first set the +@code{papersize} paper variable variable. Set it to +the strings @code{a4}, @code{letter}, or @code{legal}. After this +specification, you must set the font as described above. If you want +the default font, then use the 20 point font. @example - \property Context.GrobType \set #'prop = #VAL + \paper@{ papersize = "a4" @} + \include "paper16.ly" @end example -this does a @code{\revert} followed by a @code{\override} +The file @code{paper16.ly} will now include a file named @file{a4.ly}, which +will set the paper variables @code{hsize} and @code{vsize} (used by +Lilypond and @code{ly2dvi}) -The second way is \outputproperty. This construct looks like -@example - \context ContextName \outputproperty @var{pred} #@var{sym} = #@var{val} -@end example -In this case, in every grob that satisfies @var{pred}, the property -assignment @var{sym} = @var{val} is done. For example -@example - \outputproperty - #(lambda (gr) (string? (ly-get-grob-property gr - 'text))) - #'extra-offset = #'(-1.0 . 0.0) -@end example +@c . {Sound} +@node Sound +@section Sound +@cindex Sound + +LilyPond can produce MIDI output. The performance lacks lots of +interesting effects, such as swing, articulation, slurring, etc., but it +is good enough for proof-hearing the music you have entered. Ties, +dynamics and tempo changes are interpreted. + +Dynamic marks, crescendi and decrescendi translate into MIDI volume +levels. Dynamic marks translate to a fixed fraction of the available +MIDI volume range, crescendi and decrescendi make the the volume vary +linearly between their two extremities. The fractions be adjusted by +overriding the @code{absolute-volume-alist} defined in +@file{scm/midi.scm}. + +For each type of musical instrument (that MIDI supports), a volume range +can be defined. This gives you basic equalizer control, which can +enhance the quality of the MIDI output remarkably. You can add +instruments and ranges or change the default settings by overriding the +@code{instrument-equalizer-alist} defined in @file{scm/midi.scm}. + +Both loudness controls are combined to produce the final MIDI volume. + +@menu +* MIDI block:: +* MIDI instrument names:: +@end menu -This shifts all elements that have a @code{text} property one staff -space to the left. +@c . {MIDI block} +@node MIDI block +@subsection MIDI block +@cindex MIDI block + + +The MIDI block is analogous to the paper block, but it is somewhat +simpler. The @code{\midi} block can contain: +@cindex MIDI block -@node Items and Spanners, , , Grobs +@itemize @bullet + @item a @code{\tempo} definition + @item context definitions +@end itemize -Grobs can also be distinguished in their role in the horizontal spacing. -A lot of grobs define constraints on the spacing by their sizes. For -example, note heads, clefs, stems, and all other symbols with a fixed -shape. These grobs form a subtype called @code{Item}. +Assignments in the @code{\midi} block are not allowed. -Other grobs have a shape that depends on the horizontal spacing. For -example, slur, beam, tie, etc. These grobs form a subtype called -@code{Spanner}. All spanners have two span-points (these must be -@code{Item}s), one on the left and one on the right. The left bound is -also the X-reference point. -Some items need special treatment for line breaking. For example, a -clef is normally only printed at the start of a line (ie. after a line -break). To model this, `breakable' items (clef, key signature, bar lines, -etc.) are copied twice. Then we have three versions of each breakable -item: one version if there is no line break, one version that is printed -before the line break (at the end of a system), one version that is -printed after the line break. -Whether these versions are visible and take up space, is determined by -the outcome of the visibility-lambda. This is a function taking a -direction (-1, 0 or 1) and returns a cons of booleans, signifying wether -this grob should be transparent and invisible. +@cindex context definition -@node Pointer substitution, , , Grobs +Context definitions follow precisely the same syntax as within the +\paper block. Translation modules for sound are called performers. +The contexts for MIDI output are defined in @file{ly/performer-init.ly}. -@node Molecule, , , Reference Manual +@node MIDI instrument names +@subsection MIDI instrument names -The objective of any typesetting system is to put ink on paper in the -right places. For LilyPond, this final stage is left to the TeX and the -printer subsystem. For lily, the last stage in processing a score is -outputting a description of what to put where. This description roughly -looks like +@cindex instrument names +@cindex @code{Staff.midiInstrument} +@cindex @code{Staff.instrument} -@example - PUT glyph AT (x,y) - PUT glyph AT (x,y) - PUT glyph AT (x,y) -@end example +The MIDI instrument name is set by the @code{Staff.midiInstrument} +property or, if that property is not set, the @code{Staff.instrument} +property. The instrument name should be chosen from the list in +@ref{MIDI instruments}. -you merely have to look at the tex output of lily to see this. -Internally these instructions are encoded in Molecules:@footnote{At some -point LilyPond also contained Atom-objects, but they have been replaced -by Scheme expressions.}. A molecule is an object that combines -dimension information (how large is this glyph ?) with -what-to-print-where. +@refbugs -Conceptually, Molecules can be constructed from Scheme code, by -translating a Molecule and by combining two molecules. In BNF notation: +If the selected string does not exactly match, then LilyPond uses the +default (Grand Piano). It is not possible to select an instrument by +number. -@example - Molecule = COMBINE Molecule Molecule - | TRANSLATE Offset Molecule - | GLYPH-DESCRIPTION - ; -@end example -(refer to the C++ code for more details). All visible, -ie. non-transparent, grobs have a callback to create a Molecule. The -name of the property is @code{molecule-callback}, and its value should -be a Scheme function taking one argument (the grob) and returning a -Molecule.