-@c -*-texinfo-*-
+@c -*- coding: latin-1; mode: texinfo; -*-
+
+@node Converting from other formats
+@chapter 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.
-@node Conversion tools
-@chapter Converting to LilyPond format.
@menu
-* midi2ly::
-* etf2ly::
-* abc2ly::
-* pmx2ly::
-* musedata2ly::
-* mup2ly::
+* Invoking convert-ly:: Older LilyPond versions.
+* Invoking midi2ly:: Importing MIDI.
+* Invoking etf2ly:: Importing Finale.
+* Invoking abc2ly:: Importing ABC.
+* Invoking mup2ly:: Importing MUP.
+* Other formats::
@end menu
-@node midi2ly
-@section midi2ly
-
-Midi2ly translates a MIDI input 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 you want
-to import files from a program that has no converter for its native
-format.
+@node Invoking convert-ly
+@section Invoking convert-ly
-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. midi2ly tries to
-compensate for these timing errors, but is not very good at this. It is
-therefore not recommended to use midi2ly for human-generated midi
-files. Correcting the quantization mistakes of the human player takes a
-lot of time.
+The syntax is regularly changed to simplify it or improve it in
+different ways. A side effect of this, is that LilyPond often is not
+compatible with older files. To remedy this, the program convert-ly
+can be used to deal with most of the syntax changes.
-Hackers who know about signal processing are invited to write a more
-robust midi2ly.
+It uses @code{\version} statements in the file to detect the old
+version number. For example, to upgrade all LilyPond files in the
+current directory and its subdirectories, enter the following on the
+command line.
-@subsection Invoking midi2ly
+@example
+ convert-ly -e --to=1.3.150 `find . -name '*.ly' -print`
+@end example
+The program is invoked as follows:
@example
- midi2ly [@var{OPTION}]@dots{} @var{MIDI-FILE}
+ convert-ly [@var{option}]@dots{} @var{file}@dots{}
@end example
-@unnumberedsubsec Options
+
+The following options can be given:
@table @code
-@item -b, --no-quantify,
- Write exact durations, e.g.: `a4*385/384'.
-@item -D, --debug,
- Print lots of debugging stuff.
-@item -h, --help,
- Show a summary of usage.
-@item -I, --include=@file{DIR},
- Add DIR to search path.
-@item -k, --key=ACC[:MINOR],
- Set default key. ACC > 0 sets number of sharps; ACC < 0 sets number
- of flats. A minor key is indicated by ":1".
-@item -n, --no-silly,
- Assume no plets or double dots, assume smallest (reciprocal) duration 16.
-@item -o, --output=@file{FILE},
- Set @file{FILE} as default output.
-@item -p, --no-plets,
- Assume no plets.
-@item -q, --quiet,
- Be quiet.
-@item -s, --smallest=N,
- Assume no shorter (reciprocal) durations than N.
-@item -v, --verbose,
- Be verbose.
-@item -w, --warranty,
- Show the warranty with which midi2ly comes. (It comes with @strong{NO WARRANTY}!)
-@item -x, --no-double-dots,
- Assume no double dotted notes.
+@item -e,--edit
+ Do an inline edit of the input file. Overrides @code{--output}.
+@item -f,--from=@var{from-patchlevel}
+ Set the level to convert from. If this is not set, convert-ly will
+ guess this, on the basis of @code{\version} strings in the file.
+@item -o,--output=@var{file}
+ Set the output file to write.
+@item -n,--no-version
+ Normally, convert-ly adds a @code{\version} indicator
+ to the output. Specifying this option suppresses this.
+@item -s, --show-rules
+ Show all known conversions and exit.
+@item --to=@var{to-patchlevel}
+ Set the goal version of the conversion. It defaults to the latest
+ available version.
+@item -h, --help
+ Print usage help.
@end table
+convert-ly always converts up to the last syntax change handled by
+it. This means that the @code{\version} number left in the file is
+usually lower than the version of convert-ly itself.
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+@refbugs
+Not all language changes are handled. Only one output option can be specified.
-Written by @email{Jan Nieuwenhuizen, janneke@@gnu.org}.
+@node Invoking midi2ly
+@section Invoking midi2ly
+@cindex MIDI
-@node etf2ly
-@section etf2ly
+Midi2ly translates a Type 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 convertor for a
+direct format.
-ETF (Enigma Transport Format) is a format used by Coda Music
-Technology's Finale product. This program will convert part of an ETF
-file to a ready-to-use LilyPond file.
+Midi2ly will convert tracks into @internalsref{Staff} and
+channels into @internalsref{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 (@code{-s} and @code{-d} options) midi2ly
+tries to compensate for these timing errors, but is not very good at
+this. It is therefore not recommended to use midi2ly for
+human-generated midi files.
-@subsection Invoking etf2ly
-Usage:
+It is invoked from the command-line as follows,
@example
- etf2ly [@var{OPTION}]@dots{} @var{ETF-FILE}
+midi2ly [@var{option}]@dots{} @var{midi-file}
@end example
-Convert ETF to LilyPond.
-@unnumberedsubsec Options
+The following options are supported by midi2ly.
+
@table @code
-@item -h,--help
-this help
-@item -o,--output=FILE
-set output filename to FILE
-@item -v,--version
-version information
+@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. @var{acc} > 0 sets number of sharps; @var{acc} < 0
+ sets number of flats. A minor key is indicated by ":1".
+@item -o, --output=@var{file}
+ Write output to @var{file}.
+@item -s, --start-quant=@var{DUR}
+ Quantize note starts on 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
@refbugs
-Known: articulation scripts are buggy. Empty measures confuse etf2ly.
+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.
-Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+@node Invoking etf2ly
+@section Invoking etf2ly
-@node abc2ly
-@section abc2ly
-
-ABC is a fairly simple ASCII based format. It is described at
-@uref{http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt}.
+@cindex ETF
+@cindex enigma
+@cindex Finale
+@cindex Coda Technology
-@subsection Invoking abc2ly
-
-@example
- abc2ly [@var{OPTION}]@dots{} @var{ABC-FILE}
-@end example
-
-Convert ABC to LilyPond.
-
-There is a rudimentary facility for adding lilypond code to the ABC
-source file. If you say:
-
-@example
- %%LY voices \property Voice.noAutoBeaming=##t
-@end example
-
-This will cause the text following the keyword ``voices'' to be inserted
-into the current voice of the lilypond output file.
-
-Similarly:
+ETF (Enigma Transport Format) is a format used by Coda Music
+Technology's Finale product. 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
- %%LY slyrics more words
+ etf2ly [@var{option}]@dots{} @var{etf-file}
@end example
-will cause the text following the ``slyrics'' keyword to be inserted
-into the current line of lyrics.
-
-@unnumberedsubsec Options
+The following options are supported by etf2ly:
@table @code
@item -h,--help
this help
version information
@end table
-@refbugs
-
-The ABC standard is not very "standard". For extended features
-(eg. polyphonic music) different conventions exist.
-Multiple tunes in one file cannot be converted.
-
-ABC synchronizes words and notes at the beginning of a line; abc2ly does
-not.
-
-abc2ly ignores the ABC beaming.
-
-Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
-@c How about Laura? /MB
+@refbugs
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+The list of articulation scripts is incomplete. Empty measures
+confuse etf2ly. Sequences of grace notes are ended improperly.
-@node pmx2ly
-@section pmx2ly
-PMX is a Musixtex preprocessor written by Don Simons, see
-@uref{http://icking-music-archive.sunsite.dk/Misc/Music/musixtex/software/pmx/}.
+@node Invoking abc2ly
+@section Invoking abc2ly
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+@cindex ABC
-@subsection Invoking pmx2ly
+ABC is a fairly simple ASCII based format. It is described at the ABC site:
+@quotation
+@uref{http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt}.
+@end quotation
+abc2ly translates from ABC to LilyPond. It is invoked as follows:
@example
- pmx2ly [@var{OPTION}]@dots{} @var{PMX-FILE}
+ abc2ly [@var{option}]@dots{} @var{abc-file}
@end example
-Convert PMX to LilyPond.
-
-@unnumberedsubsec Options
+The following options are supported by abc2ly:
@table @code
@item -h,--help
this help
-@item -o,--output=FILE
-set output filename to FILE
+@item -o,--output=@var{file}
+set output filename to @var{file}.
@item -v,--version
-version information
+print version information.
@end table
-Report bugs to @email{bug-gnu-music@@gnu.org}.
-
-Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
-
+There is a rudimentary facility for adding LilyPond code to the ABC
+source file. If you say:
-@node musedata2ly
-@section musedata2ly
+@example
+ %%LY voices \set autoBeaming = ##f
+@end example
-Musedata (@uref{http://www.musedata.org/}) is an electronic library of
-classical music scores, currently comprising about 800 composition
-dating from 1700 to 1825. The music is encoded in so-called Musedata
-format
-(@uref{http://www.ccarh.org/publications/books/beyondmidi/online/musedata}).
-musedata2ly converts a set of musedata files to one .ly file, and will
-include a @code{\header} field if a @file{.ref} file is supplied
+This will cause the text following the keyword ``voices'' to be inserted
+into the current voice of the LilyPond output file.
-@subsection Invoking musedata2ly
+Similarly,
@example
- musedata2ly [@var{OPTION}]@dots{} @var{MUSEDATA-FILE}
+ %%LY slyrics more words
@end example
-Convert Musedata to LilyPond.
+will cause the text following the ``slyrics'' keyword to be inserted
+into the current line of lyrics.
-@unnumberedsubsec Options
-@table @code
-@item -h,--help
-print help
-@item -o,--output=@var{file}
-set output filename to @var{file}
-@item -v,--version
-version information
-@item -r,--ref=@var{reffile}
- read background information from ref-file
-@var{REFFILE}
-@end table
+@refbugs
+
+The ABC standard is not very ``standard''. For extended features
+(e.g. polyphonic music) different conventions exist.
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+Multiple tunes in one file cannot be converted.
+
+ABC synchronizes words and notes at the beginning of a line; abc2ly does
+not.
-Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
+abc2ly ignores the ABC beaming.
-@node mup2ly
-@section mup2ly
+@node Invoking mup2ly
+@section Invoking mup2ly
-MUP (Music Publisher) is a shareware music notation program by Arkkra
-Enterprises. It is also the name of the input format. Mup2ly will
-convert part of a Mup file to a ready-to-use LilyPond file.
+Mup (Music Publisher) is a shareware music notation program by Arkkra
+Enterprises. Mup2ly will convert part of a Mup file to LilyPond
+format. It is invoked as follows:
-@subsection Invoking mup2ly
+@cindex Music Publisher
+@cindex Mup
+@cindex Arkkra
+It is invoked from the command-line as follows.
@example
- mup2ly [@var{OPTION}]@dots{} @var{MUP-FILE}
+ mup2ly [@var{option}]@dots{} @var{mup-file}
@end example
-Convert Mup to LilyPond.
-
-@unnumberedsubsec Options
+The following options are supported by mup2ly:
@table @code
@item -d,--debug
show what constructs are not converted, but skipped.
-@item D, --define=@var{NAME}[=@code{EXP}]
-define macro @var{NAME} with opt expansion @code{EXP}
+@item -D, --define=@var{name}[=@code{exp}]
+define macro @var{name} with opt expansion @code{exp}
@item -E,--pre-process
only run the pre-processor
@item -h,--help
print help
-@item -o,--output=FILE
-write output to @var{FILE}
+@item -o,--output=@var{file}
+write output to @var{file}
@item -v,--version
version information
@item -w,--warranty
-print warranty and copyright. Mup2ly comes with absolutely @strong{NO WARRANTY}.
+print warranty and copyright.
@end table
@refbugs
-Currently, only plain notes (pitches, durations), voices and staffs are
+Only plain notes (pitches, durations), voices, and staves are
converted.
-Written by @email{Jan Nieuwenhuizen,janneke@@gnu.org}, based on pmx2ly.
-Report bugs to @email{bug-gnu-music@@gnu.org}.
+@node Other formats
+@section Other formats
+LilyPond itself does not come with support for other formats, but
+there are also external tools that generate LilyPond files.
+These tools include
+http://denemo.sourceforge.net/
+@itemize @bullet
+@item @uref{http://www.nongnu.org/xml2ly/, xml2ly}, that imports
+@uref{http://www.musicxml.com/,MusicXML}
+@item
+@uref{http://rnvs.informatik.tu-chemnitz.de/~jan/noteedit/noteedit.html,NoteEdit}
+which imports MusicXML
+@item @uref{http://www.all-day-breakfast.com/rosegarden/,Rosegarden},
+which imports MIDI
+@end itemize