From 47c5e1e35e71bd8bb439c7fd76a0af7b38ce0823 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sat, 21 Aug 2004 09:32:58 +0000 Subject: [PATCH] * scm/part-combiner.scm: skip name string. Fixes segfault problem. * Documentation/user/sound-output.texi (Sound): new file. Move all MIDI related information. --- ChangeLog | 10 +- Documentation/user/changing-defaults.itely | 62 +++- Documentation/user/introduction.itely | 118 ++++---- Documentation/user/lilypond-book.itely | 4 +- Documentation/user/lilypond.tely | 1 + Documentation/user/notation.itely | 112 ++------ Documentation/user/preface.itely | 15 +- Documentation/user/sound-output.texi | 130 +++++++++ Documentation/user/tutorial.itely | 313 ++++++--------------- lily/accidental.cc | 1 + lily/quote-iterator.cc | 6 +- scm/define-grobs.scm | 5 +- scm/part-combiner.scm | 6 +- 13 files changed, 383 insertions(+), 400 deletions(-) create mode 100644 Documentation/user/sound-output.texi diff --git a/ChangeLog b/ChangeLog index b18ef13428..c0cbe51868 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2004-08-21 Han-Wen Nienhuys + + * 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 * lily/script-engraver.cc (acknowledge_grob): only take into @@ -21,7 +28,8 @@ 2004-08-19 Erik Sandberg - * 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 diff --git a/Documentation/user/changing-defaults.itely b/Documentation/user/changing-defaults.itely index 907e3140cc..e4410a521d 100644 --- a/Documentation/user/changing-defaults.itely +++ b/Documentation/user/changing-defaults.itely @@ -2234,6 +2234,64 @@ that line. The result is similar to formatting paragraphs. In a 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 @@ -2439,7 +2497,9 @@ field from the @code{\header} block on a line. 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 diff --git a/Documentation/user/introduction.itely b/Documentation/user/introduction.itely index a1970ae595..171bd3a028 100644 --- a/Documentation/user/introduction.itely +++ b/Documentation/user/introduction.itely @@ -4,11 +4,6 @@ @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:: @@ -37,11 +32,11 @@ be a master engraver, and another five years of experience were 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... @@ -142,11 +137,11 @@ in the last two measures form down-stem/up-stem clumps of notes. @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 @@ -165,14 +160,14 @@ less attention they need for reading, the more they can focus on 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. @@ -185,7 +180,7 @@ ten years to become true masters, how could we simple hackers ever 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 @@ -215,9 +210,9 @@ method of grouping rules that do not match well with how music 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 @@ -230,7 +225,7 @@ with accents and arpeggio. In the first chord, the graphical objects 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 @@ -241,12 +236,14 @@ directions up (right). } @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 = { @@ -268,10 +265,11 @@ 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) @@ -318,12 +316,12 @@ their symbol is changed during the music fragment. @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 @@ -331,13 +329,13 @@ years of music. Its applications range from monophonic melodies to 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}. @@ -485,7 +483,7 @@ should be grouped. The engravers for note heads, stems, slurs, etc., go 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] @@ -536,14 +534,17 @@ c4 @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 -4 +<> @end example @lilypond[quote,fragment,relative=1] -\new Voice { 4 } +\new Voice { <> } @end lilypond @noindent @@ -551,23 +552,24 @@ This expression is put in sequence by enclosing it in curly braces @code{@{@tie{}@dots{}@tie{}@}} @example -@{ 4 f4 @} +@{ f4 <> @} @end example -@lilypond[quote,relative=1] -\new Voice { 4 f4 } +@lilypond[quote,relative=1,fragment] +{ f4 <> } @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 \\ @{ 4 f4 @} >> +<< g2 \\ @{ f4 <> @} >> @end example @lilypond[quote,fragment,relative=2] -\new Voice { << g2 \\ { 4 f4 } >> } +\new Voice { << g2 \\ { f4 <> } >> } @end lilypond Such recursive structures can be specified neatly and formally in a @@ -579,10 +581,10 @@ User-interfaces and syntax are what people see and deal with 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 @@ -624,7 +626,7 @@ This manual also shows an application: the input format is text, and 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. @@ -688,7 +690,7 @@ how to upgrade input files from previous versions of LilyPond. 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 @@ -747,7 +749,7 @@ Almost all formatting functionality that is used internally, is 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. diff --git a/Documentation/user/lilypond-book.itely b/Documentation/user/lilypond-book.itely index d522231ee8..18ccc8a7d4 100644 --- a/Documentation/user/lilypond-book.itely +++ b/Documentation/user/lilypond-book.itely @@ -12,8 +12,8 @@ TODO: cleanup @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 diff --git a/Documentation/user/lilypond.tely b/Documentation/user/lilypond.tely index bdad180430..6879e958ef 100644 --- a/Documentation/user/lilypond.tely +++ b/Documentation/user/lilypond.tely @@ -164,6 +164,7 @@ this and other documentation. * 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. diff --git a/Documentation/user/notation.itely b/Documentation/user/notation.itely index 5c13a9a46a..94428a22d2 100644 --- a/Documentation/user/notation.itely +++ b/Documentation/user/notation.itely @@ -109,7 +109,7 @@ Half-flats and half-sharps are formed by adding @code{-eh} and @cindex quarter tones @cindex semi-flats, semi-sharps -@lilypond[fragment,quote,verbatim,relative=3] +@lilypond[fragment,quote,verbatim,relative=2] ceses4 ceseh ces @@ -256,7 +256,7 @@ Program reference: @internalsref{RestEvent}, and @internalsref{Rest}. 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 @@ -353,7 +353,7 @@ will not affect the appearance of the notes or rests produced. 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 @@ -1277,7 +1277,7 @@ shortened by 1/8, by setting @code{measurePosition} to -3/8 at 2/4 in 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 @@ -2131,7 +2131,7 @@ Other symbols can be added using the syntax 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 @@ -2179,7 +2179,7 @@ inside. When two objects have the same priority, the order in which 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 } @@ -2218,7 +2218,7 @@ Long running trills are made with @code{\startTrillSpan} and @code{\stopTrillSpan}, -@lilypond[verbatim] +@lilypond[verbatim,raggedright] \relative \new Voice { << { c1 \startTrillSpan } { s2. \grace { d16[\stopTrillSpan e] } } >> @@ -2404,7 +2404,7 @@ every eighth grace note @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 @@ -2925,8 +2925,10 @@ Patterns of a one and two measures are replaced by percent-like signs, 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 @@ -3981,8 +3983,8 @@ The underlay is switched back to the starting situation by assigning 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. " @@ -4000,8 +4002,8 @@ the line, just like instrument names. They are created by setting @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 " @@ -7461,85 +7463,3 @@ correct result. @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. diff --git a/Documentation/user/preface.itely b/Documentation/user/preface.itely index 7329a445bc..326171ad1d 100644 --- a/Documentation/user/preface.itely +++ b/Documentation/user/preface.itely @@ -53,12 +53,17 @@ Utrecht/Eindhoven, The Netherlands, July 2002. @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. diff --git a/Documentation/user/sound-output.texi b/Documentation/user/sound-output.texi new file mode 100644 index 0000000000..4028d2e7bb --- /dev/null +++ b/Documentation/user/sound-output.texi @@ -0,0 +1,130 @@ + +@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. + diff --git a/Documentation/user/tutorial.itely b/Documentation/user/tutorial.itely index 49765a2528..b207c4c51b 100644 --- a/Documentation/user/tutorial.itely +++ b/Documentation/user/tutorial.itely @@ -89,7 +89,7 @@ a1 a2 a4 a16 a32 @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_" " } @@ -103,7 +103,7 @@ defaults to a quarter 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 @@ -231,7 +231,7 @@ Windows are given at the end of this section. 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 @@ -284,7 +284,8 @@ package for viewing and printing PDF and PostScript files.} 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' @} @@ -356,7 +357,7 @@ d' cis' fis' @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 @@ -380,7 +381,7 @@ d 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. @@ -514,18 +515,20 @@ b'8. cis''16 b'8 d''4 d''8 @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 { @@ -538,11 +541,11 @@ Since most music has small intervals, pieces can be written almost 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 @@ -603,7 +606,7 @@ parallel. Two voices that should play at the same time, are entered 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] << @@ -630,15 +633,16 @@ you can make arbitrarily complex and large expressions. For example, @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] { @@ -647,29 +651,23 @@ explained later.} } @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 @@ -699,7 +697,7 @@ is best to mark contexts explicitly. This ensures that each fragment 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). @@ -714,17 +712,17 @@ We can now typeset a melody with two staves @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. } >> @@ -786,15 +784,15 @@ articulation. The starting note and ending note are marked with @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) @@ -921,12 +919,12 @@ see @ref{Partial measures}. @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 @@ -941,9 +939,11 @@ c4 c g' g a a %@} @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" @@ -1033,41 +1033,6 @@ Twin -- kle twin -- kle 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 @@ -1076,20 +1041,17 @@ r4 c \times 2/3 { f4 g g } @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 @@ -1134,50 +1096,6 @@ a lead sheet, for example, 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 @@ -1190,84 +1108,16 @@ the top of the file. For example, @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 @@ -1285,7 +1135,7 @@ Entering such parts is done by entering each voice as a sequence (with @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 @@ -1295,7 +1145,7 @@ are rests that do not print. It is useful for filling up voices that 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 @@ -1303,7 +1153,7 @@ instead of a normal rest---just use @samp{s} instead of @samp{r} @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 } \\ @@ -1537,9 +1387,10 @@ in the notation manual; see @ref{Orchestral music}. 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 @@ -1612,10 +1463,10 @@ files, which would clutter up the working directory. To remedy this, 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 diff --git a/lily/accidental.cc b/lily/accidental.cc index 7287aaa810..def53e5a03 100644 --- a/lily/accidental.cc +++ b/lily/accidental.cc @@ -25,6 +25,7 @@ parenthesize (Grob*me, Stencil m) { 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); diff --git a/lily/quote-iterator.cc b/lily/quote-iterator.cc index 8e0affdf28..158f271e90 100644 --- a/lily/quote-iterator.cc +++ b/lily/quote-iterator.cc @@ -62,10 +62,8 @@ moment_less (SCM a, SCM b) 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 diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index e6b2e00b41..fddebf771c 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -440,7 +440,10 @@ (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 diff --git a/scm/part-combiner.scm b/scm/part-combiner.scm index 69180a978a..62b60260c7 100644 --- a/scm/part-combiner.scm +++ b/scm/part-combiner.scm @@ -187,6 +187,8 @@ Voice-state objects (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)) @@ -501,4 +503,6 @@ the mark when there are no spanners active." (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) '())))))) + -- 2.39.2