---- ../lilypond-1.3.30.jcn1/CHANGES Tue Mar 7 23:59:44 2000
-++ b/CHANGES Wed Mar 8 15:35:43 2000
-@@ -1,3 +1,10 @@
+1.3.30.mb1
+=========
+
+* Fixed the page layout, reintroducing space for the header and
+ trying to keep piece titles on the same page as the piece.
+ The header and footer can now contain several lines.
+
+1.3.30.jcn3
+===========
+
+* Span_dynamic_performer; perform crescendi/decrescendi. Bit scrappy.
+
+* Preliminary support for crescendi/decrescendi other than `hairpins', eg:
+ `cresc. poco `a poco -- -- --'
+
+* Tie performance fix.
+
1.3.30.jcn2
===========
* David's comments on opus47
- 1.3.30.jcn1
- ===========
- --- ../lilypond-1.3.30/CHANGES Mon Mar 6 12:10:00 2000
-++ b/CHANGES Tue Mar 7 23:59:44 2000
-@@ -1,3 +1,9 @@
1.3.30.jcn1
===========
* More Coriolan: flute-1,2; oboe-1,2; clarinet-1,2;
fixes and remainder french horn-1,2; trombone-1,2;
fagotto-1,2; timpani; and several fixes.
-
- 1.3.29.hwn1
- ===========1.3.30.mb1
-=========
+
+1.3.30.uu1
+==========
-* Fixed the page layout, reintroducing space for the header and
- trying to keep piece titles on the same page as the piece.
- The header and footer can now contain several lines.
+* Remove some old doco from programmer/ and put on personal homepage.
+
+* Removed union-find from flower library.
+* Only quantise tie horizontal part inside the staff.
+
+1.3.30
+======
1.3.29.hwn1
===========
@item @uref{../topdocs/out-www/AUTHORS.html, Authors}
@item @uref{../topdocs/out-www/README.html, Readme file}
@item @uref{../topdocs/out-www/INSTALL.html, Installation instructions}
+@item @uref{CHANGES.txt, Things recently done}
@item @uref{faq.html,FAQ: Frequently asked questions}, with answers
@end itemize
LilyPond prints
@item @uref{midi2ly.html,midi2ly} manual. midi2ly converts MIDI files to
LilyPond input
-@item @uref{../programmer/out-www/index.html,Programmer documentation}
+@item @uref{../programmer/out-www/regression-test.html, LilyPond test document}
@end itemize
@unnumberedsubsec Status
@itemize @bullet
-@item @uref{TODO.txt, Thing to do}
-@item @uref{CHANGES.txt, Things recently done}
@end itemize
@setfilename ly2dvi.info
@settitle ly2dvi
-@node Top, , ,
-@menu
-* Ly2dvi DESCRIPTION:: Ly2dvi DESCRIPTION
-* Ly2dvi SYNOPSIS:: Ly2dvi SYNOPSIS
-* Ly2dvi OPTIONS:: Ly2dvi OPTIONS
-* Ly2dvi Features:: Ly2dvi Features
-* Ly2dvi Environment:: Ly2dvi Environment
-* Ly2dvi Files:: Ly2dvi Files
-* Ly2dvi Initialization Sequence::Ly2dvi Initialization Sequence
-* Ly2dvi See Also:: Ly2dvi See Also
-* Ly2dvi Bugs:: Ly2dvi Bugs
-* Ly2dvi Remarks:: Ly2dvi Remarks
-* Ly2dvi Authors:: Ly2dvi Authors
-@end menu
@chapter Ly2dvi
-@node Ly2dvi DESCRIPTION, , , Top
@section DESCRIPTION
ly2dvi is a Python script which creates input file for LaTeX,
based on information from the output files from LilyPond.
The majority of this utility came from a bourne script written by Jan
Arne Fagertun name @file{ly2dvi}.
-@node Ly2dvi SYNOPSIS, , , Top
@section SYNOPSIS
ly2dvi [options] inputfile[.ly] [....]
-@node Ly2dvi OPTIONS, , , Top
+
@section OPTIONS
@table @samp
DVI file for each.
@end table
-@node Ly2dvi Features, , , Top
+
@section Features
ly2dvi responds to several parameters specified in the mudela
Specify name of papersize.
@end table
-@node Ly2dvi Environment, , , Top
@section Environment
@table @samp
Temporary directory name. Default is /tmp
@end table
-@node Ly2dvi Files, , , Top
@section Files
@file{titledefs.tex} is inspected for definitions used to extract
writable to the user.
@end table
-@node Ly2dvi Initialization Sequence, , , Top
@section Initialization Sequence
The initialization process reads inputs for several sources. Below is
a list of priorities for lowest to hightest proirity.
Note that this differs slightly from the original bourne shell
version.
-@node Ly2dvi See Also, , , Top
@section See Also
lilypond(1), tex(1), latex(1)
-@node Ly2dvi Bugs, , , Top
@section Bugs
If you have found a bug, you should send a bugreport.
to this mailinglist).
@end itemize
-@node Ly2dvi Remarks, , , Top
@section Remarks
Many papersizes are now supported. Information on other sizes
archE, b0, b1, b2, b3, b4, b5, flsa, flse, halfletter, ledger, legal,
letter, note
-@node Ly2dvi Authors, , , Top
@section Authors
Python Version author:
@email{daboys@@austin.rr.com, Jeffrey B. Reed},
@setfilename midi2ly.info
@settitle midi2ly
-@node midi2ly, , , Top
-@menu
-* midi2ly DESCRIPTION:: midi2ly DESCRIPTION
-* midi2ly OPTIONS:: midi2ly OPTIONS
-@end menu
+
@chapter midi2ly
-@node midi2ly DESCRIPTION, , , midi2ly
@section DESCRIPTION
midi2ly translates a MIDI input file to Mudela (GNU LilyPond source
format). midi2ly is part of the GNU LilyPond music typesetting package.
midi2ly [options] midi-file
-@node midi2ly OPTIONS, , , midi2ly
@section OPTIONS
@table @samp
+++ /dev/null
-% Creator: mf-to-table.py version 0.7
-% Automatically generated on
-% Do not edit
-% input from out/feta20.log
-% name
-% rests
-\fetdef\wholerest{0}
-\fetdef\halfrest{1}
-\fetdef\outsidewholerest{2}
-\fetdef\outsidehalfrest{3}
-\fetdef\breverest{4}
-\fetdef\longarest{5}
-\fetdef\multirest{6}
-\fetdef\quartrest{7}
-\fetdef\eighthrest{8}
-\fetdef\sixteenthrest{9}
-\fetdef\thirtysecondrest{10}
-\fetdef\sixtyfourthrest{11}
-\fetdef\hundredtwentyeighthrest{12}
-
-% accidentals
-\fetdef\sharp{13}
-\fetdef\natural{14}
-\fetdef\flat{15}
-\fetdef\flatflat{16}
-\fetdef\sharpsharp{17}
-\fetdef\rightparen{18}
-\fetdef\leftparen{19}
-
-% dots
-\fetdef\dot{20}
-\fetdef\repeatcolon{21}
-
-% balls
-\fetdef\brevisball{22}
-\fetdef\brevisledger{23}
-\fetdef\longaball{24}
-\fetdef\longaledger{25}
-\fetdef\wholeball{26}
-\fetdef\wholeledger{27}
-\fetdef\halfball{28}
-\fetdef\halfledger{29}
-\fetdef\quartball{30}
-\fetdef\quartledger{31}
-
-% scripts
-\fetdef\ufermata{32}
-\fetdef\dfermata{33}
-\fetdef\thumb{34}
-\fetdef\sforzatoaccent{35}
-\fetdef\staccato{36}
-\fetdef\ustaccatissimo{37}
-\fetdef\dstaccatissimo{38}
-\fetdef\tenuto{39}
-\fetdef\umarcato{40}
-\fetdef\dmarcato{41}
-\fetdef\ouvert{42}
-\fetdef\plusstop{43}
-\fetdef\upbow{44}
-\fetdef\downbow{45}
-\fetdef\reverseturn{46}
-\fetdef\turn{47}
-\fetdef\trill{48}
-\fetdef\upedalheel{49}
-\fetdef\dpedalheel{50}
-\fetdef\upedaltoe{51}
-\fetdef\dpedaltoe{52}
-\fetdef\flageolet{53}
-\fetdef\trilelement{54}
-\fetdef\prall{55}
-\fetdef\mordent{56}
-\fetdef\prallprall{57}
-\fetdef\prallmordent{58}
-\fetdef\upprall{59}
-\fetdef\downprall{60}
-\fetdef\accDiscant{61}
-\fetdef\accDiscantF{62}
-\fetdef\accDiscantEh{63}
-\fetdef\accDiscantE{64}
-\fetdef\accDiscantFE{65}
-\fetdef\accDiscantFEh{66}
-\fetdef\accDiscantEE{67}
-\fetdef\accDiscantFEE{68}
-\fetdef\accDiscantEEE{69}
-\fetdef\accDiscantFEEE{70}
-\fetdef\accDiscantS{71}
-\fetdef\accDiscantFS{72}
-\fetdef\accDiscantES{73}
-\fetdef\accDiscantEhS{74}
-\fetdef\accDiscantFES{75}
-\fetdef\accDiscantFEhS{76}
-\fetdef\accDiscantEES{77}
-\fetdef\accDiscantFEES{78}
-\fetdef\accDiscantEEES{79}
-\fetdef\accDiscantFEEES{80}
-\fetdef\accDiscantSS{81}
-\fetdef\accDiscantESS{82}
-\fetdef\accDiscantEESS{83}
-\fetdef\accDiscantEEESS{84}
-\fetdef\accFreebass{85}
-\fetdef\accFreebassF{86}
-\fetdef\accFreebassE{87}
-\fetdef\accFreebassFE{88}
-\fetdef\accStdbass{89}
-\fetdef\accStdbassM{90}
-\fetdef\accStdbassBp{91}
-\fetdef\accStdbassT{92}
-\fetdef\accStdbassTp{93}
-\fetdef\accBayanbass{94}
-\fetdef\accBayanbassT{95}
-\fetdef\accBayanbassE{96}
-\fetdef\accBayanbassTE{97}
-\fetdef\accBayanbassEE{98}
-\fetdef\accBayanbassTEE{99}
-\fetdef\accSB{100}
-\fetdef\accBB{101}
-\fetdef\accOldEE{102}
-\fetdef\accOldEES{103}
-
-% flags
-\fetdef\eighthflag{104}
-\fetdef\sixteenthflag{105}
-\fetdef\thirtysecondflag{106}
-\fetdef\sixtyfourthflag{107}
-\fetdef\deighthflag{108}
-\fetdef\dsixteenthflag{109}
-\fetdef\dthirtysecondflag{110}
-\fetdef\dsixtyfourthflag{111}
-
-% clefs
-\fetdef\altoclef{112}
-\fetdef\caltoclef{113}
-\fetdef\bassclef{114}
-\fetdef\cbassclef{115}
-\fetdef\trebleclef{116}
-\fetdef\ctrebleclef{117}
-
-% timesig
-\fetdef\fourfourmeter{118}
-\fetdef\allabreve{119}
-\fetdef\oldfourfourmeter{120}
-\fetdef\oldallabreve{121}
-\fetdef\oldthreetwometer{122}
-\fetdef\oldsixfourmeter{123}
-\fetdef\oldninefourmeter{124}
-
+++ /dev/null
-
- % -*-LaTeX-*-
-
-\documentclass{article}
-\def\kdots{,\ldots,}
-\title{Not the Font-En-Tja font}
-\author{HWN \& JCN}
-\def\preMudelaExample{}
-\def\postMudelaExample{}
-\begin{document}
-\maketitle
-
-
-\section{Introduction}
-
-This document are some design notes of the Feta font, and other
-symbols related to LilyPond. Feta (not an abbreviation of
-Font-En-Tja) is a font of music symbols. All MetaFont sources are
-original. The symbols are modelled after various editions of music,
-notably \begin{itemize} \item B\"arenreiter \item Hofmeister \item
-Breitkopf \item Durand \& C'ie \end{itemize}
-
-The best references on Music engraving are Wanske\cite{wanske} and
-Ross\cite{ross} some of their insights were used. Although it is a
-matter of taste, I'd say that B\"arenreiter has the finest typography
-of all.
-
-
-\section{Bezier curves for slurs}
-
-Objective: slurs in music are curved objects designating that notes
-should fluently bound. They are drawn as smooth curves, with their
-center thicker and the endings tapered.
-
-There are some variants: the simplest slur shape only has the width as
-parameter. Then we give some suggestions for tuning the shapes. The
-simple slur algorithm is used for drawing ties as well.
-
-
-
-\subsection{Simple slurs}
-
-Long slurs are flat, whereas short slurs look like small circle arcs.
-Details are given in Wanske\cite{ross} and Ross\cite{wanske}. The
-shape of a slur can be given as a Bezier curve with four control
-points:
-
-\begin{eqnarray*}
- B(t) &=& (1-t)^3c_1 +3(1-t)^2tc_2 + 3(1-t)t^2c_3 + t^3c_4.
-\end{eqnarray*}
-
-We will assume that the slur connects two notes of the same
-pitch. Different slurs can be created by rotating the derived shape.
-We will also assume that the slur has a vertical axis of symmetry
-through its center. The left point will be the origin. So we have
-the following equations for the control points $c_1\kdots c_4$.
-
-\begin{eqnarray*}
-c_1&=& (0,0)\\
-c_2&=& (i, h)\\
-c_3&=& (b-i, h)\\
-c_4&=& (b, 0)
-\end{eqnarray*}
-
-The quantity $b$ is given, it is the width of the slur. The
-conditions on the shape of the slur for small and large $b$ transform
-to
-\begin{eqnarray*}
- h \to h_{\infty} , &&\quad b \to \infty\\
- h \approx r_{0} b, &&\quad b \to 0.
-\end{eqnarray*}
-To tackle this, we will assume that $h = F(b)$, for some kind of
-$F(\cdot)$. One function that satisfies the above conditions is
-$$
-F(b) = h_{\infty} \frac{2}{\pi} \arctan \left( \frac{\pi r_0}{2
-h_{\infty}} b \right).
-$$
-
-For satisfying results we choose $h_{\infty} = 2\cdot \texttt{interline}$
-and $r_0 = \frac 13$.
-
-\subsection{Height correction}
-
-Aside from being a smooth curve, slurs should avoid crossing
-enclosed notes and their stems.
-
-An easy way to achieve this is to extend the slur's height,
-so that the slur will curve just above any disturbing notes.
-
-The parameter $i$ determines the flatness of the curve. Satisfying
-results have been obtained with $i = h$.
-
-The formula can be generalised to allow for corrections in the shape,
-\begin{eqnarray*}
-c_1&=& (0,0)\\
-c_2&=& (i', h')\\
-c_3&=& (b-i', h')\\
-c_4&=& (b, 0)
-\end{eqnarray*}
-Where
-$$
-i' = h(b) (1 + i_{corr}), \quad h' = h(b) (1 + h_{corr}).
-$$
-
-The default values for these corrections are $0$. A $h_{corr}$ that is
-negative, makes the curve flatter in the center. A $h_{corr}$ that is
-positive make the curve higher.
-
-At every encompassed note's x position the difference $\delta _y$
-between the slur's height and the note is calculated. The greatest
-$\delta _y$ is used to calculate $h_{corr}$ is by lineair extrapolation.
-
-However, this simple method produces satisfactory results only for
-small and symmetric disturbances.
-
-
-\subsection{Tangent method correction}
-
-A somewhat more elaborate\footnote{While staying in the realm
-of empiric computer science} way of having a slur avoid
-disturbing notes is by first defining the slur's ideal shape
-and then using the height correction. The ideal shape of a
-slur can be guessed by calculating the tangents of the disturbing
-notes:
-% a picture wouldn't hurt...
-\begin{eqnarray*}
- y_{disturb,l} &=& \rm{rc}_l x\\
- y_{disturb,r} &=& \rm{rc}_r + c_{3,x},
-\end{eqnarray*}
-where
-\begin{eqnarray*}
- \rm{rc}_l &=& \frac{y_{disturb,l} - y_{encompass,1}}
- {x_{disturb,l} - x_{encompass,1}}\dot x\\
- \rm{rc}_r &=& \frac{y_{encompass,n} - y_{disturb,r}}
- {x_{encompass,n} - x_{disturb,r}} \dot x + c_{3,x}.
-\end{eqnarray*}
-
-We assume that having the control points $c_2$ and $c_3$ located
-on tangent$_1$ and tangent$_2$ resp.
-% t: tangent
-\begin{eqnarray*}
- y_{tangent,l} &=& \alpha \rm{rc}_l x\\
- y_{tangent,r} &=& \alpha \rm{rc}_r + c_{3,x}.
-\end{eqnarray*}
-
-Beautiful slurs have rather strong curvature at the extreme
-control points. That's why we'll have $\alpha > 1$.
-Satisfactory resulsts have been obtained with
-$$
- \alpha \approx 2.4.
-$$
-
-The positions of control points $c_2$ and $c_3$ are obtained
-by solving with the height-line
-\begin{eqnarray*}
- y_h &=& \rm{rc}_h + c_h.
-\end{eqnarray*}
-
-The top-line runs through the points disturb$_{left}$ and
-disturb$_{right}$. In the case that
-$$
-z_{disturb,l} = z_{disturb,r},
-$$
-we'll have
-$$
- \angle(y_{tangent,l},y_h) = \angle(y_{tangent,r},y_h).
-$$
-
-
-
-\section{Sizes}
-
-Traditional engraving uses a set of 9 standardised sizes for Staffs
-(running from 0 to 8).
-
-We have tried to measure these (helped by a magnifying glass), and
-found the staffsizes in table~\ref{fonts:staff-size}. One should note that
-these are estimates, so I think there could be a measuring error of ~
-.5 pt. Moreover [Ross] states that not all engravers use exactly
-those sizes.
-
-\begin{table}[h]
- \begin{center}
- \begin{tabular}{lll}
-Staffsize &Numbers &Name\\
-\hline\\
-26.2pt &No. 0\\
-22.6pt &No. 1 &Giant/English\\
-21.3pt &No. 2 &Giant/English\\
-19.9pt &No. 3 &Regular, Ordinary, Common\\
-19.1pt &No. 4 &Peter\\
-17.1pt &No. 5 &Large middle\\
-15.9pt &No. 6 &Small middle\\
-13.7pt &No. 7 &Cadenza\\
-11.1pt &No. 8 &Pearl\\
- \end{tabular}
- \caption{Foo}
- \label{fonts:staff-size}
- \end{center}
-\end{table}
-
-
-
-
-\section{Beams}
-
-\subsection{Slope}
-
-Traditionally, beam slopes are computed by following a large and hairy
-set of rules. Some of these are talked-about in Wanske, a more
-recipy-like description can be found in Ross.
-
-There are some problems when trying to follow these rules:
-\begin{itemize}
-
-\item the set is not complete
-
-\item they are not formulated as a general rule with exceptions, but
-rather as a huge case of individual rules\cite{ross}
-
-\item in some cases, the result is wrong or ugly (or both)
-
-\item they try to solve a couple of problems at a time (e.g. Ross
-handles ideal slope and slope-quantisation as a paired problem)
-\end{itemize}
-Reading Ross it is clear that the rules presented there are certainly
-not the ultimate idea of what beam(slope)s should look like, but
-rather a (very much) simplified hands-on recipy for a human engraver.
-
-There are good reasons not to follow those rules:
-
-\begin{itemize}
-\item One cannot expect a human engraver to solve least-squares
-problems for every beam
-
-\item A human engravers will allways trust themselves in judging the
-outcome of the applied recipy. If, in a complicated case, the result
-"doesn't look good", they will ignore the rules and draw their own
-beams, based on experience.
-
-\item The exact rules probably don't "really exist" but in the minds
- of good engravers, in the form of experience
-\end{itemize}
-
-We'll propose to do a least-squares solve. This seems to be the best
-way to calculate the slope for a computerised engraver such as Lily.
-
-It would be nice to have some rules to catch and handle "ugly" cases,
-though. In general, the slope of the beam should mirror the pitches
-of the notes. If this can't be done because there simply is no
-uniform trend, it would probably be best to set the slope to zero.
-
-
-\subsection{Quantising}
-
-The beams should be prevented to conflict with the stafflines,
-especially at small slopes. Traditionally, poor printing techniques
-imposed rather strict rules for quantisation. In modern (post 1955)
-music printing we see that quality has improved substantially and
-obsoleted the technical justification for following some of these
-strict rules, notably the avoiding of so-called wedges.
-
-
-\subsection{Thickness and spacing}
-
-The spacing of double and triple beams (sixteenth and thirtysecond beams)
-is the same, quadruple and quintuple (thirtyfourth and hundredtwentyeighth
-beams) is wider.
-All beams are equally thick. Using the layout of triple beams and the
-beam-thickness $bt$ we can calculate the inter-beam spacing $ib$.
-
-Three beams span two interlines, including stafflines:
-\begin{eqnarray*}
- 2 ib + bt &=& 2 il\\
- ib &=& (2 il - bt) / 2
-\end{eqnarray*}
-
-We choose
-\begin{eqnarray*}
- bt &=& 0.48(il - st)
-\end{eqnarray*}
-
-\subsubsection{Quadruple beams}
-
-If we have more than three beams they must open-up
-in order to not collide with staff lines. The only valid
-position that remains is for the upper beam to hang.
-
-\begin{eqnarray*}
- 3 ib_{4+} + bt &=& 3 il\\
- ib_{4+} &=& (3 il - bt) / 3
-\end{eqnarray*}
-
-
-\section{Layout of the source files}
-
-The main font (with the fixed size music glyphs) uses a the \TeX\
-logfile as a communication device. Use the specialised macros to
-create and export glyphs.
-
-\bibliographystyle{plain}
-\bibliography{engraving}
-
-
-
-\end{document}
-
-\begin{verbatim}
-Paul Terry <paul@musonix.demon.co.uk> writes:
-
-Ross states that the dies (the stamps to make the symbols) come in
-12 different sizes.
-
->Can you tell me how big rastrals are?
-
-According to the Score manual:
-
- Rastral Size Height in millimetres
-
- 0 9 mm
- 1 8 mm
- 2 7.5 mm
- 3 7 mm
- 4 6.5 mm
- 5 6 mm
- 6 5.5 mm
-
-I must say, despite having been a music setter for many years, I had to
-look these up - none of the publishers I work for deal in Rastral sizes
-these days (they all use millimetres).
+++ /dev/null
-%-*-LaTeX-*-
-
-\documentclass{article}
-\usepackage{a4}
-\def\postMudelaExample{\setlength{\parindent}{1em}}
-\title{LilyPond, a Music Typesetter}
-\author{HWN}
-\usepackage{musicnotes}
-\usepackage{graphics}
-
-
-\begin{document}
-\maketitle
-
-[THIS IS WORK IN PROGRESS. THIS IS NOT FINISHED]
-
-% -*-LaTeX-*-
-\section{Introduction}
-
-The Internet has become a popular medium for collaborative work on
-information. Its success is partly due to its use of simple, text-based
-formats. Examples of these formats are HTML and \LaTeX. Anyone can
-produce or modify such files using nothing but a text editor, they are
-easily processed with run-of-the-mill text tools, and they can be
-integrated into other text-based formats.
-
-Software for processing this information and presenting these formats
-in an elegant form is available freely (Netscape, \LaTeX, etc.).
-Ubiquitousness of the software and simplicity of the formats have
-revolutionised the way people publish text-based information
-nowadays.
-
-In the field of performed music, where the presentation takes the form
-of sheet music, such a revolution has not started yet. Let us review
-some alternatives that have been available for transmitting sheet
-music until now:
-\begin{itemize}
-\item MIDI\cite{midi}. This format was designed for interchanging performances
- of music; one should think of it as a glorified tape recorder
- format. It needs dedicated editors, since it is binary. It does
- not provide enough information for producing musical scores: some of
- the abstract musical content of what is performed is thrown away.
-
-\item PostScript\cite{Postscript}. This format is a printer control
- language. Printed musical scores can be transmitted in PostScript,
- but once a score is converted to PostScript, it is virtually
- impossible to modify the score in a meaningful way.
-
-\item Formats for various notation programs. Notation programs either
- work with binary formats (e.g., NIFF\cite{niff-web}), need specific
- platforms (e.g., Sibelius\cite{sibelius}), are proprietary or
- non-portable tools themselves (idem), produce inadequate output
- (e.g., MUP\cite{mup}), are based on graphical content (e.g.,
- MusixTeX\cite{musixtex1}), limit themselves to specific subdomains
- (e.g., ABC\cite{abc2mtex}), or require considerable skill and
- knowledge to use (e.g., SCORE\cite{score})
-
-\item SMDL\cite{smdl-web}. This is a very rich ASCII format, that is
- designed for storing many types of music. Unfortunately, there is
- no implementation of a program to print music from SMDL available.
- Moreover, SMDL is so verbose, that it is not suitable for human
- production.
-
-\item TAB\cite{tablature-web}. Tab (short for tablature) is a popular
- format, for interchanging music over e-mail, but it can only be used
- for guitar music.
-\end{itemize}
-
-In summary, sheet music is not published and edited on a wide scale
-across the internet because no format for music
-interchange exists that is:
-\begin{itemize}
-\item open, i.e., with publically available specifications.
-\item based on ASCII, and therefore suitable for human consumption and
- production.
-\item rich enough for producing publication quality sheet music from
- it.
-\item based on musical content (unlike, for example, PostScript), and
- therefore suitable for making modifications.
-\item accompanied by tools for processing it that are freely available
- across multiple platforms.
-\end{itemize}
-
-
-With the creation of LilyPond, we have tried to create both a
-convenient format for storing sheet music, and a portable,
-high-quality implementation of a compiler, that compiles the input
-into a printable score. You can find a small example of LilyPond
-input along with output in Figure~\ref{fig:intro-fig}.
-%
-\begin{figure}[htbp]
- \begin{center}
-\begin[verbatim]{mudela}
- \score {
- \notes
- \context GrandStaff <
- \transpose c'' { c4 c4 g4 g4 a4 a4 g2 }
- { \clef "bass"; c4 c'4
- \context Staff <e'2 {\stemdown c'4 c'4}> f'4 c'4 e'4 c'4 }
- >
- \paper {
- linewidth = -1.0\cm ;
- }
- }
-\end{mudela}
- \caption{A small example of LilyPond input}
- \label{fig:intro-fig}
- \end{center}
-\end{figure}
-%
-
-
-The input language encodes musical events (such as notes and rests) on
-the basis of their time-ordering. For example, the grammar includes
-constructs that specify that notes start simultaneous and that notes
-are to be played in sequence. In this encoding some context that is
-present in sheet music is lost.
-
-The compiler reconstructs the notation from the encoded music. Its
-operation comprises four different steps (see
-Figure~\ref{fig:intro-steps}).
-
-\begin{description}
-\item[Parsing] During parsing, the input is converted in a syntax tree.
-
-\item[Interpreting] In the \emph{interpreting} step, it is determined
- which symbols have to be printed. Objects that correspond to
- notation (\emph{Graphical objects}) are created from the syntax tree
- in this phase. Generally speaking, for every symbol printed there is
- one graphical object. These objects are incomplete: their position
- and their final shape is unknown.
-
- The context that was lost by encoding the input in a language is
- reconstructed during this conversion.
-\item[Formatting] The next step is determing where symbols are to be
- placed, this is called \emph{formatting}.
-\item[Outputting]
- Finally, all Graphical objects are outputted as PostScript or \TeX\ code.
-\end{description}
-
-\def\staffsym{\vbox to 16pt{
- \hbox{\vrule width 1cm depth .2pt height .2pt}\nointerlineskip
- \vfil
- \hbox{\vrule width 1cm depth .2pt height .2pt}\nointerlineskip
- \vfil
- \hbox{\vrule width 1cm depth .2pt height .2pt}\nointerlineskip
- \vfil
- \hbox{\vrule width 1cm depth .2pt height .2pt}\nointerlineskip
- \vfil
- \hbox{\vrule width 1cm depth .2pt height .2pt}\nointerlineskip
-}}
-
-\def\vspacer{\vbox to 20pt{\vss}}
-\begin{figure}[h]
-\def\spacedhbox#1{\hbox{\ #1\ }}
-\begin{eqnarray*}
- {\spacedhbox{Input}\atop \hbox{\texttt{\{c8 c8\}}}} {\spacedhbox{Parsing}\atop\longrightarrow}
- {\spacedhbox{Syntax tree}\atop\spacedhbox{\textsf{Sequential(Note,Note)}}}
- {\spacedhbox{Interpreting}\atop\longrightarrow}\\
- \vspacer\\
- {\spacedhbox{Graphic objects}\atop\spacedhbox{\texttrebleclef \textquarterhead\texteighthflag\textquarterhead\texteighthflag \staffsym }}
- {\spacedhbox{Formatting}\atop\longrightarrow}
- {\spacedhbox{Formatted objects}\atop\hbox{
- \mudela{c''8 c''8}
- }}\\
-\vspacer\\
- {\spacedhbox{Outputting}\atop\longrightarrow}
- {\spacedhbox{PostScript code}\atop\hbox{\texttt{\%!PS-Adobe}\ldots}}
-\end{eqnarray*}
- \caption{Parsing, Interpreting, Formatting and Outputting}
- \label{fig:intro-steps}
-\end{figure}
-
-
-The second step, the interpretation phase of the compiler, can be
-manipulated as a separate entity: the interpretation process is
-composed of many separate modules, and the behaviour of the modules is
-parameterised. By recombining these interpretation modules,
-and changing parameter settings, the same piece of music can be
-printed differently, as is shown in Figure~\ref{fig:intro-interpret}.
-
-This makes it easy to extend the program. Moreover, this enables the
-same music to be printed in different versions, e.g., in a conductors
-score and in extracted parts.
-
-
-\begin{figure}[h]
- \begin{center}
- \begin{mudela}
- \score {
- \notes
- \context GrandStaff <
- \transpose c'' { c4 c4 g4 g4 a4 a4 g2 }
- { \clef "bass"; c4 c'4
- \context Staff <e'2 {\stemdown c'4 c'4}> f'4 c'4 e'4 c'4 }
- >
- \paper {
- linewidth = -1.0\cm ;
- \translator {
- \VoiceContext
- \remove "Stem_engraver";
- }
- \translator {
- \StaffContext
- numberOfStaffLines = 3;
- }
- }
- }
- \end{mudela}
- \caption{The interpretation phase can be manipulated: the same
- music as in Figure~\ref{fig:intro-fig} is interpreted
- differently: three staff lines and no stems.}
- \label{fig:intro-interpret}
- \end{center}
-\end{figure}
-
-
-
-\section{Preliminaries}
-
-To understand the rest of the article, it is necessary to know
-something about music notation and music typography. Since both
-communicate music, we will explain some characteristics of instruments
-and western music that motivate some notational constructs.
-
-\subsection{Music}
-
-Music notation is meant to be read by human performers. They sing or
-play instruments that can produce sounds of different pitches. These
-sounds are called \emph{notes}. Additionally, the sounds can be
-articulated in differents ways, e.g., staccato (short and separated)
-or legato (fluently bound together). The loudness of the notes can
-also be varied. Changes in loudness are called \emph{dynamics}.
-
-Silence is also an element of music. The musical terminology for
-silence within music is \emph{rest}.
-
-The basic unit of pitch is the \emph{octave}. The octave corresponds
-to a frequency ratio of 1:2. For example the pitch denoted by a'
-(frequency: 440 hertz) is one octave lower than a'' (frequency: 880
-hertz). Various instruments have a limited \emph{pitch range}, for
-example, a trumpet has a range of about 2.5 octaves. Not all
-instruments have ranges in the same register: a tuba also has a range
-of 2.5 octaves, but the range of the tuba is much lower.
-
-Musicology has a confusing mix of relative and absolute measures for
-pitches: the term `octave' refers to both a difference between two
-pitches (the frequency ratio of 1:2), and to a range of pitches. For
-example, the term `[eengestreept] octave' refers to the pitch range
-between 261.6 Hz and 523.3 Hz.
-
-
-The octave is divided into smaller pitch steps. In modern western
-music, every octave is divided into twelve approximately equidistant
-pitch steps, and each step is called a \emph{semitone}. Usually, the
-pitches in a musical piece come from a smaller subset of these twelve
-possible pitches. This smaller subset along with the musical
-functions fo the pitches is called the
-\emph{tonality}\footnote{Tonality also refers to the relations between
- and functions of certain pitches. Since these do not have any
- impact on notation, we ignore this} of the piece.
-
-
-The standard tonality that forms the basis of music notation
-(the key of C major) is a set of seven pitches within every octave.
-Each of these seven is denoted by a name. In English, these are names
-are (in rising pitch) denoted by c, d, e, f, g, a and b. Pitches that
-are a semitone higher or lower than one of these seven can be
-represented by suffixing the name with `sharp' or `flat'
-respectively (this is called an \emph{chromatic alteration}).
-
-A pitch therefore can be fully specified by a combination of the
-octave number, the note name and a chromatic alteration.
-Figure~\ref{fig:intro-pitches} shows the relation between names and
-frequencies.
-
-
-
-
-\begin{figure}[h]
- \begin{center}
- [te doen]
- \end{center}
- \caption{Pitches in western music. The octave number is denoted
- by a superscript.}
- \label{fig:intro-pitches}
-\end{figure}
-
-
-Many instruments can produce more than one note at the same time, e.g.
-pianos and guitars. When more notes are played simultaneously, they
-form a so-called \emph{chord}.
-
-The unit of duration is the \emph{beat}. When playing, the tempo is
-determined by setting the number of beats per minute. In western
-music, beats are often stressed in a regular pattern: for example
-Waltzes have a stress pattern that is strong-weak-weak, i.e. every
-note that starts on a `strong' beat is louder and has more pronounced
-articulation. This stress pattern is called \emph{meter}.
-
-\subsection{Music notation}
-
-Music notation is a system that tries to represent musical ideas
-through printed symbols. Music notation has no precise definition,
-but most conventions have described in reference manuals on music
-notation\cite{read-notation}.
-
-In music notation, sounds and silences are represented by symbols that
-are called note and rest respectively.\footnote{These names serve a
- double purpose: the same terms are used to denote the musical
- concepts.} The shape of notes and rests indicates their duration
-(See figure~\ref{noteshapes}) relative to the whole note.
-
-
-\begin{figure}[h]
- \begin{center}
-\begin{mudela}
- \score {
- \notes \transpose c''{ c\longa*1/4 c\breve*1/2 c1 c2 c4 c8 c16 c32 c64 }
- \paper {
- \translator {
- \StaffContext
- \remove "Staff_symbol_engraver";
- \remove "Time_signature_engraver";
-% \remove "Bar_engraver";
- \remove "Clef_engraver";
- }
-linewidth = -1.;
- }
-}
-\end{mudela}
-\begin{mudela}
- \score {
- \notes \transpose c''\context Staff { r\longa*1/4 r\breve*1/2 r1 r2 r4 r8 r16 r32 r64 }
- \paper {
- \translator {
- \StaffContext
- \remove "Staff_symbol_engraver";
- \remove "Time_signature_engraver";
-% \remove "Bar_engraver";
- \remove "Clef_engraver";
- }
- linewidth = -1.;
- }
-}
-\end{mudela}
- \caption{Note and rest shapes encode the length. At the top notes
- are shown, at the bottom rests. From left to right a quadruple
- note (\emph{longa}), double (\emph{breve}), whole, half,
- quarter, eigth, sixteenth, thirtysecond and sixtyfourth. Each
- note has half of the duration of its predecessor.}
- \label{fig:noteshapes}
-\end{center}
-\end{figure}
-
-
-Notes are printed in a grid of horizontal lines called \emph{staff} to
-denote their pitch: each line represents the pitch of from the
-standard scale (c, d, e, f, g, a, b). The reference point is the
-\emph{clef}, eg., the treble clef marks the location of the $g^1$
-pitch. The notes are printed in their time order, from left to right.
-
-
-\begin{figure}[h]
- \begin{center}
- \begin{mudela}
- \score { \notes {
- a4 b c d e f g a \clef bass;
- a4 b c d e f g a \clef alto;
- a4 b c d e f g a \clef treble;
- }
- \paper { linewidth = 15.\cm; }
- }
- \end{mudela}
- \caption{Pitches ranging from $a, b, c',\ldots a'$, in different
- clefs. From left right the bass, alto and treble clef are
- featured.}
- \label{fig:pitches}
- \end{center}
-\end{figure}
-
-The chromatic alterations are indicated by printing a flat sign or a
-sharp sign in front of the note head. If these chromatic alterations
-occur systematically (if they are part of the tonality of the piece),
-then this indicated with a \emph{key signature}. This is a list of
-sharp/flat signs which is printed next to the clef.
-
-Articulation is notated by marking the note shapes wedges, hats and
-dots all indicate specific articulations. If the notes are to be
-bound fluently (legato), the note shapes are encompassed by a smooth
-curve called \emph{slur},
-
-\begin{figure}[h]
- \begin{center}
- \begin{mudela}
- c'4-> c'4-. g'4 ( b'4 ) g''4
- \end{mudela}
- \caption{Some articulations. From left to right: extra stress
- (\emph{marcato}), short (staccato), slurred notes (legato).}
- \label{fig:articulation}
- \end{center}
-\end{figure}
-
-
-
-Dynamics are notated in two ways: absolute dynamics are indicated by
-letters: \textbf{f} (from Italian ``forte'') stands for loud,
-\textbf{p} (from Italian ``piano'') means soft. Gradual changes in
-loudness are notated by (de)crescendos. These are hairpin like shapes
-below the staff.
-
-\begin{figure}[h]
- \begin{center}
- \begin{mudela}
- g'4\pp \< g'4 \! g'4 \ff \> g'4 g' \! g'\ppp
- \end{mudela}
- \caption{Dynamics: start very soft (pp), grow to loud (ff) and
- decrease to extremely soft (ppp)}
- \label{fig:dynamics}
- \end{center}
-\end{figure}
-
-
-The meter is indicated by barlines: every start of the stress pattern
-is preceded by a vertical line, the \emph{bar line}. The space
-between two bar lines is called measure. It is therefore the unit of
-the rhythmic pattern.
-
-The time signature also indicates what kind of rhythmic pattern is
-desired. The time signature takes the form of two numbers stacked
-vertically. The top number is the number of beats in one measure, the
-bottom number is the duration (relative to the whole note) of the note
-that takes one beat. Example: 2/4 time signature means ``two beats
-per measure, and a quarter note takes one beat''
-
-Chords are written by attaching multiple note heads to one stem. When
-the composer wants to emphasize the horizontal relationships between
-notes, the simultaneous notes can be written as voices (where every
-note head has its own stem). A small example is given in
-Figure~\ref{fig:simultaneous}.
-
-\begin{figure}[h]
- \begin{center}
- \begin{mudela}
- \relative c'' {\time 2/4; <c4 e> <d f>
- \context Staff < \context Voice = VA{
- \stemdown
- c4 d
- b16 b b b b b b b }
- \context Voice = VB {
- \stemup e4 f g8 g4 g8 } >
- }
- \end{mudela}
- \caption{Notes sounding together. Chord notation (left, before
- the bar line) emphasizes vertical relations, voice notation
- emphasizes horizontal relations. Separate voices needn't have
- synchronous rhythms (third measure).
- }
- \label{fig:simultaneous}
- \end{center}
-\end{figure}
-
-Separate voices do not have to share one rhythmic pattern---this is
-also demonstrated in Figure~\ref{fig:simultaneous}--- they are in a sense%vaag
-independent. A different way to express this in notation, is by
-printing each voice on a different staff. This is customary when
-writing for piano (both left and right hand have a staff of their own)
-and for ensemble (every instrument has a staff of its own).
-
-
-
-\subsection{Music typography}
-
-Music typography is the art of placing symbols in esthetically
-pleasing configuration. Little is explicitly known about music
-typography. There are only a few reference works
-available\cite{ross,wanske}. Most of the knowledge of this art has
-been transmitted verbally, and was subsequently lost.
-
-The motivation behind choices in typography is to represent the idea
-as clearly as possible. Among others, this results in the following
-guidelines:
-\begin{itemize}
-\item The printed score should use visual hints to accentuate the
- musical content
-\item The printed score should not contain distracting elements, such
- as large empty regions or blotted regions.
-\end{itemize}
-
-An example of the first guideline in action is the horizontal spacing.
-The amount of space following a note should reflect the duration of
-that note: short notes get a small amount of space, long notes larger
-amounts. Such spacing constraints can be subtle, for the
-``amount of space'' is only the impression that should be conveyed; there
-has to be some correction for optical illusions. See
-Figure~\ref{fig:spacing}.
-
-\begin{figure}[h]
- \begin{center}
- \begin{mudela}
- \relative c'' { \time 3/4; c16 c c c c8 c8 | f4 f, f' }
- \end{mudela}
- \caption{Spacing conveys information about duration. Sixteenth
- notes at the left get less space than quarter notes in the
- middle. Spacing is ``visual'', there should be more space
- after the first note of the last measure, and less after second. }
- \label{fig:spacing}
- \end{center}
-\end{figure}
-
-Another example of music typography is clearly visible in collisions.
-When chords or separate voices are printed, the notes that start at
-the same time should be printed aligned (ie., with the same $x$
-position). If the pitches are close to each other, the note heads
-would collide. To prevent this, some notes (or note heads) have to be
-shifted horizontally. An example of this is given in
-Figure~\ref{fig:collision}.
-\begin{figure}[h]
- \begin{center}
- [todo]
- \caption{Collisions}
- \label{fig:collision}
- \end{center}
-\end{figure}
-
-\bibliographystyle{hw-plain}
-\bibliography{engraving,boeken,colorado,computer-notation,other-packages}
-
-\section{Requirements}
-
-
-\section{Approach}
-
-\subsection{Input}
-
-The input format consists of combining a symbolic representation of
-music with style sheet that describes how the symbolic presentation
-can converted to notation. The symbolic representation is based on a
-context free language called \textsf{music}. Music is a recursively
-defined construction in the input language. It can be constructed by
-combining lists of \textsf{music} sequentially or parallel or from
-terminals like notes or lyrics.
-
-The grammar for \textsf{music} is listed below. It has been edited to
-leave out the syntactic and ergonomic details.
-
-\begin{center}
- \begin{tabular}{ll}
-Music: & SimpleMusic\\
- & $|$ REPEATED int Music ALTERNATIVE MusicList\\
- & $|$ SIMULTANEOUS MusicList\\
- & $|$ SEQUENTIAL MusicList\\
- & $|$ CONTEXT STRING '=' STRING Music\\
- & $|$ TIMES int int Music \\
- & $|$ TRANSPOSE PITCH Music \\
-SimpleMusic: & $|$ Note\\
- & $|$ Lyric\\
- & $|$ Rest\\
- & $|$ Chord\\
- & $|$ Command\\
-Command: & METERCHANGE\\
- & $|$ CLEFCHANGE\\
- &$|$ PROPERTY STRING '=' STRING\\
-Chord: &PitchList DURATION\\
-Rest: &REST DURATION\\
-Lyric: &STRING DURATION\\
-Note: &PITCH DURATION\\
-\end{tabular}
-\end{center}
-
-The terminals are both purely musical concepts that have a duration,
-and take a non-zero amount of musical time, like notes and lyrics, and
-commands that behave as if they have no duration.\footnote{The
- PROPERTY command is a generic mechanism for controlling the
- interpretation, i.e. the musical style sheets. See [forward ref]}
-
-The nonterminal productions can
-\begin{itemize}
-\item Some productions combine multiple elements: one can specify that
- element are to be played in sequence, simultaneously or repetitively.
-\item There are productions for transposing music, and for dilating
- durations of music: the TIMES production can be used to encode a
- triplet.\footnote{A triplet is a group of three notes marked by a
- bracket, that are played 3/2 times faster.}
-\item
- There are productions that give directions to the interpretation
- engine (the CONTEXT production)
-\end{itemize}
-
-
-\section{Context in notation}
-
-Music notation relies heavily on context. Notational symbols do not
-have meaning if they are not surrounded by other context elements. In
-this section we give some examples how the reader uses this context do
-derive meaning of a piece of notation. We will focus on the prime
-example of context: the staff.
-
-A staff is the grid of five horizontal lines, but it contains more components :
-\begin{itemize}
-\item A staff can have a key signature (printed at the left)
-\item A staff can have a time signature (printed at the left)
-\item A staff has bar lines
-\item A staff has a clef (printed at the left)
-\end{itemize}
-
-It is still possible to print notes without these components, but one
-cannot determine the meaning of the notes.
-\begin{mudela}
-\score{
-\notes \relative c' { \time 2/4; g'4 c,4 a'4 f4 e c d2 }
-\paper {
- linewidth = -1.;
- \translator {
- \StaffContext
- \remove "Time_signature_engraver";
-% \remove "Bar_engraver";
- \remove "Staff_symbol_engraver";
- \remove "Clef_engraver";
- \remove "Key_engraver";
- }
- }
-}
-\end{mudela}
-
-As you can see, you can still make out the general form of the melody
-and the rhythm that is to be played, but the notation is difficult to
-read and the musical information is not complete. The stress
-pattern in the notes can't be deduced from this output. For this, we
-need a time signature. Adding barlines helps with finding the strong
-and weak beats.
-\begin{mudela}
-\score {
- \notes \relative c' { \time 2/4; g'4 c,4 a'4 f4 e c d2 }
- \paper{
- linewidth = -1.;
-\translator{
- \StaffContext
- \remove "Staff_symbol_engraver";
- \remove "Clef_engraver";
- \remove "Key_engraver";}
- }
- }
-\end{mudela}
-
-It is impossible to deduce the exact pitch of the notes. One needs a
-clef to do so. Staff lines help the eye in determining the vertical
-position of a note wrt. to the clef.
-\begin{mudela}
-\score {
- \notes \relative c' {\clef alto; \time 2/4; g'4 c,4 a'4 f4 e c d2 }
- \paper {
- linewidth = -1.;
- }
-}
-\end{mudela}
-
-Now you know the pitch of the notes: you look at the start of the line
-and see a clef, and with this clef, you can determine the notated pitches.
-You have found the em(context) in which the notation is to be
-interpreted!
-
-
-\section{Interpretation context}
-
-Context (clef, time signature etc.) determines the relationship
-between musical and its notation in notes. Because LilyPond writes
-notation, context works the other way around for LilyPond: with
-context a piece of music can be converted to notation.
-
-A reader remembers this context while reading the notation from left
-to right. By analogy, LilyPond constructs this context while
-constructing notes from left to right. This is what happens in the
-``Interpretation'' phase from~\ref{fig:intro-fig}. In LilyPond, the
-state of this context is a set of variables with their values; A staff
-context contains variables like
-
-\begin{itemize}
-\item current clef
-\item current time signature
-\item current key
-\end{itemize}
-
-These variables determine when and how clefs, time signatures, bar
-lines and accidentals are printed.
-
-
-Staff is not the only form of context in notation. In polyphonic
-music, the stem direction shows which notes form a voice: all notes of
-the same voice have stems pointing in the same direction. The value
-of this variable determines the appearance of the printed stems.
-
-In LilyPond ``Notation context'' is abstracted to a data structure
-that is used, constructed and modified during the interpretation
-phase. It contains context properties, and is responsible for
-creating notational elements: the staff context creates symbols for
-clefs, time signatures and key signatures. The Voice context creates
-stems, note heads.
-
-For the fragment of polyphonic music below,
-\begin{mudela}
- \context Staff { c'4 < { \stemup c'4 } \context Voice = VB { \stemdown a4 } > }
-\end{mudela}
-A staff context is created. Within this staff context (which printed
-the clef), a Voice context is created, which prints the first note.
-Then, a second Voice context is created, with stem direction set to
-``up'', and the direction for the other is set to down. Both Voice
-contexts are still part of the same Staff context.
-
-In the same way, multiple staff scores are created: within the score
-context, multiple staff contexts are created. Every staff context
-creates the notation associated with a staff.
-
-\section{Discussion}
-
-
-
-\end{document}
-
-The complexity of music notation was tackled by adopting a modular
-design: both the formatting system (which encodes the esthetic rules of
-notation), and the interpretation system (which encodes the semantic
-rules) are highly modular.
-
-
-The difficulty in creating a format for music notation is rooted in
-the fact that music is multi dimensional: each sound has its own
-duration, pitch, loudness and articulation. Additionally, multiple
-sounds may be played simultaneously. Because of this, there is no
-obvious way to ``flatten'' music into a context-free language.
-
-The difficulty in creating a printing engine is rooted in the fact
-that music notation complicated: it is very large graphical
-``language'' with many arbitrary esthetic and semantic conventions.
-Building a system that formats full fledged musical notation is a
-challenge in itself, regardless of whether it is part of a compiler or
-an editor.
-
-The fact that music and its notation are of a different nature,
-implies that the conversion between input notation is non-trivial.
-
-In LilyPond we solved the above problem in the following way:
-
+++ /dev/null
-
-\input lilyponddefs
-
-\def\fetdef#1#2{%
- \def#1{\hbox{\char#2}}}
-
-% huh? from where
-\input feta20.sty
-
-\font\fetasixteenfont=feta16
-\font\fetaelevenfont=feta11
-\def\fetafont{\fetasixteenfont}
-
-\newdimen\ild
-\ild=4pt
-\newdimen\stemthick
-\stemthick=0.4pt
-
-\def\eighthstem{{\fetafont\vrule height 3.5ex width \stemthick depth0pt\raise
- 3.5ex\hbox{\eighthflag}}}
-\def\texteighthflag{{\fetafont\raise 0ex\hbox{\fetafont\eighthflag}}}
-\def\textdeighthflag{{\fetafont\raise 0ex\hbox{\deighthflag}}}
-
-\def\texteighthnote{{\hbox{\hbox{\fetafont\quartball}\kern
- -0.5\stemthick\eighthstem}}}
-\def\quarterstem{{\fetafont\vrule height 3.5ex width \stemthick depth0pt}}
-\def\textquarterstem{\quarterstem}
-\def\textchord{{\hbox{\fetafont\lower.5ex\hbox to
- 0pt{\textquarterhead}\raise.5ex\hbox{\textquarterhead}\kern
- -0.5\stemthick\eighthstem}}}
-\def\textbassclef{\hbox{\fetafont\bassclef}}
-\def\texttrebleclef{\hbox{\fetafont\trebleclef}}
-\def\textslur{\embeddedps{9.378744 -3.171539 3.923099 -3.171539 0.000000 0.000000 12.800000 0.000000 3.672177 -3.672177 9.127823 -3.672177 12.800000 0.000000 0.000000 0.000000 draw_slur}}
-
-\def\textmarcato{{\fetafont\raise 1ex\hbox{\hskip 1ex\sforzatoaccent}}}
-
-
-\def\textquarterhead{\hbox{\fetafont\raise 2.5pt\hbox{\quartball}}}
-\def\texteighthstem{\hbox{\lower 5pt\hbox{\eighthstem}}}
-\def\texthalfnote{{\hbox{\hbox{\fetafont\halfball}\kern -0.5\stemthick\quarterstem}}}
-\def\textquarternote{{\hbox{\hbox{\fetafont\quartball}\kern -0.5\stemthick\quarterstem}}}
-\def\textflat{{\fetafont\raise 1ex\hbox{\flat}}}
-\def\textsharp{{\fetafont\raise1ex\hbox{\sharp}}}
--*-outline-layout:(2 (-1 -1 0 :) 0);outline-stylish-prefixes:nil -*-
-
-* GNU LilyPond TODO
-Features you cannot find in the documentation as working, should be
-mentioned here. This is an assorted collection of stuff that will be
-done, might be done, or is an idea that we want to think about.
-Most of the items are marked in the code as well
-Grep -i for TODO, FIXME and ugh/ugr/urg.
-
-.* TODO
-. * use hash tabs iso. alist_ for elt property?
-. * unhardcode stuff in bezier-bow: all sizes other than 20pt are
- broken
-. * use ports iso. iostream.
-. * hard constraints for broken slurs to.
-. * Staff_margin_engraver placement is broken for Staff.instr(ument)
-. * Bracket/brace placement and stacking is broken
-. * Lattermann:
-
- 2. There dynamic markings of the cello part are set in roman (maybe
- because of pizz. and arco in roman?)
-
- 4. Bar 41/42, violins: the ties should be the same direction, pref.
- down in bar 42.
- -- dir of broken ties
-
- 7. This is a bug: there's a colon in the middle of the two harmonium
- staves
-
- 12. bars 82 to 84 and 88: the ties of upper harmonium should all bend down.
- -- stemdown ~ stemup and at linebreak
-
- 15. bar 89, harmonium, the ties coming from the previous line look strangely
- asymmetric.
-
-
-. * Mondrup:
-
-- In some cases I don't get the large textsize within note examples I request.
-Consider for example the entry 'c clef', where \property Lyrics.textStyle = "large"
-used to give that result. It doesn't now. The large text sizes DO work in other cases,
-for example in the entry 'chord' (\property Voice.textStyle = "large"). To me it looks
-like the property Voice.textStyle is working while Lyrics.textStyle isn't. Consider
-for example the entry 'functional harmony' which has the same problem as 'chord'
-
-- I don't get full size clef changes upon issuing \property Voice.clefStyle =
-"fullSizeChanges", see for example the entry 'c clef'.
-
-- In the entry 'brace' the second note example using \context StaffGroup gets the
-staff bracket offset to the left page margin !! while the first note example behaves
-normally.
-
-- <p><img> in mudela-book
-. * mats
-
-If textStyle is set (in the \paper section), this setting
-applies also to dynamics.
-
-Also, the marginScriptPadding should be set by default to give
-a nice layout, but that's already been reported on the list.
-
-- What happened to the StaffGroup brackets?
- Try input/test/orchestscore.ly which worked fine in pl 27.
-
-- Why do I get bar numbers on every bar (both for the score
- and the parts)?
-
-- Bar numbers and marks are not printed on top of the staffs,
- but at one of the middle parts of the score. This may be
- related to the problem with the brackets, since the
- corresponding StaffGroup is the only one to get a bracket,
- even though it is misplaced horisontally.
-
-- The score extends too high on the page, it often overwrites the
- page number. LaTeX warns about overfull boxes. I'll take a look
- at the page layout.
-
-. * control paper-size/-file from commandline ?
- lilypond --paper=paper16 foo.ly
- lilypond --paper=paper20 foo.ly
- lilypond --paper=paper-as9 foo.ly
-. * detangle ly/* paper-params papersize stuff
-. * fix tremolos.
-. * change ) c4 to c4-)
-. * automated marks.
-. * There should be no pagebreak below the title of the movement!!
-. * tempo:
-
-> - Tempo Indications:
-> * \tempo 4 = 60 should be printed
-> * There should be commands like \alloegro that also do something
-> sensible in midi.
->
-. * - It should be possible to have Bar numbers on every bar.
-
-. * dynamics:
-> * Notes should be spaced out for crescendos (had to use c^" ")
-> * something like c-.->\ff looks ugly. The dynamc indication should
-> appear left of the marks
->
-. *
-There's insufficient leading between lines of lyrics, so risers like
-`l' and 'b' collide with the bottom of the line above.
-
-Also the lines are unevenly spaced.
-
-. * write comments in the source code
-. * internationalize GUILE msgs.
-. * roy rankin:
-1> The volta brackets are on top of the lyrics. This problem existed in
- 1.2.x which I corrected by giving the brackets a vertical size. I
- have not had the time to check what is going on in 1.3.
-
-2> Part names are being written on top of the staff and not in the
- left margin.
-
-3> The tag at the end is spaced out clear across the page. (new problem
- in 1.3.27)
-
-I also get the following error messages from ly2dvi.
-. * unbroken marks.
-. * chubb:
--- Take a piece of early music, and typeset it as closely as possible to
-the original edition. This means: moveable clefs, sometimes funny or no
-time signatures, few or no bar lines, few or no ties, slurs or
-phrasemarks, ornaments implied by the structure of the music, or
-indicated by, e.g., one or more thick lines through the stem of a note
-(Purcell and Farnaby both use this extensively, but with rather
-different meanings). For Dowland's music it may also mean being able
-to rotate one or more staves (but I can do this in LaTeX).
-
--- Add to this music a set of critical marks that:
- * regularises clef, time and key signature.
- * add slurs, phrase marks, articulation, etc.
- * Halve or quarter the durations, so that minims become crotchets, say.
- * add ornaments (mordents, trills, turns etc)
- * add regular barlines (which sometimes will mean splitting a note
- and adding a tie, e.g., in some of Byrd's music)
- * Add footnotes to particular symbols, groups of notes, etc.
- * When translating from chant notation, add a square bracket over a
- group of notes to indicate a ligature in the original
-etc.
- * Discretionary sharp or flat signs, for Musica Ficta
-
--- print out both editions from the same source.
-. * write smobifying howto.
-. * put property test files in refman.
-. * alignment within @itemize
-. * interstaff stems
-. * junk dstream output.
-. * Change website to be index to documentation.
-. * \grace { c d } c1 in midi
-. * \prop slurdir in grace notes
-. * Make fingering and playing instructions Music_wrappers?
-. * script columns
-. * Must stop before this music ends:
-verse=\lyrics {
-. * input/test/grace.sly: wierd big spacing on grace notes
-. * TODO^2:
-. * make a TODO.texi, like http://www.gnu.org/software/guile/ideas.html
-. * make this file understandable for 3rd parties.
-. * \accepts -> \acceptedby
-. * context in embedded SCM errors.
-. * acc at tied note after linebreak.
-. * fontSize for time sigs and beams.
-. * fix font-naming and selecting
-. * add context information to warnings
-Paper:
-waarschuwing: Kan niet beide uiteinden van bindingsboog vinden
-MIDI:
-pa.ly:33:23: waarschuwing: Schroot verzoek: `Span_req':
- g' a4 bes8 \grace f8(
- )es16 d es8 r c |
-. * chord tonic: placement of accidental C#, Cb (from scm and C++)
-. * note head on stem err msg in dutch.
-. * why need to run -C mf twice?
-. * here's no difference at all in output. When either is jacked up to 7.0,
-everything works and matches up; when either is set just a bit above the
-default 5.0 (5.4 is what I was hoping to use), stems miss note heads. So
-it's some sort of a numerical (truncation/roundoff) problem.
-John
-. * fix #'margin-shape; setting indent to 0 with \shape fails
-. * Fixed size staff/system heights;
-. * ly2dvi : don't repeat opus if same.
-. * hara kiri _8 clef.
-. * junk -M ?
-. * mudela-book doco
-. * bracket pdf hack
-. * Added StaffContents and RhythmicStaffContents context, they are
-between Staff (which groups the elements), and generates the Staff
-level elements (key, clef, meter, etc). This construction makes
-\consistsend redundant
-
-. * Mondrup:
-- if I change the property minVerticalAlign in a multi staff score with
-lyrics the change affects the lyrics too. I would like the change to
-_only_ affect staves.
-- after the leading measure in the above mentioned score I want a double
-bar line fully drawn across the staves and after that keep to the
-ChoirStaff bar line types in the rest of the scores
-. * Write script that uses --find-old-relative to do auto relativization.
-
-
-.* Cleanups needed
-. * \$ and $ identifier syntax in examples.
-. * Key_engraver, Local_key_item
-. * Think of comprehensive solution for "if (grace_b == self_grace_b_)"
-. * String[String.length] doesn't trap.
-. * Rhythmic_column and interaction stem/rhythmic_column/note_head/dots.
-. * clef engraver
-. * parser
-. * Lookup::text -> needs to be TeX independent.
-. * junk Music_iterator::first_b_
-
-.* ACCIDENTALS
-. * half-sharps, half-flats
-. * adaptive accidental spacing.
-. * accidentals closer to note head
-
-
-.* BEAMS
-. * [c8. c16 c16 c16] in 6/8 timesig.
-. * Rewrite Stem, Beam (hairy)
-. * beams over barlines
-. * autoBeamMelisma: if I explicitly beam notes in a staff with auto
-beaming disabled I would like to have these beams also to be
-melismatic.
-. * The stemLength property should affect also beamed stems.
-. * staffside spanner (crescendo!) along with staffswitch.
-. * * auto melismaBusy for beams.
-
-. * \context Staff <
-> {\voiceone''4. r8}
-> \voicetwo c,4 r4}
-> >
-. * \time forces keysig?
-
-.* STUFF
-. * We need feta-din*.mf files for more sizes than 10.
-. * align left edge of broken tuplet-spanner (have a test case?)
-. * fix dynamics decently, ie. use kerning & ligatures.
-. * key restorations & repeats
-. * paperXX.ly \quartwidth, font setting not up to date. (Should read from AFM?)
-. *In Caro Mio Ben, bar 8, there's a syllable that starts on a note, and
-ends on a pair of grace notes. Standard practice is to mark this with
-a slur starting on the main note and ending on the grace note, so a
-singer knows where to break the words.
-
-In bar 27, there's a crescendo that's supposed to start at the start
-of the grace notes and extend to the note after the grace notes.
-. * 4. Lyrics and grace sections don't go too well together.
- The words are aligned with the main note, not the start of the
- grace note. This is usually wrong, but is sometimes right.
-. * rhythmic staff & accidentals.
-. * use melismaBusy in Lyric context to typeset melismata correctly.
-. * ly2dvi/lilypond logfile.
-. * hang Item on Spanner
-. * do --safe for PS output?
-. * msgfmt -o check?
-. * collision of lyrics with span_bars. See star-spangled.
-. * It is impossible to typeset two textual scripts that are stacked
- on top of each other and avoids note collisions and at the same
- time are typeset with different textStyle. I tried to move around
- the text_engraver and other engravers between Voice and Thread
- but the granularity is not fine enough, the scripts have to
- share the same engraver in order to be get correct vertical
- position but than they cannot have different style.
- In my opinion, all scripts that share the same staff, should
- be stacked vertically, avoiding collisions with the notes
- in all voices.
-
-. * Matanya's tips:
-. * don't shorten stems/staffs closer to each other.
-. * to space the staffs/staffgroups contained in the score.
-. * heavier beams?
-. * Abstraction for engravers:
-. * make "in-between" engraver (Tie)
-. * make wide_spanner_engraver (line_group_spanner, staff_symbol)
-. * store req -> element, element -> element causes for warnings
-. * My wish list for lyrics. I dream of a time when I will have enough time to
-become familiar enough with the source code to be able to implement some of
-these myself, but I don't know when that will be, so I thought I'd "publish"
-my suggestions in case someone else is in a position to give them some
-priority. Otherwise, perhaps they could go on the todo list?
-
-If any of these are already implemented, please let me what the syntax is to
-use them!
-
-1. Stanza numbering. Numbering at the beginning of a song with the number
-set to the left of the first note. It would also be nice (but not as
-important) to be able to have some form of automatic numbering at the
-beginning of each new line. This would make it easier to follow songs with a
-large number of stanzas.
-
-3. Notes centred above/below lyrics rather than left-aligned.
-
-4. It would be very nice to be able to build some kind of phrasing into the
-lyrics of hymns, etc, so that the first words of a phrase are left aligned
-with each other, the last words are right aligned, and the words in between
-are centred.
-
-5. In a song, with (say) four stanzas and a chorus, it would be nice to be
-able to vertically align the chorus midway between the staves.
-
-6. It would be nice to be able to put vertical brackets either side of a
-repeated section with different words for each repeat.
-. * Give # lines in linebreaking.
-. * arrows on slurs.
-. * rewrite context defs using Scheme
-. * junk TeX specifics from internal code.
-. * \selectmusic to cut pieces from music.
-. * formatting of input stuff.
-. * deps for ly2dvi
-. * Align_element::padding ?
-. * use streambufs and iostream
-to provide IO handling for TeX stream, mudela stream, data-file.
-. * seriously buffer TeX output (do profile of writing .5 mb TeX file.)
-. * uniformise recent feta contributions.
-. * bigger and fatter 4/4 C
-. * relative mode for midi2ly
-. * junking \skip req in lyrics
-. * midi2ly empty staffs.
-. * use Fourier transformation for rhythmic quantisation.
-. * horizontal centering of dynamics
-. * $DEPENDENCIES_OUTPUT support
-. * turn slope-damping on/off
-. * sort out directory stuff.
-. * --prefix option?
-. * -I option per filetype?
-. * kpathsea?
-. * declaring Performers
-. * text-items clash with stems/beams
-. * --include, -I option for ly2dvi (pass on to lily)
-. * fix placement of beam-less abbrev
-. * Musical_pitch (analogous to Duration and Rhythmic_req)
- think about, analogous to pitch:
- * { a4 a16 } c <-- duration of c?
- * < a4 b8 > c <-- duration of c?
-. * \tempo 4. = 90;
-. * do rest-collisions for Multi_measure_rests as well.
-. * split error/warning in error/warning/non_fatal_error
-. * discourage breaking of slurs
-. * fix variable define/lookup parser global<->paper
-. * fix title/instrument placements; see input/test/title.ly
-. * <\voiceone c4. \voicetwo c4>
-. * I'd like to change the \repetitions command to Jan's suggested
- syntax: \repeat "repeatsymbol" 2 {...}, but I'm not sure that
- I understand the implementation of repeats well enough.
-. * add mudela-book-doc source to webstie.
-. * fix singleStaffBracket
-. * move paper vars into engraver properties
-. * add new glyphs to font.ly
-. * more intelligent file searching
-. * disable spaces in TeX stuff
-. * handle ^C for tmp/file creation.
-. * make LilyPond RPM fully relocatable
-. * didot / big point.
-. * clefs (AG): The "8" should appear closer to the actual clef,
-touching it.
-. * put errorlevel in Input class
-. * junk nesting slurs
-
-
-.* FONT
-. * the bracket is ugly (wings are too parabolic, should be more circular)
-. * fix accordion turning paths.
-. * versioning for Feta
-. * rewrite dynamic signs. They're kind of spaghetti now.
-. * The `3' in the meter key is a one or two pixels too thin (at 600dpi)
- in the middle:
-. * design macro for penstroke with rounded endings
-. * timesig C: fat yet less curved. Check out relations.
-. * design decent macro for bulbed endings
-. * printer dependencies.
-. * versioning
-. * lo-res fixes.
-. * work out sizes of character fonts.
-. * more symbols
-. * piano pedals: Ped/*
-. * coda signs: Segno, O+
-. * glissando, arpeggio
-. * lengthened trill
-. * include important spacing dims in fetalog
-. * scalability: use blot_diameter everywhere, make font chubbier for
- small sizes.
-
-.* 3RD PARTY BUGS
-. * UMR: Uninitialized memory read
- This is occurring while in:
- qst [qsort.c]
- qsort [libc.so.1]
- Keyword_table::Keyword_table(Keyword_ent*) [keyword.cc:28]
- My_lily_lexer::My_lily_lexer() [my-lily-lexer.cc:78]
- My_lily_parser::parse_file(String,String) [my-lily-parser.cc:54]
- do_one_file(String,String) [scores.cc:124]
- Reading 4 bytes from 0xefffeca8 on the stack.
- Address 0xefffeca8 is 728 bytes below frame pointer in function
-. * patch: don't touch timestamp if all patches fail.
-. * MetaPost: should not generate setgray for unfill
-. * glibc 2.0:
- f = fopen ("/dev/null", "r")
- assert (feof (f))
-. * Texinfo, add [ A | B | C ] style tocs to .html output, and don't rely
- on @node names for html tocs.
-
-.* PROJECTS
-. * Scripts:
-. * stack scripts in chords:
- % fingering: footing:
- < a-4 c-2 g-1 > < c-\ltoe e-\lheel >
-. * script-spacing
-. * slur parts as a script
-. * stack parameterised scripts for fingering and footing:
-
-. * convert-mudela:
-. * better parsing
-. * make smarter
-. * convert-mudela -e empty.ly
-
-. * emacs mudela-mode
-. * should handle block comments too.
-. * handle lexer modes (\header, \melodic, \lyric) etc.
-. * indentation
-. * notenames?
-. * fontlock: \melodic \melodic
-
-. * use properties for:
-. * default tempo.
-
-. * page handling:
-. * PS output
-. * optimal pagebreaking.
-
-. * internationalisation for input.
-. * Unicode support? -> man 7 unicode
-. * (The explanation below is mostly intended for Han-Wen and Jan)
-> Before, the font was changed with macros declared separately for
-> pure TeX and LaTeX, but now all the fonts are declared directly in
-> the generated code using the low-level TeX commands. This circumvents
-> the fontencoding mechanism of LaTeX and is a potential source of
-> problems also for us users of the Latin-1 character set.
-> I think it still works since the inputencoding latin1 is
-> declared by ly2dvi, but it still means that e.g. an o with
-> umlaut is typeset as a combination of the two symbols 'o' and
-> 'umlaut' instead of as a single character, as would be the case
-> if fontencoding OT1 had been used. This shouldn't give any
-> difference in layout, though. One of the main argument for using
-> fontencoding OT1 is for the hyphenation mechanism to work, an
-> argument that's clearly irrelevant in our application. Yet we
-> see the problem for August.
-
-. * \header
-. * output header info to MIDI too.
-. * dump \header into easily parsable format.
-
-. * chords
-. * guitar chords (fret diagrams)
-. * other chord name styles (american(?) style)
-. * basso continuo
-. * MIDI output?
-
-. * Debug logs:
-. * derive lily_stream, Dstream, texstream from ostream?
-. * indentable stream as baseclass for TeX stream, lily stream, Dstream.
-. * use dstream feature in midi2ly
-. * integrate IO checking into stream class
-
-. * input converters
-. * NIFF?
-. * musedata
-
-. * add to MIDI output:
-. * sharp / flat on trills (in MIDI ??)
-. * ornaments (and trills?)
-. * slurs
-. * accents
-. * dynamics
-. * account for rhythmic position in measure
-. * etc.
-
-
-. * logfile output?
-
-. * PS
-. * speed up PS code.
-. * PS lines to .eps files
-. * write custom prolog
-. * fix ps font switching
-
-. * more spanners (smallish)
-. * Glissando
-. * trill
-
-. * Keys:
-. * merge key{item} & localkey{item}?
-. * spacing
-
-. * Support for TAB
-. * redo Notehead to allow digits as heads
-. * add a \tablature {} lexer mode for easy entering
-
-. * should adjust stemlength for flag number.
-
-. * breaking:
-. * specify number of lines
-
-.* INPUTLANGUAGE
-. * convention for slurs vs. phrasing marks.
-. * Language:
-. * \translator -> ?
-. * fix \partial
-. * \bla {} vs \bla ;
-. * \once\property KEY = VAL
-. * input property
-. * Figure out semicolons.
-. * <c f a>4 ?
-. * configure pitch_byte
-. * rest name configurable
-
-
-.* SMALLISH PROJECTS
-
-. * lyric in staff (sharpsharp in staff, text below)
-
-. * write Dynamic_line (to group dynamics horizontally)
-
-. * handle EOF graciously in error messages.
-
-. * midi esp.: use I32 iso int where 32 bits are needed (or assumed...)
-
-. * lily \tempo
-
-. * % toe to bheel four to five
- % ^_u 4_5
- % -
- % --|x-- --|x--
- % --|--- --|---
- % --|--- --|---
- (where "to" is a tiny bow)
-
-. * Text_crescendo
-
-.* IDEAS
-. * Output data structures of Mudela in XML/SGML.
-. * create libmudela, or liblily_frontend
-. * move MIDI stuff (including Quantization) to a ANSI C libmidi library.
-
-* OUTLINE SETUP
-.* .EMACS
-;;; from outline.el
-(defvar outline-font-lock-keywords
- '(;; Highlight headings according to the level.
- ;; must change this to allout node layout
- ;;("^\\(\\*+\\)[ \t]*\\(.+\\)?[ \t]*$"
- ("^\\([.]*[ ]*[*]\\)[ \t]*\\(.*\\)$"
- (1 font-lock-string-face)
- (2 (let ((len (- (match-end 1) (match-beginning 1))))
- (or (cdr (assq len '((1 . font-lock-function-name-face)
- (2 . font-lock-keyword-face)
- (3 . font-lock-comment-face))))
- font-lock-variable-name-face))
- nil t))
- ;; Highlight citations of the form [1] and [Mar94].
- ("\\[\\([A-Z][A-Za-z]+\\)*[0-9]+\\]" . font-lock-type-face))
- "Additional expressions to highlight in Outline mode.")
-
-(add-hook 'outline-mode-hook
- '(lambda ()
- (setq font-lock-maximum-decoration t)
- (setq font-lock-maximum-decoration t)
- (make-local-variable 'font-lock-defaults)
- (setq font-lock-defaults '(outline-font-lock-keywords t))
- (font-lock-mode global-font-lock-mode)
- ))
-
-(require 'allout)
-(outline-init 't)
-
-
+[see http://www.cs.uu.nl/people/hanwen/lily-devel/index.html]
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=30
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=31
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
+++ /dev/null
-#ifndef UNIONFIND_HH
-#define UNIONFIND_HH
-#include "array.hh"
-
-/**
- which points of a graph are connected?.
- Union find, a standard algorithm:
-
- Union_find represents an undirected graph of N points. You can
- connect two points using #connect()#. #find (i)# finds a uniquely
- determined representant of the equivalence class of points
- connected to #i#.
-
- */
-struct Union_find {
- void connect (int i, int j);
- int find (int i);
- bool equiv (int i, int j) { return find (i) == find (j); }
- Union_find (int sz);
-
- /**
- This array provides the representing point for each node in the graph.
- */
- Array<int> classes_;
-};
-#endif
+++ /dev/null
-#include "unionfind.hh"
-/*
- see a book on data structures
- */
-
-Union_find::Union_find (int n)
-{
- classes_.set_size (n);
-
- for (int i=0; i < n; i++)
- {
- classes_[i] = i;
- }
-}
-
-int
-Union_find::find (int i)
-{
- int rep = i;
- while (classes_[rep] != rep)
- rep = classes_[rep];
- while (classes_[i] != rep)
- {
- int next =classes_[i];
- classes_[i] = rep;
- i = next;
- }
- return rep;
-}
-
-void
-Union_find::connect (int i, int j)
-{
- i = find (i);
- j = find (j);
- classes_[i] = j;
-}
--- /dev/null
+\score{
+\notes\relative c''{
+a1\fff\< \!a
+a\> \!a
+\property Voice.crescendoText = "cresc."
+\property Voice.crescendoSpanner = "dashed-line"
+a\mf\cresc \endcresc a
+%a\decresc \enddecresc a
+a1\< \!a
+a\> \!a
+}
+\paper{
+}
+\midi{
+\tempo 1 = 60;
+}
+}
--- /dev/null
+\score{
+\notes\relative c''{
+a1\ppp\<
+a
+a
+a
+a
+a
+a
+\!a\fff
+}
+\paper{
+}
+\midi{
+\tempo 1 = 60;
+}
+}
Drul_array<bool> broken;
Direction d = LEFT;
- do {
- Paper_column* s = dynamic_cast<Paper_column*>(spanned_drul_[d]); // UGH
- broken[d] = (!s->musical_b ());
- } while (flip (&d) != LEFT);
+ do
+ {
+ Paper_column* s = dynamic_cast<Paper_column*>(spanned_drul_[d]); // UGH
+ broken[d] = (!s->musical_b ());
+ }
+ while (flip (&d) != LEFT);
- bool continued = broken[Direction (-gd)];
- Real height = paper_l()->get_var ("crescendo_height");
- Real thick = paper_l ()->get_var ("crescendo_thickness");
-
- const char* hairpin = (gd < 0)? "decrescendo" : "crescendo";
-
- Box b (Interval (0, width),
- Interval (-2*height, 2*height));
-
- SCM at = gh_list (ly_symbol2scm (hairpin),
- gh_double2scm (thick),
- gh_double2scm (width),
- gh_double2scm (height),
- gh_double2scm (continued ? height/2 : 0.0),
- SCM_UNDEFINED);
-
+ SCM at;
+ SCM s = get_elt_property ("spanner");
+ Real height;
+ if (gh_string_p (s) && ly_scm2string (s) == "dashed-line")
+ {
+ Real thick = paper_l ()->get_var ("crescendo_dash_thickness");
+ Real dash = paper_l ()->get_var ("crescendo_dash");
+ height = thick;
+ at = gh_list (ly_symbol2scm (ly_scm2string (s).ch_C ()),
+ gh_double2scm (thick),
+ gh_double2scm (dash),
+ gh_double2scm (width),
+ SCM_UNDEFINED);
+ }
+ else
+ {
+ bool continued = broken[Direction (-gd)];
+ height = paper_l()->get_var ("crescendo_height");
+ Real thick = paper_l ()->get_var ("crescendo_thickness");
+
+ const char* hairpin = (gd < 0)? "decrescendo" : "crescendo";
+
+ at = gh_list (ly_symbol2scm (hairpin),
+ gh_double2scm (thick),
+ gh_double2scm (width),
+ gh_double2scm (height),
+ gh_double2scm (continued ? height/2 : 0.0),
+ SCM_UNDEFINED);
+ }
+
+ Box b (Interval (0, width), Interval (-2*height, 2*height));
Molecule m (b, at);
m.translate_axis (extra_left, X_AXIS);
/*
TODO:
- multiple type of span dynamic:
+ * why handle absolute and span requests in one cryptic engraver,
+ what about Span_dynamic_engraver?
+
* hairpin
* text:
- `cresc. -- -- --'
*/
class Dynamic_engraver : public Engraver
{
- Text_item * text_p_;
+ Text_item * abs_text_p_;
+ Text_item * cr_text_p_;
Crescendo * to_end_cresc_p_;
Crescendo * cresc_p_;
Dynamic_engraver::Dynamic_engraver()
{
do_post_move_processing();
- text_p_ =0;
-
+ abs_text_p_ = 0;
+ cr_text_p_ = 0;
to_end_cresc_p_ = cresc_p_ = 0;
-
cresc_req_l_ = 0;
}
if (Text_script_req *absd =
dynamic_cast<Text_script_req *> ( dynamic_req_l_arr_[i]))
{
- if (text_p_)
+ if (abs_text_p_)
{
dynamic_req_l_arr_[i]->warning (_("Got a dynamic already. Continuing dazed and confused."));
continue;
String loud = absd->text_str_;
- text_p_ = new Text_item;
- text_p_->set_elt_property ("text",
+ abs_text_p_ = new Text_item;
+ abs_text_p_->set_elt_property ("text",
ly_str02scm (loud.ch_C()));
- text_p_->set_elt_property ("style", gh_str02scm ("dynamic"));
- text_p_->set_elt_property ("script-priority",
+ abs_text_p_->set_elt_property ("style", gh_str02scm ("dynamic"));
+ abs_text_p_->set_elt_property ("script-priority",
gh_int2scm (100));
- Side_position_interface (text_p_).set_axis (Y_AXIS);
+ Side_position_interface (abs_text_p_).set_axis (Y_AXIS);
if (absd->get_direction ())
{
- text_p_->set_elt_property ("direction", gh_int2scm (absd->get_direction ()));
+ abs_text_p_->set_elt_property ("direction", gh_int2scm (absd->get_direction ()));
}
}
if (isdir_b (prop) && to_dir (prop))
- text_p_->set_elt_property ("direction", prop);
+ abs_text_p_->set_elt_property ("direction", prop);
prop = get_property ("dynamicPadding");
if (gh_number_p(prop))
{
- text_p_->set_elt_property ("padding", prop);
+ abs_text_p_->set_elt_property ("padding", prop);
}
- announce_element (Score_element_info (text_p_, absd));
+ announce_element (Score_element_info (abs_text_p_, absd));
}
else if (Span_req *span_l
= dynamic_cast <Span_req *> (dynamic_req_l_arr_[i]))
cresc_req_l_ = span_l;
assert (!new_cresc_p);
new_cresc_p = new Crescendo;
- new_cresc_p
- ->set_elt_property ("grow-direction",
- gh_int2scm ((span_l->span_type_str_ == "crescendo") ? BIGGER : SMALLER));
+ new_cresc_p->set_elt_property
+ ("grow-direction",
+ gh_int2scm ((span_l->span_type_str_ == "crescendo")
+ ? BIGGER : SMALLER));
+ SCM s = get_property (span_l->span_type_str_ + "Text");
+ if (gh_string_p (s))
+ {
+ cr_text_p_ = new Text_item;
+ cr_text_p_->set_elt_property ("text", s);
+ // urg
+ cr_text_p_->set_elt_property ("style", gh_str02scm ("italic"));
+ // ?
+ cr_text_p_->set_elt_property ("script-priority",
+ gh_int2scm (100));
+
+ /*
+ This doesn't work.
+ I'd like to have support like this:
+ |
+ x|
+ cresc. - - -
+
+ or
+ |
+ x|
+ ff cresc. - - -
+
+ */
+ if (0) //abs_text_p_)
+ {
+ Side_position_interface (cr_text_p_).set_axis (X_AXIS);
+ Side_position_interface (cr_text_p_).add_support (abs_text_p_);
+ }
+ //Side_position_interface (cr_text_p_).set_axis (Y_AXIS);
+ announce_element (Score_element_info (cr_text_p_, span_l));
+ }
+
+ s = get_property (span_l->span_type_str_ + "Spanner");
+ if (gh_string_p (s)) //&& ly_scm2string (s) != "hairpin")
+ {
+ new_cresc_p->set_elt_property ("spanner", s);
+ }
+
side_position (new_cresc_p).set_axis (Y_AXIS);
announce_element (Score_element_info (new_cresc_p, span_l));
}
cresc_p_ = new_cresc_p;
cresc_p_->set_bounds(LEFT,get_staff_info().musical_pcol_l ());
- if (text_p_)
+ // arrragh, brr, urg: we know how wide text is, no?
+ if (abs_text_p_)
{
index_set_cell (cresc_p_->get_elt_property ("dynamic-drul"),
LEFT, SCM_BOOL_T);
}
- if (text_p_)
+ if (abs_text_p_)
+ {
+ typeset_element (abs_text_p_);
+ abs_text_p_ = 0;
+ }
+
+ if (cr_text_p_)
{
- typeset_element (text_p_);
- text_p_ =0;
+ typeset_element (cr_text_p_);
+ cr_text_p_ = 0;
}
}
|| dynamic_cast<Note_head *> (i.elem_l_)
)
{
- if (text_p_)
- Side_position_interface (text_p_).add_support (i.elem_l_);
+ if (abs_text_p_)
+ Side_position_interface (abs_text_p_).add_support (i.elem_l_);
+
+ if (cr_text_p_) ///&& !abs_text_p_)
+ {
+ Side_position_interface (cr_text_p_).set_axis (Y_AXIS);
+ Side_position_interface (cr_text_p_).add_support (i.elem_l_);
+ }
if (to_end_cresc_p_)
Side_position_interface (to_end_cresc_p_).add_support (i.elem_l_);
bool
Tie_performer::do_try_music (Music *m)
{
- if (Tie_req * c = dynamic_cast<Tie_req*> (m))
+ if (!req_l_)
{
- req_l_ = c;
- return true;
+ if (Tie_req * c = dynamic_cast<Tie_req*> (m))
+ {
+ req_l_ = c;
+ return true;
+ }
}
return false;
}
Real ry = rint (y/staff_space) * staff_space;
Real diff = ry - y;
Real newy = y;
- if (fabs (diff) < paper_l ()->get_var ("tie_staffline_clearance"))
+ if (fabs (y) <= 2.0
+ && fabs (diff) < paper_l ()->get_var ("tie_staffline_clearance"))
{
newy = ry - 0.5 * staff_space * sign (diff) ;
}
crescendo_shorten = 4.0 * \staffspace;
crescendo_thickness = \stafflinethickness;
crescendo_height = 0.666 * \staffspace;
+crescendo_dash_thickness = 1.2*\stafflinethickness;
+crescendo_dash = 4.0*\staffspace;
% in internote.
restcollision_minimum_dist = 3.0;
\consists "Key_performer";
\consists "Time_signature_performer";
\consists "Tempo_performer";
+% \consists "Span_dynamic_performer";
dynamicStyle = #"dynamic"
};
\translator { \StaffContext }
\name Voice;
% All notes fall to Grace if you leave Thread out (huh?)
\consists "Dynamic_performer"; % must come before text_engraver.
+ \consists "Span_dynamic_performer";
\consists "Grace_position_performer";
\accepts Thread;
\accepts Grace;
emptyText = \property Voice.textEmptyDimension = ##t
fatText = \property Voice.textEmptyDimension = ##f
+
decr = \spanrequest \start "decrescendo"
rc = \spanrequest \stop "crescendo"
rced = \spanrequest \stop "decrescendo"
+
+%% urg, these don't work yet.
+xcresc = {
+%\spanrequest \start "crescendo"
+\property Voice.crescendoText = "cresc."
+\property Voice.crescendoSpanner = "dashed"
+}
+
+xendcresc = {
+%\spanrequest \start "crescendo"
+\property Voice.crescendoText = ##f
+\property Voice.crescendoSpanner = ##f
+}
+
+cresc = \spanrequest \start "crescendo"
+endcresc = \spanrequest \stop "crescendo"
+
+%crescpoco = \property Voice.crescendoText = "cresc. poco a poco"
+%decresc = \property Voice.crescendoText = "decr."
+%dim = \property Voice.crescendoText = "dim."
local-WWW: $(ly_examples) $(fly_examples) $(ps_examples) $(png_examples)
# (cd $(outdir); $(PYTHON) ../$(buildscripts)/mutopia-index.py --prefix=../ --suffix=/$(outdir) $(html_subdirs) $(all_examples))
-# echo $^ > $(depth)/wwwlist
# $(footify) $(outdir)/index.html
local-web:
Begin3
Title: LilyPond
-Version: 1.3.30
-Entered-date: 06MAR00
+Version: 1.3.31
+Entered-date: 09MAR00
Description:
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.3.30.tar.gz
+ 1000k lilypond-1.3.31.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.30.tar.gz
+ 1000k lilypond-1.3.31.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.30
+Version: 1.3.31
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.30.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.31.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
# get Packager from (undocumented?) ~/.rpmmacros!
} bind def
%
% this is for drawing slurs.
-/draw_bezier_sandwich % thickness
+/draw_bezier_sandwich % thickness controls
{
setlinewidth
moveto
stroke
} bind def
%
-/draw_dashed_slur
+/draw_dashed_line % dash thickness width
+{
+ 1 setlinecap
+ 1 setlinejoin
+ setdash
+ setlinewidth
+ 0 0 moveto
+ 0 lineto
+ stroke
+} bind def
+%
+/draw_dashed_slur % dash thickness controls
{
1 setlinecap
1 setlinejoin
(define (char i)
(string-append "\\char" (inexact->string i 10) " "))
+ (define (dashed-line thick dash w)
+ (embedded-ps ((ps-scm 'dashed-line) thick dash w)))
+
(define (decrescendo thick w h cont)
(embedded-ps ((ps-scm 'decrescendo) thick w h cont)))
(define bracket ,bracket)
(define char ,char)
(define crescendo ,crescendo)
+ (define dashed-line ,dashed-line)
(define dashed-slur ,dashed-slur)
(define decrescendo ,decrescendo)
(define end-output ,end-output)
((eq? action-name 'tuplet) tuplet)
((eq? action-name 'bracket) bracket)
((eq? action-name 'crescendo) crescendo)
+ ((eq? action-name 'dashed-line) dashed-line)
((eq? action-name 'dashed-slur) dashed-slur)
((eq? action-name 'decrescendo) decrescendo)
((eq? action-name 'end-output) end-output)
(number->string (* 10 thick)) ;UGH. 10 ?
" ] 0 draw_dashed_slur"))
+ (define (dashed-line thick dash width)
+ (string-append
+ (number->string width)
+ " "
+ (number->string thick)
+ " [ "
+ (number->string dash)
+ " "
+ (number->string dash)
+ " ] 0 draw_dashed_line"))
+
(define (decrescendo thick w h cont)
(string-append
(numbers->string (list w h (inexact->exact cont) thick))
(define crescendo ,crescendo)
(define volta ,volta)
(define bezier-sandwich ,bezier-sandwich)
+ (define dashed-line ,dashed-line)
(define dashed-slur ,dashed-slur)
(define decrescendo ,decrescendo)
(define end-output ,end-output)
((eq? action-name 'bracket) bracket)
((eq? action-name 'char) char)
((eq? action-name 'crescendo) crescendo)
+ ((eq? action-name 'dashed-line) dashed-line)
((eq? action-name 'dashed-slur) dashed-slur)
((eq? action-name 'decrescendo) decrescendo)
((eq? action-name 'experimental-on) experimental-on)
local-WWW: $(OUTHTML_FILES)
- echo $^ > $(depth)/wwwlist
local-web:
$(MAKE) CONFIGSUFFIX=www local-WWW
$(MAKE) CONFIGSUFFIX='www' -C Documentation WWW
rm -f `find . -name \*.html~ -print`
$(footify-all-command)
- find `find Documentation -type d -name 'out-www'` -not -name '*dvi' -not -name '*ly' -not -name '*tex' -not -name '*.ps' -not -name 'out-www' > wwwlist
+ find `find Documentation -type d -name 'out-www'` -not -name '*dvi' -not -name '*ly' -not -name '*tex' -not -name '*.ps' -not -name 'out-www'
tar cfz $(outdir)/htmldoc.tar.gz `cat wwwlist` `ls *.png $(ERRORLOG)` index.html
localclean:
- rm -f wwwlist
+
# if you fix this, please fix yodl too!
check-top-web: