From: fred Date: Thu, 2 Sep 1999 00:17:49 +0000 (+0000) Subject: lilypond-1.3.0 X-Git-Tag: release/1.5.59~5779 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=875baf0213e7d043a3c52b02b7a9296cf94eef82;p=lilypond.git lilypond-1.3.0 --- diff --git a/Documentation/pictures/lelie-icon.xpm b/Documentation/pictures/lelie-icon.xpm new file mode 100644 index 0000000000..0ad7f75dc1 --- /dev/null +++ b/Documentation/pictures/lelie-icon.xpm @@ -0,0 +1,141 @@ +/* XPM */ +static char *noname[] = { +/* width height ncolors chars_per_pixel */ +"50 71 63 2", +/* colors */ +"`` c #666664", +"`a c #F2F2F4", +"`b c #5E5E5C", +"`c c #EAEAEC", +"`d c #565654", +"`e c #E2E2E4", +"`f c #4E4E4C", +"`g c #DADADC", +"`h c #464644", +"`i c #D2D2D4", +"`j c #3E3E3C", +"`k c #CACACC", +"`l c #363634", +"`m c #C2C2C4", +"`n c #2E2E2C", +"`o c #BABABC", +"`p c #262624", +"`q c #B2B2B4", +"`r c #1E1E1C", +"`s c #AAAAAC", +"`t c #161614", +"`u c #A2A2A4", +"`v c #0E0E0C", +"`w c #9A9A9C", +"`x c #060604", +"`y c #929294", +"`z c #8A8A8C", +"a` c #828284", +"aa c #7A7A7C", +"ab c #727274", +"ac c #6A6A6C", +"ad c #626264", +"ae c #5A5A5C", +"af c #525254", +"ag c #4A4A4C", +"ah c #424244", +"ai c #3A3A3C", +"aj c #323234", +"ak c #2A2A2C", +"al c #FEFEFC", +"am c #222224", +"an c #F6F6F4", +"ao c #1A1A1C", +"ap c #EEEEEC", +"aq c #121214", +"ar c #E6E6E4", +"as c #0A0A0C", +"at c #DEDEDC", +"au c #D6D6D4", +"av c #CECECC", +"aw c #C6C6C4", +"ax c #BEBEBC", +"ay c #B6B6B4", +"az c #AEAEAC", +"b` c #A6A6A4", +"ba c #9E9E9C", +"bb c #969694", +"bc c #8E8E8C", +"bd c #868684", +"be c #7E7E7C", +"bf c #767674", +"bg c #6E6E6C", +"bh c #FAFAFC", +/* pixels */ +"alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal", +"alalbhbhalalbhalalbhalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal", +"alalalbhbhalalbhalalalalalalalalalalalalalalalalalal`o`ya``s`wbhalalalalalalalalalalalalalalalalalal", +"bhalalalalalbhalalalalalalalalalalalalalalalalalal`a`malalalap`obb`malalalalal`cax`galalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalalalalalalbcalbhalalalalalax`ialalal`gauav`u`ealalalalalalal", +"alalalalalalalbhalalalalalalalalalalalalalalalalawar`ialalalalalalalaxapalalbaacat`i`oalalalalalalal", +"alalbhalalalalbhalalalalalalalalalalalalalalalalazal`sbhalalalalalalalayalbh`eba`iapavalalalalalalal", +"albhalbhalalalalalalalalalalalalalalalalalalalal`oatalb``aalalalalalal`oanazazanbhayalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalalalanawal`salalbaalalalalalalalazaa`cav`oalalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalalapawalalaranal`i`qalalalalalalbeayazbcbcalalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalal`g`oapalalalalal`yalalalalal`gbbabbhapalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalalal`sanalalalalalbdalalalalalbc`obbalalalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalalapaaanalalalalal`qatan`ealax`sbbazalalalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalal`kab`oalalalalalau`uaw`salbb`ua`bcalalalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalalalayalalalalalalan`ea`axax`oba`oazaxaralalalalalalalalalalal", +"alalalalalalalalalalapbhalalalalalalalalalaybhalalalalan`s`sazav`gaz`qbdalalazalalalalalalalalalalal", +"alalalalalalalalalalax`u`aalalalalalalalalaraw`o`c`c`aaxaw`g`kav`sayb`ayalal`m`calalalalalalalalalal", +"alalalalalalalalalalal`c`sbhalalalalalalalalalal`c`jb`albh`yavapazay`w`ialalalay`aalalalalalalalalal", +"alalalalalalalalalalalalar`qbhalalalalalalalalalal`v`sav`abcaubbaw`u`salalalalalayapalalalalalalalal", +"alalalalalalalalalalalalal`i`kalalalalalalalalalal`l`way`uau`cazazazbc`q`ialalalal`galalalalalalalal", +"alalalalalalalalalalalalalalaw`galalalalalalan`i`m`hbe`q`oap`w`m`uax`ialax`salalalalalalalalalalalal", +"alalalalalalalalalalalalalalal`oatalalalbh`kbaadagad```oav`i`mb`ba`ualalal`i`oalalalalalalalalalalal", +"alalalalalalalalalalalalalalalanaz`aalanaz`nag`ian`w`k`iar`waw`o`o`ialalalalau`ialalalalalalalalalal", +"alalalalalalalalalalalalalalalalapba`c`zakac`aalau`calapaz`gbabb`qbhalalalalal`ualalalalalalalalalal", +"alalalalalalalalalalalalalalalalal`ibdambd`c`aalalalal`a`yax`kb``u`aalalalalal`e`kalalalalalalalalal", +"alalalalalalalalalalalalalalalalarbcajbf`q`kalalalalal`w`c`sbc`k`e`kalalalalalal`salalalalalalalalal", +"alalalalalalalalalalalalalalalalawaoaibbaw`kalalalalapbaaw`gb`baalaualalalalalal`salalalalalalalalal", +"alalalalalalalalalalalalalalal`cbgaq`y`q`o`ialalalal`wbh`sba`g`oalaralalalalalal`ualalalalalalalalal", +"alalalalalalalbhbhalalalalalalar`v`lbfazap`qapalal`gaz`k`e`y`u`galbhalalalalalalb`alalalalalalalalal", +"alalalalalalalalalalalalalalalbb`x`l`qayalap`u`aala`al`u`q`ebebhalbhalalalalalalb`alalalalalalalalal", +"alalalalalalalalalalalalalalal`gao`hayazalalapb``kax`iaubeaybaalalalalalalalalalbaalalalalalalalalal", +"alalalalalalalalalalalalalalalalbdahba`galalalatbcalbb`maxbeatalalalalalalalalalbaalalalalalalalalal", +"alalalalalalalalalalalalalalalalau`jb``calbhalal`k`oaw`zapbfalalalalanalalalalal`salalalalalalalalal", +"alalalalalalalalalalalalalalalal`aad`malalbbalalal`o`kbb`y`ialalalal`walalalalal`qalalalalalalalalal", +"alalalalalalalalalalalalalalalalalbebaalapbfalalalbhbb`c`dalalalalalagalalalalap`oalalalalalalalalal", +"alalalalalalalalalalalalalalalalalbb`ialalajalalalalap`w`walalalalaxaaalalalal`qalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalazalalalbf`aalalalalbaayanalalalbg`ealalalbh`qalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalaxalalalbebhalalal`c`s`saxalalal``alalalalaybhalalalalalalalalalal", +"alalalalalalalalalalalalalalalalal`oalalal`ealalalalbb`eaw`uawalalawalbhalataualalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalanalalalalalalalal`wb`alayb``malalal`sal`oalalalalalalalalalalalal", +"alalalalalalalalalalalalalalalalalalalal`galalalal`q`g`wauaraz`yalalaxapalbhalalalalalalalalalalalal", +"alalalalbhalalalalbhalalalalbhbhalalbhal`salalalal`waw`kay`kapb`al`k`galalalbhbhbhbhbhalalalalalalal", +"albhbhalbhalalalalbhalalalalalbhalalal`i`malalbhar`sbdal`q`oalalal`walalbhalalalalalbhalalalalalalal", +"bhalalalalalalalalalalalbhalalal`ialalanavalalalbcalbbat`g`qalbhar`qalalalalalalalalalbhbhbhbhbhbhal", +"alalalalbhbhbhalalbhbhalalalal`mbealbhalawalalalbd`iat`oaratalal`yalbhalalalalalalalalalalalalalbhal", +"alalbhalalalalbhalalalalbhbhal`najalal`aarbhal`s`eazalazazalal`cb`alalalbhbhbhbhbhalalalalalalalalal", +"bhalbhalalalalbhalalalalalalbbas`naralalalalal`yalazarauayalalbaa`albhalalalalalbhalalalalalalalbhal", +"alalalalalalalalalalbhalal`aaq`r`hbdalalalalaraz`m`aazan`mal`ebd`jalalalalalalalalbhbhbhbhbhbhalalal", +"alalbhbhbhalalbhbhalalalalaa`vah`d`d`calbhalbaal`qal`o`obhalbhbd`ray`i`gbhalalalalalalalalalbhalbhal", +"bhalalalalbhalalalalbhalal`v`t`lah```ualalalbaan`q`cavaxalalatbeai`hauaw`waz`kav`ialalalalalalalalal", +"bhalalalalbhalalalalal`aap`x`tahafbb`ybdalavat`sbh`sal`qalal`c`qafam`faab`axauav`i`s`oaualalbhalbhal", +"alalalalalalalanaxax`s`q`gasao`pbebabb`ubd`walb`al`oavapalalbhaybeagaq`n`sauaw`i`iapat`kayauapalalal", +"bhbhbhalalav`kazarauayay`sad`r`facae`mazaubgb``sbh`m`oalalalalavbbaeai`j`oav`g`oatau`c`g`a`eb`azanal", +"alalalat`o`e`mavayavauarawayaq`lbf`yb``e`zap`yawbd`qayalalalap`ibcad`j`jbb`i`gapal`cal`iatau`gar`o`c", +"alal`eavalbh`g`g`g`ialanaral`b`vabbd`u`ibd`e`ual`o`ea`bbbdbcb`arb````la``uap`i`cavapalarav`catav`c`q", +"al`eavar`aanar`gavatayavaranatasae`wbcawax`iaval`calalalalalalaybcaf`hbb`garan`g`c`g`i`eatauatau`oap", +"al`s`a`carau`capanal`gapanbhal`s`ragbc`e`k`walalalalalalal`cap`oa`bfbgarauauan`g`i`e`c`c`a`g`cauatal", +"al`e`qay`s`i`eanarau`matau`cauau`s`ta`bd`sawalbhalalbhalapatav`s`f`baxalanat`aananan`eawat`max`aalal", +"bhalbhawavbh`aavar`e`gawawau`k`i`c`i`h`d`y`ealalbhalalalalapauaxb`avan`carbhan`gau`aan`iax`ebhalalal", +"alalalalan`uawawal`g`e`e`oatavat`q`ganbb`babbhalalap`ubbb`bb`z`u`gaparbhbhalanaw`iavax`cbhalalalbhal", +"albhalbhalalbhanax`oaw`m`i`m`m`kbhalalalap`obaavalbhan`aan`aalalalalapaxawaw`oapanbhalalalalalalbhal", +"alalalalalalalalalalananbhanbhalalalalalalalan`gb``qawavaxau`m`o`o`s`eananalalalalalalalalalalalalal", +"alalalalalalbhbhbhalalalalalalalalbhalbhalalalalalalbhbhanbhalalalalalalalalalalalalalalalbhalalalal", +"albhalalalbhalalalalalalalalbhbhbhalalalbhalbhalalalalalalalbhalalalalalalalalalbhalalalbhalalalbhal", +"alalbhbhalalalalalbhalbhalalalalalalalalbhalalbhalalalalbhalalalbhalalbhbhbhalalbhbhbhalalbhalalbhal", +"albhalalalalalalbhalbhalbhalalalalbhalalalalbhalalalalalalalalbhalbhalalalalbhalalal`aalalalbhalalal", +"alalalalbhbhbhalalalalalalalalbhalbhalalalalalbhbhbhbhalalbhalalalbhalalalalalap`qbb`salalalalalbhal", +"alalalbhalalalalalalalalbhbhbhalalalbhalbhalalalalalalalbhalalalalalalalalalalae`uav`calalalbhalalal", +"bhbhalalalalalbhalbhalalalalalalalalbhalalbhalalalalbhalalalbhalalbhbhbhalalalalalaralalalalbhalbhal" +}; diff --git a/Documentation/programmer/feta20.sty b/Documentation/programmer/feta20.sty new file mode 100644 index 0000000000..0dbfcf90cc --- /dev/null +++ b/Documentation/programmer/feta20.sty @@ -0,0 +1,146 @@ +% 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} + diff --git a/Documentation/programmer/fonts.doc b/Documentation/programmer/fonts.doc new file mode 100644 index 0000000000..287dde49b1 --- /dev/null +++ b/Documentation/programmer/fonts.doc @@ -0,0 +1,330 @@ + + % -*-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 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). diff --git a/Documentation/programmer/musicnotes.sty b/Documentation/programmer/musicnotes.sty new file mode 100644 index 0000000000..31d2f83a9c --- /dev/null +++ b/Documentation/programmer/musicnotes.sty @@ -0,0 +1,43 @@ + +\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}}} diff --git a/input/test/beam-cross-staff.ly b/input/test/beam-cross-staff.ly new file mode 100644 index 0000000000..376b25c3c9 --- /dev/null +++ b/input/test/beam-cross-staff.ly @@ -0,0 +1,33 @@ +\score{ + \context PianoStaff < + \context Staff=one \notes\relative c'{ + \stemup [c8 c \translator Staff=two \stemup c c] + [c c c c] + \translator Staff=one + \stemdown [c8 c \translator Staff=two \stemup c c] + r2 + \stemdown [c8 c \translator Staff=one \stemdown c c] + r2 + \translator Staff=two + \stemup [c8 c \translator Staff=one \stemdown c c] + r2 + } + \context Staff=two \notes\relative c'{ + \clef bass; + s1 + s1 + s1 + s1 + } + > + \paper{ + \translator{ + \PianoStaffContext + minVerticalAlign = 3.0*\staffheight; + maxVerticalAlign = 3.0*\staffheight; + } +% linewidth=-1.; + } +} + +\version "1.2.0"; diff --git a/input/test/slur-cross-staff.ly b/input/test/slur-cross-staff.ly new file mode 100644 index 0000000000..e53a579f89 --- /dev/null +++ b/input/test/slur-cross-staff.ly @@ -0,0 +1,39 @@ +\score{ + \context PianoStaff < + \context Staff=one \notes\relative c'{ + \stemup c4( c \translator Staff=two c )c | + \translator Staff=one + \stemup c4( c \translator Staff=two c )c | + \stemup c4( c \translator Staff=one c )c | + \translator Staff=two + \stemup c4( c \translator Staff=one c )c | + \translator Staff=two + \stemup c4( \translator Staff=one c c )c | + r2 + \translator Staff=two + \stemup c4( \translator Staff=one c + \break + c )c + r2 +% \stemdown c4( \translator Staff=two c c \translator Staff=one )c + \stemdown d4( \translator Staff=two c c \translator Staff=one )d + \translator Staff=two + \stemup c4( \translator Staff=one c c \translator Staff=two )c + r1 + } + \context Staff=two \notes\relative c'{ + \clef bass; + s1 s1 s1 s1 s1 s1 s1 s1 s1 s1 + } + > + \paper{ + \translator{ + \PianoStaffContext + minVerticalAlign = 3.0*\staffheight; + maxVerticalAlign = 3.0*\staffheight; + } + %linewidth=100.\mm; + } +} + +\version "1.2.0";