@c -*- coding: utf-8; mode: texinfo; -*- @ignore Translation of GIT committish: FILL-IN-HEAD-COMMITTISH When revising a translation, copy the HEAD committish of the version that you are working on. For details, see the Contributors' Guide, node Updating translation committishes.. @end ignore @c \version "2.16.0" @node External programs @chapter External programs LilyPond can interact with other programs in various ways. @menu * Point and click:: * Text editor support:: * Converting from other formats:: * LilyPond output in other programs:: * Independent includes:: @end menu @node Point and click @section Point and click @cindex point and click Point and click lets you find notes in the input by clicking on them in the PDF viewer. This makes it easier to find input that causes some error in the sheet music. @menu * Configuring the system for point and click:: * Enabling point and click:: * Selective point-and-click:: @end menu @node Configuring the system for point and click @subsection Configuring the system When this functionality is active, LilyPond adds hyperlinks to the PDF file. These hyperlinks are sent to a @q{URI helper} or a web-browser, which opens a text-editor with the cursor in the right place. To make this chain work, you should configure your PDF viewer to follow hyperlinks using the @file{lilypond-invoke-editor} script supplied with LilyPond. The program @file{lilypond-invoke-editor} is a small helper program. It will invoke an editor for the special @code{textedit} URIs, and run a web browser for others. It tests the environment variable @code{EDITOR} for the following patterns, @table @code @item emacs this will invoke @example emacsclient --no-wait +@var{line}:@var{column} @var{file} @end example @item gvim this will invoke @example gvim --remote +:@var{line}:norm@var{column} @var{file} @end example @item nedit this will invoke @example nc -noask +@var{line} @var{file}' @end example @end table The environment variable @code{LYEDITOR} is used to override this. It contains the command line to start the editor, where @code{%(file)s}, @code{%(column)s}, @code{%(line)s} is replaced with the file, column and line respectively. The setting @example emacsclient --no-wait +%(line)s:%(column)s %(file)s @end example @noindent for @code{LYEDITOR} is equivalent to the standard emacsclient invocation. @menu * Using Xpdf for point and click:: * Using GNOME 2 for point and click:: * Using GNOME 3 for point and click:: * Extra configuration for Evince:: @end menu @node Using Xpdf for point and click @unnumberedsubsubsec Using Xpdf @cindex Xpdf For Xpdf on UNIX, the following should be present in @file{xpdfrc}. On UNIX, this file is found either in @file{/etc/xpdfrc} or as @file{$HOME/.xpdfrc}. @example urlCommand "lilypond-invoke-editor %s" @end example If you are using Ubuntu, it is likely that the version of Xpdf installed with your system crashes on every PDF file: this state has been persisting for several years and is due to library mismatches. Your best bet is to install a current @samp{xpdf} package and the corresponding @samp{libpoppler} package from Debian instead. Once you have tested that this works, you might want to use @example sudo apt-mark hold xpdf @end example @noindent in order to keep Ubuntu from overwriting it with the next @q{update} of its crashing package. @node Using GNOME 2 for point and click @unnumberedsubsubsec Using GNOME 2 For using GNOME 2 (and PDF viewers integrated with it), the magic invocation for telling the system about the @samp{textedit:} URI is @example gconftool-2 -t string -s /desktop/gnome/url-handlers/textedit/command "lilypond-invoke-editor %s" gconftool-2 -s /desktop/gnome/url-handlers/textedit/needs_terminal false -t bool gconftool-2 -t bool -s /desktop/gnome/url-handlers/textedit/enabled true @end example After that invocation, @example gnome-open textedit:///etc/issue:1:0:0 @end example @noindent should call @file{lilypond-invoke-editor} for opening files. @node Using GNOME 3 for point and click @unnumberedsubsubsec Using GNOME 3 In GNOME 3, URIs are handled by the @q{gvfs} layer rather than by @q{gconf}. Create a file in a local directory such as @file{/tmp} that is called @file{lilypond-invoke-editor.desktop} and has the contents @example [Desktop Entry] Version=1.0 Name=lilypond-invoke-editor GenericName=Textedit URI handler Comment=URI handler for textedit: Exec=lilypond-invoke-editor %u Terminal=false Type=Application MimeType=x-scheme-handler/textedit; Categories=Editor NoDisplay=true @end example and then execute the commands @example xdg-desktop-menu install ./lilypond-invoke-editor.desktop xdg-mime default lilypond-invoke-editor.desktop x-scheme-handler/textedit @end example After that invocation, @example gnome-open textedit:///etc/issue:1:0:0 @end example @noindent should call @file{lilypond-invoke-editor} for opening files. @node Extra configuration for Evince @unnumberedsubsubsec Extra configuration for Evince @cindex Evince If @code{gnome-open} works, but Evince still refuses to open point and click links due to denied permissions, you might need to change the Apparmor profile of Evince which controls the kind of actions Evince is allowed to perform. For Ubuntu, the process is to edit the file @file{/etc/apparmor.d/local/usr.bin.evince} and append the following lines: @example # For Textedit links /usr/local/bin/lilypond-invoke-editor Cx -> sanitized_helper, @end example @noindent After adding these lines, call @example sudo apparmor_parser -r -T -W /etc/apparmor.d/usr.bin.evince @end example @noindent Now Evince should be able to open point and click links. It is likely that similar configurations will work for other viewers. @node Enabling point and click @unnumberedsubsec Enabling point and click @cindex file size, output Point and click functionality is enabled by default when creating PDF files. The point and click links enlarge the output files significantly. For reducing the size of PDF and PS files, point and click may be switched off by issuing @example \pointAndClickOff @end example @noindent in a @file{.ly} file. Point and click may be explicitly enabled with @example \pointAndClickOn @end example Alternately, you may disable point and click with a command-line option: @example lilypond -dno-point-and-click file.ly @end example @warning{You should always turn off point and click in any LilyPond files to be distributed to avoid including path information about your computer in the .pdf file, which can pose a security risk.} @node Selective point-and-click @unnumberedsubsec Selective point-and-click For some interactive applications, it may be desirable to only include certain point-and-click items. For example, if somebody wanted to create an application which played audio or video starting from a particular note, it would be awkward if clicking on the note produced the point-and-click location for an accidental or slur which occurred over that note. This may be controlled by indicating which events to include: @itemize @item Hard-coded in the @file{.ly} file: @example \pointAndClickTypes #'note-event \relative c' @{ c2\f( f) @} @end example or @example #(ly:set-option 'point-and-click 'note-event) \relative c' @{ c2\f( f) @} @end example @item Command-line: @example lilypond -dpoint-and-click=note-event example.ly @end example @end itemize Multiple events can be included: @itemize @item Hard-coded in the @file{.ly} file: @example \pointAndClickTypes #'(note-event dynamic-event) \relative c' @{ c2\f( f) @} @end example or @example #(ly:set-option 'point-and-click '(note-event dynamic-event)) \relative c' @{ c2\f( f) @} @end example @item Command-line: @smallexample lilypond \ -e"(ly:set-option 'point-and-click '(note-event dynamic-event))" \ example.ly @end smallexample @end itemize @node Text editor support @section Text editor support @cindex editors @cindex vim @cindex emacs @cindex modes, editor @cindex syntax coloring @cindex coloring, syntax There is support for different text editors for LilyPond. @menu * Emacs mode:: * Vim mode:: * Other editors:: @end menu @node Emacs mode @unnumberedsubsec Emacs mode Emacs has a @file{lilypond-mode}, which provides keyword autocompletion, indentation, LilyPond specific parenthesis matching and syntax coloring, handy compile short-cuts and reading LilyPond manuals using Info. If @file{lilypond-mode} is not installed on your platform, see below. An Emacs mode for entering music and running LilyPond is contained in the source archive in the @file{elisp} directory. Do @command{make install} to install it to @var{elispdir}. The file @file{lilypond-init.el} should be placed to @var{load-path}@file{/site-start.d/} or appended to your @file{~/.emacs} or @file{~/.emacs.el}. As a user, you may want add your source path (e.g. @file{~/site-lisp/}) to your @var{load-path} by appending the following line (as modified) to your @file{~/.emacs} @c any reason we do not advise: (push "~/site-lisp" load-path) @example (setq load-path (append (list (expand-file-name "~/site-lisp")) load-path)) @end example @node Vim mode @unnumberedsubsec Vim mode For @uref{http://@/www@/.vim@/.org,Vim}, a filetype plugin, indent mode, and syntax-highlighting mode are available to use with LilyPond. To enable all of these features, create (or modify) your @file{$HOME/.vimrc} to contain these three lines, in order: @example filetype off set runtimepath+=/usr/local/share/lilypond/current/vim/ filetype on @end example @noindent If LilyPond is not installed in the @file{/usr/local/} directory, change the path appropriately. This topic is discussed in @rlearning{Other sources of information}. @node Other editors @unnumberedsubsec Other editors Other editors (both text and graphical) support LilyPond, but their special configuration files are not distributed with LilyPond. Consult their documentation for more information. Such editors are listed in @rweb{Easier editing}. @node Converting from other formats @section Converting from other formats Music can be entered also by importing it from other formats. This chapter documents the tools included in the distribution to do so. There are other tools that produce LilyPond input, for example GUI sequencers and XML converters. Refer to the @uref{http://@/lilypond@/.org,website} for more details. These are separate programs from @command{lilypond} itself, and are run on the command line; see @ref{Command-line usage} for more information. If you have MacOS 10.3 or 10.4 and you have trouble running some of these scripts, e.g. @code{convert-ly}, see @rweb{MacOS X}. @knownissues We unfortunately do not have the resources to maintain these programs; please consider them @qq{as-is}. Patches are appreciated, but bug reports will almost certainly not be resolved. @menu * Invoking midi2ly:: Importing MIDI. * Invoking musicxml2ly:: Importing MusicXML. * Invoking abc2ly:: Importing ABC. * Invoking etf2ly:: Importing Finale. * Other formats:: @end menu @node Invoking midi2ly @subsection Invoking @command{midi2ly} @cindex MIDI @command{midi2ly} translates a Type@tie{}1 MIDI file to a LilyPond source file. MIDI (Music Instrument Digital Interface) is a standard for digital instruments: it specifies cabling, a serial protocol and a file format. The MIDI file format is a de facto standard format for exporting music from other programs, so this capability may come in useful when importing files from a program that has a converter for a direct format. @command{midi2ly} converts tracks into @rinternals{Staff} and channels into @rinternals{Voice} contexts. Relative mode is used for pitches, durations are only written when necessary. It is possible to record a MIDI file using a digital keyboard, and then convert it to @file{.ly}. However, human players are not rhythmically exact enough to make a MIDI to LY conversion trivial. When invoked with quantizing (@option{-s} and @option{-d} options) @command{midi2ly} tries to compensate for these timing errors, but is not very good at this. It is therefore not recommended to use @command{midi2ly} for human-generated midi files. It is invoked from the command-line as follows, @example midi2ly [@var{option}]@dots{} @var{midi-file} @end example Note that by @q{command-line}, we mean the command line of the operating system. See @ref{Converting from other formats}, for more information about this. The following options are supported by @command{midi2ly}. @table @code @item -a, --absolute-pitches Print absolute pitches. @item -d, --duration-quant=@var{DUR} Quantize note durations on @var{DUR}. @item -e, --explicit-durations Print explicit durations. @item -h, --help Show summary of usage. @item -k, --key=@var{acc}[:@var{minor}] Set default key. @math{@var{acc} > 0} sets number of sharps; @math{@var{acc} < 0} sets number of flats. A minor key is indicated by @code{:1}. @item -o, --output=@var{file} Write output to @var{file}. @item -s, --start-quant=@var{DUR} Quantize note starts on @var{DUR}. @item -t, --allow-tuplet=@var{DUR}*@var{NUM}/@var{DEN} Allow tuplet durations @var{DUR}*@var{NUM}/@var{DEN}. @item -v, --verbose Be verbose. @item -V, --version Print version number. @item -w, --warranty Show warranty and copyright. @item -x, --text-lyrics Treat every text as a lyric. @end table @knownissues Overlapping notes in an arpeggio will not be correctly rendered. The first note will be read and the others will be ignored. Set them all to a single duration and add phrase markings or pedal indicators. @node Invoking musicxml2ly @subsection Invoking @code{musicxml2ly} @cindex MusicXML @uref{http://@/www.@/musicxml@/.org/,MusicXML} is an XML dialect for representing music notation. @command{musicxml2ly} extracts the notes, articulations, score structure, lyrics, etc. from part-wise MusicXML files, and writes them to a @file{.ly} file. It is invoked from the command-line. It is invoked from the command-line as follows, @example musicxml2ly [@var{option}]@dots{} @var{xml-file} @end example Note that by @q{command-line}, we mean the command line of the operating system. See @ref{Converting from other formats}, for more information about this. If the given filename is @file{-}, @command{musicxml2ly} reads input from the command line. The following options are supported by @command{musicxml2ly}: @table @code @item -a, --absolute convert pitches in absolute mode. @item -h, --help print usage and option summary. @item -l, --language=LANG use LANG for pitch names, e.g. 'deutsch' for note names in German. @item --loglevel=@var{loglevel} Set the output verbosity to @var{loglevel}. Possible values are @code{NONE}, @code{ERROR}, @code{WARNING}, @code{PROGRESS} (default) and @code{DEBUG}. @item --lxml use the lxml.etree Python package for XML-parsing; uses less memory and cpu time. @item -m, --midi activate midi-block. @item -nd, --no-articulation-directions do not convert directions (@code{^}, @code{_} or @code{-}) for articulations, dynamics, etc. @item --no-beaming do not convert beaming information, use LilyPond's automatic beaming instead. @item -o, --output=@var{file} set output filename to @var{file}. If @var{file} is @file{-}, the output will be printed on stdout. If not given, @var{xml-file}@file{.ly} will be used. @item -r, --relative convert pitches in relative mode (default). @item -v, --verbose be verbose. @item --version print version information. @item -z, --compressed input file is a zip-compressed MusicXML file. @end table @node Invoking abc2ly @subsection Invoking @code{abc2ly} @warning{This program is not supported, and may be remove from future versions of LilyPond.} @cindex ABC ABC is a fairly simple ASCII based format. It is described at the ABC site: @quotation @uref{http://@/www@/.walshaw@/.plus@/.com/@/abc/@/learn@/.html}. @end quotation @command{abc2ly} translates from ABC to LilyPond. It is invoked as follows: @example abc2ly [@var{option}]@dots{} @var{abc-file} @end example The following options are supported by @command{abc2ly}: @table @code @item -b, --beams=None preserve ABC's notion of beams @item -h, --help this help @item -o, --output=@var{file} set output filename to @var{file}. @item -s, --strict be strict about success @item --version print version information. @end table There is a rudimentary facility for adding LilyPond code to the ABC source file. If you say: @example %%LY voices \set autoBeaming = ##f @end example This will cause the text following the keyword @q{voices} to be inserted into the current voice of the LilyPond output file. Similarly, @example %%LY slyrics more words @end example will cause the text following the @q{slyrics} keyword to be inserted into the current line of lyrics. @knownissues The ABC standard is not very @q{standard}. For extended features (e.g., polyphonic music) different conventions exist. Multiple tunes in one file cannot be converted. ABC synchronizes words and notes at the beginning of a line; @command{abc2ly} does not. @command{abc2ly} ignores the ABC beaming. @node Invoking etf2ly @subsection Invoking @command{etf2ly} @warning{This program is not supported, and may be remove from future versions of LilyPond.} @cindex ETF @cindex enigma @cindex Finale @cindex Coda Technology ETF (Enigma Transport Format) is a format used by Coda Music Technology's Finale product. @command{etf2ly} will convert part of an ETF file to a ready-to-use LilyPond file. It is invoked from the command-line as follows. @example etf2ly [@var{option}]@dots{} @var{etf-file} @end example Note that by @q{command-line}, we mean the command line of the operating system. See @ref{Converting from other formats}, for more information about this. The following options are supported by @command{etf2ly}: @table @code @item -h, --help this help @item -o, --output=@var{FILE} set output filename to @var{FILE} @item --version version information @end table @knownissues The list of articulation scripts is incomplete. Empty measures confuse @command{etf2ly}. Sequences of grace notes are ended improperly. @node Other formats @subsection Other formats @cindex External programs, generating LilyPond files LilyPond itself does not come with support for any other formats, but some external tools can also generate LilyPond files. These are listed in @rweb{Easier editing}. @node LilyPond output in other programs @section LilyPond output in other programs This section shows methods to integrate text and music, different than the automated method with @command{lilypond-book}. @menu * Many quotes from a large score:: * Inserting LilyPond output into OpenOffice and LibreOffice:: * Inserting LilyPond output into other programs:: @end menu @node Many quotes from a large score @unnumberedsubsec Many quotes from a large score If you need to quote many fragments from a large score, you can also use the clip systems feature, see @ruser{Extracting fragments of music}. @node Inserting LilyPond output into OpenOffice and LibreOffice @unnumberedsubsec Inserting LilyPond output into OpenOffice and LibreOffice @cindex OpenOffice.org @cindex LibreOffice.org LilyPond notation can be added to OpenOffice.org and LibreOffice with @uref{http://@/ooolilypond@/.sourceforge@/.net@/,OOoLilyPond}. @node Inserting LilyPond output into other programs @unnumberedsubsec Inserting LilyPond output into other programs To insert LilyPond output in other programs, use @code{lilypond} instead of @code{lilypond-book}. Each example must be created individually and added to the document; consult the documentation for that program. Most programs will be able to insert LilyPond output in @file{PNG}, @file{EPS}, or @file{PDF} formats. To reduce the white space around your LilyPond score, use the following options @example \paper@{ indent=0\mm line-width=120\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f @} @{ c1 @} @end example To produce useful image files: @example EPS lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts myfile.ly PNG lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png myfile.ly A transparent PNG lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts \ -dpixmap-format=pngalpha --png myfile.ly @end example @node Independent includes @section Independent @code{include}s Some people have written large (and useful!) code that can be shared between projects. This code might eventually make its way into LilyPond itself, but until that happens, you must download and @code{\include} them manually. @menu * MIDI articulation:: @end menu @node MIDI articulation @subsection MIDI articulation LilyPond can be used to produce MIDI output, for @qq{proof-hearing} what has been written. However, only dynamics, explicit tempo markings, and the notes and durations themselves are produced in the output. The @emph{articulate} project is one attempt to get more of the information in the score into MIDI. It works by shortening notes not under slurs, to @q{articulate} the notes. The amount of shortening depends on any articulation markings attached to a note: staccato halves the note value, tenuto gives a note its full duration, and so on. The script also realises trills and turns, and could be extended to expand other ornaments such as mordents. @example @uref{http://@/www@/.nicta@/.com@/.au/@/people/@/chubbp/@/articulate} @end example @knownissues Its main limitation is that it can only affect things it knows about: anything that is merely textual markup (instead of a note property) is still ignored.