@example
\score @{
-...
+ @dots{}
@}
@end example
Comments are one exception to this general rule. (For others see
@ref{File structure}.) Both single-line comments and comments
-delimited by @code{%@{ .. %@}} may be placed anywhere within an
+delimited by @code{%@{ @dots{} %@}} may be placed anywhere within an
input file. They may be placed inside or outside a @code{\score}
block, and inside or outside the single music expression within a
@code{\score} block.
@example
\score @{
- @var{..music..}
+ @var{@dots{}music@dots{}}
@}
@end example
@example
\markup @{
- @var{..text..}
+ @var{@dots{}text@dots{}}
@}
@end example
@example
\score @{
- @var{..}
+ @var{@dots{}}
@}
\markup @{
- @var{..}
+ @var{@dots{}}
@}
\score @{
- @var{..}
+ @var{@dots{}}
@}
@end example
\header @{ piece = "Romanze" @}
@}
\markup @{
- ..text of second verse..
+ @dots{}text of second verse@dots{}
@}
\markup @{
- ..text of third verse..
+ @dots{}text of third verse@dots{}
@}
\score @{
@dots{}
@example
\book @{
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
@end example
\book @{
\bookOutputSuffix "Romanze"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\bookOutputSuffix "Menuetto"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\bookOutputSuffix "Nocturne"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
@end example
\book @{
\bookOutputName "Romanze"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\bookOutputName "Menuetto"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
\book @{
\bookOutputName "Nocturne"
\score @{ @dots{} @}
- \layout @{ @dots{} @}
+ \paper @{ @dots{} @}
@}
@end example
is entered at the top level the definitions are combined, but in
conflicting situations the later definitions take precedence. For
details of how this affects the @code{\layout} block see
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
@item
A direct scheme expression, such as
A single-line comment, introduced by a leading @code{%} sign.
@item
-A multi-line comment delimited by @code{%@{ .. %@}}.
+A multi-line comment delimited by @code{%@{ @dots{} %@}}.
@end itemize
circumstances to avoid errors:
@itemize
+
@item Around every opening and closing curly bracket.
+
@item After every command or variable, i.e. every item that
begins with a @code{\} sign.
+
@item After every item that is to be interpreted as a Scheme
expression, i.e. every item that begins with a @code{#}@tie{}sign.
+
@item To separate all elements of a Scheme expression.
-@item In @code{lyricmode} to separate all the terms in both
-@code{\override} and @code{\set} commands. In particular, spaces
-must be used around the dot and the equals sign in commands like
-@code{\override Score.LyricText.font-size = #5} and before and
-after the entire command.
+
+@item In @code{lyricmode} before and after @code{\set} and
+@code{\override} commands.
@end itemize
Notation Reference:
@ref{Titles explained},
-@ref{The \layout block}.
+@ref{The layout block,,The @code{@bs{}layout} block}.
@node Titles and headers
Each @code{\book} block in a single input file produces a separate
output file, see @ref{File structure}. Within each output file
-two types of titling areas are provided: @emph{Bookpart Titles} at
-the beginning of each bookpart and @emph{Score Titles} at the
-beginning of each score.
+three types of titling areas are provided: @emph{Book Titles} at the
+beginning of each book, @emph{Bookpart Titles} at the beginning of
+each bookpart and @emph{Score Titles} at the beginning of each score.
Values of titling fields such as @code{title} and @code{composer}
are set in @code{\header} blocks. (For the syntax of @code{\header}
blocks and a complete list of the fields available by default see
-@ref{Default layout of bookpart and score titles}). Both Bookpart
-Titles and Score Titles can contain the same fields, although by
-default the fields in Score Titles are limited to @code{piece} and
-@code{opus}.
+@ref{Default layout of bookpart and score titles}). Book Titles,
+Bookpart Titles and Score Titles can all contain the same fields,
+although by default the fields in Score Titles are limited to
+@code{piece} and @code{opus}.
@code{\header} blocks may be placed in four different places to form
a descending hierarchy of @code{\header} blocks:
@itemize
@item
- A Bookpart Title is derived from fields set at the top of the input
+A Book Title is derived from fields set at the top of the input file,
+modified by fields set in the @code{\book} block. The resulting
+fields are used to print the Book Title for that book, providing that
+there is other material which generates a page at the start of the
+book, before the first bookpart. A single @code{\pageBreak} will
+suffice.
+
+@item
+A Bookpart Title is derived from fields set at the top of the input
file, modified by fields set in the @code{\book} block, and further
modified by fields set in the @code{\bookpart} block. The resulting
values are used to print the Bookpart Title for that bookpart.
This example demonstrates all @code{\header} variables:
-@lilypond[papersize=a7,quote,verbatim,noragged-right]
+@lilypond[papersize=a6landscape,quote,verbatim,noragged-right]
\book {
\header {
% The following fields are centered
@cindex breakbefore
+If a @code{\book} block starts immediately with a @code{\bookpart}
+block, no Book Title will be printed, as there is no page on which
+to print it. If a Book Title is required, begin the @code{\book}
+block with some markup material or a @code{\pageBreak} command.
+
Use the @code{breakbefore} variable inside a @code{\header} block
-that is itself in a @code{\score} block, to make the top-level
+that is itself in a @code{\score} block, to make the higher-level
@code{\header} block titles appear on the first page on their own, with
the music (defined in the @code{\score} block) starting on the next.
-@lilypond[papersize=a8landscape,verbatim,noragged-right]
+@lilypond[papersize=c7landscape,verbatim,noragged-right]
\book {
\header {
title = "This is my Title"
@end itemize
-@lilypond[papersize=a8landscape]
-\book {
- \score {
- \relative c' {
- c4 d e f
- }
- }
-}
-@end lilypond
-
The default tagline can be changed by adding a @code{tagline} in the
top-level @code{\header} block.
{ s1 }
\header {
piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" }
- subtitle = \markup { \italic "(Excerpt)" }
+ opus = \markup { \italic "BWV 846" }
}
}
@end lilypond
@example
scoreTitleMarkup = \markup @{ \column @{
- \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @}
+ \on-the-fly \print-all-headers @{ \bookTitleMarkup \hspace #1 @}
\fill-line @{
\fromproperty #'header:piece
\fromproperty #'header:opus
@example
@code{variable} = @code{\markup} @{
- ...
- @code{\on-the-fly} #@var{procedure} @var{markup}
- ...
+ @dots{}
+ @code{\on-the-fly} \@var{procedure} @var{markup}
+ @dots{}
@}
@end example
evenHeaderMarkup = \markup \null
oddFooterMarkup = \markup {
\fill-line {
- \on-the-fly #print-page-number-check-first
+ \on-the-fly \print-page-number-check-first
\fromproperty #'page:page-number-string
}
}
@q{and} operation, for example,
@example
- @code{\on-the-fly #first-page}
- @code{\on-the-fly #last-page}
- @code{@{ \markup ... \fromproperty #'header: ... @}}
+ @code{\on-the-fly \first-page}
+ @code{\on-the-fly \last-page}
+ @code{@{ \markup @dots{} \fromproperty #'header: @dots{} @}}
@end example
determines if the output is a single page.
@table @emph
@item Event-based footnotes
-are attached to a particular event. Examples
-for such events are single notes, notes inside a chord, articulations
-(like beams, slurs, fingering indications, accents, dynamics) and
-lyrics.
+are attached to a particular event. Examples for such events are
+single notes, articulations (like fingering indications, accents,
+dynamics), and post-events (like slurs and manual beams). The
+general form for event-based footnotes is as follows:
-@item Time-based footnotes
-are bound to a particular point of time in a
-musical context. Some commands like @code{\time} and @code{\clef}
-don't actually use events for creating objects like time signatures
-and clefs. Neither does a chord create an event of its own: its
-stem or flag is created at the end of a time step (nominally through
-one of the note events inside). A time-based footnote allows
-annotating such layout objects without referring to an event.
-
-@end table
+@example
+[@var{direction}] \footnote [@var{mark}] @var{offset} @var{footnote} @var{music}
+@end example
-The full form of a footnote command for both Event- and Time-based
-footnotes is
+@item Time-based footnotes
+are bound to a particular point of time in a musical context. Some
+commands like @code{\time} and @code{\clef} don't actually use events
+for creating objects like time signatures and clefs. Neither does a
+chord create an event of its own: its stem or flag is created at the
+end of a time step (nominally through one of the note events inside).
+Exactly which of a chord's multiple note events will be deemed the
+root cause of a stem or flag is undefined. So for annotating those,
+time-based footnotes are preferable as well.
+
+A time-based footnote allows such layout objects to be annotated
+without referring to an event. The general form for Time-based
+footnotes is:
@example
-[@var{direction}] \footnote [@var{mark}] @var{offset} [@var{grob-name}] @var{footnote} @var{music}
+\footnote [@var{mark}] @var{offset} @var{footnote} [@var{Context}].@var{GrobName}
@end example
-The elements are:
+@end table
+
+The elements for both forms are:
@table @var
offsets are taken from the right/top edge, negative values from the
left/bottom edge and zero implies the mark is centered on the edge.
-@item grob-name
-specifies a type of grob to mark (like @samp{#'Flag}). If it is
-given, a grob of that type associated with the referenced @var{music}
-will be used as the reference point. It can be omitted (or replaced
-with @code{\default}) if the footnote mark is to be attached to the
-directly created grob in @var{music}.
+@item Context
+is the context in which the grob being footnoted is created. It
+may be omitted if the grob is in a bottom context, e.g. a
+@code{Voice} context.
+
+@item GrobName
+specifies a type of grob to mark (like @samp{Flag}). If it is
+specified, the footnote is not attached to a music expression in
+particular, but rather to all grobs of the type specified which
+occur at that moment of musical time.
@item footnote
is the markup or string specifying the footnote text to use at the
bottom of the page.
@item music
-is the music event or chord constituent or post-event that is being
-annotated. While it cannot be omitted, it can be replaced by
-@code{\default} in which case the footnote is not attached to a music
-expression in particular, but rather to a moment of time. It is
-mandatory in this case to use the @var{grob-name} argument for
-selecting an affected grob type, like @samp{#'TimeSignature}.
+is the music event or post-event or articulation
+that is being annotated.
@end table
@cindex footnotes, event-based
-The simplest form of event-based footnotes is just
+A footnote may be attached to a layout object directly caused
+by the event corresponding to @var{music} with the syntax:
@example
-\footnote @var{offset} @var{footnote} @var{music}
+\footnote [@var{mark}] @var{offset} @var{footnote} @var{music}
@end example
-This kind of footnote is attached to a layout object directly caused
-by the event corresponding to @var{music}.
-
@lilypond[quote,verbatim,papersize=a8landscape]
\book {
\header { tagline = ##f }
}
@end lilypond
+Marking a @emph{whole} chord with an event-based footnote is not
+possible: a chord, even one containing just a single note, does
+not produce an actual event of its own. However, individual
+notes @emph{inside} of the chord can be marked:
+
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+ \header { tagline = ##f }
+ \relative c'' {
+ \footnote #'(2 . 3) "Does not work" <a-3>2
+ <\footnote #'(-2 . -3) "Does work" a-3>4
+ <a-3 \footnote #'(3 . 1/2) "Also works" c-5>4
+ }
+}
+@end lilypond
+
If the footnote is to be attached to a post-event or articulation
-the @code{\footnote} command must be preceded by a direction
+the @code{\footnote} command @emph{must} be preceded by a direction
indicator, @code{-, _, ^}, and followed by the post-event or
articulation to be annotated as the @var{music} argument. In this
form the @code{\footnote} can be considered to be simply a copy of
-its last argument with a footnote mark attached to it.
+its last argument with a footnote mark attached to it. The syntax
+is:
+
+@example
+@var{direction} \footnote [@var{mark}] @var{offset} @var{footnote} @var{music}
+@end example
@lilypond[quote,verbatim,papersize=a8landscape]
\book {
}
@end lilypond
-Custom marks can be used as alternatives to numerical marks, and the
-annotation line joining the marked object to the mark can be
-suppressed:
+@subsubsubheading Time-based footnotes
+
+@cindex footnotes, time-based
+
+If the layout object being footmarked is @emph{indirectly} caused by
+an event (like an @code{Accidental} or @code{Stem} caused by a
+@code{NoteHead} event), the @var{GrobName} of the layout object
+is required after the footnote text instead of @var{music}:
@lilypond[quote,verbatim,papersize=a8landscape]
\book {
\header { tagline = ##f }
- \relative c' {
- \footnote "*" #'(0.5 . -2) \markup { \italic "* The first note" }
- a'4 b8
- \footnote \markup { \super "$" } #'(0.5 . 1)
- \markup { \super "$" \italic " The second note" }
- e c4
- \once \override Score.FootnoteItem.annotation-line = ##f
- b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
- \markup { \super "+" \italic " Editorial" } \p
+ \relative c'' {
+ \footnote #'(-1 . -3) "A flat" Accidental
+ aes4 c
+ \footnote #'(-1 . 0.5) "Another flat" Accidental
+ ees
+ \footnote #'(1 . -2) "A stem" Stem
+ aes
}
}
@end lilypond
-More examples of custom marks are shown in
-@ref{Footnotes in stand-alone text}.
+Note, however, that when a GrobName is specified, a footnote
+will be attached to all grobs of that type at the current time step:
-Marking an entire chord in this manner is not possible since a
-chord does not produce an event separate from that of its chord
-constituents, but the constituents themselves can be marked.
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+ \header { tagline = ##f }
+ \relative c' {
+ \footnote #'(-1 . 3) "A flat" Accidental
+ <ees ges bes>4
+ \footnote #'(2 . 0.5) "Articulation" Script
+ c'->-.
+ }
+}
+@end lilypond
-If the layout object being footmarked is @emph{indirectly} caused by
-an event (like an @code{Accidental} or @code{Stem} caused by a
-@code{NoteHead}), an additional symbol argument, the @var{grob-name},
-is required before the footnote text:
+A note inside of a chord can be given an individual (event-based)
+footnote. A @samp{NoteHead} is the only grob directly caused
+from a chord note, so an event-based footnote command is
+@emph{only} suitable for adding a footnote to the @samp{NoteHead}
+within a chord. All other chord note grobs are indirectly caused.
+The @code{\footnote} command itself offers no syntax for
+specifying @emph{both} a particular grob type @emph{as well as} a
+particular event to attach to. However, one can use a time-based
+@code{\footnote} command for specifying the grob type, and then
+prefix this command with @code{\single} in order to have it
+applied to just the following event:
@lilypond[quote,verbatim,papersize=a8landscape]
\book {
\header { tagline = ##f }
\relative c'' {
- % footnotes may be added to chord constituents
- < \single\footnote #'(-1 . -3) "Another flat" Accidental aes
- c
- \single\footnote #'(-1 . 0.5) "A flat" Accidental ees
+ < \footnote #'(1 . -2) "An A" a
+ \single \footnote #'(-1 . -1) "A sharp" Accidental
+ cis
+ \single \footnote #'(0.5 . 0.5) "A flat" Accidental
+ ees fis
>2
- \single\footnote #'(-1 . 2) "A stem" Stem ees2
}
}
@end lilypond
@warning {When footnotes are attached to several musical elements at
-the same musical moment, the footnotes are numbered from the higher
-to the lower elements as they appear in the printed output, not in
-the order in which they are written in the input stream.}
+the same musical moment, as they are in the example above, the
+footnotes are numbered from the higher to the lower elements as they
+appear in the printed output, not in the order in which they are
+written in the input stream.}
-@subsubsubheading Time-based footnotes
-
-@cindex footnotes, time-based
-
-Layout objects like clefs and key change signatures are mostly caused
+Layout objects like clefs and key-change signatures are mostly caused
as a consequence of changed properties rather than actual events.
Others, like bar lines and bar numbers, are a direct consequence of
timing. For this reason, footnotes on such objects have to be based
such per-chord features are nominally assigned to @emph{one} event
inside the chord, relying on a particular choice would be imprudent.
-A time-based footnote is written in the same manner as an event-based
-footnote, except that @code{\default} is used in place of music
-indicating an event. The layout object in question should always be
-explicitly specified for time-based footnotes to avoid getting marks
-on unexpected objects.
+The layout object in question must always be explicitly specified
+for time-based footnotes, and the appropriate context must be
+specified if the grob is created in a context other than the bottom
+context.
@lilypond[quote,verbatim,papersize=a8landscape]
\book {
\footnote #'(-0.5 . 1) "Bar line" Staff.BarLine
q q
\footnote #'(0.5 . -1) "Key change" Staff.KeySignature
- \key c\minor
+ \key c \minor
q
}
}
@end lilypond
+Custom marks can be used as alternatives to numerical marks, and the
+annotation line joining the marked object to the mark can be
+suppressed:
+
+@lilypond[quote,verbatim,papersize=a8landscape]
+\book {
+ \header { tagline = ##f }
+ \relative c' {
+ \footnote "*" #'(0.5 . -2) \markup { \italic "* The first note" } a'4
+ b8
+ \footnote \markup { \super "$" } #'(0.5 . 1)
+ \markup { \super "$" \italic " The second note" } e
+ c4
+ \once \override Score.FootnoteItem.annotation-line = ##f
+ b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
+ \markup { \super "+" \italic " Editorial" } \p
+ }
+}
+@end lilypond
+
+More examples of custom marks are shown in
+@ref{Footnotes in stand-alone text}.
+
@node Footnotes in stand-alone text
@unnumberedsubsubsec Footnotes in stand-alone text
The syntax of a footnote in stand-alone text with automatic marks is
@example
-\markup @{ ... \auto-footnote @var{text} @var{footnote} ... @}
+\markup @{ @dots{} \auto-footnote @var{text} @var{footnote} @dots{} @}
@end example
The elements are:
The syntax of a footnote in stand-alone text with custom marks is
@example
-\markup @{ ... \footnote @var{mark} @var{footnote} ... @}
+\markup @{ @dots{} \footnote @var{mark} @var{footnote} @dots{} @}
@end example
The elements are:
@rinternals{Footnote_engraver}.
@knownissues
-Multiple footnotes for the same page can only be stacked, one on top
-of the other; they cannot be printed on the same line.
+Multiple footnotes for the same page can only be stacked, one above
+the other; they cannot be printed on the same line.
Footnotes cannot be attached to @code{MultiMeasureRests} or
-automatic beams and footnote marks may collide with staves,
-@code{\markup} objects, other footnote marks and annotation lines.
+automatic beams or lyrics.
+
+Footnote marks may collide with staves, @code{\markup} objects, other
+footnote marks and annotation lines.
@node Reference to page numbers
@example
\include "parts/VI.ly"
\include "parts/VII.ly"
-... etc
+@dots{} etc
@end example
Files which are to be included can also contain @code{\include}
libA.ly
A1.ly
A2.ly
- ...
+ @dots{}
@end example
@noindent
#(ly:set-option 'relative-includes #t)
\include "A1.ly"
\include "A2.ly"
-...
+@dots{}
% return to default setting
#(ly:set-option 'relative-includes #f)
@end example
@example
\include "VI.ly"
\include "VII.ly"
-... etc
+@dots{} etc
@end example
Files which are to be included in many scores may be placed in
@headitem Filter
@tab Result
@item
-Tagged music preceded by @code{\keepWithTag #'@var{name}}
- @tab Untagged music and music tagged with @var{name} is included;
- music tagged with any other tag name is excluded.
+Tagged music preceded by @code{\keepWithTag #'@var{name}} or
+ @code{\keepWithTag #'(@var{name1} @var{name2}@dots{})}
+@tab Untagged music and music tagged with any of the given tag
+ names is included;
+ music tagged with any other tag name is excluded.
@item
-Tagged music preceded by @code{\removeWithTag #'@var{name}}
-@tab Untagged music and music tagged with any tag name other than
- @var{name} is included; music tagged with @var{name} is
+Tagged music preceded by @code{\removeWithTag #'@var{name}} or
+ @code{\removeWithTag #'(@var{name1} @var{name2}@dots{})}
+@tab Untagged music and music not tagged with any of the given tag names
+ is included; music tagged with any of the given tag names is
excluded.
@item
Tagged music not preceded by either @code{\keepWithTag} or
@end example
Multiple tags may be placed on expressions with multiple
-@code{\tag} entries:
+@code{\tag} entries, or by combining multiple tags into one symbol
+list:
@lilypond[quote,verbatim]
music = \relative c'' {
\tag #'a \tag #'both { a4 a a a }
- \tag #'b \tag #'both { b4 b b b }
+ \tag #'(b both) { b4 b b b }
}
<<
\keepWithTag #'a \music
@end lilypond
Multiple @code{\removeWithTag} filters may be applied to a single
-music expression to remove several differently named tagged sections:
+music expression to remove several differently named tagged
+sections. Alternatively, you can use a single
+@code{\removeWithTag} with a list of tags.
@lilypond[verbatim,quote]
music = \relative c'' {
-\tag #'A { a4 a a a }
-\tag #'B { b4 b b b }
-\tag #'C { c4 c c c }
-\tag #'D { d4 d d d }
+ \tag #'A { a4 a a a }
+ \tag #'B { b4 b b b }
+ \tag #'C { c4 c c c }
+ \tag #'D { d4 d d d }
}
-{
-\removeWithTag #'B
-\removeWithTag #'C
-\music
+\new Voice {
+ \removeWithTag #'B
+ \removeWithTag #'C
+ \music
+ \removeWithTag #'(B C)
+ \music
}
@end lilypond
expression will cause @emph{all} tagged sections to be removed, as
the first filter will remove all tagged sections except the one
named, and the second filter will remove even that tagged section.
+Usually you would rather want to use a single @code{\keepWithTag}
+command with a list of multiple tags: this will only remove tagged
+sections not given in @emph{any} of the tags.
Sometimes you want to splice some music at a particular place in an
existing music expression. You can use @code{\pushToTag} and
@ref{Automatic part combining},
@ref{Including LilyPond files}.
-@ignore
-@c This warning is more general than this placement implies.
-@c Rests are not merged whether or not they come from tagged sections.
-@c Should be deleted? -td
-
@knownissues
-Multiple rests are not merged if you create a score with more
-than one tagged section at the same place.
-
-@end ignore
+Calling @code{\relative} on a music expression obtained by filtering
+music through @code{\keepWithTag} or @code{\removeWithTag} might cause
+the octave relations to change, as only the pitches actually
+remaining in the filtered expression will be considered. Applying
+@code{\relative} first, before @code{\keepWithTag} or
+@code{\removeWithTag}, avoids this danger as @code{\relative} then
+acts on all the pitches as-input.
@node Using global settings
}
\addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } }
}
-\markup { "Copyright 2008--2012" \char ##x00A9 }
+\markup { "Copyright 2008--2014" \char ##x00A9 }
@end lilypond
@cindex copyright sign
this correction process, it is possible to skip typesetting of all but
the last few measures. This is achieved by putting
-@verbatim
+@example
showLastLength = R1*5
-\score { ... }
-@end verbatim
+\score @{ @dots{} @}
+@end example
@noindent
in your source file. This will render only the last 5 measures
@c NOTE: these images are a bit big, but that's important
@c for the font comparison. -gp
-@sourceimage{Gonville_after,,,}
+@sourceimage{Gonville_after,15cm,,}
Here are a few sample bars of music set in LilyPond's Feta font:
-@sourceimage{Gonville_before,,,}
+@sourceimage{Gonville_before,15cm,,}
@subsubheading Installation Instructions for MacOS
@menu
* Creating MIDI files::
-* MIDI block::
+* MIDI Instruments::
* What goes into the MIDI output?::
* Repeats in MIDI::
* Controlling MIDI dynamics::
@node Creating MIDI files
@subsection Creating MIDI files
-To create a MIDI output file from a LilyPond input file, add a
-@code{\midi} block to a score, for example,
+@cindex MIDI block
+To create a MIDI output file from a LilyPond file, insert a @code{\midi}
+block inside a @code{\score} block;
@example
\score @{
- @var{...music...}
+ @var{@dots{}music@dots{}}
+ \layout @{ @}
\midi @{ @}
@}
@end example
-If there is a @code{\midi} block in a @code{\score} with no
-@code{\layout} block, only MIDI output will be produced. When
-notation is needed too, a @code{\layout} block must also be
-present.
+If there is @emph{only} a @code{\midi} block in a @code{\score} (i.e.
+without any @code{\layout} block), then @emph{only} MIDI output will be
+produced. No musical notation will be typeset.
@example
\score @{
- @var{...music...}
+ @var{@dots{}music@dots{}}
\midi @{ @}
- \layout @{ @}
@}
@end example
-Pitches, rhythms, ties, dynamics, and tempo changes are interpreted
-and translated correctly to the MIDI output. Dynamic marks,
-crescendi and decrescendi translate into MIDI volume levels.
-Dynamic marks translate to a fixed fraction of the available MIDI
-volume range. Crescendi and decrescendi make the volume vary
-linearly between their two extremes. The effect of dynamic markings
-on the MIDI output can be removed completely, see @ref{MIDI block}.
-
-The initial tempo and later tempo changes can be specified
-with the @code{\tempo} command within the music notation. These
-are reflected in tempo changes in the MIDI output. This command
-will normally result in the metronome mark being printed, but this
-can be suppressed, see @ref{Metronome marks}. An alternative way
-of specifying the initial or overall MIDI tempo is described below,
-see @ref{MIDI block}.
-
-Due to some limitations on Windows, the default extension for
-MIDI files on Windows is @code{.mid}. Other operating systems still
-use the extension @code{.midi}. If a different extension is preferred,
-insert the following line at the top-level of the input file,
-before the start of any @code{\book}, @code{\bookpart} or @code{\score} blocks:
+Dynamics, pitches, rhythms, tempo changes and ties are all interpreted
+and translated correctly. Dynamic @q{marks} translate into volume
+levels with a @q{fixed fraction} of the available MIDI volume range;
+crescendi and decrescendi make the volume vary linearly between their
+two extremes.
-@example
-#(ly:set-option 'midi-extension "midi")
-@end example
+All @code{\tempo} indications, including all subsequent tempo changes,
+specified within the music notation will be reflected in the MIDI
+output.
-The line above will set the default extension for MIDI files to
-@code{.midi}.
-
-Alternatively, this option can also be supplied on the command line:
+Usually it is enough to leave the @code{\midi} block empty, but it
+can contain context rearrangements, new context definitions or code
+to set the values of properties. Here the tempo is set to 72
+quarter-note beats per minute, but @emph{only} for the MIDI's
+audio playback.
@example
-lilypond … -dmidi-extension=midi lilyFile.ly
+\score @{
+ @var{@dots{}music@dots{}}
+ \midi @{
+ \tempo 4 = 72
+ @}
+@}
@end example
+Note that @code{\tempo} is actually a command for setting properties
+during the interpretation of the music and in the context of output definitions, like a @code{\midi} block, is reinterpreted as if it
+were a context modification.
-@unnumberedsubsubsec Instrument names
-
-@cindex instrument names
-@cindex MIDI, instrument
-@funindex Staff.midiInstrument
-
-The MIDI instrument to be used is specified by setting the
-@code{Staff.midiInstrument} property to the instrument name.
-The name should be chosen from the list in @ref{MIDI instruments}.
+@cindex MIDI context definitions
-@example
-\new Staff @{
- \set Staff.midiInstrument = #"glockenspiel"
- @var{...notes...}
-@}
-@end example
+Context definitions follow the same syntax as those in a @code{\layout}
+block;
@example
-\new Staff \with @{midiInstrument = #"cello"@} @{
- @var{...notes...}
+\score @{
+ @var{@dots{}music@dots{}}
+ \midi @{
+ \context @{
+ \Voice
+ \remove "Dynamic_performer"
+ @}
+ @}
@}
@end example
-If the selected instrument does not exactly match an instrument from
-the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"})
-instrument is used.
+removes the effect of dynamics from the MIDI output. Translation
+modules for sound are called @q{performers}.
@snippets
@knownissues
-@c In 2.11 the following no longer seems to be a problem -td
-@ignore
-Unterminated (de)crescendos will not render properly in the midi file,
-resulting in silent passages of music. The workaround is to explicitly
-terminate the (de)crescendo. For example,
+Some operating systems require a @emph{specific} file extension for
+MIDI files. If a different extension is preferred insert the following
+line at the top-level of the input file, before the start of any
+@code{\book}, @code{\bookpart} or @code{\score} blocks;
@example
-@{ a4\< b c d\f @}
+#(ly:set-option 'midi-extension "mid")
@end example
-@noindent
-will not work properly but
+This will set the default extension for MIDI files to @code{.mid}.
+
+Alternatively, an option can be supplied on the command line:
@example
-@{ a4\< b c d\!\f @}
+lilypond -dmidi-extension=mid MyFile.ly
@end example
-@noindent
-will.
-@end ignore
-
Changes in the MIDI volume take place only on starting a note, so
-crescendi and decrescendi cannot affect the volume of a
-single note.
+crescendi and decrescendi cannot affect the volume of a single note.
-Not all midi players correctly handle tempo changes in the midi
-output. Players that are known to work include MS Windows Media
-Player and @uref{http://@/timidity@/.sourceforge@/.net/,timidity}.
+Some MIDI players may not always correctly handle tempo changes in the
+midi output.
-@node MIDI block
-@subsection MIDI block
-@cindex MIDI block
+@seealso
+Installed Files:
+@file{../ly/performer-init.ly}.
-A @code{\midi} block must appear within a score block if MIDI output
-is required. It is analogous to the layout block, but somewhat
-simpler. Often, the @code{\midi} block is left empty, but it
-can contain context rearrangements, new context definitions or code
-to set the values of properties. For example, the following will
-set the initial tempo exported to a MIDI file without causing a tempo
-indication to be printed:
+Learning Manual:
+@rlearning{Other sources of information}.
-@example
-\score @{
- @var{...music...}
- \midi @{
- \tempo 4 = 72
- @}
-@}
-@end example
-In this example the tempo is set to 72 quarter note
-beats per minute. @code{\tempo} is actually a music command for
-setting properties during the interpretation of music: in the
-context of output definitions like a @code{\midi} block, as a matter of
-courtesy those are reinterpreted as if they were context modifications.
+@node MIDI Instruments
+@subsection MIDI Instruments
-@cindex MIDI context definitions
+@cindex instrument names
+@cindex MIDI, instruments
+@funindex Staff.midiInstrument
-Context definitions follow precisely the same syntax as those
-within a @code{\layout} block. Translation modules for sound are
-called performers. The contexts for MIDI output are defined in
-@file{../ly/performer-init.ly},
-see @rlearning{Other sources of information}.
-For example, to remove the effect of dynamics
-from the MIDI output, insert the following lines in the
-@code{\midi@{ @}} block.
+The MIDI instrument to be used is specified by setting the
+@code{Staff.midiInstrument} property to the instrument name.
+The name should be chosen from the list in @ref{MIDI instruments}.
@example
-\midi @{
- ...
- \context @{
- \Voice
- \remove "Dynamic_performer"
- @}
+\new Staff @{
+ \set Staff.midiInstrument = #"glockenspiel"
+ @var{@dots{}notes@dots{}}
@}
@end example
-MIDI output is created only when a @code{\midi} block is included
-within a score block defined with a @code{\score} command.
-
@example
-\score @{
- @{ @dots{}notes@dots{} @}
- \midi @{ @}
+\new Staff \with @{midiInstrument = #"cello"@} @{
+ @var{@dots{}notes@dots{}}
@}
@end example
+If the selected instrument does not exactly match an instrument from
+the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"})
+instrument is used.
+
+
@node What goes into the MIDI output?
@subsection What goes into the MIDI output?
@c TODO Check grace notes - timing is suspect?
+@menu
+* Supported in MIDI::
+* Unsupported in MIDI::
+@end menu
+
+@node Supported in MIDI
@unnumberedsubsubsec Supported in MIDI
@cindex Pitches in MIDI
@item Crescendi, decrescendi over multiple notes
@item Tempo changes entered with a tempo marking
@item Lyrics
+@item Simple articulations: staccato, staccatissimo, accent, marcato, portato
+@item @ref{Breath marks}
@end itemize
-Using @ref{The Articulate script}, a number of items are added to the
-above list:
+There is a script that adds the following items; see
+@ref{The Articulate script}:
@itemize
-@item Articulations (slurs, staccato, etc)
-@item Trills, turns
-@item Rallentando and accelerando
+@item Slurs and phrasing slurs
+@item Ornaments (mordents, trills, turns, etc.)
+@item Rallentando, accelerando, ritard, and a tempo
@end itemize
+@node Unsupported in MIDI
@unnumberedsubsubsec Unsupported in MIDI
@c TODO index as above
The following items of notation have no effect on the MIDI output,
-unless you use @ref{The Articulate script}:
+even if you use @ref{The Articulate script}:
@itemize
@item Rhythms entered as annotations, e.g. swing
@item Tempo changes entered as annotations with no tempo marking
-@item Staccato and other articulations and ornamentations
-@item Slurs and Phrasing slurs
+@item Fermatas
+@item Other articulations
@item Crescendi, decrescendi over a single note
@item Tremolos entered with @q{@code{:}[@var{number}]}
@item Figured bass
@item Microtonal chords
+@item Glissandi, falls and doits
@end itemize
@example
\score @{
- @var{..music..}
- \layout @{ .. @}
+ @var{@dots{}music@dots{}}
+ \layout @{ @dots{} @}
@}
\score @{
- \unfoldRepeats @var{..music..}
- \midi @{ .. @}
+ \unfoldRepeats @var{@dots{}music@dots{}}
+ \midi @{ @dots{} @}
@}
@end example
overall MIDI volume, the relative volume of dynamic markings and
the relative volume of different instruments.
+@menu
+* Dynamic marks::
+* Overall MIDI volume::
+* Equalizing different instruments (i)::
+* Equalizing different instruments (ii)::
+@end menu
+
+@node Dynamic marks
@unnumberedsubsubsec Dynamic marks
Dynamic marks are translated to a fixed fraction of the available
@file{../scm/midi.scm} and the associated table as a model.
The final example in this section shows how this might be done.
+@node Overall MIDI volume
@unnumberedsubsubsec Overall MIDI volume
The minimum and maximum overall volume of MIDI dynamic markings is
controlled by setting the properties @code{midiMinimumVolume} and
-@code{midiMaximumVolume} at the @code{Score} level. These
-properties have an effect only on dynamic marks, so if they
-are to apply from the start of the score a dynamic mark must be
-placed there. The fraction corresponding to each dynamic mark is
-modified with this formula
+@code{midiMaximumVolume} at the @code{Score} level. These properties
+have an effect only at the start of a voice and on dynamic marks. The
+fraction corresponding to each dynamic mark is modified with this
+formula
@example
midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * fraction
}
@end lilypond
+@node Equalizing different instruments (i)
@unnumberedsubsubsec Equalizing different instruments (i)
If the minimum and maximum MIDI volume properties are set in
remarkably.
In this example the volume of the clarinet is reduced relative
-to the volume of the flute. There must be a dynamic
-mark on the first note of each instrument for this to work
-correctly.
+to the volume of the flute.
@lilypond[verbatim,quote]
\score {
}
@end lilypond
+
+@node Equalizing different instruments (ii)
@unnumberedsubsubsec Equalizing different instruments (ii)
If the MIDI minimum and maximum volume properties are not set
@example
\unfoldRepeats \articulate <<
- all the rest of the score...
+ all the rest of the score@dots{}
>>
@end example
By default, LilyPond will print these messages to the console
along with all the other LilyPond compilation messages. To split
-up these messages and save the results of @code{\display@{STUFF@}},
+up these messages and save the results of @code{\displayLilyMusic},
redirect the output to a file.
@example
line followed by optional parameters.
@example
-@var{time} @var{type} @var{...params...}
+@var{time} @var{type} @var{@dots{}params@dots{}}
@end example
This information can easily be read into other programs such as