X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fnotation%2Finput.itely;h=da9b1347a260688f95f3acbd0001336ba45f12f0;hb=77320a48ed671c658f04256d087880c1701eb746;hp=887f79429878e856faffccf3bcb6bf0bf8355ee2;hpb=958e95822083954cad00e0a598eb9f12ceba67b9;p=lilypond.git diff --git a/Documentation/notation/input.itely b/Documentation/notation/input.itely index 887f794298..da9b1347a2 100644 --- a/Documentation/notation/input.itely +++ b/Documentation/notation/input.itely @@ -277,7 +277,7 @@ Lilypond provides facilities to allow you to control what file names are used by the various back-ends when producing output files. In the previous section, we saw how Lilypond prevents name-clashes when -producing several ouputs from a single source file. You also have the +producing several outputs from a single source file. You also have the ability to specify your own suffixes for each @code{\book} block, so for example you can produce files called @file{eightminiatures-Romanze.pdf}, @file{eightminiatures-Menuetto.pdf} @@ -521,12 +521,17 @@ Notation Reference: @node Titles and headers @section Titles and headers +@cindex titles +@cindex headers +@cindex footers + Almost all printed music includes a title and the composer's name; some pieces include a lot more information. @menu * Creating titles headers and footers:: * Custom titles headers and footers:: +* Creating PDF metadata:: * Creating footnotes:: * Reference to page numbers:: * Table of contents:: @@ -681,7 +686,7 @@ suppressed: \header { title = "DAS WOHLTEMPERIRTE CLAVIER" subtitle = "TEIL I" - % Do not display the tagline for this book + % Do not display the default LilyPond footer for this book tagline = ##f } \markup { \vspace #1 } @@ -723,7 +728,7 @@ Notation Reference: @node Default layout of bookpart and score titles @unnumberedsubsubsec Default layout of bookpart and score titles -This example demonstrates all @code{\header} variables: +This example demonstrates all printed @code{\header} variables: @lilypond[papersize=a6landscape,quote,verbatim,noragged-right] \book { @@ -742,8 +747,8 @@ This example demonstrates all @code{\header} variables: meter = "Meter" arranger = "Arranger" % The following fields are centered at the bottom - tagline = "tagline goes at the bottom of the last page" - copyright = "copyright goes at the bottom of the first page" + tagline = "The tagline goes at the bottom of the last page" + copyright = "The copyright goes at the bottom of the first page" } \score { { s1 } @@ -875,8 +880,8 @@ the @code{copyright} text if there is only a single page. @end itemize -The default tagline can be changed by adding a @code{tagline} in the -top-level @code{\header} block. +The default LilyPond footer text can be changed by adding a +@code{tagline} in the top-level @code{\header} block. @lilypond[papersize=a8landscape,verbatim] \book { @@ -891,7 +896,8 @@ top-level @code{\header} block. } @end lilypond -To remove the @code{tagline} set the value to @code{##f}. +To remove the default LilyPond footer text, the @code{tagline} can be +set to @code{##f}. @node Custom titles headers and footers @@ -1194,6 +1200,44 @@ Notation Reference: Installed Files: @file{../ly/titling-init.ly}. +@node Creating PDF metadata +@subsection Creating PDF metadata + +@cindex PDF metadata + +In addition to being shown in the printed output, @code{\header} variables +are also used to set PDF metadata (the information displayed by PDF readers +as the @code{properties} of the PDF file). For example, setting the +@code{title} property of the @code{header} block @q{Symphony I} will also give +this title to the PDF document. + +@example + @code{\header@{} + @code{title = "Symphony I"} + @code{@}} +@end example + +If you want to set the title of the printed output to one value, but have the +title property of the PDF to have a different value, you can use +@code{pdftitle}, as below. + +@example + @code{\header@{} + @code{title = "Symphony I"} + @code{pdftitle = "Symphony I by Beethoven"} + @code{@}} +@end example + +The variables @code{title}, @code{subject}, @code{keywords}, +@code{subtitle}, @code{composer}, @code{arranger}, @code{poet}, @code{author} +and @code{copyright} all set PDF properties and can all be prefixed with +@q{pdf} to set a PDF property to a value different from the printed output. + +The PDF property @code{Creator} is automatically set to @q{LilyPond} plus +the current LilyPond version, and @code{CreationDate} and @code{ModDate} are +both set to the current date and time. @code{ModDate} can be overridden by +setting the header variable @code{moddate} (or @code{pdfmoddate}) to a +valid PDF date string. @node Creating footnotes @subsection Creating footnotes @@ -1693,10 +1737,11 @@ ie. a two digit number. @node Table of contents @subsection Table of contents -A table of contents is included using the @code{\markuplist \table-of-contents} -command. The elements which should appear in the table of contents are -entered with the @code{\tocItem} command, which may be used either at -top-level, or inside a music expression. +A table of contents is included using the +@code{\markuplist \table-of-contents} command. The elements which +should appear in the table of contents are entered with the +@code{\tocItem} command, which may be used either at top-level, or +inside a music expression. @verbatim \markuplist \table-of-contents @@ -1719,39 +1764,89 @@ top-level, or inside a music expression. } @end verbatim -The markups which are used to format the table of contents are defined -in the @code{\paper} block. The default ones are @code{tocTitleMarkup}, -for formatting the title of the table, and @code{tocItemMarkup}, for -formatting the toc elements, composed of the element title and page -number. These variables may be changed by the user: +Markups used for formatting the table of contents are defined in the +@code{\paper} block. There are two @q{pre-defined} markups already +available; + +@itemize + +@item +@code{tocTitleMarkup} + +@noindent +Used for formatting the title of the table of contents. + +@verbatim +tocTitleMarkup = \markup \huge \column { + \fill-line { \null "Table of Contents" \null } + \null +} +@end verbatim + +@item +@code{tocItemMarkup} + +@noindent +Used for formatting the elements within the table of contents. + +@verbatim +tocItemMarkup = \markup \fill-line { + \fromproperty #'toc:text \fromproperty #'toc:page +} +@end verbatim + +@end itemize + +@noindent +Both of these variables can be changed. + +Here is an example changing the table of contents' title into French; @verbatim \paper { - %% Translate the toc title into French: tocTitleMarkup = \markup \huge \column { \fill-line { \null "Table des matières" \null } \hspace #1 } - %% use larger font size - tocItemMarkup = \markup \large \fill-line { - \fromproperty #'toc:text \fromproperty #'toc:page - } +@end verbatim + +Here is an example changing the font-size of the elements in the table +of contents; + +@verbatim +tocItemMarkup = \markup \large \fill-line { + \fromproperty #'toc:text \fromproperty #'toc:page } @end verbatim -Note how the toc element text and page number are referred to in -the @code{tocItemMarkup} definition. +Note how the element text and page numbers are referred to in the +@code{tocItemMarkup} definition. -New commands and markups may also be defined to build more elaborated -table of contents: -@itemize -@item first, define a new markup variable in the @code{\paper} block -@item then, define a music function which aims at adding a toc element -using this markup paper variable. -@end itemize +The @code{\tocItemWithDotsMarkup} command can be included within the +@code{tocItemMarkup} to fill the line, between a table of contents item +and its corresponding page number, with dots; + +@lilypond[verbatim,line-width=10.0\cm] +\header { tagline = ##f } +\paper { + tocItemMarkup = \tocItemWithDotsMarkup +} + +\book { + \markuplist \table-of-contents + \tocItem \markup { Allegro } + \tocItem \markup { Largo } + \markup \null +} +@end lilypond -In the following example, a new style is defined for entering act names -in the table of contents of an opera: +Custom commands with their own markups can also be defined to build a +more complex table of contents. In the following example, a new style +is defined for entering act names in a table of contents of an opera; + +@noindent +A new markup variable (called @code{tocActMarkup}) is defined in the +@code{\paper} block; @verbatim \paper { @@ -1761,12 +1856,22 @@ in the table of contents of an opera: \hspace #1 } } +@end verbatim +@noindent +A custom music function (@code{tocAct}) is then created -- which uses +the new @code{tocActMarkup} markup definition. + +@verbatim tocAct = -#(define-music-function (text) (markup?) - (add-toc-item! 'tocActMarkup text)) + #(define-music-function (text) (markup?) + (add-toc-item! 'tocActMarkup text)) @end verbatim +@noindent +A LilyPond input file, using these customer definitions, could look +something like this; + @lilypond[line-width=10.0\cm] \header { tagline = ##f } \paper { @@ -1793,21 +1898,19 @@ tocAct = } @end lilypond -Dots can be added to fill the line between an item and its page number: -@lilypond[verbatim,line-width=10.0\cm] -\header { tagline = ##f } -\paper { - tocItemMarkup = \tocItemWithDotsMarkup -} +Here is an example of the @code{\fill-with-pattern} command used within +the context of a table of contents; -\book { - \markuplist \table-of-contents - \tocItem \markup { Allegro } - \tocItem \markup { Largo } - \markup \null +@verbatim +\paper { + tocItemMarkup = \markup { \fill-line { + \override #'(line-width . 70) + \fill-with-pattern #1.5 #CENTER . \fromproperty #'toc:text \fromproperty #'toc:page + } + } } -@end lilypond +@end verbatim @seealso Installed Files: @@ -2023,7 +2126,7 @@ sopranoMusic = \relative { a'4 b c b8( a) } altoMusic = \relative { e'4 e e f } tenorMusic = \relative { c'4 b e d8( c) } bassMusic = \relative { a4 gis a d, } -allLyrics = \lyricmode {King of glo -- ry } +allLyrics = \lyricmode { King of glo -- ry } << \new Staff = "Soprano" \sopranoMusic \new Lyrics \allLyrics @@ -2041,17 +2144,11 @@ allLyrics = \lyricmode {King of glo -- ry } \new Lyrics \allLyrics \new PianoStaff << \new Staff = "RH" { - \set Staff.printPartCombineTexts = ##f - \partcombine - \sopranoMusic - \altoMusic + \partcombine \sopranoMusic \altoMusic } \new Staff = "LH" { - \set Staff.printPartCombineTexts = ##f \clef "bass" - \partcombine - \tenorMusic - \bassMusic + \partcombine \tenorMusic \bassMusic } >> >> @@ -2374,6 +2471,17 @@ text: @lilypond[quote] %c No verbatim here as the code does not display correctly in PDF +% Font settings for Cyrillic and Hebrew +% Linux Libertine fonts contain Cyrillic and Hebrew glyphs. +\paper { + #(define fonts + (set-global-fonts + #:roman "Linux Libertine O,serif" + #:sans "Linux Biolinum O,sans-serif" + #:typewriter "Linux Libertine Mono O,monospace" + )) +} + % Cyrillic bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. @@ -2523,7 +2631,7 @@ Installed Files: It is possible to output one or more fragments of a score by defining the explicit location of the music to be extracted within the -@code{\layout} block of the the input file using the @code{clip-regions} +@code{\layout} block of the input file using the @code{clip-regions} function, and then running LilyPond with the @option{-dclip-systems} option; @@ -2551,7 +2659,7 @@ By default, each music fragment will be output as a separate @code{EPS} file, but other formats such as @code{PDF} or @code{PNG} can also be created if required. The extracted music is output as if had been literally @q{cut} from the original printed score so if a fragment runs -over one or more lines, a separate ouput file for each line will be +over one or more lines, a separate output file for each line will be generated. @seealso @@ -2598,12 +2706,15 @@ This property is also used to control output to the MIDI file. Note that it skips all events, including tempo and instrument changes. You have been warned. -@lilypond[quote,relative=2,ragged-right,verbatim] -c8 d -\set Score.skipTypesetting = ##t -e8 e e e e e e e -\set Score.skipTypesetting = ##f -c8 d b bes a g c2 +@lilypond[quote,ragged-right,verbatim] +\relative c' { + c1 + \set Score.skipTypesetting = ##t + \tempo 4 = 80 + c4 c c c + \set Score.skipTypesetting = ##f + d4 d d d +} @end lilypond In polyphonic music, @code{Score.skipTypesetting} will affect all @@ -2618,11 +2729,10 @@ voices and staves, saving even more time. @cindex EPS output The default output formats for the printed score are Portable -Document Format (PDF) and PostScript (PS). Scalable Vector -Graphics (SVG), Encapsulated PostScript (EPS) and Portable -Network Graphics (PNG) output formats are also available through -command line options, see -@rprogram{Basic command line options for LilyPond}. +Document Format (PDF) and PostScript (PS). Portable +Network Graphics (PNG), Scalable Vector Graphics (SVG) and Encapsulated +PostScript (EPS) output is available through the command line option, +see @rprogram{Basic command line options for LilyPond}. @node Replacing the notation font @@ -2688,6 +2798,8 @@ require additional software to produce sound from them. * Controlling MIDI dynamics:: * Using MIDI instruments:: * Using repeats with MIDI:: +* MIDI channel mapping:: +* Context properties for MIDI effects:: * Enhancing MIDI output:: @end menu @@ -2719,6 +2831,10 @@ and portato @q{@code{:}[@var{number}]} value @end itemize +Panning, balance, expression, reverb and chorus effects can also be +controlled by setting context properties, +see @ref{Context properties for MIDI effects}. + When combined with the @file{articulate} script the following, additional musical notation can be output to MIDI; @@ -3019,10 +3135,6 @@ block; This example removes the effect of dynamics from the MIDI output. Note: LilyPond's translation modules used for sound are called @q{performers}. -@snippets -@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle] -{changing-midi-output-to-one-channel-per-voice.ly} - @seealso Learning Manual: @rlearning{Other sources of information}. @@ -3154,6 +3266,214 @@ Notation Reference: @ref{Repeats}. +@node MIDI channel mapping +@subsection MIDI channel mapping + +@cindex MIDI Channels +@cindex MIDI Tracks +@funindex midiChannelMapping + +When generating a MIDI file from a score, LilyPond will automatically +assign every note in the score to a MIDI channel, the one on which it +should be played when it is sent to a MIDI device. A MIDI channel has +a number of controls available to select, for example, the instrument +to be used to play the notes on that channel, or to request the MIDI +device to apply various effects to the sound produced on the channel. +At all times, every control on a MIDI channel can have only a single +value assigned to it (which can be modified, however, for example, +to switch to another instrument in the middle of a score). + +The MIDI standard supports only 16 channels per MIDI device. This +limit on the number of channels also limits the number of different +instruments which can be played at the same time. + +LilyPond creates separate MIDI tracks for each staff, (or discrete +instrument or voice, depending on the value of +@code{Score.midiChannelMapping}), and also for each lyrics context. +There is no limit to the number of tracks. + +To work around the limited number of MIDI channels, LilyPond supports +a number of different modes for MIDI channel allocation, selected using +the @code{Score.midiChannelMapping} context property. In each case, +if more MIDI channels than the limit are required, the allocated +channel numbers wrap around back to 0, possibly causing the incorrect +assignment of instruments to some notes. This context property can be +set to one of the following values: + +@table @var + +@item @code{'staff} + +Allocate a separate MIDI channel to each staff in the score (this is +the default). All notes in all voices contained within each staff will +share the MIDI channel of their enclosing staff, and all are encoded +in the same MIDI track. + +The limit of 16 channels is applied to the total number of staff and +lyrics contexts, even though MIDI lyrics do not take up a MIDI channel. + +@item @code{'instrument} + +Allocate a separate MIDI channel to each distinct MIDI instrument +specified in the score. This means that all the notes played with the +same MIDI instrument will share the same MIDI channel (and track), even +if the notes come from different voices or staves. + +In this case the lyrics contexts do not count towards the MIDI channel +limit of 16 (as they will not be assigned to a MIDI instrument), so +this setting may allow a better allocation of MIDI channels when the +number of staves and lyrics contexts in a score exceeds 16. + +@item @code{'voice} + +Allocate a separate MIDI channel to each voice in the score that has a +unique name among the voices in its enclosing staff. Voices in +different staves are always assigned separate MIDI channels, but any two +voices contained within the same staff will share the same MIDI channel +if they have the same name. Because @code{midiInstrument} and the +several MIDI controls for effects are properties of the staff context, +they cannot be set separately for each voice. The first voice will be +played with the instrument and effects specified for the staff, and +voices with a different name from the first will be assigned the default +instrument and effects. + +Note: different instruments and/or effects can be assigned to several +voices on the same staff by moving the @code{Staff_performer} from the +@code{Staff} to the @code{Voice} context, and leaving +@code{midiChannelMapping} to default to @code{'staff} or set to +@code{'instrument}; see the snippet below. + +@end table + +For example, the default MIDI channel mapping of a score can be changed +to the @code{'instrument} setting as shown: + +@example +\score @{ + ...music... + \midi @{ + \context @{ + \Score + midiChannelMapping = #'instrument + @} + @} +@} +@end example + +@snippets +@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle] +{changing-midi-output-to-one-channel-per-voice.ly} + + +@node Context properties for MIDI effects +@subsection Context properties for MIDI effects + +@cindex Effects in MIDI +@cindex Pan position in MIDI +@cindex Stereo balance in MIDI +@cindex Balance in MIDI +@cindex Expression in MIDI +@cindex Reverb in MIDI +@cindex Chorus level in MIDI +@funindex midiPanPosition +@funindex midiBalance +@funindex midiExpression +@funindex midiReverbLevel +@funindex midiChorusLevel + +The following context properties can be used to apply various MIDI +effects to notes played on the MIDI channel associated with the +current staff, MIDI instrument or voice (depending on the value of the +@code{Score.midiChannelMapping} context property and the context in +which the @code{Staff_performer} is located; see +@ref{MIDI channel mapping}). + +Changing these context properties will affect all notes played on the +channel after the change, however some of the effects may even apply +also to notes which are already playing (depending on the +implementation of the MIDI output device). + +The following context properties are supported: + +@table @var + +@item @code{Staff.midiPanPosition} + +The pan position controls how the sound on a MIDI channel is +distributed between left and right stereo outputs. The context +property accepts a number between -1.0 (@code{#LEFT}) and 1.0 +(@code{#RIGHT}); the value -1.0 will put all sound power to the left +stereo output (keeping the right output silent), the value 0.0 +(@code{#CENTER}) will distribute the sound evenly between the left and +right stereo outputs, and the value 1.0 will move all sound to the +right stereo output. Values between -1.0 and 1.0 can be used to obtain +mixed distributions between left and right stereo outputs. + +@item @code{Staff.midiBalance} + +The stereo balance of a MIDI channel. Similarly to the pan position, +this context property accepts a number between -1.0 (@code{#LEFT}) and +1.0 (@code{#RIGHT}). It varies the relative volume sent to the two +stereo speakers without affecting the distribution of the stereo +signals. + +@item @code{Staff.midiExpression} + +Expression level (as a fraction of the maximum available level) to +apply to a MIDI channel. A MIDI device combines the MIDI channel's +expression level with a voice's current dynamic level (controlled using +constructs such as @code{\p} or @code{\ff}) to obtain the total volume +of each note within the voice. The expression control could be used, for +example, to implement crescendo or decrescendo effects over single +sustained notes (not supported automatically by LilyPond). + +@c Issue 4059 contains an attached snippet which shows how this might +@c be done, but this is too large and complex for the NR, even as a +@c referenced snippet. It could be added to the LSR. + +The expression level ranges from 0.0 (no expression, meaning zero +volume) to 1.0 (full expression). + +@item @code{Staff.midiReverbLevel} + +Reverb level (as a fraction of the maximum available level) to apply +to a MIDI channel. This property accepts numbers between 0.0 (no +reverb) and 1.0 (full effect). + +@item @code{Staff.midiChorusLevel} + +Chorus level (as a fraction of the maximum available level) to apply to +a MIDI channel. This property accepts numbers between 0.0 (no chorus +effect) and 1.0 (full effect). + +@end table + + +@knownissues + +As MIDI files do not contain any actual audio data, changes in these +context properties translate only to requests for changing MIDI channel +controls in the outputted MIDI files. Whether a particular MIDI device +(such as a software MIDI player) can actually handle any of these +requests in a MIDI file is entirely up to the implementation of the +device: a device may choose to ignore some or all of these requests. +Also, how a MIDI device will interpret different values for these +controls (generally, the MIDI standard fixes the behavior only at the +endpoints of the value range available for each control), and whether a +change in the value of a control will affect notes already playing on +that MIDI channel or not, is also specific to the MIDI device +implementation. + +When generating MIDI files, LilyPond will simply transform the +fractional values within each range linearly into values in a +corresponding (7-bit, or 14-bit for MIDI channel controls which support +fine resolution) integer range (0-127 or 0-32767, respectively), +rounding fractional values towards the nearest integer away from zero. +The converted integer values are stored as-is in the generated MIDI +file. Please consult the documentation of your MIDI device for +information about how the device interprets these values. + + @node Enhancing MIDI output @subsection Enhancing MIDI output @@ -3215,7 +3535,7 @@ Notes that do not have any articulations attached to them may also be shortened; so to compensate for this, restrict the use of the @code{\articulate} function to shorter segments of music or modify the values of the variables defined in the @file{articulate} script to -compenstate for the note-shortening behavior.} +compentate for the note-shortening behavior.}