@menu
* Creating MIDI files::
* MIDI Instruments::
-* MIDI block::
* 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{@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{@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.
+
+All @code{\tempo} indications, including all subsequent tempo changes,
+specified within the music notation will be reflected in the MIDI
+output.
+
+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
-#(ly:set-option 'midi-extension "midi")
+\score @{
+ @var{@dots{}music@dots{}}
+ \midi @{
+ \tempo 4 = 72
+ @}
+@}
@end example
-The line above will set the default extension for MIDI files to
-@code{.midi}.
+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.
-Alternatively, this option can also be supplied on the command line:
+@cindex MIDI context definitions
+
+Context definitions follow the same syntax as those in a @code{\layout}
+block;
@example
-lilypond … -dmidi-extension=midi lilyFile.ly
+\score @{
+ @var{@dots{}music@dots{}}
+ \midi @{
+ \context @{
+ \Voice
+ \remove "Dynamic_performer"
+ @}
+ @}
+@}
@end example
+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.
+
+Some MIDI players may not always correctly handle tempo changes in the
+midi output.
+
+@seealso
+Installed Files:
+@file{../ly/performer-init.ly}.
+
+Learning Manual:
+@rlearning{Other sources of information}.
-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}.
@node MIDI Instruments
@subsection MIDI Instruments
the list of MIDI instruments, the Grand Piano (@code{"acoustic grand"})
instrument is used.
-@node MIDI block
-@subsection MIDI block
-@cindex MIDI block
-
-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:
-
-@example
-\score @{
- @var{@dots{}music@dots{}}
- \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.
-
-@cindex MIDI context definitions
-
-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.
-
-@example
-\midi @{
- @dots{}
- \context @{
- \Voice
- \remove "Dynamic_performer"
- @}
-@}
-@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 @{ @}
-@}
-@end example
@node What goes into the MIDI output?
@subsection What goes into the MIDI output?