From 03d9a13e3b75385a55715cc2a7a2b7b598a5f15a Mon Sep 17 00:00:00 2001 From: Trevor Daniels Date: Sun, 6 Jul 2008 09:55:37 +0100 Subject: [PATCH] GDP: NR 3.3.3 MIDI first pass --- Documentation/user/input.itely | 232 ++++++++++++++++++++------------- 1 file changed, 140 insertions(+), 92 deletions(-) diff --git a/Documentation/user/input.itely b/Documentation/user/input.itely index 750075cf17..ef03dbc142 100644 --- a/Documentation/user/input.itely +++ b/Documentation/user/input.itely @@ -1325,64 +1325,36 @@ what was entered. This is convenient for checking the music; octaves that are off or accidentals that were mistyped stand out very much when listening to the MIDI output. -@c TODO Move to lower section - next one? -@knownissues - -Many musically interesting effects, such as swing, articulation, -slurring, etc., are not translated to midi. - @c TODO Check this The midi output allocates a channel for each staff, and one for global settings. Therefore the midi file should not have more than 15 staves (or 14 if you do not use drums). Other staves will remain silent. -Not all midi players correctly handle tempo changes in the midi -output. Players that are known to work include -@uref{http://@/timidity@/.sourceforge@/.net/,timidity}. - @menu * Creating MIDI files:: * MIDI block:: * MIDI instrument names:: -* What goes into the MIDI output?:: +* Repeats in MIDI:: +* What else goes into the MIDI output?:: @end menu @node Creating MIDI files @subsection Creating MIDI files -To create a MIDI from a music piece of music, add a @code{\midi} block +To create a MIDI output file from a LilyPond input file, add a @code{\midi} block to a score, for example, @example \score @{ @var{...music...} - \midi @{ - \context @{ - \Score - tempoWholesPerMinute = #(ly:make-moment 72 4) - @} - @} + \midi @{ @} @} @end example -The tempo can be specified using the @code{\tempo} command within the -actual music, see @ref{Metronome marks}. An alternative, which does not -result in a metronome mark in the printed score, is shown in the example -above. In this example the tempo of quarter notes is set to 72 beats per -minute. -This kind of tempo -specification can not take dotted note lengths as an argument. In this -case, break the dotted notes into smaller units. For example, a tempo -of 90 dotted quarter notes per minute can be specified as 270 eighth -notes per minute - -@example -tempoWholesPerMinute = #(ly:make-moment 270 8) -@end example - -If there is a @code{\midi} command in a @code{\score}, only MIDI will -be produced. When notation is needed too, a @code{\layout} block must -be added +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 be also be +present. @example \score @{ @@ -1391,15 +1363,28 @@ be added \layout @{ @} @} @end example -@cindex layout block +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 inital or overall MIDI tempo is described below, +see @ref{MIDI block}. +@ignore +@c TODO Investigate dynamicAbsoluteVolumeFunction and the two +@c midi..Volume properties, then document properly. -Ties, dynamics, and tempo changes are interpreted. Dynamic marks, -crescendi and decrescendi translate into MIDI volume levels. Dynamic -marks translate to a fixed fraction of the available MIDI volume -range, crescendi and decrescendi make the volume vary linearly between -their two extremes. The fractions can be adjusted by +The fractions can be adjusted by setting @code{dynamicAbsoluteVolumeFunction} in @rinternals{Voice} context. For each type of MIDI instrument, a volume range can be defined. This gives a basic equalizer control, which can enhance the quality of @@ -1411,22 +1396,12 @@ setting @code{instrumentEqualizer}, or by setting \set Staff.midiMaximumVolume = #0.8 @end example -To remove dynamics from the MIDI output, insert the following lines -in the @code{\midi@{@}} section. - -@example -\midi @{ - ... - \context @{ - \Voice - \remove "Dynamic_performer" - @} -@} -@end example - +@end ignore @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, @@ -1444,39 +1419,91 @@ will not work properly but @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. + +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}. -MIDI output is only created when the @code{\midi} command is within -a @code{\score} block. If you put it within an explicitly instantiated -context ( i.e. @code{\new Score} ) the file will fail. To solve this, -enclose the @code{\new Score} and the @code{\midi} in a @code{\score} block. + +@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 @{ - \new Score @{ @dots{}notes@dots{} @} - \midi + @var{...music...} + \midi @{ + \context @{ + \Score + tempoWholesPerMinute = #(ly:make-moment 72 4) + @} + @} @} @end example +In this example the tempo is set to 72 quarter note +beats per minute. This kind of tempo specification cannot take +a dotted note length as an argument. If one is required, break +the dotted note into smaller units. For example, a tempo of 90 +dotted quarter notes per minute can be specified as 270 eighth +notes per minute: -@node MIDI block -@subsection MIDI block -@cindex MIDI block +@example +tempoWholesPerMinute = #(ly:make-moment 270 8) +@end example -@c TODO Do we need this? Should it be elsewhere? -@c TODO If we keep it it should be expanded +@cindex MIDI context definitions -The MIDI block is analogous to the layout block, but it is somewhat -simpler. The @code{\midi} block is similar to @code{\layout}. It can contain -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 @{ + ... + \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. If it +is placed within an explicitly instantiated score context (i.e. +within a @code{\new Score} block) the file will fail. To solve +this, enclose the @code{\new Score} and the @code{\midi} commands +in a @code{\score} block. -@cindex context definition +@example +\score @{ + \new Score @{ @dots{}notes@dots{} @} + \midi @{ @} +@} +@end example -Context definitions follow precisely the same syntax as within the -\layout block. Translation modules for sound are called performers. -The contexts for MIDI output are defined in @file{ly/@/performer@/-init@/.ly}. +@snippets +@c TODO Check header and text appear in this example +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{Changing-MIDI-output-to-one-channel-per-voice.ly} @node MIDI instrument names @subsection MIDI instrument names @@ -1498,29 +1525,18 @@ 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 Add Notes, rhythms, dynamics -@c TODO Check grace notes - timing is suspect? - -@menu -* Repeats in MIDI:: -* Microtones in MIDI:: -@end menu - @node Repeats in MIDI -@subsubsection Repeats in MIDI +@subsection Repeats in MIDI @cindex repeats in MIDI @funindex \unfoldRepeats -With a little bit of tweaking, all types of repeats can be present +With a few minor additions, all types of repeats can be represented in the MIDI output. This is achieved by applying the @code{\unfoldRepeats} music function. This function changes all repeats to unfold repeats. -@lilypond[quote,verbatim,fragment,line-width=8.0\cm] +@lilypond[quote,verbatim] \unfoldRepeats { \repeat tremolo 8 {c'32 e' } \repeat percent 2 { c''8 d'' } @@ -1550,12 +1566,44 @@ and percent repeats). For example, @end example -@node Microtones in MIDI -@subsubsection Microtones in MIDI +@node What else goes into the MIDI output? +@subsection What else goes into the MIDI output? + +@c TODO Check grace notes - timing is suspect? + +@unnumberedsubsubsec Microtones + +@cindex microtones in MIDI -Micro tones are also exported to the MIDI file. -@c TODO Write +Microtones consisting of half sharps and half flats are exported +to the MIDI file and render correctly in MIDI players which support +pitch bending. See @ref{Note names in other languages}. Here is +an example showing all the half sharps and half flats. It can be +copied out and compiled to test microtones in your MIDI player. + +@lilypond[verbatim,quote] +\score { + \relative c' { + c cih cis cisih + d dih ees eeh + e eih f fih + fis fisih g gih + gis gisih a aih + bes beh b bih + } + \layout {} + \midi {} +} +@end lilypond + +@knownissues @c TODO List things that have no effect -Figured bass, chords, lyrics have no effect on MIDI. +@c TODO Check these + +Many musically interesting effects, such as swing, articulation, +slurring, etc., are not translated to midi. Also, figured bass, +chords, and lyrics have no effect on MIDI. + + -- 2.39.2