+2004-08-21 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * scm/part-combiner.scm: skip name string. Fixes segfault problem.
+
+ * Documentation/user/sound-output.texi (Sound): new file. Move all
+ MIDI related information.
+
2004-08-20 Han-Wen Nienhuys <hanwen@xs4all.nl>
* lily/script-engraver.cc (acknowledge_grob): only take into
2004-08-19 Erik Sandberg <ersa9195@student.uu.se>
- * ly/spanners-init.ly: Correct meanings of setTextDecresc/Dim, added setHairpinDecresc/Dim
+ * ly/spanners-init.ly: Correct meanings of setTextDecresc/Dim,
+ added setHairpinDecresc/Dim
2004-08-19 Jan Nieuwenhuizen <janneke@gnu.org>
paragraph, the last line simply takes its natural length.
+@node Multiple movements
+@subsection Multiple movements
+
+@cindex bibliographic information
+@cindex titles
+@cindex composer
+@cindex Engraved by LilyPond
+
+A document may contains multiple pieces of music. Examples of these
+are an etude book, or an orchestral part with multiple movements.
+Each movement is entered with a @code{\score} block,
+
+@example
+ \score @{
+ @var{..music..}
+ @}
+@end example
+
+The movements are combined together to
+@code{\book} block is used to group the individual movements.
+
+@example
+\book @{
+ \score @{
+ @var{..}
+ @}
+ \score @{
+ @var{..}
+ @}
+@}
+@end example
+
+
+The header for each piece of music can be put inside the @code{\score}
+block. The @code{piece} name from the header will be printed before
+each movement. The title for the entire book can be put inside the
+@code{\book}, but if it is not present, the @code{\header} which is at
+the top of the file is inserted.
+
+@cindex Engraved by LilyPond
+@cindex signature line
+
+@example
+\book @{
+ \header @{
+ title = "Eight miniatures"
+ composer = "Igor Stravinsky"
+ @}
+ \score @{
+ @dots{}
+ \header @{ piece = "Romanze" @}
+ @}
+ \score @{
+ @dots{}
+ \header @{ piece = "Menuetto" @}
+ @}
+@}
+
@node Titling
@subsection Titling
The default footer is empty, except for the first page, where it the
@code{copyright} field from @code{\header} is inserted, and the last
page, where @code{tagline} from @code{\header} is added. The default
-tagline is ``Engraved by LilyPond (@var{version})''.
+tagline is ``Engraved by LilyPond (@var{version})''.@footnote{Nicely
+printed parts are good PR for us, so please leave the tagline if you
+can.}
The header and footer are created by the functions @code{make-footer}
and @code{make-header}, defined in @code{\bookpaper}. The default
@node Introduction
@chapter Introduction
-LilyPond is a system for formatting music prettily. This chapter
-discusses the backgrounds of LilyPond. It explains the problem of
-printing music with computers, and our approach to solving those
-problems.
-
@menu
* Engraving::
necessary to become truly skilled.
Nowadays, all newly printed music is produced with computers. This
-has obvious advantages; prints are cheaper to make, editorial work can
-be delivered by email. Unfortunately, the pervasive use of computers
-has also decreased the graphical quality of scores. Computer
-printouts have a bland, mechanical look, which makes them unpleasant
-to play from.
+has obvious advantages; prints are cheaper to make, and editorial work
+can be delivered by email. Unfortunately, the pervasive use of
+computers has also decreased the graphical quality of scores.
+Computer printouts have a bland, mechanical look, which makes them
+unpleasant to play from.
@c introduce illustrating aspects of engraving, font...
@cindex typography
Musicians are usually more absorbed with performing than with studying
-the looks of piece of music; nitpicking about typographical details
+the looks of piece of music, so nitpicking about typographical details
may seem academical. But it is not. In larger pieces with monotonous
rhythms, spacing corrections lead to subtle variations in the layout
of every line, giving each one a distinct visual signature. Without
-this signature all lines would look the same, they become like a
+this signature all lines would look the same, and they become like a
labyrinth. If the musician looks away once or has a lapse in his
concentration, he will be lost on the page.
@c he/she
playing itself. In other words, better typography translates to better
performances.
-Hopefully, these examples also demonstrate that music typography is an
-art that is subtle and complex, and to produce it requires
-considerable expertise, which musicians usually do not have. LilyPond
-is our effort to bring the graphical excellence of hand-engraved music
-to the computer age, and make it available to normal musicians. We
-have tuned our algorithms, font-designs, and program settings to
-produce prints that match the quality of the old editions we love to
-see and love to play from.
+These examples demonstrate that music typography is an art that is
+subtle and complex, and that producing it requires considerable
+expertise, which musicians usually do not have. LilyPond is our
+effort to bring the graphical excellence of hand-engraved music to the
+computer age, and make it available to normal musicians. We have
+tuned our algorithms, font-designs, and program settings to produce
+prints that match the quality of the old editions we love to see and
+love to play from.
write a program to take over their jobs?
The answer is: we cannot. Typography relies on human judgment of
-appearance, so people cannot be replaced ultimately. However, much of
+appearance, so people cannot be replaced completely. However, much of
the dull work can be automated. If LilyPond solves most of the common
situations correctly, this will be a huge improvement over existing
software. The remaining cases can be tuned by hand. Over the course
notation works.
@end itemize
-These problems have been addressed by integrating the GUILE
-interpreter for the Scheme programming language and rewriting parts of
-LilyPond in Scheme. The new, flexible formatting is built around the
+These problems have been addressed by integrating an interpreter for
+the Scheme programming language and rewriting parts of LilyPond in
+Scheme. The current formatting architecture is built around the
notion of graphical objects, described by Scheme variables and
functions. This architecture encompasses formatting rules,
typographical style and individual formatting decisions. The user has
have all directions down (or left). The second chord has all
directions up (right).
-@lilypond[quote,raggedright,relative=1]
+@lilypond[quote,raggedright,relative=1,fragment]
\new Score \with {
\override SpacingSpanner #'spacing-increment = #3
\override TimeSignature #'transparent = ##t
}
@end lilypond
+@noindent
The process of formatting a score consists of reading and writing the
variables of graphical objects.
-Some variables have a preset value. For example, the thickness of many
-lines---a characteristic of typographical style---are preset
-variables. Changing them gives a different typographical impression.
+Some variables have a preset value. For example, the thickness of
+many lines---a characteristic of typographical style---are not fixed.
+They are variables, and altering them gives a different typographical
+impression.
@lilypond[quote,raggedright]
fragment = {
@end lilypond
Formatting rules are also preset variables: each object has variables
-containing procedures. These procedures perform the actual formatting,
-and by substituting different ones, we can change behavior. In the
-following example, the rule which note head objects use to produce
-their symbol is changed during the music fragment.
+containing procedures. These procedures perform the actual
+formatting, and by substituting different ones, we can change the
+appearance of objects. In the following example, the rule which note
+head objects use to produce their symbol is changed during the music
+fragment.
@lilypond[quote,raggedright]
#(define (mc-squared grob orig current)
@cindex engraving
@cindex typography
-The formatting process in LilyPond decides where to place
+The formatting process decides where to place
symbols. However, this can only be done once it is decided @emph{what}
symbols should be printed, in other words what notation to use.
Common music notation is a system of recording music that has evolved
-over the past 1000 years. The form that is now in common use, dates
+over the past 1000 years. The form that is now in common use dates
from the early renaissance. Although the basic form (i.e., note heads on a
5-line staff) has not changed, the details still change to express the
innovations of contemporary notation. Hence, it encompasses some 500
monstrous counterpoint for large orchestras.
How can we get a grip on such a many-headed beast, and force it into
-the confines of a computer program? We have broken up the problem of
-notation (as opposed to engraving, i.e., typography) into digestible
-and programmable chunks: every type of symbol is handled by a separate
-module, a so-called plug-in. Each plug-in is completely modular and
-independent, so each can be developed and improved separately. People
-who translate musical ideas to graphic symbols are called copyists or
-engravers, so by analogy, each plug-in is called @code{engraver}.
+the confines of a computer program? Our solution is break up the
+problem of notation (as opposed to engraving, i.e., typography) into
+digestible and programmable chunks: every type of symbol is handled by
+a separate module, a so-called plug-in. Each plug-in is completely
+modular and independent, so each can be developed and improved
+separately. Such plug-ins are called @code{engraver}, by analogy with
+craftsmen who translate musical ideas to graphic symbols.
In the following example, we see how we start out with a plug-in for
note heads, the @code{Note_heads_engraver}.
into a group called `Voice context,' while the engravers for key,
accidental, bar, etc., go into a group called `Staff context.' In the
case of polyphony, a single Staff context contains more than one Voice
-context. In polyphonic notation, many voices can share a staff.
+context.
Similarly, more Staff contexts can be put into a single Score context.
@lilypond[quote,raggedright]
@end lilypond
@noindent
-Chords can be constructed with < and > enclosing the notes
+Chords can be constructed with @code{<<} and @code{>>} enclosing the notes
+@c < > is not a music expression,
+@c so we use <<>> iso. <> to drive home the point of
+@c expressions. Don't change this back --hwn.
@example
-<c d e>4
+<<c4 d4 e4>>
@end example
@lilypond[quote,fragment,relative=1]
-\new Voice { <c d e>4 }
+\new Voice { <<c4 d4 e>> }
@end lilypond
@noindent
@code{@{@tie{}@dots{}@tie{}@}}
@example
-@{ <c d e>4 f4 @}
+@{ f4 <<c4 d4 e4>> @}
@end example
-@lilypond[quote,relative=1]
-\new Voice { <c d e>4 f4 }
+@lilypond[quote,relative=1,fragment]
+{ f4 <<c d e4>> }
@end lilypond
-@noindent
-The above is an expression also, and thus it may be combined again with
-another simultaneous expression (a half note) using <<, @code{\\}, and >>
+@noindent
+The above is also an expression, and so it may be combined
+again with another simultaneous expression (a half note) using <<,
+@code{\\}, and >>
@example
-<< g2 \\ @{ <c d e>4 f4 @} >>
+<< g2 \\ @{ f4 <<c4 d4 e4>> @} >>
@end example
@lilypond[quote,fragment,relative=2]
-\new Voice { << g2 \\ { <c d e>4 f4 } >> }
+\new Voice { << g2 \\ { f4 <<c d e>> } >> }
@end lilypond
Such recursive structures can be specified neatly and formally in a
most. They are partly a matter of taste, and also subject of much
discussion. Although discussions on taste do have their merit, they
are not very productive. In the larger picture of LilyPond, the
-importance of input syntax is small: inventing neat syntax is easy,
+importance of input syntax is small: inventing neat syntax is easy, while
writing decent formatting code is much harder. This is also
illustrated by the line-counts for the respective components: parsing
-and representation take up less than 10% of the code.
+and representation take up less than 10% of the source code.
@node Example applications
can therefore be easily embedded in other text-based formats such as
La@TeX{}, HTML, or in the case of this manual, Texinfo. By means of a
special program, the input fragments can be replaced by music images
-in the resulting PostScript or HTML output files. This makes it easy
+in the resulting PDF or HTML output files. This makes it easy
to mix music and text in documents.
The
@end ifhtml
@emph{@ref{Literature list}}
-contains a set of useful reference books, for those who wish to know
+contains a set of useful reference books for those who wish to know
more on notation and engraving.
@end itemize
available directly to the user. For example, all variables that
control thickness values, distances, etc., can be changed in input
files. There are a huge number of formatting options, and all of them
-are described in the generated documentation. Each section of the
+are described in this document. Each section of the
notation manual has a @b{See also} subsection, which refers to the
the generated documentation. In the HTML document, these subsections
have clickable links.
@end ignore
-@node lilypond-book manual
-@chapter lilypond-book manual
+@node Integrating text and music
+@chapter Integrating text and music
If you want to add pictures of music to a document, you can simply do
it the way you would do with other types of pictures. The pictures
* Example templates:: Larger examples
* Notation manual:: All notation supported, and how to
produce it.
+* Sound:: Producing MIDI output
* Changing defaults:: Tuning output.
* Interfaces for programmers::
* Invoking LilyPond:: Operation.
@cindex quarter tones
@cindex semi-flats, semi-sharps
-@lilypond[fragment,quote,verbatim,relative=3]
+@lilypond[fragment,quote,verbatim,relative=2]
ceses4
ceseh
ces
An invisible rest (also called a `skip') can be entered like a note
with note name `@code{s}' or with @code{\skip @var{duration}}
-@lilypond[fragment,quote,raggedright,verbatim]
+@lilypond[fragment,quote,raggedright,verbatim,relative=2]
a2 s4 a4 \skip 1 a4
@end lilypond
In the following example, the first three notes take up exactly two
beats, but no triplet bracket is printed.
-@lilypond[quote,fragment,relative=3,verbatim]
+@lilypond[quote,fragment,relative=2,verbatim]
\time 2/4
a4*2/3 gis4*2/3 a4*2/3
a4
the measure, so the next bar line will fall at 2/4 + 3/8.
@lilypond[verbatim]
-{
+\relative {
\set Score.measureLength = #(ly:make-moment 5 4)
c1 c4
c1 c4
can be forced up or down using @code{^} and @code{_},
e.g.
-@lilypond[quote,verbatim,fragment,relative=3]
+@lilypond[quote,verbatim,fragment,relative=2]
c\fermata c^\fermata c_\fermata
@end lilypond
they are entered decides which one comes first.
-@lilypond[verbatim]
+@lilypond[verbatim,raggedright]
\relative g''{
\once \override TextScript #'script-priority = #-100
a4^\prall^\markup { \sharp }
@code{\stopTrillSpan},
-@lilypond[verbatim]
+@lilypond[verbatim,raggedright]
\relative \new Voice {
<< { c1 \startTrillSpan }
{ s2. \grace { d16[\stopTrillSpan e] } } >>
@lilypond[quote,relative=2,verbatim,fragment]
<< \new Staff { e4 \grace { c16[ d e f] } e4 }
- \new Staff { c'4 \grace { g8[ b] } c4 } >>
+ \new Staff { c4 \grace { g8[ b] } c4 } >>
@end lilypond
patterns that divide the measure length are replaced by slashes
@lilypond[quote,verbatim,raggedright]
-\repeat "percent" 4 { c'4 }
-\repeat "percent" 2 { c'2 es'2 f'4 fis'4 g'4 c''4 }
+\new Voice {
+ \repeat "percent" 4 { c'4 }
+ \repeat "percent" 2 { c'2 es'2 f'4 fis'4 g'4 c''4 }
+}
@end lilypond
@seealso
Stanza numbers can be added by setting @code{stanza}, e.g.
-@lilypond[quote,verbatim,relative=2]
-\context Voice {
+@lilypond[quote,verbatim,relative=2,fragment]
+\new Voice {
\time 3/4 g2 e4 a2 f4 g2.
} \addlyrics {
\set stanza = "1. "
@code{vocalName}. A short version may be entered as @code{vocNam}.
-@lilypond[quote,verbatim,relative=2]
-\context Voice {
+@lilypond[fragment,quote,verbatim,relative=2]
+\new Voice {
\time 3/4 g2 e4 a2 f4 g2.
} \addlyrics {
\set vocalName = "Bert "
@cindex @code{\setEasyHeads}
@code{\setEasyHeads}
-@node Sound
-@section Sound
-@cindex Sound
-
-Entered music can also be converted to MIDI output. The performance
-is intended for proof-hearing the music for errors.
-
-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 extremities. The fractions can be adjusted by
-@code{dynamicAbsoluteVolumeFunction} in @internalsref{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
-the MIDI output remarkably. The equalizer can be controlled by
-setting @code{instrumentEqualizer}.
-
-@refbugs
-
-Many musically interesting effects, such as swing, articulation,
-slurring, etc., are not translated to MIDI.
-
-The MIDI output allocates a channel for each Staff, and one for global
-settings. Hence, 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 change in the MIDI
-output. Players that are known to work include
-@uref{http://timidity.sourceforge.net/,timidity}
-
-
-@menu
-* MIDI block::
-* MIDI instrument names::
-@end menu
-
-
-@node MIDI block
-@subsection MIDI block
-@cindex MIDI block
-
-
-The MIDI block is analogous to the paper block, but it is somewhat
-simpler. The @code{\midi} block can contain
-@cindex MIDI block
-
-@itemize @bullet
- @item a @code{\tempo} definition, and
- @item context definitions.
-@end itemize
-
-A number followed by a period is interpreted as a real number, so
-for setting the tempo for dotted notes, an extra space should be
-inserted, for example
-
-@example
- \midi @{ \tempo 4 . = 120 @}
-@end example
-
-
-@cindex context definition
-
-Context definitions follow precisely the same syntax as within the
-\paper block. Translation modules for sound are called performers.
-The contexts for MIDI output are defined in @file{ly/performer-init.ly}.
-
-
-@node MIDI instrument names
-@subsection MIDI instrument names
-
-@cindex instrument names
-@cindex @code{Staff.midiInstrument}
-
-The MIDI instrument name is set by the @code{Staff.midiInstrument}
-property. The instrument name should be chosen from the list in
-@ref{MIDI instruments}.
-
-@refbugs
-
-If the selected string does not exactly match, the default is used,
-which is the Grand Piano.
@end menu
@node Notes to version 2.2
-@unnumberedsec Notes to version 2.2
+@unnumberedsec Notes to version 3.0
+
+The most important developments in 3.0 are related. In LilyPond 3.0,
+@TeX{} is no longer strictly necessary to engrave music. This is
+because LilyPond can now also layout pages and determine page breaks.
+Another notable feature is the syntax, which has been simplified even
+further compared to previous versions.
+
+
-During the 2.1 development cycle, the cleanup of the existing features
-has continued unabated. Major areas of improvement are orchestral
-notation, lyrics formatting and font size handling.
Han-Wen and Jan
-Utrecht/Eindhoven, The Netherlands, March 2004.
+Utrecht/Eindhoven, The Netherlands, September 2004.
--- /dev/null
+
+@node Sound
+@chapter Sound
+@cindex Sound
+
+MIDI (Musical Instrument Digital Interface) is a standard for
+connecting and controlling digital instruments. A MIDI file is like a
+tape recording of a MIDI instrument.
+
+Pieces of music can be converted to a MIDI file, so you can listen to
+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 musical transcription.
+
+@refbugs
+
+many musically interesting effects, such as swing, articulation,
+slurring, etc., are not translated to midi.
+
+the midi output allocates a channel for each staff, and one for global
+settings. hence, 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 change 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::
+@end menu
+
+@node Creating MIDI files
+@section Creating MIDI files
+
+@cindex sound
+@cindex midi
+
+To create a MIDI from a music piece of music, add a @code{\midi} block
+to a score, for example,
+
+@example
+\score @{
+ @var{...music...}
+ \midi @{ \tempo 4=72 @}
+@}
+@end example
+
+Here, the tempo is specified using the @code{\tempo} command. In this
+case the tempo of quarter notes is set to 72 beats per minute. More
+information on auditory output in the notation manual can be found in
+@ref{sound}.
+
+If there is a @code{\midi} command in a @code{\score}, only MIDI will
+be produced. When notation is needed too, a @code{\paper} block must
+be added
+
+@example
+\score @{
+ @var{...music...}
+ \midi @{ \tempo 4=72 @}
+ \paper @{ @}
+@}
+@end example
+@cindex paper block
+
+
+
+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 extremities. The fractions can be adjusted by
+@code{dynamicAbsoluteVolumeFunction} in @internalsref{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
+the MIDI output remarkably. The equalizer can be controlled by
+setting @code{instrumentEqualizer}.
+
+
+@node MIDI block
+@section MIDI block
+@cindex MIDI block
+
+
+The MIDI block is analogous to the paper block, but it is somewhat
+simpler. The @code{\midi} block can contain
+@cindex MIDI block
+
+@itemize @bullet
+ @item a @code{\tempo} definition, and
+ @item context definitions.
+@end itemize
+
+A number followed by a period is interpreted as a real number, so
+for setting the tempo for dotted notes, an extra space should be
+inserted, for example
+
+@example
+ \midi @{ \tempo 4 . = 120 @}
+@end example
+
+
+@cindex context definition
+
+Context definitions follow precisely the same syntax as within the
+\paper block. Translation modules for sound are called performers.
+The contexts for MIDI output are defined in @file{ly/performer-init.ly}.
+
+
+@node MIDI instrument names
+@section MIDI instrument names
+
+@cindex instrument names
+@cindex @code{Staff.midiInstrument}
+
+The MIDI instrument name is set by the @code{Staff.midiInstrument}
+property. The instrument name should be chosen from the list in
+@ref{MIDI instruments}.
+
+@refbugs
+
+If the selected string does not exactly match, the default is used,
+which is the Grand Piano.
+
@end example
@c FIXME: have NOTIME also remove Score.timing?
-@lilypond[fragment,quote,notime,relative=1]
+@lilypond[fragment,quote,notime,relative=2]
\set Score.timing = ##f
\set Staff.autoBeaming = ##f
{ a1 a2 a4 a16 a32 s16_" " }
a a8 a a2 a
@end example
-@lilypond[fragment,quote,notime,relative=1]
+@lilypond[fragment,quote,notime,relative=2]
\set Score.timing = ##f
{ a a8 a a2 a s16_" " }
@end lilypond
Begin by opening a terminal window and starting a text editor. For
example, you could open an xterm and execute
@code{joe}.@footnote{There are macro files for VIM addicts, and there
-is a @code{LilyPond-mode} for Emacs addicts. If it has not been
+is a @code{LilyPond-mode} for Emacs addicts. If they have not been
installed already, refer to
@c FIXME lousy reference.
the file @file{INSTALL.txt}.} In your text editor, enter the following
On Windows, start up a text-editor@footnote{Any simple or
programmer-oriented editor will do, for example Notepad. Do not use a
-word processor, its formatting codes will confuse LilyPond.} and enter
+word processor, since these insert formatting codes that will confuse
+LilyPond.} and enter
@example
@{ c'4 e' g' @}
@end lilypond
@noindent
-no note gets an explicit accidental, but you still must enter
+no note has an explicit accidental, but you still must enter
@example
\key d \major
Adding all alterations explicitly might require a little more effort
when typing, but the advantage is that transposing is easier, and
-music can be printed according to different conventions. See
+accidentals can be printed according to different conventions. See
@ref{Accidentals}, for some examples how accidentals can be printed
according to different rules.
@noindent
The last example shows that music in a high register needs lots of quotes.
This makes the input less readable, and it is a source of errors. The
-solution is to use `relative octave' mode. In practice, this is the
-most convenient way to copy existing music. To use relative mode, add
-@code{\relative} before the piece of music.
-@ignore
-FIXME: move to notation manual?
- You must also give a note
-from which relative mode starts, in this case @code{c''}.
-@end ignore
-If you do not
-use octavation quotes (i.e., do not add @code{'} or @code{,} after a
-note), relative mode chooses the note that is closest to the previous
-one. For example, @samp{c f} goes up while @samp{c g} goes down
+solution is to use `relative octave' mode. This is the
+most convenient way to copy existing music.
+
+In relative mode, a note without octavation quotes (i.e. the @code{'}
+or @code{,} after a note) is chosen so it it is closest to the
+previous one. For example, @samp{c f} goes up while @samp{c g} goes
+down
+
+To use relative mode, add @code{\relative} before the piece of
+music. The first note is taken relative to the middle C
+@c no , for this sentence
+(i.e. @code{c'})
+
+
@lilypond[quote,notime,fragment,verbatim]
\relative {
without octavation quotes in relative mode. The previous example is
entered as
-@lilypond[quote,raggedright,fragment,verbatim]
+@lilypond[quote,raggedright,verbatim]
\relative {
\key a \major
\time 6/8
- cis''8. d16 cis8 e4 e8
+ cis'8. d16 cis8 e4 e8
b8. cis16 b8 d4 d8
}
@end lilypond
as a simultaneous combination of two sequences. A `simultaneous'
music expression is formed by enclosing expressions in @code{<<} and
@code{>>}. In the following example, three sequences (all containing
-two notes) are combined simultaneously
+two other notes) are combined simultaneously
@lilypond[fragment,quote,verbatim,relative=3]
<<
@cindex expression
@cindex music expression
-This example shows a sequence of expressions, where each expression is
-contained in the next one. The simplest expressions are numbers and
-operators (like @samp{+}, @samp{*} and @samp{/}). Parentheses are used
-to group expressions.
+This is a sequence of expressions, where each expression is contained
+in the next one. The simplest expressions are numbers, and larger
+ones are made by combining expressions with operators (like @samp{+},
+@samp{*} and @samp{/}) and parentheses.
Like mathematical expressions, music expressions can be nested
-arbitrarily deep@footnote{The reason for getting three staves in the
+arbitrarily deep,@footnote{The reason for getting three staves in the
previous example but just a single staff in the current one will be
-explained later.}
+explained in @ref{TODO}.} which is necessary for complex music like
+polyphonic scores.
@lilypond[fragment,quote,verbatim,relative=2]
{
}
@end lilypond
-
-@cindex indent
-When spreading expressions over multiple lines, it is customary to use
-an indent that indicates the nesting level. Formatting music like this
-eases reading, and helps you insert the right number of closing
-braces at the end of an expression. For example,
+Music files with deep nesting can be confusing to enter and
+maintain. One convention that helps against this confusion, is
+indenting. When entering a file with deep nesting of braces and
+angles, it is customary to use an indent that indicates the nesting
+level. Formatting music like this eases reading, and helps you insert
+the right number of closing braces at the end of an expression. For
+example,
@example
-\book @{
- \score @{
- <<
- @{
- @dots{}
- @}
- @{
- @dots{}
- @}
- \paper @{
- @dots{}
- @}
- >>
+<<
+ @{
+ @dots{}
+ @}
+ @{
+ @dots{}
@}
-@}
+>>
@end example
Some editors have special support for entering LilyPond, and can help
gets its own stave.
There are several types of contexts: @code{Staff}, @code{Voice} and
-@code{Score} handle normal music notation. Other contexts are also
+@code{Score} handle melodic notation. Other contexts are also
@code{Lyrics} (for setting lyric texts) and @code{ChordNames} (for
printing chord names).
@c TODO: (c) status of this Paul McCartney (?) song (let's all stand together)
@lilypond[fragment,quote,verbatim,raggedright]
-<<
+\relative <<
\new Staff {
\time 3/4
\clef violin
- \relative {
- e''2 d4 c2 b4 a8[ a]
- b[ b] g[ g] a2. }
+
+ e'2 d4 c2 b4 a8[ a]
+ b[ b] g[ g] a2.
}
\new Staff {
\clef bass
- c2 e4 g2.
+ c,,2 e4 g2.
f4 e d c2.
}
>>
@samp{(} and @samp{)}, respectively
@lilypond[fragment,quote,fragment,relative=2,verbatim]
-d4( c16)( cis d e c cis d e)( d4)
+d4( c16) cis( d e c cis d) e( d4)
@end lilypond
@cindex slurs versus ties
A slur looks like a tie, but it has a different meaning. A tie simply
makes the first note sound longer, and can only be used on pairs of
notes with the same pitch. Slurs indicate the articulations of notes,
-and can be used on larger groups of notes. Slurs and ties are also
-nested in practice
+and can be used on larger groups of notes. Slurs and ties can be
+nested
@lilypond[quote,fragment,relative=2]
c2~( c8 fis fis4 ~ fis2 g2)
@cindex line comment
@cindex block comment
A comment is a remark for the human reader of the music input; it is
-ignored and has no effect on the printed output. There are two types
-of comments. The percent symbol @samp{%} introduces a line comment;
-the rest of the line is ignored. A block comments marks a whole
-section of music input---anything that is enclosed in @code{%@{} and
-@code{%@}} is ignored. The following fragment shows possible uses for
-comments
+ignored while parsing, so it has no effect on the printed output.
+There are two types of comments. The percent symbol @samp{%}
+introduces a line comment; after @code{%} the rest of the line is
+ignored. A block comments marks a whole section of music
+input. Anything that is enclosed in @code{%@{} and @code{%@}} is
+ignored. The following fragment shows possible uses for comments
@example
% notes for twinkle twinkle follow
%@}
@end example
-There is a special statement that really is a kind of comment. The
-version statement marks for which version of LilyPond the file was
-written. To mark a file for version 2.1.17, use
+@cindex versioning
+
+There is a special statement that is a kind of comment. The @code{\version}
+statement marks for which version of LilyPond the file was written.
+To mark a file for version 2.1.17, use
@example
\version "2.1.17"
More options, like putting multiple lines of lyrics below a melody are
discussed in @ref{Vocal music}.
-@c FIXME: too geeky, for notation manual?
-@c or introduce using foo = \lyrics { a b c } ?
-
-When using variables for a piece of lyrics
-To prevent certain words (for example `as') as being read as a
-pitch, the input-mode must be switched. This is done with
-@code{\lyrics}. In @code{\lyrics} mode, all words are read as lyric
-syllables.
-
-@example
-myText = \lyrics @{ I want to break free @}
-@end example
-
-@noindent
-The braces @code{@{@}} signify that the syllables are sung in
-sequence.
-
-@ignore
-By default, music expressions are interpreted in @code{Staff} context. For
-lyrics, this is obviously not desirable, so it is necessary
-to explicitly specify a @code{Lyrics} context,
-
-@example
-\lyrics @{ I want to break free @}
-@end example
-
-The melody for this song is as follows
-
-@lilypond[fragment,quote,fragment,relative=2]
-r4 c \times 2/3 { f4 g g }
-\times 2/3 { g4( a2) }
-@end lilypond
-
-@end ignore
-
@node A lead sheet
@section A lead sheet
@cindex chords
@cindex chord names
-In popular music, it is common to denote accompaniment as chord names.
+In popular music, it is common to denote accompaniment with chord names.
Such chords can be entered like notes,
-@example
-c2 f4. g8
-@end example
+@lilypond[quote,verbatim,raggedright]
+\chords { c2 f4. g8 }
+@end lilypond
@noindent
-but now, each pitch is read as the root of a chord instead of a note.
+Now each pitch is read as the root of a chord instead of a note.
This mode is switched on with @code{\chords}
-@lilypond[quote,verbatim,raggedright]
-\chords { c2 f4. g8 }
-@end lilypond
Other chords can be created by adding modifiers after a colon. The
following example shows a few common modifiers
A complete list of modifiers and other options for layout can be found
in @ref{Chords}.
-@c FIXME: we talk about \midi before mentioning \paper (or \layout?)
-@node Listening to output
-@section Listening to output
-
-@cindex sound
-@cindex MIDI
-
-MIDI (Musical Instrument Digital Interface) is a standard for
-connecting and controlling digital instruments. A MIDI file is like a
-tape recording of a MIDI instrument.
-
-To create a MIDI from a music piece of music, add a @code{\midi}
-block. This causes LilyPond to create a MIDI file, so you can listen
-to what you just entered. It is great for checking the music.
-Octaves that are off or accidentals that were mistyped stand out very
-much when listening to the musical transcription.
-
-The @code{\midi} block is added to @code{\score}, for example,
-
-@example
-\score @{
- @var{...music...}
- \midi @{ \tempo 4=72 @}
-@}
-@end example
-
-Here, the tempo is specified using the @code{\tempo} command. In this
-case the tempo of quarter notes is set to 72 beats per minute. More
-information on auditory output in the notation manual can be found in
-@ref{Sound}.
-
-If there is a @code{\midi} command in a @code{\score}, only MIDI will
-be produced. If notation is needed too, a @code{\paper} block must be
-added
-
-@example
-\score @{
- @var{...music...}
- \midi @{ \tempo 4=72 @}
- \paper @{ @}
-@}
-@end example
-@cindex paper block
-
@node Adding titles
@section Adding titles
@example
\header @{
- title = "Eight miniatures"
+ title = "Miniature"
composer = "Igor Stravinsky"
- tagline = "small is beautiful"
@}
@{ @dots{} @}
@end example
-@cindex bibliographic information
-@cindex titles
-@cindex composer
-@cindex Engraved by LilyPond
When the file is processed the title and composer are printed above
-the music. The `tagline' is a short line printed at bottom of the last
-page which normally says `Engraved by LilyPond, version @dots{}'. In
-the example above it is replaced by the line `small is
-beautiful.'@footnote{Nicely printed parts are good PR for us, so
-please leave the tagline if you can.}
-
-
-The @code{\header} block is usually put at the top of the file.
-
-A document may contains multiple pieces of music, examples are an
-etude book, or an orchestral part with multiple movements.
-@c FIXME: ugh. \header can only live at toplevel, or inside \score.
-@c If we allow it also to live inside \book, we do not need \score here?
-The @code{\book} block is used to group the individual @code{\score}
-blocks.
-
-The header for each piece of music can be put inside the @code{\score}
-block. The @code{piece} name from the header will be printed before
-each movement.
-
-@ignore
-
-FIXME: introduce \BOOK
-
-FIXME: Using "Adagio" as a name is confusing, it's more common to be
-a plain tempo indication.
-
-Since today (CVS-1.211) we also allow headers and composite music
-inside book:
-
- \header { ... }
- \book {
- \header { ... }
- { ... }
- \header { ... }
- { ... }
- }
-
-@end ignore
-
-@cindex Engraved by LilyPond
-@cindex signature line
-@cindex tag line
-
-@example
-\header @{
- title = "Eight miniatures"
- composer = "Igor Stravinsky"
- tagline = "small is beautiful"
-@}
-
-\book @{
- \score @{
- @dots{}
- \header @{ piece = "Adagio" @}
- @}
- \score @{
- @dots{}
- \header @{ piece = "Menuetto" @}
- @}
-@}
-@end example
-
-More information on titling can be found in @ref{Invoking lilypond}.
+the music. More information on titling can be found in @ref{Titling}.
@node Single staff polyphony
@code{@{...@}}), and combining those simultaneously, separating the
voices with @code{\\}
-@lilypond[quote,verbatim,relative=3]
+@lilypond[quote,verbatim,relative=2,fragment]
<< { a4 g2 f4~ f4 } \\
{ r4 g4 f2 f4 } >>
@end lilypond
temporarily do not play. Here is the same example with a spacer rest
instead of a normal rest---just use @samp{s} instead of @samp{r}
-@lilypond[quote,verbatim,relative=3]
+@lilypond[quote,verbatim,relative=2,fragment]
<< { a4 g2 f4~ f4 } \\
{ s4 g4 f2 f4 } >>
@end lilypond
@noindent
Again, these expressions can be nested arbitrarily
-@lilypond[quote,fragment,verbatim,relative=3]
+@lilypond[quote,fragment,verbatim,relative=2,fragment]
<<
\new Staff <<
{ a4 g2 f4~ f4 } \\
Setting run-time variables (`properties') is discussed in ref-TODO.
-@node Integrating text and music
-@section Integrating text and music
+@node Musicological essays
+@section Musicological essays
+@cindex musicology
@cindex La@TeX{}, music in
@cindex HTML, music in
@cindex Texinfo, music in
use the @code{--output=@var{dir}} option. It will create the files in
a separate subdirectory @file{dir}.
-Finally the result of the La@TeX{} example shown above.@footnote{Note
-that in this tutorial the example is processed with Texinfo. This gives
-slightly different results in layout.} This finishes the tutorial
-section.
+Finally the result of the La@TeX{} example shown above.@footnote{ This
+tutorial is processed with Texinfo, so the example is as well. This
+gives slightly different results in layout.} This finishes the
+tutorial section.
@page
{
Stencil open = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-leftparen"));
Stencil close = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-rightparen"));
+
m.add_at_edge (X_AXIS, LEFT, Stencil (open), 0,0);
m.add_at_edge (X_AXIS, RIGHT, Stencil (close), 0,0);
int
binsearch_scm_vector (SCM vec, SCM key, bool (*is_less)(SCM a,SCM b))
{
- int lo;
- int hi;
- lo = 0;
- hi = SCM_VECTOR_LENGTH (vec);
+ int lo = 0;
+ int hi = SCM_VECTOR_LENGTH (vec);
/* binary search */
do
(script-priority . 100)
(font-encoding . fetaNumber)
(font-size . -5) ; don't overlap when next to heads.
- (meta . ((interfaces . (finger-interface font-interface text-script-interface text-interface side-position-interface self-alignment-interface item-interface ))))
+ (meta . ((interfaces . (finger-interface
+ font-interface text-script-interface text-interface
+ side-position-interface self-alignment-interface
+ item-interface))))
))
(Glissando
(define noticed '())
(define part-combine-listener '())
+
+; UGH - should pass noticed setter to part-combine-listener
(define-public (set-part-combine-listener x)
(set! part-combine-listener x))
(evs (last-pair noticed)))
(if (pair? evs)
(hash-set! tab name
- (list->vector (reverse! (car evs) '()))))))
+ ;; cdr : skip name string
+ (list->vector (reverse! (cdar evs) '()))))))
+