+++ /dev/null
-mailto(gnu-music-discuss@gnu.org)
-COMMENT(-*-text-*-)
-
-redef(var)(1)(\
- whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
- whenhtml(sc(ARG1))\
-)
-
-def(indexcode)(1)(cindex(ARG1@code(ARG1)))
-def(indexandcode)(1)(code(ARG1)indexcode(ARG1))
-def(keyindex)(1)(cindex(ARG1@code(\ARG1)))
-
-redef(code)(1)(tt(ARG1))
-redef(cindex)(1)(\
- whenlatex(latexcommand(\index{)ARG1+latexcommand(}))\
- whentexinfo(XXnl()texinfocommand(@cindex )ARG1XXnl())\
-)
-
-
-COMMENT(
- BUGS:
-
- restStyle=mensural doesn't seem to work (lots of characters not found
- for rests.fly)
-
- TODO:
-
- accordeon symbols
- Music expression / music expression
- property lists should be alphabetic.
-
-)
-
-
-COMMENT(
- This document contains Mudela fragments. You need at least
- Yodl-1.30.18 to convert this to tex or html.
-)
-
-htmlbodyopt(bgcolor)(white)
-htmlcommand(<font color=black>)
-
-latexlayoutcmds(
- \setlength{\topmargin}{-0.25in}
- \setlength{\textheight}{9in}
- \setlength{\textwidth}{5.875in}
- \setlength{\oddsidemargin}{0.25in}
- \setlength{\evensidemargin}{0.25in}
- \input mudela-book
- \usepackage{makeidx}
- \makeindex
-)
-
-whentexinfo(notableofcontents())
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-article(LilyPond 1.2.0 Reference Manual)
- (Adrian Mariano, Han-Wen Nienhuys and Jan Nieuwenhuizen)
- (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
-
-
-latexcommand(\def\interexample{})
-latexcommand(\def\preexample{\par})
-latexcommand(\def\postexample{\par\medskip})
-latexcommand(\def\file#1{{code(#1)}})
-COMMENT(
- latexcommand(\def\texttt#1{\tt #1})
- latexcommand(\def\textbf#1{\bf #1})
-)
-
-COMMENT(urg, texinfo include breaks)
-whenhtml(includefile(html-disclaimer.yo-urg))
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Overview)
-
-This nop(document)footnote(This document has been revised for
-LilyPond 1.2.) describes the the GNU LilyPond input format, which is
-a language for defining music. We call this language em(Music
-Definition Language) or em(Mudela), for short.footnote(If anybody
-comes up with a better name, we'd gladly take this. Gourlay already
-uses a ``Musical Description Language,'' ISO standard 10743 defines a
-``Standard Music Description Language.'' We're not being original
-here.)
-
-em(Mudela) is a language that allows you to
-
-itemize(
- it() create musical expressions by combining pitches, durations
- it() output those musical expressions to various formats
- it() give those musical expressions and output definitions names, so
- you can enter them in manageable chunks.
-)
-
-em(Mudela) aims to define a piece of music completely, both from
-typesetting and from a performance point of view.
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Top level)
-cindex(top level)
-
-This section describes what you may enter at top level.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Score definitions)
-cindex(score definition)
-
-The output is generated combining a music expression with an output
-definition. A score block has the following syntax:
-
-quote(
- code(\score {) var(musicexpr) var(outputdefs) code(})
-)
-
-var(outputdefs) are zero or more output definitions. If no output
-definition is supplied, the default code(\paper) block will be added.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Information header)
-cindex(header)
-keyindex(header)
-
-The syntax is
-
-quote(
- code(\header) code({) var(key1) = var(val1);
- var(key2) = var(val2); ellipsis() code(})
-)
-
-A header describes the file's contents. It can also appear in a
-code(\score) block. Tools like indexandcode(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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Setting notenames and chordnames)
-label(notenames)
-
-Note name tables can be specified using
-
-quote(
- code(\notenames)keyindex(notenames)
- code({) var(assignmentlist) code(})
-)
-
-var(assignmentlist) is a list of definitions of the form
-
-quote(
- var(name) = var(pitch)
-)
-
-Chord modifiers can be set analogously, with
-code(\chordmodifiers)keyindex(chordmodifiers).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Output definitions)
-
-A code(\paper) block at top level sets the default paper block. A
-code(\midi) block at top level works similarly.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(GUILE and Scheme)
-
-LilyPond contains a Scheme interpreter (the GUILE library) for
-internal use. The following commands access the interpreter
-directly.
-
-quote(
- code(\scm)keyindex(scm) var(scheme) code(;)
-)
-
-Evaluates the specified Scheme code. The result is discarded.
-
-quote(
- code(\scmfile)keyindex(scmfile) var(filename) code(;)
-)
-
-Reads Scheme code from the specified file. The result is discarded.
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Identifiers)
-
-Identifier assignments may appear at top level. Semicolons are
-forbidden after top level assignments.
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Lexical conventions)
-cindex(lexical conventions)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Comments)
-cindex(comment)
-indexcode(%)
-whenlatex(cindex(%A@latexcommand(\texttt{\%\textbraceleft})))
-whenlatex(cindex(%B@latexcommand(\texttt{\%\textbraceright})))
-
-A one line comment is introduced by a `code(%)' character.
-Block comments are started by `code(%{)' and ended by `code(%})'.
-They cannot be nested.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Keywords)
-cindex(keyword)
-
-Keywords start with a backslash, followed by a number of lower case
-alphabetic characters. These are all the keywords.
-
-latexcommand(\begin{raggedright})
-quote(
- code(\accepts)
- code(\addlyrics)
- code(\alternative)
- code(\bar)
- code(\breathe)
- code(\cadenza)
- code(\chordmodifiers)
- code(\chords)
- code(\clef)
- code(\cm)
- code(\consists)
- code(\consistsend)
- code(\context)
- code(\duration)
- code(\font)
- code(\grace)
- code(\header)
- code(\in)
- code(\key)
- code(\keysignature)
- code(\lyrics)
- code(\mark)
- code(\midi)
- code(\mm)
- code(\musicalpitch)
- code(\name)
- code(\notenames)
- code(\notes)
- code(\paper)
- code(\partial)
- code(\penalty)
- code(\property)
- code(\pt)
- code(\relative)
- code(\remove)
- code(\repeat)
- code(\repetitions)
- code(\scm)
- code(\scmfile)
- code(\score)
- code(\script)
- code(\sequential)
- code(\shape)
- code(\simultaneous)
- code(\skip)
- code(\spanrequest)
- code(\tempo)
- code(\textscript)
- code(\time)
- code(\times)
- code(\translator)
- code(\transpose)
- code(\type)
-)
-latexcommand(\end{raggedright})
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Integers)
-cindex(integer)
-
-Formed from an optional minus sign followed by digits. Arithmetic
-operations cannot be done with integers, and integers cannot be mixed
-with reals.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Reals)
-cindex(real)
-
-Formed from an optional minus sign and a sequence of digits followed
-by a em(required) decimal point and an optional exponent such as
-code(-1.2e3). Reals can be built up using the usual operations:
-`indexandcode(+)', `indexandcode(-)', `indexandcode(*)', and
-`indexandcode(/)', with parentheses for grouping.
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(String)
-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 bind(section)ref(modes) for details on unquoted strings; their
-interpretation varies depending on the situation. Strings can be
-concatenated with the `code(+)' operator.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Tokenizer commands)
-
-The tokenizer accepts the following commands. They can appear
-anywhere.
-
-quote(
- code(\maininput)keyindex(maininput)
-)
-
-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.
-
-quote(
- code(\include)keyindex(include) var(file)
-)
-
-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,
-
-quote(
- code(\version)keyindex(version) var(string) code(;)
-)
-
-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-mudela), a tool that automatically upgrades input files.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Pitch Names in Other Languages)
-cindex(other languages)
-label(notelang)
-
-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:
-
-quote(
-verb( 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 sid si -d -b
-catalan.ly do re mi fa sol la sid si -d/-s -b)
-)
-
-Pitch names can be redefined using the
-code(\notenames)keyindex(notenames) command, see
-bind(subsection)ref(notenames).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Lexical modes)
-cindex(lexical modes)
-cindex(modes)
-label(modes)
-
-To simplify entering notes, lyrics, and chords, em(Mudela) 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.
-
-description(
- dit(Normal mode.)cindex(mode!normal)
- At the start of parsing, em(Mudela) 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.
-
- dit(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.
-
- dit(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.
-
- dit(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(_)' characters which appear in an unquoted word are
- converted to spaces. 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().
-
-COMMENT(
-DOEXPAND(muckslash)^etre % a word
-)
-
- quote(
-verb(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)
- )
-
- Since combinations of numbers and dots are used for indicating
- durations, you can not enter real numbers in this mode.
-)
-
-It is possible to create words that break the rules by prefixing them
-with the dollar sign `indexandcode($)'. Regardless of the context, a
-word beginning with `code($)' extends until the next white space
-character. Such words can contain numbers (even in Note mode), or
-other forbidden characters. The dollar sign can be used to create
-and access identifiers that could not otherwise be used.footnote(Use
-of `code($)' hampers readability and portability to future LilyPond
-versions, thus the use of the dollar sign is discouraged.)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Types)
-cindex(types and identifiers)
-
-em(Mudela) has a limited set of types:
-
-itemize(
- it() integers
- it() reals
- it() strings
- it() music expressions
- it() durations of notes and rests (specified with
- code(\notenames)keyindex(notenames))
- it() note name tables
- it() context definitions, part of output definitions. See
- bind(section)ref(contextdefs) for more information
- it() output definitions (like code(\paper)keyindex(paper) blocks
- and code(\midi)keyindex(midi) blocks)
- it() score definitions (code(\score)keyindex(score) blocks)
-)
-
-Type is a syntactical property: em(Mudela) has no real type system,
-so there is no support for generic expressions, functions, or user
-defined types. For the same reason, it is not possible to mix reals
-and integers in arithmetic expressions, and ``type
-errors''cindex(type error) (e.g., using a string identifier to
-initialize a code(\paper)keyindex(paper) block) will yield a ``parse
-error''.
-
-Identifiers allow objects to be assigned to names. 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 em(Mudela) file. Semicolons are forbidden after assignments
-appearing at top level but they are obligatory after assignments
-appearing in the code(\paper) block, see bind(Section)ref(paper).
-
-var(value) is any of the types listed above.
-
-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.
-
-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.
-
-quote(
- code(foo = \foo * 2.0)
-)
-
-When an identifier is referenced, the information it points to is
-copied. Therefore it only makes sense to put identifiers for
-translators, output definitions, and code(\score)keyindex(score)
-blocks as the first item in a block. For this reason, if you
-reference a code(\foo) variable in a code(\foo) block, it must be the
-first item in the list following code(\foo).footnote(code(\paper{\one
-\two}) does not make sense, because the information of code(\two)
-would overwrite the information of code(\one), thereby making the
-reference to the first identifier useless.)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Music expressions)
-cindex(music expressions)
-
-Music in em(Mudela) 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:
-
-quote(
- verb(\sequential { c4 d4 })
-)
-
-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).
-
-Atomic music expression are discussed in
-bind(subsection)ref(atomicmusic). Compound music expressions are
-discussed in bind(subsection)ref(compoundmusic).
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Atomic music expressions)
-label(atomicmusic)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Pitch and duration)
-cindex(pitch)
-cindex(duration)
-
-The syntax for pitch specification is
-
-quote(
- code(\musicalpitch)keyindex(musicalpitch)
- code({) var(octave) var(note) var(shift) code(})
-)
-
-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.
-
-In Note and Chord mode, pitches may be designated by names. See
-bind(section)ref(notelang) for pitch names in different languages.
-
-The syntax for duration specification is
-
-quote(
- code(\duration)keyindex(duration)
- code({) var(length) var(dotcount) code(})
-)
-
-var(length) is the negative logarithm (base 2) of the duration:
-bind(1)is a half note, bind(2)is a quarter note, bind(3)is an eighth
-note, etc. The number of dots after the note is given by
-var(dotcount).
-
-In Note, Chord, and Lyrics mode, durations may be designated by
-numbers and dots. See bind(Section)ref(notelang) for details.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Note specification)
-label(notedesc)
-cindex(note specification)
-cindex(pitches)
-cindex(entering notes)
-
-A note specification has the form
-
-quote(
- var(pitch)[var(octavespec)][code(!)][code(?)][var(duration)]
-)
-
-The pitch of the note is specified by the note's name.
-
-subsubsect(Pitches)
-
-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 Dutchcindex(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
-bind(section)ref(notelang) for details.
-
-subsubsect(Octaves)
-
-The optional octave specification takes the form of a series of
-single quote (`indexandcode(')') characters or a series of comma
-(`indexandcode(,)') characters. Each code(') raises the pitch by one
-octave; each code(,) lowers the pitch by an octave.
-
-mudela(fragment,verbatim,center)( c' d' e' f' g' a' b' c'')
-
-mudela(fragment,verbatim,center)( cis' dis' eis' fis' gis' ais' bis')
-
-mudela(fragment,verbatim,center)( ces' des' es' fes' ges' as' bes')
-
-mudela(fragment,verbatim,center)( cisis' eisis' gisis' aisis' beses')
-
-mudela(fragment,verbatim,center)( ceses' eses' geses' ases' beses')
-
-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 `indexandcode(?)' after the pitch.
-
-mudela(fragment,verbatim,center)( cis' d' e' cis' c'? d' e' c'!)
-
-subsubsect(Duration)
-cindex(duration)
-
-Durations are entered as their reciprocal values. For notes longer
-than a whole note, use identifiers.
-
-quote(
-verb(c'\longa c'\breve
-c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64)
-)
-
-quote(
-mudela()(\score {
- \notes \relative c'' {
- a\longa a\breve
- a1 a2 a4 a8 a16 a32 a64 a64
- }
- \paper {
- loose_column_distance = 2.5 * \interline;
- linewidth = -1.0;
- \translator {
- \type "Score_engraver";
- \name "Score";
- \consists "Note_heads_engraver";
- \consists "Stem_engraver";
- \consists "Rhythmic_column_engraver";
- }
- }
-})
-)
-
-quote(
-verb(r\longa r\breve
-r1 r2 r4 r8 r16 r32 r64 r64)
-)
-
-quote(
-mudela()(\score {
- \notes \relative c'' {
- r\longa r\breve
- r1 r2 r4 r8 r16 r32 r64 r64
- }
- \paper {
- loose_column_distance = 2.5 * \interline;
- linewidth = -1.0;
- \translator {
- \type "Score_engraver";
- \name "Score";
- \consists "Rest_engraver";
- \consists "Stem_engraver";
- \consists "Rhythmic_column_engraver";
- }
- }
-})
-)
-
-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 (`indexandcode(.)')
-to obtain dotted note lengths.
-
-mudela(fragment,verbatim,center)( a'4. b'4.)
-
-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.
-
-subsubsect(Rests)
-
-Rests are entered like notes, with note name `indexandcode(r)',
-or `indexandcode(R)'. There is also a note name `indexandcode(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.
-
-subsubsect(Lyrics syllables)
-cindex(lyrics expressions)
-
-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
-bind(section)ref(modes) for a description of what is interpreted as
-lyrics.
-
-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 bind(section)ref(lyricprint).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Properties)
-cindex(properties)
-
-quote(
- code(\property)keyindex(property)
- var(contextname)code(.)var(propname) code(=) var(value)
-)
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Translator switches)
-cindex(translator switches)
-
-quote(
- code(\translator)keyindex(translator)
- var(contexttype) = var(name)
-)
-
-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.
-
-Usually this is used to switch staffs in Piano music, e.g.
-
-quote(
- code(\translator Staff = top) var(Music)
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Commands)
-cindex(commands)
-
-Commands are music expressions that have no duration.
-
-subsubsect(Key signatures)
-
-quote(
- code(\key)keyindex(key) var(pitch) var(type) code(;)
-)
-
-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 bind(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.
-
-quote(
- code(\keysignature)keyindex(keysignature) var(pitchseq) code(;)
-)
-
-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.
-
-subsubsect(Rehearsal marks)
-
-quote(
- code(\mark)keyindex(mark) var(unsigned) code(;) nl()
- code(\mark) var(string) code(;)
-)
-
-Prints a mark over or under (depending on the
-indexandcode(markDirection) property) the staff. You must add
-indexandcode(Mark_engraver) to either the Score or Staff context for
-this to work.
-
-subsubsect(Bar lines)
-label(barlines)
-
-quote(
- code(\bar)keyindex(bar) var(bartype) code(;)
-)
-
-This is a request to print a special bar symbol. It replaces the
-regular bar symbol with a special
-symbol. The argument var(bartype) is a string which specifies the
-kind of bar to print. Options are code(":|")cindex("|A@code(:|)),
-code("|:")cindex("|B@code(|:)), code(":|:")cindex("|C@code(:|:)),
-code("||")cindex("|D@code(||)), code("|.")cindex("|E@code(|.)),
-code(".|")cindex("|F@code(.|)), and code(".|.")cindex("|G@code(.|.)).
-These produce, respectively, a right repeat, a left repeat, a double
-repeat, a double bar, a start bar, an end bar, and a thick double
-bar. If var(bartype) is set to code("empty") then nothing is
-printed, but a line break is allowed at that spot.
-
-You are encouraged to use code(\repeat) for repetitions.
-See bind(section)ref(sec:repeats).
-
-subsubsect(Timing commands)
-
-quote(
- code(\cadenza)keyindex(cadenza) var(togglevalue) code(;)
-)
-
-Music expression that toggles the automatic generation of bar lines.
-If var(togglevalue) bind(is)1, bar line generation is turned off. If
-var(togglevalue) bind(is)0, a bar line is immediately printed and
-automatic bar generation is turned on.
-
-quote(
- code(\time)keyindex(time) var(numerator)code(/)var(denominator) code(;)
-)
-
-Change the time signature. The default time signature bind(is)4/4.
-The time signature is used to generate bar lines.
-
-quote(
- code(\tempo)keyindex(tempo) var(duration) = var(perminute) code(;)
-)
-
-Used to specify the tempo. For example, `code(\tempo 4 = 76;)'
-requests output with bind(76)quarter notes per minute.
-
-quote(
- code(\partial)keyindex(partial) var(duration) code(;)
-)
-cindex(anacrusis)
-cindex(upstep)
-
-This creates an incomplete measure (anacrusis, upbeat) at the start of
-the music, e.g., `code(\partial 8*2;)' creates a starting measure
-lasting two eighth notes.
-
-quote(
- code(|)indexcode(|)cindex(bar check)
-)
-cindex(shorten measures)
-cindex(upstep)
-
-`code(|)' is a barcheck. Whenever a barcheck 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.
-The beginning of the measure will be relocated, so this can also
-be used to shorten measures.
-
-subsubsect(Other commands)
-
-quote(
- code(\penalty)keyindex(penalty) var(int) code(;)
-)
-
-Discourage or encourage line breaks. See identifiers
-code(\break)keyindex(break) and code(\nobreak)keyindex(nobreak) in
-bind(section)ref(ident).
-
-quote(
- code(\clef)keyindex(clef) var(clefname) code(;)
-)
-
-Music expression that sets the current clef. The argument is a
-string which specifies the name of the clef. Several clef names are
-supported. If `code(_8)' or `code(^8)' is added to the end of a clef
-name, then the clef lowered or raised an octave will be generated.
-Here are the supported clef names with bind(middle)C shown in each
-clef:
-
-quote(
-mudela()(\score {
- \notes {
- \cadenza 1;
- %\property Voice.textStyle = typewriter
- \clef subbass; c'4-"\kern -5mm subbass"
- \clef bass; c'4^"\kern -2mm bass"
- \clef baritone; c'4_"\kern -5mm baritone"
- \clef varbaritone; c'4^"\kern -6mm varbaritone"
- \clef tenor; c'4_"\kern -3mm tenor"
- \clef "G_8"; c'4^"\kern -2mm G\\texttt{\\_}8"
- }
- \paper {
- linewidth = 4.5 \in;
- }
-})
-)
-
-quote(
-mudela()(\score {
- \notes {
- \cadenza 1;
- \clef alto; c'4_"\kern -2mm alto"
- \clef mezzosoprano; c'4^"\kern -9mm mezzosoprano"
- \clef soprano; c'4_"\kern -6mm soprano"
- \clef treble; c'4^"\kern -4mm treble"
- \clef french; c'4_"\kern -4mm french"
- }
- \paper {
- linewidth = 4.5 \in;
- }
-})
-)
-
-The three clef symbols can also be obtained using the names `code(G)',
-`code(C)' or `code(F)', optionally followed by an integer which
-indicates at which note line the clef is located. An as example, the
-code(mezzosoprano) clef can also be given as `code(C2)'.
-
-quote(
- code(\skip)keyindex(skip) var(duration) code(;)
-)
-
-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)'.
-
-subsubsect(Beams)
-cindex(beams)
-label(manualbeam)
-
-A beam is specified by surrounding the beamed notes with brackets
-`indexandcode([)' and `indexandcode(])'.
-
-mudela(fragment,verbatim,center)( [a'8 a'] [a'16 a' a' a'])
-
-Some more elaborate constructions:
-
-mudela(fragment,verbatim,center)( [a'16 <a' c''> c'' <a' c''>]
- \times 2/3 { [e'8 f' g'] })
-
-Beaming can be generated automatically; see bind(section)ref(autobeam).
-
-To place tremolo marks cindex(tremolo beams) between two notes, begin
-with `code([:)var(length)' and end with `code(])'. Tremolo marks
-will appear instead of beams. Putting more than two notes in such a
-construction will produce odd effects. To create tremolo beams on a
-single note, simply attach `code(:)var(length)' to the note itself
-(see also bind(section)ref(tremolo)).
-
-mudela(fragment,verbatim,center)( [:16 e'1 g'] [:8 e'4 f'])
-
-mudela(fragment,verbatim,center)( c'4:32 [:16 c'8 d'8])
-
-subsubsect(Lyric helpers)
-cindex(--@code(-)code(-))
-indexcode(__)
-cindex(extender)
-cindex(hyphen)
-
-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(-)'.
-
-subsubsect(Ties)
-cindex(ties)
-
-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 `indexandcode(~)'.
-If you try to tie together chords which have no common pitches, a
-warning message will appear and no ties will be created.
-
-mudela(fragment,verbatim,center)( e' ~ e' <c' e' g'> ~ <c' e' g'>)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Atomic music expressions: add-ons)
-
-[TODO: explain Requests]
-
-subsubsect(Articulations)
-cindex(articulations)
-cindex(scripts)
-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.
-
-mudela()(
- \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;
- }
- }
-)
-
-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.
-
-To save typing, fingering instructions (digits 0 bind(to)9 are
-supported) and single characters shorthands exist for a few
-common symbols
-
-mudela()(
- \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;
- }
- }
-)
-
-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).
-
-subsubsect(General text scripts)
-
-quote(
- code(\textscript)keyindex(textscript) var(text) var(style)
-)
-
-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).
-
-You can attach a general textscript request using this syntax:
-
-quote(
-verb(c4-\textscript "6" "finger"
-c4-\textscript "foo" "normal")
-)
-
-This is equivalent to `code(c4-6 c4-"foo")'.
-
-subsubsect(General scripts)
-cindex(scripts)
-
-quote(
- code(\script)keyindex(script) var(alias)
-)
-
-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).
-
-subsubsect(Slurs)
-cindex(slur)
-
-Slurs connects chords and try to avoid crossing stems. A slur is
-started with `code(CHAR(40))' and stopped with `code(CHAR(41))'. The
-starting `code(CHAR(40))' appears to the right of the first note in
-the slur. The terminal `code(CHAR(41))' appears to the left of the
-first note in the slur. This makes it possible to put a note in
-slurs from both sides:
-
-mudela(fragment,verbatim,center)( f'()g'()a' [a'8 b'(] a'4 g'2 )f'4)
-
-subsubsect(Crescendo)
-cindex(crescendo)
-
-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.
-
-mudela(fragment,verbatim,center)( c'' \< \! c'' d'' \decr e'' \rced
- < f''1 { s4 \< \! s2 \> \! s4 } >)
-
-subsubsect(General spanners)
-
-quote(
- code(\spanrequest)keyindex(spanrequest) var(startstop) var(type)
-)
-
-Define a spanning request. The var(startstop) parameter is bind(either)-1
-(code(\start)keyindex(start)) bind(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).
-
-You can attach a (general) span request to a note using
-
-mudela(fragment,verbatim,center)( c'4-\spanrequest \start "slur"
- c'4-\spanrequest \stop "slur")
-
-The slur syntax with parentheses is a shorthand for this.
-
-COMMENT(came till here with indexifying)
-
-subsubsect(Tremolo marks)
-cindex(tremolo marks)
-label(tremolo)
-
-Tremolo marks can be printed on a single note by adding
-`code(:)[var(length)]' after the note. The length must be at
-bind(least)8. A var(length) value bind(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 indexandcode(abbrev) property if there was
-no last value.
-
-mudela(verbatim,fragment,center)( c'2:8 c':32)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Compound music expressions)
-cindex(compound music expressions)
-label(compoundmusic)
-
-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:
-
-mudela(fragment,verbatim,center)( \notes \context Staff {
- \cadenza 1;
- <a c'> <b d' > <c' e' >
- <{a b c'}{c' d' e'}>
- })
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context selection)
-cindex(context selection)
-
-quote(
- code(\context)keyindex(context)
- var(contexttype) [code(=) var(contextname)] var(musicexpr)
-)
-
-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. See
-bind(section)ref(contextselection) bind(and)ref(contextdefs) for more
-information on interpretation contexts.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Music entry modes)
-cindex(input modes)
-cindex(mode switch)
-
-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 bind(section)ref(modes) for more
-information on modes.
-
-More information on context selection can be found in
-bind(section)ref(contextselection).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Sequential music)
-cindex(sequential music)
-COMMENT(It's not possible to index `{' and `}' directly, thus we
- must construct it.)
-whenlatex(cindex(?A@latexcommand(\texttt{\textbraceleft})))
-whenlatex(cindex(?B@latexcommand(\texttt{\textbraceright})))
-
-quote(
- code(\sequential)keyindex(sequential)
- code({) var(musicexprlist) code(})
-)
-
-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:
-
-quote(
- code({) var(musicexprlist) code(})
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Simultaneous music)
-cindex(simultaneous music)
-indexcode(<)
-indexcode(>)
-
-quote(
- code(\simultaneous)keyindex(simultaneous)
- code({) var(musicexprlist) code(})
-)
-
-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:
-
-quote(
- code(<) var(musicexprlist) code(>)
-)
-
-If you try to use a chord as the first thing in your score, you might
-get multiple staffs instead of a chord.
-
-mudela(verbatim,center)( \score {
- \notes <c''4 e''>
- \paper {
- linewidth = -1.;
- }
- })
-
-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:
-
-mudela(verbatim,center)( \score {
- \notes\context Voice <c''4 e''>
- \paper {
- linewidth = -1.;
- }
- })
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Relative Pitch Specification)
-cindex(relative pitch specification)
-label(relative)
-
-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.
-
-quote(
- code(\relative)keyindex(relative) var(startpitch) var(musicexpr)
-)
-
-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).
-
-Entering scales is straightforward in relative mode.
-
-mudela(fragment,verbatim,center)( \relative c' {
- c d e f g a b c c,
- })
-
-And octave changing marks are used for intervals greater than a fourth.
-
-mudela(fragment,verbatim,center)( \relative c'' {
- c g c f, c' a, e'' })
-
-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.
-
-mudela(fragment,verbatim,center)( \relative c' {
- c <c e g>
- <c' e g>
- <c, e' g>
- })
-
-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).
-
-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).
-
-It is strongly recommended to use relative pitch mode: less work,
-less error-prone, and more readable.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Chord names)
-
-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 bind(section)ref(modes)).
-
-quote(
- var(tonic)[var(duration)][code(-)var(modifiers)]\
- [code(^)var(subtractions)]\
- [code(/)var(inversion)].
-)
-
-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 em(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(.)').
-
-quote(
-mudela(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
- }
-}
-)
-)
-
-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, `indexandcode(aug)' which
-raises the 5th, `indexandcode(dim)' which lowers the 5th,
-`indexandcode(maj)' which adds a raised 7th, and `indexandcode(sus)'
-which replaces the 5th with a 4th.
-
-quote(
-mudela(fragment,verbatim)(\transpose c'' {
- \chords {
- c1-m c-min7 c-maj c-aug c-dim c-sus
- }
-}
-)
-)
-
-Chord subtractions are used to eliminate notes from a chord. The
-notes to be subtracted are listed after a `code(^)' character,
-separated by dots.
-
-mudela(fragment,verbatim,center)( \transpose c'' {
- \chords {
- c1^3 c-7^5.3 c-8^7
- }
- })
-
-Chord inversions can be specified by appending `indexandcode(/)' 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.
-
-mudela(fragment,verbatim,center)( \transpose c''' {
- \chords {
- c1 c/e c/g c-7/e
- }
- }
-)
-
-Throughout these examples, chords have been shifted around the staff
-using code(\transpose).
-
-You should not combine code(\relative) with named chords.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Tuplets)
-cindex(tuplets)
-
-Tuplets are made out of a music expression by multiplying their
-duration with a fraction.
-
-quote(
- code(\times)keyindex(times) var(fraction) var(musicexpr)
-)
-
-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 bind(3)notes have the length bind(of)2, so the notes are 2/3 of
-their written length:
-
-mudela(fragment,verbatim,center)( g'4 \times 2/3 {c'4 c' c'} d'4 d'4)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Grace notes)
-cindex(grace notes)
-
-quote(
- code(\grace)keyindex(grace) var(musicexpr)
-)
-
-A grace note expression has bind(duration)0; the next real note is
-assumed to be the main note.
-
-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
-indexandcode(graceAlignPosition).
-
-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
-indexandcode(stemStyle) property.
-
-quote(
-mudela(fragment,verbatim)(\relative c'' {
- \grace c8 c4 \grace { [c16 c16] } c4
- \grace { \property Grace.stemStyle = "" c16 } c4
-}
-)
-)
-
-At present, nesting code(\grace)keyindex(grace) notes, e.g.
-
-quote(
- code(\grace { \grace c32 c16 } c4)
-)
-
-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.
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Repeats)
-cindex(repeats)
-label(sec:repeats)
-
-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.
-
-description(
- dit(unfolded) nl()
- Repeated music is fully written (played) out. Useful for MIDI
- output.
-
- dit(volta) nl()
- This is the normal notation: Repeats are not written out, but
- alternative endings (voltas) are printed, left to right.
-
- dit(folded) nl()
- Alternative endings are written stacked, which is useful for
- lyrics.
-)
-
-The syntax for repeats is
-
-quote(
- code(\repeat) var(variant) var(repeatcount) var(repeatbody)
-)
-
-If you have alternative endings, you may add
-
-quote(
- code(\alternative)keyindex(alternative)
- code({) var(alternative1)
- var(alternative2)
- var(alternative3) ellipsis() code(})
-)
-
-where each var(alternative) is a Music expression.
-
-Normal notation repeats are used like this:
-
-quote(
-mudela(fragment,verbatim)( c'1
- \repeat volta 2 { c'4 d' e' f' }
- \repeat volta 2 { f' e' d' c' }
-)
-)
-
-With alternative endings:
-
-quote(
-mudela(fragment,verbatim)( c'1
- \repeat volta 2 {c'4 d' e' f'}
- \alternative { {d'2 d'} {f' f} }
-)
-)
-
-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.)
-
-quote(
-mudela(fragment,verbatim)( c'1
- \repeat fold 2 {c'4 d' e' f'}
- \alternative { {d'2 d'} {f' f} }
-)
-)
-
-quote(
-mudela(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 } }
- }
-}
-)
-)
-
-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.
-
-quote(
-mudela(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 } }
- }
-}
-)
-)
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Transposition of Pitches)
-cindex(transposition of pitches)
-label(transpose)
-
-A music expression can be transposed with
-code(\transpose)keyindex(transpose). The syntax is
-
-quote(
- code(\transpose) var(pitch) var(musicexpr)
-)
-
-This means that middle C in var(musicexpr) is transposed to
-var(pitch).
-
-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.
-
-quote(
-mudela(fragment,verbatim)(\context Staff {
- \clef "F";
- { \key e; c d e f }
- \clef "G";
- \transpose des'' { \key e; c d e f }
- \transpose cis'' { \key e; c d e f }
-}
-)
-)
-
-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).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Automatic lyric durations)
-cindex(automatic lyric durations)
-
-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
-
-quote(
- code(\addlyrics) var(musicexpr1 musicexpr2)
-)
-
-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).
-
-If the property indexandcode(automaticMelismata) is set in the
-context of var(musicexpr1), no lyrics will be put on slurred or tied
-notes.
-
-quote(
-mudela(verbatim,fragment)(\addlyrics
-\transpose c'' {
- \property Voice.automaticMelismata = "1"
- c8 () cis d8. e16 f2
-}
-\context Lyrics \lyrics {
- do4 re mi fa }
-)
-)
-
-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:
-
-quote(
-mudela(verbatim,fragment)(\addlyrics
-\transpose c'' {
- c8 () cis d8. e16 f2
-}
-\context Lyrics \lyrics
-< { do4 re mi fa }
- { do8 re mi fa } >
-)
-)
-
-It is valid (but probably not very useful) to use notes instead of
-lyrics for var(musicexpr2).
-
-COMMENT(
- mudela(verbatim,fragment)(
- \context Voice \addlyrics
- { s4 s8 s16 s32 }
- { [c16 c c c] }
- )
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Ambiguities)
-cindex(ambiguities)
-
-The grammar contains a number of ambiguities.footnote(The authors
-hope to resolve them at a later time.)
-
-itemize(
- it() The assignment
-
- quote(
- verb(foo = bar)
- )
-
- can be interpreted as making a string identifier code(\foo)
- containing code("bar"), or a music identifier code(\foo)
- containing the syllable `bar'.
-
- it() The assignment
-
- quote(
- verb(foo = -6)
- )
-
- can be interpreted as making an integer identifier
- bind(containing)-6, or a Request identifier containing the
- bind(fingering)`6' (with neutral direction).
-
- it() If you do a nested repeat like
-
- quote(
-verb(\repeat ...
-\repeat ...
-\alternative)
- )
-
- 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.
-
- it() (an as yet unidentified ambiguity :-)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Notation conversion specifics)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Automatic Beam Generation)
-cindex(automatic beam generation)
-label(autobeam)
-
-By default, LilyPond will generate beams automatically. This feature
-can be disabled by setting the indexandcode(Voice.noAutoBeaming)
-property bind(to)1. It can be overridden for specific cases by
-specifying explicit beams as described in
-bind(section)ref(manualbeam).
-
-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 indexandcode(Voice.beamAutoEnd) property. To end beams every
-quarter note, for example, you could set
-indexandcode(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
-indexandcode(Voice.beamAutoBegin).
-
-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 bind(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
-bind(32nd)notes, you would use code(Voice.beamAutoEnd_32).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Printing chord names)
-cindex(chord names)
-cindex(chords)
-cindex(printing!chord names)
-
-For displaying printed chord names, use the indexandcode(ChordNames)
-and indexandcode(ChordNameVoice) contexts. The chords may be entered
-either using the notation described above, or directly using
-simultaneous music.
-
-quote(
-mudela(fragment,verbatim)(<
- \context ChordNames {
- \chords{a b c} \notes{<d f g> <e g b>}
- }
- \context Staff \notes {
- a b c' d' e'
- }
->
-)
-)
-
-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:
-
-mudela(fragment,verbatim,center)( <
- \context ChordNameVoice \notes {
- <e'1 g' c''>
- }
- \context Thread \notes {
- <e'1 g' c''>
- }
- >)
-
-If you want inversions to be recognized, you must set the property
-indexandcode(ChordNames.chordInversion):
-
-mudela(fragment,verbatim,center)( <
- \property Score.chordInversion = 1
- \context ChordNameVoice \notes {
- <e'1 g' c''>
- }
- \context Thread \notes {
- <e'1 g' c''>
- }
- >)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Printing lyrics)
-cindex(lyrics)
-cindex(printing!lyrics)
-label(lyricprint)
-
-Lyric syllables must be interpreted within a code(Lyrics) context
-cindex(context!Lyrics) for printing them.
-
-Here is a full example:
-
-quote(
-mudela(verbatim)(\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
- }
- >
-}
-)
-)
-
-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(_)').
-
-quote(
-mudela(verbatim)(\score {
- <
- \notes \relative c'' {
- a4 () b () c () d | c () d () b () a | c () d () b () a
- }
- \context Lyrics \lyrics {
- foo1 __ | bar2. __ _4 | baz1 __
- }
- >
-}
-)
-)
-
-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:
-
-quote(
-mudela(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
- }
- >
-}
-)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Notation Contexts)
-cindex(notation contexts)
-
-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.
-
-A context is an object that holds the reading state of the
-expression; it contains information like
-
-itemize(
- it() What notes are playing at this point?
- it() What symbols will be printed at this point?
- it() In what style will they printed?
- it() What is the current key signature, time signature, point within
- the measure, etc.?
-)
-
-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).
-
-Contexts associated with sheet music output are called em(notation
-contexts), those for sound output are called playing contexts.
-
-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:
-
-quote(
- verb(\score { \notes < c4 > })
-)
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context selection)
-label(contextselection)
-cindex(context)
-
-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.
-
-If a context of the specified type and name can not be found, a new
-one is created. For example,
-
-quote(
-mudela(verbatim)(\score {
- \notes \relative c'' {
- c4 <d4 \context Staff = "another" e4> f
- }
-}
-)
-)
-
-In this example, the code(c) bind(and)code(d) are printed on the
-default staff. For bind(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 bind(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.
-
-Almost all music expressions inherit their interpretation context
-from their parent. In other words, suppose that the syntax for a
-music expression is
-
-quote(
- code(\keyword) var(musicexpr1) var(musicexpr2) ellipsis()
-)
-
-When the interpretation of this music expression starts, the context
-for var(musicexpr1), var(musicexpr2), etc. is that of the total
-expression.
-
-Lastly, you may wonder, why this:
-
-quote(
-verb(\score {
- \notes \relative c'' {
- c4 d4 e4
- }
-})
-)
-
-doesn't result in this:
-
-mudela()(
- \score {
- \notes \relative c'' {
- <c4> <d4> <e4>
- }
- }
-)
-
-For bind(the)code(c4), a default code(Staff) (with a contained
-code(Voice)) context is created. After bind(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 bind(the)code(c4) ends, the context of the
-sequential music is also the default code(Voice) context.
-bind(The)code(d4) gets interpreted in the same context
-bind(as)code(c4).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Predefined contexts)
-
-These are the contexts supplied with the package. They are defined
-in the initialization file file(ly/engraver.ly).
-
-description(
- dit(code(Grace))indexcode(Grace) nl()
- The context for handling grace notes. It is instantiated
- automatically when you use code(\grace). Basically, it is an
- `embedded' miniature of the Score context. Since this context
- needs special interaction with the rest of LilyPond, you should
- not explicitly instantiate it.
-
- dit(code(LyricVoice))indexcode(LyricVoice) nl()
- Corresponds to a voice with lyrics. Handles the printing of a
- single line of lyrics.
-
- dit(code(Thread))indexcode(Thread) nl()
- Handles note heads, and is contained in the Voice context. You
- have to instantiate this explicitly if you want to adjust the
- style of individual note heads.
-
- dit(code(Voice))indexcode(Voice) nl()
- Corresponds to a voice on a staff. This context handles the
- conversion of dynamic signs, stems, beams, super- and subscripts,
- slurs, ties, and rests.
-
- You have to instantiate this explicitly if you want to have
- multiple voices on the same staff.
-
- dit(code(ChordNamesVoice))indexcode(ChordNamesVoice) nl()
- A voice with chord names. Handles printing of a line of chord
- names.
-
- dit(code(ChordNames))indexcode(ChordNames) nl()
- Typesets chord names. Can contain code(ChordNamesVoice)
- contexts.
-
- dit(code(Lyrics))indexcode(Lyrics) nl()
- Typesets lyrics. It can contain code(LyricVoice) contexts.
-
- dit(code(Staff))indexcode(Staff) nl()
- Handles clefs, bar lines, keys, accidentals. It can contain
- code(Voice) contexts.
-
- dit(code(RhythmicStaff))indexcode(RhythmicStaff) nl()
- A context like code(Staff) but for printing rhythms. Pitches are
- ignored; the notes are printed on one line. It can contain
- code(Voice) contexts.
-
- dit(code(GrandStaff))indexcode(GrandStaff) nl()
- Contains code(Staff) or code(RhythmicStaff) contexts. It adds a
- brace on the left side, grouping the staffs together. The bar
- lines of the contained staffs are connected vertically. It can
- contain code(Staff) contexts.
-
- dit(code(PianoStaff))indexcode(PianoStaff) nl()
- Just like code(GrandStaff) but with code(minVerticalAlign) set
- equal to code(maxVerticalAlign) so that interstaff beaming and
- slurring can be used.
-
- dit(code(StaffGroup))indexcode(StaffGroup) nl()
- Contains code(Staff) or code(RhythmicStaff) contexts. Adds a
- bracket on the left side, grouping the staffs together. The bar
- lines of the contained staffs are connected vertically. It can
- contain code(Staff), code(RhythmicStaff), code(GrandStaff), or
- code(Lyrics) contexts.
-
- dit(code(ChoirStaff))indexcode(ChoirStaff) nl()
- Identical to code(StaffGroup) except that the contained staffs
- are not connected vertically.
-
- dit(code(Score))indexcode(Score) nl()
- This is the top level notation context. No other context can
- contain a code(Score) context. This context handles the
- administration of time signatures. It also makes sure that items
- such as clefs, time signatures, and key-signatures are aligned
- across staffs. It can contain code(Lyrics), code(Staff),
- code(RhythmicStaff), code(GrandStaff), code(StaffGroup), and
- code(ChoirStaff) contexts.
-
- You cannot explicitly instantiate a Score context (since it is
- not contained in any other context). It is instantiated
- automatically when an output definition (a code(\score) or
- code(\paper) block) is processed.
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context properties)
-
-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.
-
-Properties can be preset within the code(\translator) block
-corresponding to the appropriate context. In this case, the syntax
-is
-
-quote(
- var(propname) code(=) var(value)
-)
-
-This assignment happens before interpretation starts, so a
-code(\property) expression will override any predefined settings.
-
-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.
-
-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 em(translators). Translators for
-notation are called em(engravers), and translators for sound are
-called em(performers).
-
-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.
-
-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.
-
-subsubsect(Lyrics properties)
-cindex(properties!Lyrics)
-
-description(
- dit(code(textStyle))indexcode(textStyle) nl()
- Set the font for lyrics. The available font choices are
- code(roman), code(italic), code(bold), code(large), code(Large),
- code(typewriter), and code(finger). The code(finger) font can
- only display numbers. Note also that you must be careful when
- using code(\property) in Lyrics mode, because of the way strings
- are parsed. Either put quotes around the arguments to
- code(\property) or be sure to leave a space on both sides of the
- dot.
-)
-
-subsubsect(Thread properties)
-cindex(properties!Thread)
-
-description(
- dit(code(noteheadStyle))indexcode(noteheadStyle) nl()
- Selects type of note head. Choices are code(cross),
- code(diamond), code(harmonic), code(transparent), and code("").
- They are shown in that order below.
-
- mudela(center)(
- \score {
- \notes {
- \property Staff.barNonAuto = 1
- \property Voice.noteHeadStyle = cross
- a'
- \property Voice.noteHeadStyle = diamond
- a'
- \property Voice.noteHeadStyle = harmonic
- a'
- \property Voice.noteHeadStyle = transparent
- a'
- \property Voice.noteHeadStyle = ""
- a'
- }
- \paper {
- linewidth = -1.;
- }
- }
- )
-)
-
-subsubsubsect(Grace properties)
-cindex(properties!Grace)
-
-description(
- dit(indexandcode(stemStyle)) nl()
- By default set to code("grace") meaning that all unbeamed
- notes with flags are typeset with a slash through the flag.
- Setting to code("") gives standard flags.
-)
-
-subsubsect(Voice properties)
-cindex(properties!Voice)
-
-description(
- dit(code(abbrev))indexcode(abbrev) nl()
- Set length for tremolo to be used if no length is explicitly
- specified.
-
- dit(code(articulationScriptPadding))indexcode(articulationScriptPadding)
- nl()
- Determines the extra space added between articulation marks, such
- as staccato, tenuto, trill, up/down bow or fermata, and the
- closest staff line or note.
-
- dit(code(articulationScriptVerticalDirection))
- indexcode(articulationScriptVerticalDirection) nl()
- Determines the location of articulation marks. Set to code(\up)
- to print marks above the staff; set to code(\down) to print marks
- below the staff. This property does not override explicit
- directions marked with `code(^)' or `code(_)' in the mudela file.
-
- dit(code(noAutoBeaming))indexcode(beamAuto) nl()
- If set bind(to)1 then beams are not generated automatically.
-
- dit(code(beamAutoEnd))indexcode(beamAutoEnd) nl()
- Specifies when automatically generated beams can end. See
- bind(section)ref(autobeam).
-
- dit(code(beamAutoBegin))indexcode(beamAutoBegin) nl()
- Specifies when automatically generated beams can start. See
- bind(section)ref(autobeam).
-
- dit(code(beamquantisation))indexcode(beamquantisation) nl()
- Set to code(\none) for no quantization. Set to code(\normal) to
- quantize position and slope. Set to code(\traditional) to avoid
- wedges. These three settings are available via
- code(\beamposfree)keyindex(beamposfree),
- code(\beamposnormal)keyindex(beamposnormal), and
- code(\beampostraditional)keyindex(beampostraditional).
-
- dit(code(beamslopedamping))indexcode(beamslopedamping) nl()
- Set to code(\none) for undamped beams. Set to code(\normal) for
- damped beams. Set to code(\infinity) for beams with zero slope.
- The identifiers
- code(\beamslopeproportional)keyindex(beamslopeproportional),
- code(\beamslopedamped)keyindex(beamslopedamped), and
- code(\beamslopezero)keyindex(beamslopezero) each set the
- corresponding value.
-
- dit(code(dynamicDirection))indexcode(dynamicDirection) nl()
- Determines location of dynamic marks. Set to code(\up) to print
- marks above the staff; set to code(\down) to print marks below
- the staff.
-
- dit(code(dynamicStyle))indexcode(dynamicStyle) nl()
- Set the text style for dynamics.
-
- dit(code(fontSize))indexcode(fontSize) nl()
- Can be used to select smaller font sizes for music. The normal
- font size bind(is)0, and the two smaller sizes are -1
- bind(and)-2.
-
-
- dit(code(forceHorizontalShift))indexcode(forceHorizontalShift) nl()
- Force horizontal shift for collision resolution. It overrides
- automatic collision resolution. The value is the shift amount
- expressed in code(note_width), as set in the paper section.
-
-
- dit(code(horizontalNoteShift))indexcode(horizontalNoteShift) nl()
- Enable LilyPond to shift notes horizontally if they collide with
- other notes. This is useful when typesetting many voices on one
- staff. The identifier code(\shift)keyindex(shift) is defined to
- enable this. Traditionally, the outer chords (the upmost and
- downmost voices), should have no code(horizontalNoteShift).
-
- dit(code(markScriptPadding))indexcode(markScriptPadding) nl()
- Determines the extra space added between the mark and the closest
- staff line or note.
-
- dit(code(markDirection))indexcode(markDirection) nl()
- Determines if marks should be printed above or below the staff.
- Set to code(\up) to print marks above the staff; set to
- code(\down) to print marks below the staff.
-
- dit(code(midiInstrument))indexcode(midiInstrument) nl()
- Sets the instrument for MIDI output. If this property is not set
- then LilyPond will use the code(instrument) property. This must
- be set to one of the strings on the list of MIDI instruments that
- appears in bind(section)ref(midilist). If you use a string which
- is not listed, LilyPond will silently substitute piano.
-
-
- dit(code(oldTieBehavior))indexcode(oldTieBehavior) nl()
- Set bind(to)1 in order to get old tie behavior where ties would
- connect unequal pitches. This property is deprecated, and its
- use is not recommended.
-
- dit(code(restStyle))indexcode(restStyle) nl()
- Change the layout of rests shorter than quarter notes.
- Currently, the standard layout code("") and mensural notation
- code("mensural") are available. Mensural rests of duration
- 32 or shorter are not available.
-
- dit(code(scriptHorizontal))indexcode(scriptHorizontal) nl()
- Put scripts left or right of note heads. Support for this is
- limited. Accidentals will collide with scripts.
-
- dit(code(slurVerticalDirection))indexcode(slurVerticalDirection) nl()
- Set to code(\free) for free choice of slur direction, set to
- code(\up) to force slurs up, set to code(\down) to force slurs
- down. The shorthands code(\slurup)keyindex(slurup),
- code(\slurdown)keyindex(slurdown), and
- code(\slurboth)keyindex(slurboth) are available.
-
-
- dit(code(slurDash))indexcode(slurDash) nl()
- Set bind(to)0 for normal slurs, bind(1)for dotted slurs, and a
- larger value for dashed slurs. Identifiers
- code(\slurnormal)keyindex(slurnormal) and
- code(\slurdotted)keyindex(slurdotted) are predefined to set the
- first two settings.
-
-dit(code(stemLength))indexcode(stemLength) nl()
- Set length of stems. Unit is `code(interline)/2', so
- code(stemLength) defaults bind(to)7.
-
- dit(code(stemLeftBeamCount))indexcode(stemLeftBeamCount) nl()
- Specify the number of beams to draw on the left side of the next
- note. Overrides automatic beaming. The value is only used once,
- and then it is erased.
-
- dit(code(stemRightBeamCount))indexcode(stemRightBeamCount) nl()
- Specify the number of beams to draw on the right side of the next
- note. Overrides automatic beaming. The value is only used once,
- and then it is erased.
- dit(code(tieVerticalDirection))indexcode(tieVerticalDirection) nl()
- Set to code(\free) for free choice of tie direction, set to
- code(\up) to force ties up, set to code(\down) to force ties
- down.
-
- dit(code(transposing))indexcode(transposing) nl()
- Transpose the MIDI output. Set this property to the number of
- half-steps to transpose by.
-
-
- dit(code(textEmptyDimension))indexcode(textEmptyDimension) nl()
- If set bind(to)1 then text placed above or below the staff is
- assumed to have zero width.
-
- dit(code(textStyle))indexcode(textStyle) nl()
- Set the text style for superscripts and subscripts. See above
- for list of text styles.
-
- dit(code(textScriptPadding))indexcode(textScriptPadding) nl()
- Determines the extra space added between superscripted resp.
- subscripted text and the closest staff line or note.
-
- dit(code(verticalDirection))indexcode(verticalDirection) nl()
- Determines the direction of stems, subscripts, beams, slurs, and
- ties. Set to code(\down) to force them down, code(\up) to force
- them up, or code(\free) to let LilyPond decide. This can be used
- to distinguish between voices on the same staff. The
- code(\stemdown)keyindex(stemdown), code(\stemup)keyindex(stemup),
- and code(\stemboth)keyindex(stemboth) identifiers set this
- property.
-
-
- dit(code(tupletDirection))indexcode(tupletDirection) nl()
- Determines the direction of triplets and other tuplets. Set to
- code(\down) to force them below the staff, code(\up) to force
- them above, or code(\free) to let LilyPond decide.
-
- dit(code(tupletVisibility))indexcode(tupletVisibility) nl()
- Determines whether tuplets of notes are labelled. Setting
- bind(to)0 shows nothing; setting bind(to)1 shows a number;
- setting bind(to)2 shows a number and a bracket if there is no
- beam; setting bind(to)3 shows a number, and if there is no beam
- it adds a bracket; setting bind(to)4 shows both a number and a
- bracket unconditionally.
-
-)
-
-subsubsubsect(Staff properties)
-cindex(properties!Staff)
-
-description(
-
- dit(code(barNonAuto))indexcode(barNonAuto) nl()
- If set bind(to)1 then bar lines will not be printed
- automatically; they must be explicitly created with code(\bar)
- keywords. Unlike with the code(\cadenza) keyword, measures are
- still counted. Bar generation will resume according to that
- count if this property is set to zero.
-
- dit(code(barNumberDirection))indexcode(barNumberDirection) nl()
- Set to code(\up) or code(\down) to put bar numbers above or below
- the staff.
-
- dit(code(barNumberHangOnClef))indexcode(barNumberHangOnClef) nl()
- Set bind(to)1 to cause bar numbers to appear above or below the
- clef instead of on the bar line. This property is deprecated.
- Do not use.
-
- dit(code(barNumberScriptPadding))indexcode(barNumberScriptPadding) nl()
- Sets extra space between the bar number and the bar it labels.
-
- dit(code(barSize))indexcode(barSize) nl()
- Specify the height of the bar lines if it should be different
- than the staff height.
-
- dit(code(barAtLineStart))indexcode(barAtLineStart) nl()
- Set bind(to)1 to produce a bar line after the clef at the start
- of each line (but not at the beginning of the music).
-
- dit(code(clefStyle))indexcode(clefStyle) nl()
- Determines how clefs are typeset. If set to code(transparent),
- the clefs are not printed at all, if set to
- code(fullSizeChanges), clef changes in the middle of a line are
- typeset with a full size clef. By default, clef changes are
- typeset in smaller size.
-
- dit(code(createKeyOnClefChange))indexcode(createKeyOnClefChange) nl()
- Set to a nonempty string if you want key signatures to be printed
- when the clef changes. Set to the empty string if you do not
- want key signatures printed.
-
- dit(code(createInitdefaultClef))indexcode(createInitdefaultClef) nl()
- Specify whether clefs are created on default? (Doesn't seem to
- do anything.)
-
- dit(code(defaultClef))indexcode(defaultClef) nl()
- Determines the default clef. See code(\clef) keyword.
-
- dit(code(markHangOnClef))indexcode(markHangOnClef) nl()
- Set bind(to)1 to cause marks to appear by clefs instead of by bar
- lines. Deprecated, use is not recommended.
-
- dit(code(marginDirection))indexcode(marginDirection) nl()
- Set to code(\left) or code(\right) to specify location of
- marginal scripts.
-
- dit(code(marginScriptPadding))indexcode(marginScriptPadding) nl()
- Specify extra space for marginal scripts.
-
- dit(code(forgetAccidentals))indexcode(forgetAccidentals) nl()
- Causes accidentals to be printed at every note instead of
- remembered for the duration of a measure.
-
- dit(code(noResetKey))indexcode(noResetKey) nl()
- Do not reset the key at the start of a measure. Accidentals will
- be printed only once and are in effect until overridden, possibly
- many measures later.
-
- dit(code(staffLineLeading))indexcode(staffLineLeading) nl()
- Specifies the distance (in points) between lines of the staff.
-
- dit(code(numberOfStaffLines))indexcode(numberOfStaffLines) nl()
- Specifies the number of staff lines. The default bind(is)5.
-
- dit(code(postBreakPadding))indexcode(postBreakPadding) nl()
- Extra space in points to be added after the clef, time signature
- and key signature on the staff. Deprecated, do not use.
-
- dit(code(noVoltaBraces))indexcode(noVoltaBraces) nl()
- Set to true to suppress the printing of brackets over alternate
- endings specified by the command code(\alternative).
-
- dit(code(numberOfStaffLines))indexcode(numberOfStaffLines) nl()
- Sets the number of lines that the staff has.
-
- dit(code(barAlways))indexcode(barAlways) nl()
- If set bind(to)1 a bar line is drawn after each note.
-
- dit(code(defaultBarType))indexcode(defaultBarType) nl()
- Sets the default type of bar line. See bind(Section)ref(barlines)
- for a list of available bar types.
-
- dit(code(instrument), code(instr))
- indexcode(instrument)indexcode(instr) nl()
- If code(Staff_margin_engraver)cindex(Staff_margin_engraver) is
- added to the Staff translator, then the code(instrument) property
- is used to label the first line of the staff and the code(instr)
- property is used to label subsequent lines. If the
- code(midiInstrument) property is not set, then code(instrument)
- is used to determine the instrument for MIDI output.
-
- dit(code(keyOctaviation))indexcode(keyOctaviation) nl()
- If set bind(to)1, then keys are the same in all octaves. If set
- bind(to)0 then the key signature for different octaves can be
- different and is specified independently:
-
- quote(
- code(\keysignature bes fis')
- )
-
- The default value bind(is)1. Can be set to zero with
- code(\specialkey) or reset bind(to)1 with code(\normalkey).
-
- dit(code(timeSignatureStyle))indexcode(timeSignatureStyle) nl()
- Changes the default two-digit layout for time signatures. The
- following values are recognized:
-
- description(
- dit(code(C))indexcode(C) nl()
- 4/4 and 2/2 are typeset as C and struck C, respectively. All
- other time signatures are written with two digits.
-
- dit(code(old))indexcode(old) nl()
- 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and 9/8 are
- typeset with old-style mensuration marks. All other time
- signatures are written with two digits.
-
- dit(code(1))indexcode(1) nl()
- All time signatures are typeset with a single
- digit, e.g. 3/2 is written bind(as)3.
-
- dit(indexcode(CM/N)code(C)var(M)code(/)var(N),
- indexcode(oldM/N)code(old)var(M)code(/)var(N) or
- indexandcode(old6/8alt)) nl()
- Tells LilyPond to use a specific symbol as time signature.
- )
-
- The different time signature characters are shown below with its
- names:
-
- mudela(center)(
- \score {
- \notes\relative c'' {
- \property Voice.textStyle = typewriter
- \property Staff.timeSignatureStyle = "C2/2"
- \time 2/2; a2^"C2/2" a2
- \property Staff.timeSignatureStyle = "C4/4"
- \time 2/2; a2^"C4/4" a2
- \property Staff.timeSignatureStyle = "old2/2"
- \time 2/2; a2^"old2/2" a2
- \property Staff.timeSignatureStyle = "old3/2"
- \time 2/2; a2^"old3/2" a2
- \property Staff.timeSignatureStyle = "old2/4"
- \time 2/2; a2^"old2/4" a2
- \property Staff.timeSignatureStyle = "old4/4"
- \time 2/2; a2^"old4/4" a2
- \property Staff.timeSignatureStyle = "old6/4"
- \time 2/2; a2^"old6/4" a2
- \property Staff.timeSignatureStyle = "old9/4"
- \time 2/2; a2^"old9/4" a2
- \property Staff.timeSignatureStyle = "old4/8"
- \time 2/2; a2^"old4/8" a2
- \property Staff.timeSignatureStyle = "old6/8"
- \time 2/2; a2^"old6/8" a2
- \property Staff.timeSignatureStyle = "old6/8alt"
- \time 2/2; a2^"old6/8alt" a2
- \property Staff.timeSignatureStyle = "old9/8"
- \time 2/2; a2^"old9/8" a2
- }
- \paper {
- linewidth = 4.5 \in;
- }
- }
- )
-
- dit(code(voltaSpannerDuration))indexcode(voltaSpannerDuration) nl()
- Set to an integer to control the size of the brackets printed by
- code(\alternative). The integer specifies the number of whole
- notes duration to use for the brackets. It is rounded to the
- nearest measure. This can be used to shrink the length of
- brackets in the situation where one alternative is very large.
- It may have odd effects if the specified duration is longer than
- the music given in an code(\alternative).
-)
-
-subsubsect(GrandStaff properties)
-cindex(properties!GrandStaff)
-
-description(
- dit(code(alignmentReference))indexcode(alignmentReference) nl()
- Set to code(\center) for vertical alignment reference point to be
- in the center of the vertical group. Set to code(\up) to put the
- reference point at the top of the group.
-
- dit(code(maxVerticalAlign))indexcode(maxVerticalAlign) nl()
- Set the maximum vertical distance between staffs.
-
- dit(code(minVerticalAlign))indexcode(minVerticalAlign) nl()
- Set the minimum vertical distance between staffs.
-)
-
-subsubsect(Score properties)
-cindex(properties!Score)
-
-description(
- dit(code(skipBars))indexcode(skipBars) nl()
- Set bind(to)1 to skip the empty bars that are produced by
- multimeasure notes and rests. These bars will not appear on the
- printed output. Set to zero (the default) to expand multimeasure
- notes and rests into their full length, printing the appropriate
- number of empty bars so that synchronization with other voices is
- preserved.
-
- quote(
-mudela(fragment,verbatim,center)\
- (r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3
-)
- )
-)
-
-subsubsect(ChordNamesVoice properties)
-cindex(properties!ChordNamesVoice)
-
-description(
- dit(code(chordInversion))indexcode(chordInversion) nl()
- Determines whether LilyPond should look for chord inversions when
- translating from notes to chord names. Set bind(to)1 to find
- inversions. The default bind(is)0 which does not look for
- inversions.
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Notation output definitions)
-cindex(output)
-cindex(notation output)
-cindex(output definition)
-label(output)
-label(paper)
-
-The most important output definition is the code(\paper) block, for
-music notation. The syntax is
-
-quote(
- code(\paper {) [var(paperidentifier)] var(items) code(})
-)
-
-where each of the items is one of
-
-itemize(
- it() An assignment. The assignment must be terminated by a
- semicolon. See bind(section)ref(papervars) for information on
- paper variables.
-
- it() A context definition. See bind(section)ref(contextdefs) for
- more information on context definitions.
-
- it() A margin shape declaration. The syntax is
-
- quote(
- code(\shape) var(indent1)code(,) var(width1)code(,)
- var(indent2)code(,) var(width2) ellipsis() code(;)
- )
- keyindex(shape)
-
- 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.
-
- it() A font declaration. Its syntax is
-
- quote(
- var(fontsize) code(=) code(\font)keyindex(font) var(fontname)
- )
-
- var(fontsize) is an integer describing the font to be used.
- bind(0)is the default font. var(fontname) is the basename of
- a font (usually a member of the Feta family).
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Changing Font Size and Paper Size)
-cindex(changing font size and paper size)
-
-The Feta font provides musical symbols at six different sizes. These
-fonts are bind(11)point, bind(13)point, bind(16)point, bind(20)point,
-bind(23)point, and bind(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, 20, 23 bind(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.
-
-To change the paper size, you must first set the
-indexandcode(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 bind(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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Paper variables)
-cindex(paper variables)
-label(papervars)
-
-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.
-
-Nevertheless, here are some variables you may want to use or change:
-
-description(
- dit(code(indent))indexcode(indent) nl()
- The indentation of the first line of music.
-
- dit(code(interline))indexcode(interline) nl()
- 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.
-
- dit(code(linewidth))indexcode(linewidth) nl()
- Sets the width of the lines. If set bind(to)-1.0, a single
- unjustified line is produced.
-
- dit(code(output))indexcode(output) nl()
- Specifies an alternate name for the the output file(s).
- A file(.tex), file(.midi) or file(.ps) extension will be
- added to the string you specify.
-
- dit(code(rulethickness))indexcode(rulethickness) nl()
- Determines the thickness of staff and bar lines.
-
- dit(code(castingalgorithm))indexcode(castingalgorithm) nl()
- The algorithm to use for breaking lines. Choices are
- code(\Gourlay)keyindex(Gourlay) for a TeX()-like dynamic
- programming algorithm, and code(\Wordwrap)keyindex(Wordwrap) for
- a simple algorithm. Gourlay breaking looks much better, but
- takes a lot more resources. Wordwrap leaves loosely spaced lines
- at the end.
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context definitions)
-label(contextdefs)
-cindex(context definition)
-
-A notation contexts is defined by the following information
-
-enumerate(
- it() A name.
-
- it() The LilyPond modules that do the actual conversion of music to
- notation. Each module is a so-called
- em(engraver)cindex(engraver).
-
- it() How these modules should cooperate, i.e. which ``cooperation
- module'' should be used. This cooperation module is a special
- type of engraver.
-
- it() What other contexts the context can contain,
-
- it() What properties are defined.
-)
-
-A context definition has this syntax:
-
-quote(
- code(\translator) code({)
- var(translatorinit) var(translatormodifierlist)
- code(})
-)
-
-var(translatorinit) can be an identifier or of the form
-
-quote(
- code(\type) var(typename) code(;)
-)
-
-var(typename) is one of
-
-description(
- dit(code(Engraver_group_engraver))indexcode(Engraver_group_engraver) nl()
- The standard cooperation engraver.
-
- dit(code(Score_engraver))indexcode(Score_engraver) nl()
- This is cooperation module that should be in the top level context.
-
- dit(code(Grace_engraver_group))indexcode(Grace_engraver_group) nl()
- This is a special cooperation module (resembling
- code(Score_engraver)) that is used to created an embedded
- `miniscore'.
-)
-
-var(translatormodifierlist) is a list of items where each item is
-one of
-
-itemize(
- it() code(\consists) var(engravername) code(;) nl()
- Add var(engravername) to the list of modules in this context.
- bind(Section)ref(engravers) contains an overview of the engravers
- available. The order of engravers added with code(\consists) is
- significant.
-
- it() code(\consistsend) var(engravername) code(;) nl()
- 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.
-
- it() code(\accepts) var(contextname) code(;) nl()
- Add var(contextname) to the list of context this context can
- contain. The first listed context the context to create by
- default.
-
- it() code(\remove) var(engravername) code(;) nl()
- Remove a previously added (with code(\consists)) engraver.
-
- it() code(\name) var(contextname) code(;) nl()
- This sets name of the context, e.g. code(Staff), code(Voice). If
- the name is not specified, the translator won't do anything.
-
- it() var(propname) code(=) var(value) code(;) nl()
- A property assignment. It is allowed to use reals for
- var(value).
-)
-
-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
-
-quote(
-verb(\paper {
- foo = \translator { ... }
-}
-\score {
- \notes {
- ...
- }
- \paper {
- \translator { \foo ... }
- }
-})
-)
-
-subsubsect(Paper Types, Engravers, and Pre-defined Translators)
-cindex(paper types, engravers, and pre-defined translators)
-
-Some pre-defined identifiers can simplify modification of
-translators. The pre-defined identifiers are:
-
-description(
- dit(code(StaffContext))indexcode(StaffContext) nl()
- Default Staff context.
-
- dit(code(RhythmicStaffContext))indexcode(RhythmicStaffContext) nl()
- Default RhythmicStaff context.
-
- dit(code(VoiceContext))indexcode(VoiceContext) nl()
- Default Voice context.
-
- dit(code(ScoreContext))indexcode(ScoreContext) nl()
- Default Score context.
-
- dit(code(ScoreWithNumbers))indexcode(ScoreWithNumbers) nl()
- Score context with numbering at the Score level.
-
- dit(code(BarNumberingStaffContext))indexcode(BarNumberingStaffContext) nl()
- Staff context with numbering at the Staff level.
-
- dit(code(HaraKiriStaffContext))indexcode(HaraKiriStaffContext) nl()
- 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.)
-
- dit(code(OrchestralPartStaffContext))indexcode(OrchestralPartStaffContext)
-
- dit(code(OrchestralScoreContext))indexcode(OrchestralScoreContext)
-)
-
-Using these pre-defined values, you can remove or add items to the
-translator:
-
-quote(
-verb(\paper {
- \translator {
- \StaffContext
- \remove Some_engraver;
- \consists Different_engraver;
- }
-})
-)
-
-subsubsect(Engravers)
-label(engravers)
-
-The engravers for paper output are:
-
-[incomplete, FIXME]
-
-description(
- dit(code(Bar_engraver))indexcode(Bar_engraver) nl()
- Engraves bar lines. Normally in code(Staff) and
- code(RhythmicStaff).
-
- dit(code(Bar_number_engraver))indexcode(Bar_number_engraver) nl()
- Engrave bar numbers. These numbers appear at the start of each
- line. Not normally in any translator. Can be added to
- code(Score) for score-wide numbering or to code(Staff) for
- numbering on each staff.
-
- dit(code(Beam_engraver))indexcode(Beam_engraver) nl()
- Handles beam requests by engraving beams. Normally appears in
- the code(Voice) translator. If omitted, then notes will be
- printed with flags instead of beams.
-
- dit(code(Beam_req_swallow_translator))
- indexcode(Beam_req_swallow_translator) nl()
- Swallows beam requests. In code(LyricVoice).
-
- dit(code(Chord_name_engraver))indexcode(Chord_name_engraver) nl()
- Engraves chord names. Normally in code(ChordNameVoice) .
-
- dit(code(Chord_tremolo_engraver))indexcode(Chord_tremolo_engraver)
-
- dit(code(Clef_engraver))indexcode(Clef_engraver) nl()
- Engraves the clef symbol. Normally in code(Staff).
-
- dit(code(Collision_engraver))indexcode(Collision_engraver)
-
- dit(code(Dot_column_engraver))indexcode(Dot_column_engraver) nl()
- Engraves dots on dotted notes shifted to the right of the note.
- Normally in code(Voice). If omitted, then dots appear on top of
- the notes.
-
- dit(code(Dynamic_engraver))indexcode(Dynamic_engraver) nl()
- Engraves dynamics symbols. Normally in code(Voice).
-
- dit(code(Font_size_engraver))indexcode(Font_size_engraver)
-
- dit(code(Key_engraver))indexcode(Key_engraver) nl()
- Engraves the key signature. Normally in code(Staff).
-
- dit(code(Local_key_engraver))indexcode(Local_key_engraver)
-
- dit(code(Lyric_engraver))indexcode(Lyric_engraver) nl()
- Engraves lyrics. Normally in code(LyricVoice).
-
- dit(code(Multi_measure_rest_engraver))
- indexcode(Multi_measure_rest_engraver) nl()
- Engraves multi-measure rests that are produced with code(R).
- Normally in code(Voice).
-
- dit(code(Piano_bar_engraver))indexcode(Piano_bar_engraver)
-
- dit(code(Pitch_squash_engraver))indexcode(Pitch_squash_engraver) nl()
- Treat all pitches as middle C. Used in code(RhythmicStaff).
- Note that the notes move, but the locations of accidentals stay
- the same.
-
- dit(code(Priority_horizontal_align_engraver))
- indexcode(Priority_horizontal_align_engraver)
-
- dit(code(Repeat_engraver))indexcode(Repeat_engraver) nl()
- Handles repeats? In code(Staff) and code(RhythmicStaff).
-
- dit(code(Rest_collision_engraver))indexcode(Rest_collision_engraver) nl()
- Handles collisions of rests. In code(Staff).
-
- dit(code(Rest_engraver))indexcode(Rest_engraver) nl()
- Engraves rests. Normally in code(Voice).
-
- dit(code(Rhythmic_column_engraver))indexcode(Rhythmic_column_engraver)
-
- dit(code(Score_priority_engraver))indexcode(Score_priority_engraver)
-
- dit(code(Script_engraver))indexcode(Script_engraver) nl()
- Handles note ornaments generated by code(\script). Normally in
- code(Voice).
-
- dit(code(Separating_line_group_engraver))
- indexcode(Separating_line_group_engraver)
-
- dit(code(Skip_req_swallow_translator))
- indexcode(Skip_req_swallow_translator)
-
- dit(code(Slur_engraver))indexcode(Slur_engraver) nl()
- Engraves slurs. Normally in code(Voice).
-
- dit(code(Span_bar_engraver))indexcode(Span_bar_engraver) nl()
- Engraves lines across multiple staffs. Normally in
- code(Staffgroup) and code(GrandStaff). Removing this from
- code(StaffGroup) gives the definition of code(ChoirStaff).
-
- dit(code(Span_score_bar_engraver))indexcode(Span_score_bar_engraver)
-
- dit(code(Staff_group_bar_engraver))indexcode(Staff_group_bar_engraver)
-
- dit(code(Staff_margin_engraver))indexcode(Staff_margin_engraver) nl()
- Prints the name of the instrument (specified by
- code(Staff.instrument) and code(Staff.instr)) at the left of the
- staff.
-
- dit(code(Staff_sym_engraver))indexcode(Staff_sym_engraver)
-
- dit(code(Stem_engraver))indexcode(Stem_engraver) nl()
- Engraves stems. Normally in code(Voice).
-
- dit(code(Ties_engraver))indexcode(Ties_engraver) nl()
- Engraves ties. Normally in code(Voice).
-
- dit(code(Time_signature_engraver))indexcode(Time_signature_engraver) nl()
- Engraves the time signature. Normally in code(Staff) and
- code(RhythmicStaff).
-
- dit(code(Timing_engraver))indexcode(Timing_engraver) nl()
- Responsible for synchronizing timing information from staffs.
- Normally in code(Score). In order to create polyrhythmic music,
- this engraver should be removed from code(Score) and placed in
- code(Staff).
-
- dit(code(Tuplet_engraver))indexcode(Tuplet_engraver) nl()
- Engraves tuplet brackets? In code(Staff).
-
- dit(code(Vertical_align_engraver))indexcode(Vertical_align_engraver)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Sound output)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(output definition)
-
-The MIDI block is analogous to the paper block, but it is simpler.
-The code(\midi) block can contain:cindex(MIDI block)
-
-itemize(
- it() a code(\tempo) definition
- it() context definitions
-)
-
-Assignments in the code(\midi) block are not allowed.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context definitions)
-cindex(context definition)
-
-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).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(MIDI Instrument Names)
-cindex(MIDI instrument names)
-label(midilist)
-
-The MIDI instrument name is set by the
-indexandcode(Staff.midiInstrument) property or, if that property is
-not set, the indexandcode(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.
-
-COMMENT( acordina = accordion, tango accordian = concertina
- distortion guitar = distorted guitar
- orchestral strings = harp
- pan flute = wood flute? )
-
-quote(
-verb("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)")
-)
-
-subsubsect(MIDI Types and Performers)
-cindex(MIDI types and performers)
-
-The types available for MIDI translators are:
-
-description(
- dit(code(Performer_group_performer))indexcode(Performer_group_performer)
- dit(code(Score_performer))indexcode(Score_performer)
- dit(code(Staff_performer))indexcode(Staff_performer)
-)
-
-The performers for MIDI translators are:
-
-description(
- dit(code(Key_performer))indexcode(Key_performer)
- dit(code(Time_signature_performer))indexcode(Time_signature_performer)
- dit(code(Note_performer))indexcode(Note_performer)
- dit(code(Lyric_performer))indexcode(Lyric_performer)
- dit(code(Swallow_performer))indexcode(Swallow_performer)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Pre-defined Identifiers)
-cindex(pre-defined identifiers)
-label(ident)
-
-Various identifiers are defined in the initialization files to
-provide shorthands for some settings. Most of them are in
-file(ly/declarations.ly).
-
-description(
- dit(code(\break))keyindex(break) nl()
- Force a line break in music by using a large argument for the
- keyword code(\penalty).
-
- dit(code(\center))keyindex(center) nl()
- Used for setting direction properties. bind(Equals)0.
-
- dit(code(\down))keyindex(down) nl()
- Used for setting direction setting properties. Is equal
- bind(to)-1.
-
- dit(code(\free))keyindex(free) nl()
- Used for setting direction setting properties. Is equal
- bind(to)0.
-
- dit(code(\left))keyindex(left) nl()
- Used for setting text alignment property. Is equal bind(to)-1.
-
- dit(code(\nobreak))keyindex(nobreak) nl()
- Prevent a line break in music by using a large negative argument
- for the keyword code(\penalty).
-
- dit(code(\none))keyindex(none) nl()
- Used for setting code(Score.beamslopedamping) and
- code(Score.beamquantisation) properties. Is equal bind(to)0.
-
- dit(code(\normal))keyindex(normal) nl()
- Used for setting code(Score.beamslopedamping) and
- code(Score.beamquantisation) properties. Is equal bind(to)1.
-
- dit(code(\normalkey))keyindex(normalkey) nl()
- Select normal key signatures where each octave has the same key
- signature. This sets the code(Staff.keyoctaviation) property.
-
- dit(code(\right))keyindex(right) nl()
- Used for setting text alignment property. Is set bind(to)1.
-
- dit(code(\shiftoff))keyindex(shiftoff) nl()
- Disable horizontal shifting of note heads that collide. Sets the
- code(Voice.horizontalNoteShift) property.
-
- dit(code(\shifton))keyindex(shifton) nl()
- Enable note heads that collide with other note heads to be
- shifted horiztonally. Sets the code(Voice.horizontalNoteShift)
- property.
-
- dit(code(\slurboth))keyindex(slurboth) nl()
- Allow slurs to be above or below notes. This sets the
- code(Voice.slurVerticalDirection) property.
-
- dit(code(\slurdown))keyindex(slurdown) nl()
- Force slurs to be below notes. This sets the
- code(Voice.slurVerticalDirection) property.
-
- dit(code(\slurup))keyindex(slurup) nl()
- Force slurs to be above notes. This sets the
- code(Voice.slurVerticalDirection) property.
-
- dit(code(\specialkey))keyindex(specialkey) nl()
- Allow key signatures do differ in different octaves. This sets
- the code(Staff.keyoctaviation) property.
-
- dit(code(\stemboth))keyindex(stemboth) nl()
- Allow stems, beams, and slurs to point either upwards or
- downwards, decided automatically by LilyPond. This sets the
- code(Voice.verticalDirection) property.
-
- dit(code(\stemdown))keyindex(stemdown) nl()
- Force stems, beams, and slurs to point down. This sets the
- code(Voice.verticalDirection) property.
-
- dit(code(\stemup))keyindex(stemup) nl()
- Force stems, beams and slurs to point up. This sets the
- code(Voice.verticalDirection) property.
-
- dit(code(\traditional))keyindex(traditional) nl()
- Used for setting the code(Score.beamquantisation) property. Is
- equal bind(to)2.
-
- dit(code(\up))keyindex(up) nl()
- Used for setting various direction properties. Is equal
- bind(to)1.
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Running LilyPond)
-cindex(running LilyPond)
-
-
-When invoked with a filename that has no extension, LilyPond will try
-adding `file(.ly)' as an extension first, then `file(.fly)' and
-finally `file(.sly)' extension. If the filename ends with
-`file(.fly)', LilyPond processes the file as music using
-`file(init.fly)'. In this case, LilyPond does something like:
-
-quote(
-verb(\score {
- \notes\relative c {
- \input "yourfile.fly"
- }
- \paper{}
- \midi{}
-})
-)
-The result of `file(.sly)' is similar except that a single unjustified
-line is produced.
-
-If you invoke LilyPond with a file `file(foo.)var(ext)' that doesn't
-have the `file(.ly)' extension, then LilyPond will look for a file
-called `file(init.)var(ext)' and process this file. The file
-`file(init.)var(ext)' must contain the code(\maininput) keyword or
-LilyPond will not read the user specified file.
-
-When LilyPond processes file(filename.ly) it will produce
-file(filename.tex) as output. If file(filename.ly) contains a second
-code(\paper) keyword, then LilyPond will produce file(filename-1.tex)
-as well. Subsequent code(\paper) keywords will produce sequentially
-numbered file names. Several files can be specified; they will each
-be processed independently.footnote(Not entirely true: The status of
-GUILE is kept.)
-
-whenlatex(latexcommand(\printindex))
-
-COMMENT(End of reference-manual.yo)
+++ /dev/null
-mailto(gnu-music-discuss@gnu.org)
-COMMENT(-*-text-*-)
-
-redef(var)(1)(whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
- whenhtml(sc(ARG1)))
-
-COMMENT(urg)
-DEFINEMACRO(Large)(1)(\
- whenlatex(latexcommand(\Large{)ARG1+latexcommand(}))\
- whentexinfo(texinfocommand(@strong{)ARG1+texinfocommand(}))\
- whenhtml(htmlcommand(<font size=+2>)ARG1+htmlcommand(</font>))\
- whentxt(ARG1))
-
-COMMENT( This document contains Mudela fragments. You need at least
-Yodl-1.30.18 to convert this to tex or html.
-
-TODO
-
- * pipethrough(date) sucks.
- * paragraphs have too much space.
- * fix the amount of spaces (urg:tabs) at the start of verb() blocks
- or even better: do verb and description side-by side
- (TeX: use minipage construct):
-
- \foo This does the
- foo construct
-
- The explaining texts are right in between examples.
- Constructs like 'This shows' and 'The next line' are esp.
- confusing, here.
-)
-
-COMMENT(
- Mainly written by Han-Wen Nienhuys,
-
- with help of (among others)
-
- * Jan Nieuwenhuizen
-)
-
-htmlbodyopt(bgcolor)(white)
-htmlcommand(<font color=black>)
-
-latexlayoutcmds(
- \topmargin -0.25in
- \textheight 53\baselineskip
- \advance\textheight by \topskip
- \marginparwidth 1 in % Width of marginal notes.
- \oddsidemargin 0.25 in % Note that \oddsidemargin = \evensidemargin
- \evensidemargin 0.25 in
- \marginparwidth 0.75 in
- \textwidth 5.875 in % Width of text line.
- \input mudela-book
-)
-
-whenlatex(notableofcontents())
-whentexinfo(notableofcontents())
-
-article(Typesetting music with LilyPond)
- (Han-Wen Nienhuys and Jan Nieuwenhuizen)
- (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
-
-
-latexcommand(\def\interexample{})
-latexcommand(\def\preexample{\par})
-latexcommand(\def\postexample{\par\medskip})
-latexcommand(\def\file#1{{code(#1)}})
-
-whenhtml(
-includefile(html-disclaimer.yo-urg)
-)
-
-
-sect(Introduction)
-label(tutorial:introduction)
-latexcommand(\parindent2pc)
-
-LilyPond prints music from a specification that you, the user, supply.
-You have to give that specification using a em(language). This
-document is a gentle introduction to that language, which is called
-Mudela, an acronym of Music Definition Language.
-
-This tutorial will demonstrate how to use Mudela by presenting
-examples of input along with resulting output. We will use English
-terms for notation. In case you are not familiar with those, you may
-consult the glossary that is distributed with LilyPond.
-
-The examples discussed are included in the distribution, in the
-subdirectory file(input/tutorial/). It is recommended that you
-experiment with writing Mudela input yourself, to get a feel for
-how LilyPond behaves.
-
-sect(The first tune)
-label(sec:firsttune)
-
-To demonstrate what LilyPond input looks like, we start off with a
-full fledged, yet simple example. It is a convoluted version
-of the famous menuet in bind(J.)bind(S.)Bach's em(Klavierbuechlein).
-
-COMMENT(urg: the fermata sign is placed below the note by default)
-mudela(verbatim)(% lines preceded by a percent are comments.
-\include "paper16.ly"
-\score {
- \notes
- \relative c'' \sequential{
- \time 3/4;
- \key g;
-
- \repeat "volta" 2 {
- d4 g,8 a b c d4 g, g |
- e'4 c8 d e fis g4 g, g |
- c4 d8()c b a( )b4 c8 b a g |
- a4 [b8 a] [g fis] g2. |
- }
-
- b'4 g8 a b g
- a4 d,8 e fis d |
- g4 e8 fis g d cis4 b8 cis a4 |
- a8-. b-. cis-. d-. e-. fis-.
- g4 fis e |
- fis a, r8 cis8
- d2.-\fermata
- \bar "|.";
- }
- \paper {
- % standard settings are too wide for a book
- linewidth = 14.0 \cm;
- }
-})
-
-Enter it (or copy it, the filename is file(menuet.ly)), compile it
-with LilyPond and view the output. Details of this procedure may vary
-from system to system. To create the output, one would issue the
-command `code(ly2dvi menuet)'. file(ly2dvi) is a program that does
-the job of running LilyPond and TeX(), handling of titles and
-adjusting of page margins.
-
-If all goes well, the file file(menuet.dvi) will be created.
-To view this output, issue the command `code(xdvi menuet)'.
-
-Now that we are familiar with the procedure of producing output, we
-will analyse the input, line by line.COMMENT(
-
-)verb(
- % lines preceded by a percent are comments.
-)COMMENT(
-
-)The percent sign, `code(%)', introduces a line comment. If you want to
-make larger comments, you can use block comments. These are delimited
-by `code(%{)' and `code(%})'COMMENT(
-
-)verb(
- \input "paper16.ly"
-)COMMENT(
-
-)By default, LilyPond will use definitions for a 20
-nop(point)footnote(A point is the standard measure of length for
-printing. One point is 1/72.27 inch.) high staff. We want smaller
-output (16 point staff height), so we must import the settings for
-that size, which is done.COMMENT(
-
-)verb(
- \score {
-) COMMENT(
-
-) A mudela file combines music with directions for outputting that
-music. The music is combined with the output directions by putting
-them into a code(\score) block.
-verb(
- \notes
-) COMMENT(
-
-)This makes LilyPond ready for accepting notes.
-verb(
- \relative c''
-)COMMENT(
-
-) As we will see, pitches are combinations of octave, note name and
-chromatic alteration. In this scheme, the octave is indicated by
-using raised quotes (`code(')') and ``lowered'' quotes (commas:
-`code(,)'). The central C is denoted by code(c'). The C one octave
-higher is code(c''). One and two octaves below the central C is
-denoted by code(c) and code(c,) respectively.
-
-For pitches in a long piece you might have to type many quotes. To
-remedy this, LilyPond has a ``relative'' octave entry mode. In this
-mode, octaves of notes without quotes are chosen such that a note is
-as close as possible (graphically, on the staff) to the the preceding
-note. If you add a high-quote an extra octave is added. The lowered
-quote (a comma) will subtract an extra octave. Because the first note
-has no predecessor, you have to give the (absolute) pitch of the note
-to start with.COMMENT(
-
-)verb(
- \sequential {
-)COMMENT(
-
-) What follows is sequential music, i.e.,
-notes that are to be played and printed after each other.COMMENT(
-
-)verb(
- \time 3/4;
-) COMMENT(
-
-) This command changes the time signature of the current piece: a 3/4
-sign is printed. This command is also used to generate bar lines in
-the right spots.COMMENT(
-
-)verb(
- \key g;
-)COMMENT(
-
-) This command changes the current key to G-major. Although this
-command comes after the code(\time) command, in the output, the key
-signature comes before the time signature: LilyPond knows about music
-typesetting conventions. COMMENT(
-
-)verb(
- \repeat "volta" 2
-) COMMENT(
-
-) This command tells LilyPond that the following piece of music must
-be played twice; code("volta") volta brackets should be used for
-alternatives---if there were any.
-COMMENT(
-
-)verb(
- {
-)COMMENT(
-
-)The subject of the repeat is again sequential music. Since
-code(\sequential) is such a common construct, a shorthand is provided:
-just leave off code(\sequential), and the result is the same. COMMENT(
-
-)verb(
- d4
-)COMMENT(
-
-) This is a note with pitch code(d) (determined up to octaves). The
-relative music was started with a code(c''), so the real pitch of this
-note is code(d''). The code(4) designates the duration of the note
-(it is a quarter note). COMMENT(
-
-)verb(
- a b
-)COMMENT(
-
-)These are notes with pitch code(a) and code(b). Because their
-duration is the same as the code(g), there is no need to enter the
-duration (You may enter it anyway, eg. code(a4 b4)) COMMENT(
-
-)verb(
- d4 g, g |
-)COMMENT(
-
-) Three more notes. The `code(|)' character is a `barcheck'. When
-processing the music, LilyPond will verify that barchecks are found at
-the start of a measure. This can help you track down errors.
-
- So far, no notes were chromatically altered. Here is the first one
-that is: code(fis). Mudela by default uses Dutch note names, and
-``Fis'' is the Dutch note name for ``F sharp''. However, there is no
-sharp sign in the output. The program keeps track of key signatures,
-and will only print accidentals if they are needed.
-COMMENT(
-
-)verb(
- c8 d e fis
-)COMMENT(
-
-)LilyPond guesses were beams can be added to eighth and shorter notes.
-In this case, a beam over 4 eighths is added.
-COMMENT(
-
-)verb(
- c4 d8( )c b a( )b4 c8 b a g |
-) COMMENT(
-
-) The next line shows how to make a slur:
-the beginning and ending note of the slur is marked with an opening and
-closing parenthesis respectively. In the line shown above this is
-done for two slurs. Slur markers (parentheses) are between
-the notes.COMMENT(
-)verb(
- a4 [b8 a] [g fis]
-)COMMENT(
-
-)Automatic beaming can be overridden by inserting beam marks
-(brackets). Brackets are put around notes you want beamed.COMMENT(
-
-)verb(
- g2. |
-)COMMENT(
-
-)A duration with augmentation dot is notated
-with the duration number followed by a period.COMMENT(
-)verb(
- }
-) COMMENT(
-
-) This ends the sequential music to be repeated. LilyPond will typeset
-a repeat bar. COMMENT(
-
-)verb(
- cis'4 b8 cis a4 |
-) COMMENT(
-
-)This line shows that Lily will print an accidental if that is
-needed: the first C sharp will be printed with an accidental, the
-second one without. COMMENT(
-
-)verb(
- a8-. b-. cis-. d-. e-. fis-.
-)COMMENT(
-
-)You can enter articulation signs either in a verbose form using a
-shorthand. Here we demonstrate the shorthand: it is formed by a dash
-and the the character for the articulation to use, e.g. `code(-.)' for
-staccato as shown above. COMMENT(
-
-)verb(
- fis a, r8 cis8
-) COMMENT(
-
-)
-Rests are denoted by the special notename `code(r)'. You can also enter
-an invisible rest by using the special notename `code(s)'.
-verb(
- d2.-\fermata
-) COMMENT(
-
-)All articulations have a verbose form, like code(\fermata). The
-command `code(\fermata)' is not part of the core of the language (most
-of the other discussed elements are), but it is a shorthand for a more
-complicated description of a fermata. code(\fermata) names that
-description and is therefore called an em(identifier). COMMENT(
-
-)verb(
- }
-) COMMENT(
-
-)
-Here the music ends.
-COMMENT(
-
-)verb(
- \paper {
- linewidth = 14.0\cm;
- }
-)COMMENT(
-
-)This specifies a conversion from music to notation output. Most of
-the details of this conversions (font sizes, dimensions, etc.) have
-been taken care of, but to fit the output in this document, it has
-to be smaller. We do this by setting the line width to 14 centimeters
-(approximately 6 inches).
-COMMENT(
-
-)verb(
- }
-)COMMENT(
-
-)The last brace ends the code(\score) block.
-
-There are two things to note here. The format contains musical
-concepts like pitches and durations, instead of symbols and positions:
-the input format tries to capture the meaning of em(music), and not
-notation. Therefore Second, the format tries to be em(context-free):
-a note will sound the same regardless of the current time signature,
-the key, etc.
-
-The purpose of LilyPond is explained informally by the term `music
-typesetter'. This is not a fully correct name: not only does the
-program print musical symbols, it also makes esthetic decisions. All
-symbols and their placement is em(generated) from a high-level musical
-description. In other words, LilyPond would be best
-described by `music compiler' or `music to notation compiler'.
-
-
-sect(Lyrics and chords)
-
-In this section we show how to typeset a song of unknown
-origin.footnote(The author would welcome information about the origin
-of this song.).
-
-verb(\header {
- title = "The river is flowing";
- composer = "Traditional (?)";
-}
-\include "paper16.ly"
-melody = \notes \relative c' {
- \partial 8;
- g8 |
- c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
- c4 c8 d [es () d] c4 | d4 es8 d c4.
- \bar "|.";
-}
-
-text = \lyrics {
- The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
- ri -- ver is flo -- wing down to the sea.
-}
-
-accompaniment =\chords {
- r8
- c2-3- f-3-.7 d-min es4 c8-min r8
- c2-min f-min7 g-7^3.5 c-min }
-
-\score {
- \simultaneous {
-% \accompaniment
- \context ChordNames \accompaniment
-
- \addlyrics
- \context Staff = mel {
- \property Staff.noAutoBeaming = "1"
- \property Staff.automaticMelismata = "1"
- \melody
- }
- \context Lyrics \text
- }
- \midi { }
- \paper { linewidth = 10.0\cm; }
-})
-
-
-The result would look nop(this)footnote(The titling and font size shown
-may differ, since the titling in this document is not generated by
-file(ly2dvi).).
-
-center(bf(Large(The river is flowing))
-
-var(Traditional (?))
-)
-
-mudela(center)(\header {
- title = "The river is flowing";
- composer = "Traditional (?)";
-}
-\include "paper16.ly"
-melody = \notes \relative c' {
- \partial 8;
- g8 |
- c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
- c4 c8 d [es () d] c4 | d4 es8 d c4.
- \bar "|.";
-}
-
-text = \lyrics {
- The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
- ri -- ver is flo -- wing down to the sea.
-}
-
-accompaniment =\chords {
- r8
- c2-3- f-3-.7 d-min es4 c8-min r8
- c2-min f-min7 g-7^3.5 c-min }
-
-\score {
- \simultaneous {
-% \accompaniment
- \context ChordNames \accompaniment
-
- \addlyrics
- \context Staff = mel {
- \property Staff.noAutoBeaming = "1"
- \property Staff.automaticMelismata = "1"
- \melody
- }
- \context Lyrics \text
- }
- \midi { }
- \paper { linewidth = 10.0\cm; }
-})
-
-Again, we will dissect the file line by line.COMMENT(
-
-)verb(
- \header {
-)COMMENT(
-
-)Information about the music you are about to typeset goes into a
-code(\header) block. The information in this block is not used by
-LilyPond, but it is included in the output. file(ly2dvi) uses this
-information to print titles above the music.
-verb(
- title = "The river is flowing";
- composer = "Traditional (?)";)COMMENT(
-
-)the code(\header) block contains assignments. An assignment starts
-with a string. (which is unquoted, in this case). Then comes the
-equal sign `code(=)'. After the equal sign comes the expression you
-want to store. In this case, you want to put in strings. The
-information has to be quoted here, because it contains spaces. The
-assignment is finished with a semicolon.COMMENT(
-
-)verb(
- \include "paper16.ly"
-)COMMENT(
-
-)Smaller size for inclusion in a book.COMMENT(
-
-)verb(
- melody = \notes \relative c' {
-)COMMENT(
-
-)The structure of the file will be the same as the previous one, a
-code(\score) block with music in it. To keep things readable, we will
-give names to the different parts of music, and use the names to
-construct the music within the score block.
-
-verb(
- \partial 8;
-)
-
-The piece starts with an anacrusis of one eighth. COMMENT(
-
-)verb(
- c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
- c4 c8 d [es () d] c4 | d4 es8 d c4.
- \bar "|.";
-)COMMENT(
-
-)We use explicit beaming. Since this is a song, we will turn automatic
-beams off, and use explicit beaming where needed.COMMENT(
-
-)verb(
- }
-)COMMENT(
-
-)This ends the definition of code(melody). Note that there are no
-semicolons after assignments at top level.COMMENT(
-
-)verb(
- text = \lyrics {
-)COMMENT(
-
-)Another identifier assignment. This one is for the lyrics.
-Lyrics are formed by syllables that have duration, and not by
-notes. To make LilyPond parse words as syllables, switch it into
-lyrics mode with code(\lyrics). Again, the brace after code(\lyrics)
-is a shorthand for code(\sequential {). COMMENT(
-
-)verb(
- The4 ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
- ri- ver is flo- __ wing down to the sea.
- }
-)COMMENT(
-
-)The syllables themselves are separated by spaces. You can get syllable
-extenders by entering `code(__)', and centered hyphens with
-`code(-)code(-)'. We enter the syllables as if they are all quarter notes
-in length (hence the code(4)), and use a feature to align the
-syllables to the music (which obviously isn't all quarter notes.)
-COMMENT(
-
-)verb(
- accompaniment =\chords {
-)COMMENT(
-
-)We'll put chords over the music. There is a special mode (analogous
-to code(\lyrics) and code(\notes) mode) where you can give the names
-of the chords you want, instead of the notes comprising the chord.
-COMMENT(
-
-)verb(
- r8
-)COMMENT(
-
-)There is no accompaniment during the anacrusis.COMMENT(
-
-)verb(
- c2-3- f-3-.7
-)A chord is started by the tonic of the chord. The
-first one lasts a half note. An unadorned note creates a major
-triad, while a minor triad is wanted. code(3-) modifies the third to
-be small. code(7) modifies (adds) a seventh, which is small by default
-to create the code(f a c es) chord. Multiple modifiers must be
-separated by a dot.COMMENT(
-
-)verb(
- d-min es4 c8-min r8
-)COMMENT(
-
-)Some modifiers have predefined names, eg. code(min) is the same as
-code(3-), so code(d-min) is a minor code(d) chord.COMMENT(
-
-)verb(
- c2-min f-min7 g-7^3.5 c-min }
-)COMMENT(
-
-)A named modifier code(min) and a normal modifier code(7) do not have
-to be separated by a dot. Tones from a chord are removed with chord
-subtractions. Subtractions are started with a caret, and they are
-also separated by dots. In this example, code(g-7^3.5) produces a
-minor seventh. The brace ends the sequential music. COMMENT(
-
-)verb(
- \score {
- \simultaneous {
-)COMMENT(
-
-)We assemble the music in the code(\score) block. Melody, lyrics and
-accompaniment have to sound at the same time, so they should be
-code(\simultaneous).COMMENT(
-
-)verb(
- %\accompaniment
-)COMMENT(
-
-)Chord mode generates notes grouped in code(\simultaneous) music. If
-you remove the comment sign, you can see the chords in normal
-notation: they will be printed as note heads on a separate
-staff. COMMENT(
-
-)verb(
- \context ChordNames \accompaniment
-)COMMENT(
-
-)Normally, the notes that you enter are transformed into note heads.
-The note heads alone make no sense, they need surrounding information:
-a key signature, a clef, staff lines, etc. They need em(context). In
-LilyPond, these symbols are created by objects called `interpretation
-context'. Interpretation contexts only exist during a run of
-LilyPond. Interpretation contexts that are for printing music (as
-opposed to playing music) are called `notation context'.
-
-By default, LilyPond will create a Staff contexts for you. If you
-would remove the code(%) sign in the previous line, you can see that
-mechanism in action.
-
-
-We don't want default contexts here, because we want names, not note
-heads. An interpretation context can also created upon explicit
-request. The keyword for such a request is code(\context). It takes
-two arguments. The first is the name of a interpretation context.
-The name is a string, it can be quoted with double quotes). The
-second argument is the music that should be interpreted in this
-context. For the previous line, we could have written code(\context
-Staff \accompaniment), and get the same effect.COMMENT(
-
-)verb(
- \addlyrics
-)COMMENT(
-
-)The lyrics need to be aligned with the melody. This is done by
-combining both with code(\addlyrics). code(\addlyrics) takes two
-pieces of music (usually a melody and lyrics, in that order) and
-aligns the syllables of the second piece under the notes of the
-first piece. If you would reverse the order, the notes would be
-aligned on the lyrics, which is not very useful. (Besides, it looks
-silly.)COMMENT(
-
-)verb(
- \context Staff = mel {
-)COMMENT(
-
-)This is the argument of code(\addlyrics). We instantiate a
-code(Staff) context explicitly: should you chose to remove comment
-before the ``note heads'' version of the accompaniment, the
-accompaniment will be on a nameless staff. The melody has to be on a
-different staff as the accompaniment. This is accomplished by giving
-the melody staff a different name.COMMENT(
-
-)verb(
- \property Staff.noAutoBeaming = "1"
-)COMMENT(
-
-)An interpretation context has variables that tune its behaviour. One
-of the variables is code(noAutoBeaming). If set and non-zero (i.e.,
-true) LilyPond will not try to put automatic beaming on the current
-staff.COMMENT(
-
-)verb(
- \property Staff.automaticMelismata = "1"
-)COMMENT(
-
-)Similarly, we don't want to print a syllable when there is
-a slur. This sets up the Staff context to signal slurs while
-code(\addlyrics) is processed. COMMENT(
-
-)verb(
- \melody
- }
-)COMMENT(
-
-)Finally, we put the melody on the current staff. Note that the
-code(\property) directives and code(\melody) are grouped in sequential
-music, so the property settings are done before the melody is
-processed. COMMENT(
-
-)verb(
- \context Lyrics \text
-)COMMENT(
-
-)The second argument of code(\addlyrics) is the text. The text also
-should not land on a Staff, but on a interpretation context for
-syllables, extenders, hyphens etc. This context is called
-Lyrics.COMMENT(
-
-)verb(
- }
-)COMMENT(
-
-)This ends code(\simultaneous).COMMENT(
-
-)verb(
- \midi { }
-)COMMENT(
-
-)This makes the music go to a MIDI file. MIDI is great for
-checking music you enter. You listen to the MIDI file: if you hear
-something unexpected, it's probably a typing error. code(\midi) is an
-`output definition', a declaration that specifies how to output music
-analogous to code(\paper { }).COMMENT(
-
-)verb(
- \paper { linewidth = 10.0\cm; }
-)COMMENT(
-
-)We also want notation output. The linewidth is short so the piece
-will be set in two lines. COMMENT(
-
-)verb(
- }
-)COMMENT(
-
-)End the score block.
-
-sect(Piano music)
-
-Our third subject is a piece piano music. The fragment in the input
-file is a piano reduction of the G major Sinfonia by Giovanni Battista
-Sammartini. It was composed around 1740. COMMENT(Sesam atlas vd
-Muziek. Deel II, blz 414)
-
-mudela(verbatim)(
-\include "paper16.ly";
-
-viola = \notes \relative c' \context Voice = viola {
- <c4-\f g' c>
- \property Voice.verticalDirection = \down g'8. b,16
- s1 s2. r4
- g
-}
-
-oboes = \notes \relative c'' \context Voice = oboe {
- \stemup s4 g8. b,16 c8 r <e'8.-\p g> <f16 a>
- \grace <e8( g> <d4 f> <c2 e> \times 2/3 { <d8 \< f> <e g> <f a> }
- <
- { \times 2/3 { a8 g c } \! c2 }
- \context Voice = oboeTwo {
- \stemdown
- \grace {
- \property Grace.verticalDirection = \down
- [f,16 g] }
- f8 e e2
- } >
- \stemboth
- \grace <c,8( e> <)b8. d8.-\trill> <c16 e> |
- [<d ( f> < )f8. a>] <)b,8 d> r [<d16( f> <f8. )a>] <b,8 d> r |
- [<c16( e> < )e8. g>] <c8 e,>
-}
-
-hoomPah = \notes \transpose c' {
- c8 \translator Staff = top \stemdown
- c'8 \translator Staff = bottom \stemup }
-
-hoomPahHoomPah = { [\hoomPah \hoomPah] }
-
-bassvoices = \notes \relative c' {
- c4 g8. b,16
- \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah
- \stemdown [c8 c'8] r4
- <g d'> r4
- < {\stemup r2 <e4 c'> <c8 g'> }
- \context Voice = reallyLow {\stemdown g2 ~ | g4 c8 } >
-}
-
-\score {
- \context PianoStaff \notes <
- \context Staff = top < \time 2/2;
- \context Voice = viola \viola
- \oboes
- >
- \context Staff = bottom < \time 2/2; \clef bass;
- \bassvoices
- >
- >
- \midi { }
- \paper {
- indent = 0.0;
- linewidth = 15.0 \cm; }
-})
-
-If it looks like incomprehensible gibberish to you... Then you are
-right. The author has doctored this example to have as many quirks in
-one system as possible.COMMENT(
-
-)verb(viola = \notes \relative c' \context Voice = viola {)COMMENT(
-
-)In this example, you can see multiple parts on a staff. Each part is
-associated with one notation context. This notation context handles
-stems and dynamics (among others). The name of this context is
-code(Voice). For each part we have to make sure that there is
-precisely one Voice nop(context)footnote(If code(\context) would not
-have been specified explicitly, three code(Voice) contexts would be
-created: one for each note in the first chord.).COMMENT(
-
-)verb(<c4-\f g' c>)COMMENT(
-
-)code(<) and code(>) are short hands for code(\simultaneous {) and
-code(}). So the expression enclosed in code(<) and code(>) is a
-chord. code(\f) places a forte symbol under the chord.COMMENT(
-
-)verb(\property Voice.verticalDirection = \down)COMMENT(
-
-)code(verticalDirection) is a property of the voice context. It
-controls the directions of stems, articulations marks and other
-symbols.
- If code(verticalDirection) is set to code(\down)
-(identifier for the integer -1) the stems go down,
-code(\up) (identifier for the integer 1) makes the stems go up.COMMENT(
-
-)verb( g'8. b,16)COMMENT(
-
-)Relative octaves work a little differently with chords. The starting
-point for the note following a chord is the first note of the chord. So
-the code(g) gets an octave up quote: it is a fifth above the starting
-note of the previous chord (the central C).
-
-verb(s1 s2. r4)COMMENT(
-
-)code(s) is a `spacer' rest. It does not print anything, but it does
-have the duration of a rest. COMMENT(
-
-)verb(oboes = \notes \relative c'' \context Voice = oboe {)COMMENT(
-
-)Now comes a part for two oboes. They play homophonically, so we
-print the notes as one voice that makes chords. Again, we insure that
-these notes are indeed processed by precisely one context with
-code(\context).COMMENT(
-
-)verb(\stemup s4 g8. b,16 c8 r <e'8.-\p g> <f16 a>)COMMENT(
-
-)code(\stemup) is an identifier reference. It is shorthand for
-code(\property Voice.verticalDirection = \up). If possible, you
-should use predefined identifiers like these for setting properties.
-Your input will be less dependent upon the implementation of LilyPond.
-COMMENT(
-
-)verb(\grace <e8( g> < )d4 f> <c2 e>)COMMENT(
-
-)code(\grace) introduces grace notes. It takes one argument, in this
-case a chord. The slur started on the code(e) of the chord
-will be attached to the next nop(note.)footnote(LilyPond will squirm
-about unended Slurs. In this case, you can ignore the warning).
-COMMENT(
-
-)verb(\times 2/3)COMMENT(
-
-)Tuplets are made with the code(\times) keyword. It takes two
-arguments: a fraction and a piece of music. The duration of the
-second argument is multiplied by the first argument. Triplets make
-notes occupy 2/3 of their notated duration, so in this case the
-fraction is 2/3. COMMENT(
-
-)verb({ <d8 \< f> <e g> <f a> })COMMENT(
-
-)The piece of music to be `tripletted' is sequential music containing
-three notes. On the first chord (the code(d)), a crescendo is started
-with code(\<).COMMENT(
-
-)verb(<)COMMENT(
-
-)At this point, the homophonic music splits into two rhythmically
-different parts. We can't use a sequence of chords to enter this, so
-we make a `chord' of sequences to do it. We start with the upper
-voice, which continues with upward stems: COMMENT(
-
-)verb( { \times 2/3 { a8 g c } \! c2 })COMMENT(
-
-)The crescendo is ended at the half note by the escaped exclamation
-mark `code(\!)'. COMMENT(
-
-)verb(\context Voice = oboeTwo {
-\stemdown)COMMENT(
-
-)We can't share stems with the other voice, so we have to create a new
-code(Voice) context. We give it the name code(oboeTwo) to distinguish
-it from the other context. Stems go down in this voice. COMMENT(
-
-)verb(\grace { )COMMENT(
-
-)When a grace section is processed, a code(Grace) context is
-created. This context acts like a miniature score of its own. It has
-its own time bookkeeping, and you can make notes, beams, slurs
-etc. Here fiddle with a property and make a beam. The argument of
-code(\grace) is sequential music.COMMENT(
-
-)verb(\property Grace.verticalDirection = \down
-[f,16 g] })COMMENT(
-
-)Normally, grace notes are always stem up, but in this case, the upper
-voice interferes. We set the stems down here.
-
-As far as relative mode is concerned, the previous note is the
-code(c'''2) of the upper voice, so we have to go an octave down for
-the code(f).
-COMMENT(
-
-)verb(
- f8 e e2
-} >)COMMENT(
-
-)This ends the two-part section. COMMENT(
-
-)verb(\stemboth
-\grace <c,8( e> <)b8. d8.-\trill> <c16 e> | )COMMENT(
-
-)code(\stemboth) ends the forced stem directions. From here, stems are
-positioned as if it were single part music.
-
-The bass has a little hoom-pah melody to demonstrate parts switching
-between staffs. Since it is repetitive, we use identifiers:COMMENT(
-
-)verb(hoomPah = \notes \transpose c' {)COMMENT(
-
-)Transposing can be done with code(\transpose). It takes two
-arguments; the first specifies what central C should be transposed to.
-The second is the to-be-transposed music. As you can see, in this
-case, the transposition is a no-op. Central C is transposed to
-central C.
-
-The purpose of this no-op is circumventing relative mode. Relative
-mode can not be used in conjunction with transposition, so relative
-mode will leave the contents of code(\hoomPah) alone. We can use it
-without having to worry about getting the motive in a wrong
-nop(octave)footnote(code(hoomPah = \relative ...) would be more
-intuitive to use, but that would not let me plug code(\transpose)
-:-CHAR(41).).COMMENT(
-
-)verb(c8 \translator Staff = top \stemdown )COMMENT(
-
-)We assume that the first note will be put in the lower staff. After
-that note we switch to the upper staff with code(\translator). To be
-precise, this code(\translator) entry switches the current voice to a
-code(Staff) named code(top). So we have to name the upper staff
-`code(top)'. Stem directions are set to avoid interfering with the
-oboe voices. COMMENT(
-
-)verb(c'8 \translator Staff = bottom \stemup })COMMENT(
-
-)Then a note is put on the upper staff, and we switch again. We have
-to name the lower staff `code(bottom)'. COMMENT(
-
-)verb(hoomPahHoomPah = { [\hoomPah \hoomPah] })COMMENT(
-
-)Put two of these fragments in sequence, and beam them.COMMENT(
-
-)verb(bassvoices = \notes \relative c' {
-c4 g8. b,16
-\hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah
-\hoomPahHoomPah)COMMENT(
-
-)Entering the bass part is easy: the hoomPahHoomPah variable is
-referenced four times.COMMENT(
-
-)verb(\context Voice = reallyLow {\stemdown g2 ~ | g4 c8 } >)COMMENT(
-
-)After skipping some lines, we see code(~). This mark makes ties.COMMENT(
-
-)verb(\context PianoStaff)COMMENT(
-
-)For piano music, a special context is needed to get cross staff
-beaming right. It is called code(PianoStaff).COMMENT(
-
-)verb(\context Staff = bottom < \time 2/2; \clef bass;)COMMENT(
-
-)The bottom staff must have a different clef.COMMENT(
-
-)verb(indent = 0.0;)COMMENT(
-
-)To make some more room on the line, the first (in this case the only)
-line is not indented. The line still looks is very cramped, but that is due
-to the format of this tutorial.
-
-This example shows a lot of features, but the organisation isn't
-perfect. For example, it would be less confusing to use a chord
-containing sequential music than a sequence of chords for the oboe
-parts.
-
-[TODO: demonstrate Hara-Kiri with scores and part extraction.]
-
-sect(The end)
-
-That's all folks. From here, you can either try fiddling with input
-files, or you can read the reference manual.
-