=head1 DESCRIPTION
LilyPond typesets music. It translates script files (mudela files or
-F<.ly>'s) into TeX input. Typesetting music is a complex task,
+F<*.ly>'s) into TeX input. Typesetting music is a complex task,
whereas the message that printed music conveys is usually a simple
one. LilyPond is a try at providing a simple interface for setting
-music LilyPond has these features:
+music. LilyPond has these features:
=over 5
=head1 DESIGN CONSIDERATIONS
-LilyPond was written with some
-considerations in mind:
+LilyPond was written with some considerations in mind:
=over 5
-=item *
-Describing a well-defined language for defining music. We call this
-language (rather arrogantly) The Musical Definition Language (mudela
-for short). LilyPond reads a mudela sourcefile
-and outputs a TeX file. This musical definition language should:
+=item * Describing a well-defined language for defining music. We call
+this language (rather arrogantly) The Musical Definition Language
+(mudela for short). LilyPond reads a mudela sourcefile and outputs a
+TeX file. This musical definition language should:
=over 5
-=item 1
+=item 1.
define the musical message of the writer as unambigiously as
possible.
-=item 2
+=item 2.
be easily readable. (as compared to, say, MusixTeX input)
-=item 3
+=item 3.
be writable in ASCII (with a simple texteditor).
=back
TeX is very convenient for producing output.
=item *
- Generate high-quality output. Ideally it should be of a professional
+Generate high-quality output. Ideally it should be of a professional
quality. We'd like to render Herbert Chlapiks words, "Fine music
setting is not possible without a knowledgeable printer," untrue.
=over 5
+=item B<-I,--include>=F<FILE>
+
+add F<FILE> to the search path for input files.
+
=item B<-d,--debug>,
debugging. LilyPond will read the file F<.dstreamrc>, which tells for what functions to produce copious debugging output.
=item B<-w,--warranty>,
-warranty
+Show the warranty with which LilyPond comes. (It comes with B<NO WARRANTY>!)
-=item B<-o,--output>,
+=item B<-o,--output=>F<FILE>,
-default output file
+Set the default output file to F<FILE>.
=item B<-h,--help>,
-help
+Show a summary of usage
=back
=item *
Unix. Any decent Linux distribution is fine. LilyPond is known to run
-on Linux and Solaris
+on Linux, AIX, Digital Unix and Solaris
=item *
- GNU C++ v2.7 or better (with libg++ )
+GNU C++ v2.7 or better, with libg++. Version 2.7.2 or better recommended.
=item *
- GNU make.
+GNU make.
=item *
- flex (2.5.1 or better)
+flex (2.5.1 or better)
=item *
-bison/yacc
+Bison or YACC.
-=item *
-The "flower" library,
-which should be available from the
-same source you got this from.
+=item * The "Flower" library, which should be available from the same
+source you got this from.
-=item *
-perl
+=item * perl. The Makefile uses perl for trivial operations, and you
+could tinker with it to use sed or awk.
=back
-
-The Makefile uses perl for trivial operations, and you could tinker
-with it to use sed or awk.
-
-Operation:
+LilyPond does use a lot of resources. For operation you need the following:
=over 5
-=item * TeX
+=item *
+TeX
-=item * the MusixTeX fonts
+=item *
+The MusixTeX fonts. (I use version T.59)
=back
cd flower; make; cd ..
tar zxf lilypond-1.2.13.tar.gz
cd lilypond-1.2.13
+ configure
make
You might want to edit Variables.make to tailor the compilation flags.
=item *
typeof
-=item *
+=item *
operator <?, operator >?
-=item *
+=item *
the new for-scope
=item *
class Rational (libg++)
-=item *
+=item *
named return values
=back
Jan Nieuwenhuizen <jan@digicash.com>, bits of FlowerLib, general comments.
=item *
-Mats Bengtsson <matsb@s3.kth.se>, bugfixes, testing.
+Mats Bengtsson <matsb@s3.kth.se>, bugfixes, testing, general comments.
=back
Your name could be here! If you want to help, then take a look at the
-SMALLISH PROJECTS section of LilyPond. Some do not involve coding C++
+SMALLISH PROJECTS section of in the file F<TODO>. Some do not involve
+coding C++
=head1 EXAMPLES
At this time, LilyPond is only suited for Quick & Dirty jobs (the
-output quality still is too low). If you're not discouraged; this is
-what I type in my xterm:
+output quality of multistaff material still is too low). If you're not
+discouraged; this is what I type in my xterm:
lilypond someinput.ly
tex test
This is what the output looks like over here:
- hw:~/musix/spacer$ lilypond maartje.ly
- LilyPond 0.0.17/FlowerLib 1.0.14. Compile: Dec 17 1996, 11:33:54 (g++ 2.7.2)
- Parsing ... [symbol.ini][maartje.ly]
- Processing ... Calculating ... Postprocessing ...
- output to lelie.uit...
+ hw:~/musix/spacer$ lilypond input/maartje
+ LilyPond 0.0.23/FlowerLib 1.0.20. Compile: Jan 20 1997, 00:51:06 (g++ 2.7.2)
+ Parsing ... [./init//symbol.ini[./init/dutch.ini][./init/script.ini][./init/table_sixteen.ini]][./input/maartje.ly]
+ Processing music ... warning: process_requests(): beamed note should have a stem (t = 5/8)
+ Preprocessing ... Calculating ... Postprocessing ...
+ output to lelie.out...
hw:~/musix/spacer$ tex test
This is TeX, Version 3.14159 (C version 6.1)
(test.tex
Hyphenation patterns for english, dutch, loaded.
(lilyponddefs.tex) (lelie.uit) [1] [2] )
- Output written on test.dvi (2 pages, 8072 bytes).
+ Output written on test.dvi (2 pages, 8420 bytes).
Transcript written on test.log.
hw:~/musix/spacer$ xdvi test&
- [1] 1468
+ [1] 855
-Check out kortjakje.ly, it has some comments
+Check out F<kortjakje.ly>, it has some comments
=head1 PROBLEMS
If LilyPond bombs out, then please recompile using B<-g>, and send a
copy of the input which causes the error and a gdb stacktrace of the
crash. It also helps if you can print the values of the objects. So if
-you trace is
+your trace is
(gdb) backtrace 12
#0 Interval::operator+= (this=0x11fffec60..)
:
Than it would help if you send a dump of the Interval and the Item
-(use: 'print *this' or use LilyPond print() methods).
+(use: C<print *this> or use LilyPond C<print()> methods).
This is a beta version of LilyPond. Please send your helpful comments
and patches to me (see AUTHORS section)
=head1 SEE ALSO
-lilygut(1), lilyinput(1)
+There are some documentation files in the subdirectory F<Documentation/>,
+among others: lilygut, lilyinput, error, faq,
-=head1 REMARKS
+=head1 REMARKS
LilyPond has no connection with the music package RoseGarden, other
than the names being similar.
+
+
+=head1 HISTORY
+
+(for a detailed changelog, see F<NEWS>)
+
+LilyPond's roots lie in MPP, a preprocessor to the rather arcane
+MusiXTeX macro package for TeX. A friend of mine, Jan Nieuwenhuizen
+wrote the first 44 versions (0.01 to 0.44), then his program caught my
+attention, and I was slowly sucked in to the interesting problem of
+easily producing beautifully printed music. I contributed some
+code. We soon realised that MPP's design was too fundamentally broken
+to be repaired. It was decided to rewrite MPP. We debated a lot about
+the requirements to an inputformat (fall 1995). I sat down and started
+with a parser-first, bottom-up rewrite called mpp95 (which totally
+failed, obviously).
+
+After long and hard thinking, I came up with an algorithm for the
+horizontal spacing of multiple staffs (april 1996) I coded it (and did
+not test it). After starting with this fundamental piece, I slowly
+added the stages which come before spacing, and after a few months, I
+had a first working version, (october 1996). I announced Patchlevel 0.0.7
+(or 8) to the mutex list after asking some technical details on
+spacing; it was downloaded approximately 4 times. Then I got the hang
+of it, and in the subsequent two months, I coded until it had
+doubled in size (pl 23).
+++ /dev/null
-% "Ah, je vous dirai, maman" (Mozart)
-%
-% bare bones version. (written down from memory :-)
-
-% the % is a comment.
-
-% declare music (which will be in *one* staff ) for the lead voice
-
-melodie = music {
- $ % switch Lilypond in note-mode
- \octave {} % set the default octave
- % the default note duratino is 4
- %%% theme
- c c | % the '|' checks if there is a new measure here.
- g g|
- a a|
-
- g2| % g2 means a "g-1" pitched half-note
- f f| e e| d d| c2
- g g| f f| e e| d d| g g| f f| e e| d d|
- %%% var 1
- c r8 c8 % r8 means an 8th rest.
- (| % start a slur
- % NOTE: the slurstart should be directly after the note
- ) % end a slur.
- g r8 g8 (| ) a r8 a8 (| ) g r4
- f r8 f8 (| ) e4 r8 e8 ( |) d4 r8 d8 (| ) c4 r4
-$}
-
- % more of this.
-begeleiding =
-$
- \music { % as you can see, the $ sign obliges
- % you to precede keyword by a backslash: \
- \octave { ` } % default octave: 1 below the first octave.
-
- %%% theme
- `c % ` means one octave lower.
- % Similarly: ' means one higher.
- c e c f c e c d `b c `a `f `g `c2
- \octave { ` }
- e `g d `g c `g `b `g e `g d `g c `g `b `g
- %%%% var 1
- r8 e8() c r8 e8() c r8 f8()c r8 e8()c
- r8 d8()`b r8 c8()`a r8 `a8()`f r8 `e8()`c
-}$
-
-
-% create a staff named bstaf
-bstaf = staff {
- melodic
- music { begeleiding } % use the declared music
- commands { % commands with Staff-wide impact.
- clef bass % bass-clef
- }
- }
-
-% another one
-vstaf = staff {
- melodic
- music { melodie }
- commands { clef violin }
- % default clef is violin clef
- }
-
-
-score {
- staff { vstaf }
- staff { bstaf }
- paper {
- unitspace 2.5cm % a whole note takes 2.5 cm ideally.
- }
- commands {
- meter 2 4 % a 2/4 meter.
- skip 33:0 % skip 32 measures, and generate the bars
-% meter 6 8 % another meter
- }
-}
-
+++ /dev/null
-% pavane pour une Infante d\'efunte
-%
-% Maurice Ravel
-%
-% (Ravel has been dead for over 50 years. This does not have copyright)
-%
-
-horn =
-staff {melodic
- music{ $
- \octave { ' }
- \duration { 8}
-
-% 1
- d2( [)d e cis `b] |
- `a4 [`b cis] [cis `b] `b4 |
- fis2( [)fis g e d] |
- cis4 [d e(] [)e fis d cis] |
- `b4 [cis d(] [)d e cis `b] |
- cis2 r2^"c\'edez" |
- r4 fis2 fis4 |
- fis2^"en mesure" ()[fis e a fis]|
- fis4-- e4-- d4-- e4-- |
- `b2()[`b^"un peu retenu" `a( d cis]|
-% 11
- )`b [`fis^"en \'elargissant"-- `a-- `b--] cis4-- `b4--|
- `fis2 r2 |
- cis4^"1er mouvement" d4^"tr\`es lontain" ()[d cis d e]
- \octave { }
- | a4 gis2. |
- a4 b4()[b a b 'cis] |
- fis4 e4 cis2 |
- e4 fis4 () [fis e fis gis] |
- cis4 `b4()`b8 r8 r4^"tr\`es soutenu" |
-
- r4 r4 | %2/4 meter
-
- 'cis4_"\dyn ppp" 'd4 () ['d 'cis 'd 'e] |
- a4 gis2. |
- a4 b4()[b a b 'cis] |
- fis4 e4 cis2 |
- e4_"\dyn pp" fis4()[fis e fis gis] |
- cis4_"\dyn mf" `b4()`b8 r8 r4^"un peu plus lent" |
- r1 |
- r2 r4 r4 %^\fermata
-%% cut 'n paste.
- \octave { ' }
- | d2^"Reprenez le mouvement"( [)d e cis `b] |
- `a4 [`b cis] [cis `b] `b4 |
- fis2( [)fis g e d] |
- cis4 [d e(] [)e fis d cis] |
- `b4 [cis d(] [)d e cis `b] |
- cis2 r2^"c\'edez" |
- r4 fis2 fis4 |
- fis2^"en mesure"()[fis e a fis] |
- fis4-- e4-- d4-- e4-- |
- `b2() [`b `a-. d-. cis-.] |
- `b-. [`fis^"large" `a `b] cis4 `b4 `fis2 r2 |
-
- %% mark B
- r1^"1er mouvement"
- \duration {8}
- | r2 [c-.( e-. c-. )`a-. ]
- \plet {2/3}\octave{} |
- | [c e a ] \plet{1/1} b4-> () [b c-- e-- a--] |
- b4. b8()g2 |
- r1 |
- r2 [f a f d]
- \plet {2/3}
- | [f a 'c] \plet{1/1} 'e4-^ () ['e f-> a-> 'c->] |
- 'e4._"sf" 'e8()'c4 r4 |
- r1 |
- r4 r4-\fermata
- \octave { ' }
- |d2( [)d e cis `b] |
- `a4 [`b cis] [cis `b] `b4 |
- fis2( [)fis g e d] |
- cis4 [d e(] [)e fis d cis] |
- `b4 [cis d(] [)d e cis `b] |
- cis2 r2^"c\'edez" |
- r4 fis2 fis4 |
- fis2()[fis e a fis] |
- fis4-- e4-- d4-- e4--
- \octave{ }
- | b2()[b a 'd 'cis] |
- b [fis a b ] 'cis4 b4 |
- fis2 r2 |
- r1-\fermata
- $}
- commands {
- key $fis cis $
- }
-}
-score {
- staff {
- horn
- }
- paper {
- output "pavane.out"
- unitspace 1.5 cm
- geometric 1.4
- }
- commands {
- meter 4 4
- skip 18:0
- meter 2 4
- skip 1:0
- meter 4 4
- skip 20:0
- bar "|:"
- skip 9:0
- meter 2 4
- skip 1:0
- bar ":|"
- meter 4 4
- skip 13:0
- bar "||"
- }
-}
\ No newline at end of file