diff options
author | Han-Wen Nienhuys <hanwen@xs4all.nl> | 1998-05-07 00:58:51 +0200 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@xs4all.nl> | 1998-05-07 00:58:51 +0200 |
commit | 95de6911a5cd1f90dfcd72ec798f089f6522f50f (patch) | |
tree | 3007b02e324d5f21c38239714662e9e0321064b7 | |
parent | a929454acf1e106f27d61fc3e4ec65962435b12a (diff) |
release: 0.1.62
162 files changed, 3021 insertions, 2519 deletions
diff --git a/AUTHORS.txt b/AUTHORS.txt index 11fde65e97..ae928060c5 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -61,7 +61,7 @@ CONTRIBUTORS -6/Apr/98 LilyPond 0.1.59 1 +6/Apr/98 LilyPond 0.1.62 1 @@ -127,6 +127,6 @@ AUTHORS(1) LilyPond documentation AUTHORS(1) -6/Apr/98 LilyPond 0.1.59 2 +6/Apr/98 LilyPond 0.1.62 2 diff --git a/Documentation/INSTALL.pod b/Documentation/INSTALL.pod index a52cccadc7..093db58f92 100644 --- a/Documentation/INSTALL.pod +++ b/Documentation/INSTALL.pod @@ -173,11 +173,15 @@ Set the directory where TeX and Metafont live =item B<--enable-tex-dir> -Set then directory TeX input is in (detected as a subdir of tex-prefix) +Set then directory TeX input is in (detected as a subdir of +tex-prefix). This should be a directory that is reachable both for +tex and latex. On my system the best choice would be +F</usr/lib/texmf/texmf/tex/generic//>. =item B<--enable-mf-dir> -Set the directory mf input is in (idem) +Set the directory mf input is in (idem). On my system the best +choice would be F</usr/lib/texmf/texmf/fonts/source/public/>. =item B<--enable-config> @@ -273,11 +277,15 @@ Please refer to the man page for more information. =head1 REDHAT LINUX -RedHat Linux users should be able to get a RPM. A spec file is in -F<make/out/lilypond.spec>. You should be able to create an rpm as a -normal user. Be sure you have a F<~/.rpmrc>, and edit the RPM-dir in -F<Variables.make>. (If you create the RPM as a normal user the -permissions will not be set correctly, unfortunately) +RedHat Linux users can compile an RPM. A spec file is in +F<make/out/lilypond.spec>. You should install a gif file called +F<lelie_icon.gif> along with the sources. You can generate this gif +file by typing + + make gifs + +in the directory F<Documentation>. + =head1 DEBIAN GNU/LINUX diff --git a/Documentation/Makefile b/Documentation/Makefile index c152287412..fc2341ae54 100644 --- a/Documentation/Makefile +++ b/Documentation/Makefile @@ -8,7 +8,7 @@ depth = .. # identify module: # NAME = Documentation -SUBDIRS=man tex +SUBDIRS=man tex # @@ -33,19 +33,28 @@ default: all do-doc # list of distribution files: # XPMS=$(wildcard *.xpm) -giffiles=$(XPMS:.xpm=.gif) +giffiles = $(addprefix $(outdir)/,$(XPMS:.xpm=.gif)) -gifs: $(addprefix $(outdir)/, $(giffiles)) +gifs: $(giffiles) - -EXTRA_DISTFILES = $(XPMS) vocabulary-data vocabulary-forms.el automake.urgh +EXTRA_DISTFILES = $(XPMS) vocabulary-data vocabulary-forms.el automake.urgh\ + gnu-music-history # don't do DVI files. They can only be made if lily is installed do-doc: $(TEXTFILES) -local-WWW: $(HTMLFILES) + +$(outdir)/%.txt: $(depth)/% + -rm $@ + ln $< $@ + +README_TOPFILES=NEWS DEDICATION TODO ANNOUNCE-0.1 +README_TXTFILES=$(addprefix $(outdir)/,$(addsuffix .txt, $(README_TOPFILES))) + +local-WWW: $(HTMLFILES) $(README_TXTFILES) $(giffiles) # generic targets and rules: # include $(depth)/make/Targets.make include $(depth)/make/Rules.make + diff --git a/Documentation/gnu-music-history b/Documentation/gnu-music-history new file mode 100644 index 0000000000..4ed2814108 --- /dev/null +++ b/Documentation/gnu-music-history @@ -0,0 +1,57 @@ + +=head1 HISTORY + + +Please note that this all happened when I wasn't around yet. If you +think that I am a biased, unfair, predisposed hypocrite, then don't +bother flaming me; I already know that. + +The GNU Music project is a project which aims to create free software +for music printing and composing. It was started in november '92 by a +core team of four members (Bryan Ford <baford@cs.utah.edu>, David Linn +<drl@vuse.vanderbilt.edu>, Francois Pinard <pinard@iro.umontreal.ca>, +Neil Jerram <nj104@cus.cam.ac.uk>) and in January '93 Robert Strandh +<Robert.Strandh@labri.u-bordeaux.fr> joined. + +After serious disputes with Robert Strandh and the FSF staff in '94, +the project core team got divided. The development efforts of GMP +stopped. + +Independently, I (HWN) started LilyPond. When I showed it to +RMS, he was very enthousiastic about having LilyPond in the GNU +project. I subsequently learned about the GNU Music project, and +contacted them. + +What was left of the GMP (Robert Strandh) and us, LilyPond people, +agreed that cooperation would be desirable. Although merging of both +efforts was and is technically infeasible, we did decide that LilyPond +should also be part of the GNU Music project. + +Only later did I discover the previous quarrels about the GMP-"take +1". To show that I am aware of the history, and to make sure nobody +gets me wrong or is angry at me because I stole a project or a +project's name, I wrote this note. + +In summary, LilyPond is now the only substantial embodiment of the GNU +Music Project, and it is part of the GNU project. + +For completeness' sake, I will mention the other efforts here: + +=over 4 + +=item G Sharp, http://dept-info.labri.u-bordeaux.fr/~strandh/Gsharp + +An alpha version notation editor for X in Scheme. Source available on +request from Robert Strandh. + +=item GNU music, + +An alpha version of a music editing system with Musictex +output. Pretest versions of GNU Music (v0.3) can still be obtained from +Francois Pinard. + +=back + +This history note is probably biased in some way, because I wrote it. +The rest of this document is also entirely mine, and is not meant to +reflect anyone else's opinion. diff --git a/Documentation/gnu-music.pod b/Documentation/gnu-music.pod index 2d52c81195..97656daf6e 100644 --- a/Documentation/gnu-music.pod +++ b/Documentation/gnu-music.pod @@ -174,60 +174,3 @@ stages, having a hard and small core which does a lot of work, is more efficient than lots of people doing small subprojects. Finanicial support would be desirable. - -=head1 HISTORY - - -Please note that this all happened when I wasn't around yet. If you -think that I am a biased, unfair, predisposed hypocrite, then don't -bother flaming me; I already know that. - -The GNU Music project is a project which aims to create free software -for music printing and composing. It was started in november '92 by a -core team of four members (Bryan Ford <baford@cs.utah.edu>, David Linn -<drl@vuse.vanderbilt.edu>, Francois Pinard <pinard@iro.umontreal.ca>, -Neil Jerram <nj104@cus.cam.ac.uk>) and in January '93 Robert Strandh -<Robert.Strandh@labri.u-bordeaux.fr> joined. - -After serious disputes with Robert Strandh and the FSF staff in '94, -the project core team got divided. The development efforts of GMP -stopped. - -Independently, I (HWN) started LilyPond. When I showed it to -RMS, he was very enthousiastic about having LilyPond in the GNU -project. I subsequently learned about the GNU Music project, and -contacted them. - -What was left of the GMP (Robert Strandh) and us, LilyPond people, -agreed that cooperation would be desirable. Although merging of both -efforts was and is technically infeasible, we did decide that LilyPond -should also be part of the GNU Music project. - -Only later did I discover the previous quarrels about the GMP-"take -1". To show that I am aware of the history, and to make sure nobody -gets me wrong or is angry at me because I stole a project or a -project's name, I wrote this note. - -In summary, LilyPond is now the only substantial embodiment of the GNU -Music Project, and it is part of the GNU project. - -For completeness' sake, I will mention the other efforts here: - -=over 4 - -=item G Sharp, http://dept-info.labri.u-bordeaux.fr/~strandh/Gsharp - -An alpha version notation editor for X in Scheme. Source available on -request from Robert Strandh. - -=item GNU music, - -An alpha version of a music editing system with Musictex -output. Pretest versions of GNU Music (v0.3) can still be obtained from -Francois Pinard. - -=back - -This history note is probably biased in some way, because I wrote it. -The rest of this document is also entirely mine, and is not meant to -reflect anyone else's opinion. diff --git a/Documentation/index.pod b/Documentation/index.pod index 573226533c..8b6ddc24d7 100644 --- a/Documentation/index.pod +++ b/Documentation/index.pod @@ -1,58 +1,13 @@ =head1 NAME -The Homepage of LilyPond -- the GNU Project music typesetter +The Documentation of LilyPond -- the GNU Project music typesetter =head1 DESCRIPTION -LilyPond is the GNU Project music typesetter. It generates visual or -auditive output from a music definition file: it can typeset formatted -sheet music to a TeX file and play (mechanical) performances to a MIDI -file. - -This is not a Fanmail/Hype page. These pages were entirely created from -the LilyPond package-sources. - Note: These pages are created from the latest B<development snapshots> of LilyPond. You can look at the bottom if you want to know which version this was. -=head2 Mirrors - -=over 4 - -=item http://sca.uwaterloo.ca/lilypond/ - -Eric Praetzel was kind enough to provide a mirror of both the website -and the ftp site. - -=back - -=head2 Examples - -=over 4 - -=item * -<a href=examples_output.html -> -short examples of what LilyPond can do: MIDI, PS, .gif and input. -</a -> - -=item * -<a href=mutopiaexamples_output.html -> -examples of what LilyPond can do -with real music: MIDI, PS, .gif and input -</a -> - -=back - -=head2 NEWS! - -This is what the latest version brings: - -top_of_NEWS =head2 Documentation: Introduction @@ -139,7 +94,7 @@ The lilypond logo (medium size, format: .gif) =item * <a href=../tex/out-www/index.html > -PS documents about LilyPond +TeX documents about LilyPond </a > @@ -187,7 +142,7 @@ The coding standards of the lilypond project. =item * <a href=docxx/index.html > -The DOC++ documentation of the C++ sources. +The DOC++ documentation of the C++ sources. [temporarily disabled] </a > @@ -226,12 +181,6 @@ B<download> LilyPond and other interesting links > -=item * -<a href=sconstat/stats.html -> -Stats on this page. [temporarily out of order] -</a -> =back diff --git a/Documentation/links.pod b/Documentation/links.pod index 965650c1ad..ebc316f933 100644 --- a/Documentation/links.pod +++ b/Documentation/links.pod @@ -115,7 +115,10 @@ bug-gnu-music-request@gnu.org For discussions concerning the GNU Music project, to subscribe: send mail with subject "subscribe" to -gnu-music-discuss-request@gnu.org +gnu-music-discuss-request@gnu.org + +This list is archived at +http://www.jab.org/mail/gnu-music-discuss@gnu.org =back diff --git a/Documentation/man/lilypond.pod b/Documentation/man/lilypond.pod index 9338fd8f79..9ba489dc1c 100644 --- a/Documentation/man/lilypond.pod +++ b/Documentation/man/lilypond.pod @@ -65,15 +65,11 @@ Add F<DIRECTORY> to the search path for input files. Make incompatible mudela version non-fatal. -=item B<--no-postscript, -P>, +=item B<--find-quarts, -Q>, -Don't generate embedded PostScript (or MetaFont) symbols, but resort to -less beautiful fixed-size versions. +Warn about melodic intervals larger than a fourth. Useful for +converting absolute octave mode stuff to relative octaves. -LilyPond uses PostScript for variable symbols where possible. (For some -of these symbols runtime MetaFont source will be genarated too. These are -not used unless you also include the appropriate TeX file too. See -F<tex/fetdefs.tex>.) =back diff --git a/Documentation/relative-octaves.pod b/Documentation/relative-octaves.pod new file mode 100644 index 0000000000..b6b31507af --- /dev/null +++ b/Documentation/relative-octaves.pod @@ -0,0 +1,88 @@ +=head1 NAME + +Octaves -- how to do pitches + +=head1 DESCRIPTION + +The LilyPond input language, Mudela (help, silly name), should be easy +to read and write. In my experience Mudela is already quite convenient +for entering music. Every time i've entered a substantial piece of music, +however, i found that i made quite a few mistakes. The MIDI output helps +a lot with locating and correcting the errors. There's one type of error +that seems to be frequent, stubborn and hard to catch, and that's the +octavation error. The relative octave feature is an attempt to make +Mudela a bit easier to write. In addition, this featuer makes it harder +to make octavation mistakes, yet if you made one, its a lot simpler to find +and correct. + +Here's how it works. + +=over 5 + +=item * +forget the old "\octave c';" command + +=item * +forget the old octave boundaries with octaves c .. c' + +=back + +You start the relative octave mode (for now) with the command + + \octave relative; + +From then on, the pitch of a note will be the closest to the last one, +assuming that large intervals are a lot more rare than small ones. +Thus, you can enter a scale without using octavation quotes: + + c d e f g a b c + +the last c being an octave higher than the first. If you have to +enter an interval that is greater than a quart, you must specify +whether the pitch goes up, using post-quotes: + + c c' % octave up + c g' % quart up + +or down, using pre-quotes: + + c 'c % octave down + c 'f % quart down + +Although it is not necesary, and thus redundant, information to specify +the direction of smaller intervals, you are allowed to do so: + + c d % second up + c d' % second up + + c a % third down + c 'a % third down + + +=head1 CONVERTING + +To convert a piece of music from the old absolute-octave notation to +relative octaves, lilypond provides the B<-f, --find-quarters> feature +to locate all big intervals in your music (sorry, fully automated convert +is too complex). + +You'll do something like this: + + lilypond -f los-toros-oboe 2>&1 | tee intervals + ... + los-toros-oboe.ly: 59: warning: Interval greater than quart, relative: d': + [)g8 r d + '] r | + los-toros-oboe.ly: 100: warning: Interval bigger than quart, relative: d': + [d8 d + '] [es'8.-> c'16] | + ... + +Then you load a copy of the original mudela file in your favourite editor, +and let it parse the 'error file' F<intervals>. First you remove all +octavation quotes. Then, jumping from warning to warning, you enter quotes +as suggested by LilyPond. + +=head1 EXAMPLE + +See F<mutopia/ltor.ly>. diff --git a/Documentation/tex/fonts.doc b/Documentation/tex/fonts.doc index a8c78d20ca..200e4bcdd6 100644 --- a/Documentation/tex/fonts.doc +++ b/Documentation/tex/fonts.doc @@ -259,6 +259,36 @@ 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*} + \bibliographystyle{plain} \bibliography{engraving} diff --git a/Documentation/tex/mudela.doc b/Documentation/tex/mudela.doc index 0e0cb6cf02..9ffc13a0ba 100644 --- a/Documentation/tex/mudela.doc +++ b/Documentation/tex/mudela.doc @@ -20,7 +20,6 @@ \usepackage{a4wide} \title{Mudela} \author{Jan Nieuwenhuizen \& Han-Wen Nienhuys} -\date{March 2, 1998} \def\file#1{\verb+#1+} @@ -71,7 +70,7 @@ \chapter{A tutorial} -\emph{\Large ***Under construction***} +\emph{\Large ***Under construction: april 98***} \section{Introduction} @@ -188,7 +187,7 @@ special words and punctation. The remainder of this document explains how to combine these elements to express a piece of music in the language that LilyPond understands. In other words, we try to explain how to use LilyPond, and not how LilyPond works. For want of a better -name we call this language Mudela (short for Music Description +name we call the language Mudela (short for Music Description Language). This document does not cover all of Mudela. Due to technical details, @@ -329,9 +328,9 @@ to cs), Italian, Swedish, Norwegian \section{Handy input} -% \subsection{Durations} -However, having only quarter notes may get a bit dull. +\chapter{Features} + Durations are entered as their reciproce values % a1 a2 a4 a a8 a a16 a a32 a a64 a a a a \begin{mudela}[fragment,verbatim,center] diff --git a/Documentation/topweb.pod b/Documentation/topweb.pod new file mode 100644 index 0000000000..e917dc6780 --- /dev/null +++ b/Documentation/topweb.pod @@ -0,0 +1,72 @@ +=head1 NAME + +The Homepage of LilyPond -- the GNU Project music typesetter + +=head1 DESCRIPTION + +LilyPond is the GNU Project music typesetter. This program can print +beautiful sheet music from a music definition file. It can also play +a play (mechanical) performances to a MIDI file. Features include +multiple staffs, meters, clefs, keys, lyrics, versatile +input-language, cadenzas, beams, slurs, triplets. It includes a nice +font of musical symbols. + +This is not a Fanmail/Hype page. These pages were entirely created from +the LilyPond package-sources. + +Note: These pages are created from the latest B<development snapshots> +of LilyPond. You can look at the bottom if you want to know which +version this was. + +=head2 Mirrors + +=over 4 + +=item http://sca.uwaterloo.ca/lilypond/ + +Eric Praetzel was kind enough to provide a mirror of both the website +and the ftp site. + +=back + +=head2 Examples + +=over 4 + +=item * +<a href=../input/out-www/index.html +> +short examples of what LilyPond can do: MIDI, PS, .gif and input. +</a +> + +=item * +<a href=../mutopia/out-www/index.html +> +examples of what LilyPond can do +with real music: MIDI, PS, .gif and input +</a +> + +=back + +=head2 NEWS! + +This is what the latest version brings: + +top_of_NEWS + +=head2 Documentation: Introduction + +=over 4 + +=item * +<a href=../Documentation/out-www/index.html +> +All of the LilyPond documentation. +</a +> + + + +=back diff --git a/INSTALL.txt b/INSTALL.txt index d1baab3015..70ee6927dd 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -61,7 +61,7 @@ RECOMMENDED -25/Apr/98 LilyPond 0.1.59 1 +6/May/98 LilyPond 0.1.62 1 @@ -127,7 +127,7 @@ CONFIGURING and COMPILING -25/Apr/98 LilyPond 0.1.59 2 +6/May/98 LilyPond 0.1.62 2 @@ -163,10 +163,15 @@ INSTALL(1) LilyPond documentation INSTALL(1) --enable-tex-dir Set then directory TeX input is in (detected as a - subdir of tex-prefix) + subdir of tex-prefix). This should be a directory + that is reachable both for tex and latex. On my + system the best choice would be + /usr/lib/texmf/texmf/tex/generic//. --enable-mf-dir - Set the directory mf input is in (idem) + Set the directory mf input is in (idem). On my + system the best choice would be + /usr/lib/texmf/texmf/fonts/source/public/. --enable-config Output to different configuration files. Needed for @@ -185,15 +190,10 @@ INSTALL(1) LilyPond documentation INSTALL(1) subdirectories out/ (which contain all files generated during compilation). -CONFIGURING FOR MULTIPLE PLATFORMS - If you want to compile LilyPond with different - configuration settings, then, you can use the --enable- - config option. Example: suppose I want to build with and - without profiling. Then I'd use the following for the -25/Apr/98 LilyPond 0.1.59 3 +6/May/98 LilyPond 0.1.62 3 @@ -202,6 +202,11 @@ CONFIGURING FOR MULTIPLE PLATFORMS INSTALL(1) LilyPond documentation INSTALL(1) +CONFIGURING FOR MULTIPLE PLATFORMS + If you want to compile LilyPond with different + configuration settings, then, you can use the --enable- + config option. Example: suppose I want to build with and + without profiling. Then I'd use the following for the normal build, configure --prefix=~ --disable-optimise --enable-checking @@ -244,22 +249,17 @@ EXAMPLE This is what the output looks like over here: - GNU LilyPond 0.0.78 #4/FlowerLib 1.1.24 #0 - Parsing ... [/home/hw/share/lilypond/init// - <..etc..> - init//performer.ly]]][input/kortjakje.ly] - Creating elements ...[8][16][24][25] - Preprocessing elements... - Calculating column positions ... [14][25] - Postprocessing elements... - TeX output to someinput.tex ... - Creating MIDI elements ...MIDI output to someinput.midi ... -25/Apr/98 LilyPond 0.1.59 4 + + + + + +6/May/98 LilyPond 0.1.62 4 @@ -268,6 +268,17 @@ EXAMPLE INSTALL(1) LilyPond documentation INSTALL(1) + GNU LilyPond 0.0.78 #4/FlowerLib 1.1.24 #0 + Parsing ... [/home/hw/share/lilypond/init// + <..etc..> + init//performer.ly]]][input/kortjakje.ly] + Creating elements ...[8][16][24][25] + Preprocessing elements... + Calculating column positions ... [14][25] + Postprocessing elements... + TeX output to someinput.tex ... + Creating MIDI elements ...MIDI output to someinput.midi ... + hw:~/musix/spacer$ xdvi someinput& [1] 855 @@ -275,12 +286,14 @@ INSTALL(1) LilyPond documentation INSTALL(1) Please refer to the man page for more information. REDHAT LINUX - RedHat Linux users should be able to get a RPM. A spec - file is in make/out/lilypond.spec. You should be able to - create an rpm as a normal user. Be sure you have a - ~/.rpmrc, and edit the RPM-dir in Variables.make. (If you - create the RPM as a normal user the permissions will not - be set correctly, unfortunately) + RedHat Linux users can compile an RPM. A spec file is in + make/out/lilypond.spec. You should install a gif file + called lelie_icon.gif along with the sources. You can + generate this gif file by typing + + make gifs + + in the directory Documentation. DEBIAN GNU/LINUX A Debian package is also available; contact Anthony Fok @@ -309,6 +322,18 @@ AUTHORS Jan Nieuwenhuizen <jan@digicash.com> + + + +6/May/98 LilyPond 0.1.62 5 + + + + + +INSTALL(1) LilyPond documentation INSTALL(1) + + Have fun! @@ -325,6 +350,47 @@ AUTHORS -25/Apr/98 LilyPond 0.1.59 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +6/May/98 LilyPond 0.1.62 6 @@ -1,3 +1,59 @@ +pl 62 + - no-touch hak. + - bfs: multi measure rests + - fixed the website. + - add extra space after breakable columns. + + +pl 61.jcn8 + - mudela relative octave feature: + * Documentation/relative-octaves.pod + * \octave relative; + * lilypond -f for automatically finding new relative quote positions + (sorry, fully automated convert is too complex) + * mutopia/ltor.ly: octave quotes reduced from 511 to 59 + - better conflily + - bf: abbreviation-beam-engraver: set beam::multiple_i_ + - bf: open_abbrev_parens + - dotted/dashed slurs/ties + - fixed-up scsii-menuetto; use dotted-slurs + - slur_thickness runtime + - bf: typo lilyponddefs: elevendefs + - moved hard-coded slur parameters to runtime + - make-patch -r: diff against latest release + - allow semicolons after paper_identifier and \include + - params.ly: parameterised some paper vars + - bf: beam quantise for slope = 0 + - interbeam (mult>3) open-up to paper-def to paper! + - "implemented" Paper-def::staffheight + - simplification + bf bezier clipping + - vandale fix + - moved doco from paper*ly to fonts.doc + - papers with expressions + - paper20.ly: rewrote precalculated values as expressions + - simple expressions in mudela (paper-body only) + - beam_thickness centralised and run-time... + - \nobreak + - bf: beamquantise: never sit if mult > 1 + - bf: broken slur y-offset (not!) + - pagelength hack in tex/headers + - alignment of bracket (in span-score-bar.cc) + - boolean *break_b to continue break_penalty_i; maar nu... + - removed paper20 includes, \paper_twenty from examples + - dropped latex files + - renamed standje, standchen. + - parser accepts range of mudela-versions + - Mudela_version + - String_convert::split + - bf's: los-toros-oboe + - braindead Break_req with penalty; junked Disallow_break_req and + Break_force_req + +pl 61.ag1 + - implemented octave-shifted clefs. + +******** + pl 61 - bf: mudela-book error msgs - don't dist feta-tables. diff --git a/PATCHES.txt b/PATCHES.txt index 70d234cbd7..47ec147291 100644 --- a/PATCHES.txt +++ b/PATCHES.txt @@ -61,7 +61,7 @@ PREREQUISITES -28/Apr/98 LilyPond 0.1.60 1 +28/Apr/98 LilyPond 0.1.62 1 @@ -127,7 +127,7 @@ MAINTAINER -28/Apr/98 LilyPond 0.1.60 2 +28/Apr/98 LilyPond 0.1.62 2 @@ -193,6 +193,6 @@ PATCHES(1) LilyPond documentation PATCHES(1) -28/Apr/98 LilyPond 0.1.60 3 +28/Apr/98 LilyPond 0.1.62 3 @@ -30,6 +30,9 @@ packages. Please refer to the installation instructions. For your convenience, a formatted copy of the INSTALL instructions are in the toplevel directory, as INSTALL.text +The process is fairly straightforward, but chances are that you have +to specify directories for TeX to configure (--enable-tex-dir, +--enable-mf-dir) 4. DOCUMENTATION @@ -7,8 +7,11 @@ Most of the items are marked in the code as well, with full explanation. grep for TODO and ugh/ugr/urg 0.2: + * do rest-collisions for Multi_measure_rests as well. - * add a Duration_convert memberr to Duration_iter to set parameters. + * split error/warning in error/warning/non_fatal_error + + * add a Duration_convert member to Duration_iter to set parameters. Junk global duration settings. * deps for ly2dvi @@ -19,20 +22,21 @@ grep for TODO and ugh/ugr/urg * minimum length second part broken tie - * lowest beam of (UP) beam must never be lower than second staffline - - * multibar rests + * en-,discouraged linebreaking: + - handle DISALLOW < penalty > FORCE + - discourage breaking of slurs - * make lily output make dependencies. + * multibar rest + - symbol(s) - * make sure that columns never touch - old hack at spring-spacer.cc:690 seems to be broken - * latex mutopia/los-toros-oboe-16.tex: max memsize + * move all hard-coded constants and staffheight dependent to runtime, + i.e. init/params.ly. e.g.: stem length params, beam positions + * fix position of bar number - - * fix website. + + * fix position of brace in conjunction with bracket * libtoolize flowerlib @@ -42,15 +46,12 @@ grep for TODO and ugh/ugr/urg * robustify Beam (in case of no stems, 32nd notes) - * fix silly " "2*12 a4 (=4*12) sticky plet - * check for groff / troff/ nroff et * use kpsepath to find all TeX dirs - configure.in - clean-fonts.sh - * mudela-convert. * nicen examples: - remove all \multi @@ -60,8 +61,6 @@ grep for TODO and ugh/ugr/urg * handle ^C for tmp/file creation. - * WWW mirror/archive for the mailing lists. - * dots & rest collisions. * add a screenshot to the website. :) @@ -84,32 +83,22 @@ grep for TODO and ugh/ugr/urg * the tenuto script is too long and too thin + * the bracket is ugly (wings are too parabolic, should be more circular) + * better hshift (dots, distance, head dependent) * stem len adjustable STUFF * convert-mudela: + - better parsing - make smarter - fix convert-mudela -e *.ly ; - convert-mudela -e empty.ly - redo in python. - * clefs (AG): The names I'd like are of the form - - [FGC]n{[_^]8} F, G or C clef, on nth line, subscripted - or superscripted with an 8. - So: - G, G2, treble, (== current `violin') G clef on second line. - F, F4, bass (== current `bass' ) F clef on fourth line - G_8, G2_8 G clef on 2nd line, with 8 subscript - G^8 G clef on 2nd line with 8 superscript - C1, soprano (==current `soprano') C clef on first line. - C2, (==current `mezzosoprano') C clef on second line - C3, alto (==current `alto') C clef on third line - C4, tenor (==current `tenor') C clef on fourth line - C5 (==current `baritone') C clef on fifth line) - + * clefs (AG): The "8" should appear closer to the actual clef, + touching it. * give Items/Spanners access to unbroken originals @@ -124,7 +113,6 @@ STUFF this modifies \stem for the c2 * emacs mudela-mode - - should handle block comments too. - handle lexer modes (\header, \melodic, \lyric) etc. - indentation @@ -166,6 +154,8 @@ STUFF * Fix profiling. gprof bugreport? + * GNU patch 2.1: hardcoded limit of 1024 to the linelength + * GNU diff 2.7: diff -rN does not see a new directory with empty file * GNU patch 2.1: <must find simple example> if patch chokes on a @@ -190,10 +180,6 @@ PROJECTS * \header - output header info to MIDI too. - - * Makefile stuff: - - shared lib on Solaris too. - * Add mudela-output to Rosegarden. * a musical dictionary. See Documentation/vocabulary-*, other @@ -473,7 +459,6 @@ IDEAS * versioning stuff (cvt mudela, mudela, etc.) - * a real convert-mudela * dots into separate item. @@ -1,6 +1,6 @@ MAJOR_VERSION=0 MINOR_VERSION=1 -PATCH_LEVEL=61 +PATCH_LEVEL=62 MY_PATCH_LEVEL= # use the above to send patches, always empty for released version: diff --git a/aclocal.m4 b/aclocal.m4 index a459924cb2..d1ec16c75e 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -23,6 +23,8 @@ dnl should cache result. dnl should look in $prefix first. dnl should probably assume TDS + + AC_DEFUN(AC_TEX_PREFIX, [ @@ -78,6 +80,30 @@ AC_DEFUN(AC_FIND_DIR_IN_PREFIX, [ AC_MSG_RESULT($1/$find_dirdir) ]) +# ugh. this is hopeless +AC_DEFUN(AC_KPSE_TEX_DIR, [ + kpse_paths=`(kpsepath -n latex tex; kpsepath -n tex tex) | sed 's/:/ /g' | tr ' ' '\012' |sort | uniq -d` + kpse_syspaths=`echo $kpse_paths | grep '!'| sed 's/!//g'` + echo $kpse_paths + if test -w "$kpse_syspaths"; + then + dir=`echo $kpse_syspaths | head -1` + else + dir=`echo $kpse_paths | grep -v '!'| head -1` + fi + if test "$prefix" = "NONE"; then + local_prefix=$ac_default_prefix + local_prefix_quote='${prefix}' + + else + local_prefix=$prefix + local_prefix_quote=$prefix + fi + echo $local_prefix_quote = $local_prefix + echo $dir + echo $dir | sed 's!'$local_prefix'!\$local_prefix_quote!g' +]) + AC_DEFUN(AC_TEX_SUBDIR, [ dnl AC_REQUIRE([AC_TEX_PREFIX]) AC_FIND_DIR_IN_PREFIX($find_texprefix, $1, tex,TeX input) diff --git a/bin/add-html-footer.py b/bin/add-html-footer.py new file mode 100644 index 0000000000..590042719f --- /dev/null +++ b/bin/add-html-footer.py @@ -0,0 +1,74 @@ +#!@PYTHON@ +import os +import sys +import getopt +import __main__ + +lilypath ='' +try: + lilypath = os.environ['LILYPOND_SOURCEDIR'] + '/' +except KeyError: + print 'Please set LILYPOND_SOURCEDIR to the toplevel source, eg LILYPOND_SOURCEDIR=/home/foobar/lilypond-1.2.3/' + sys.exit(1) + +lilypath = lilypath + '/bin/' +sys.path.append(lilypath) + +from lilypython import * + +lilyversion= '' +mailaddress = "unknown" +fullname = "unknown" +news_file = '' + +def set_vars(): + __main__.lilyversion = version_tuple_to_str(lilydirs.version_tuple()) + os.environ["CONFIGSUFFIX"] = 'www'; + __main__.mailaddress= os.environ['MAILADDRESS'] + pw = pwd.getpwuid (os.getuid()); + + __main__.fullname= pw[4]; + + +backstr = '\n<hr>Please take me <a href=%s>back to the index</a>\n\ +of LilyPond -- The GNU Project Music typesetter\n\ +<hr><font size=-1>\n\ +This page was built using from lilypond-%s by <p>\n\ +<address><br>%s <a href=mailto:%s><<!bla>%s</a>></address>\n\ +<p></font>' +set_vars () +banner_file = '' +news_file='' +news ='' +(options, files) = getopt.getopt(sys.argv[1:], '', ['news=']) + +for opt in options: + o = opt[0] + a = opt[1] + if o == '--news': + news_file = a + +def footstr(index): + return backstr % (index, lilyversion, fullname, mailaddress, mailaddress) + +index_file='../../out-www/index.html' +banner = footstr (index_file) +banner_id = '<! banner_id >' + + +if news_file: + news = gulp_file (news_file) + i = regex.search ('^\*\*', news) + news = news[:i] + + +for f in files: + s = gulp_file (f) + if news_file: + s = regsub.sub ('top_of_NEWS', '<XMP>\n'+ news + '\n</XMP>\n', s) + + if regex.search (banner_id, s) == -1: + s = regsub.sub ('</body>', '</BODY>', s) + s = regsub.sub ('</BODY>', banner_id + banner + '</BODY>', s) + + dump_file (f, s) diff --git a/bin/conflily.sh b/bin/conflily.sh index e42d608713..0ca024ad8f 100755 --- a/bin/conflily.sh +++ b/bin/conflily.sh @@ -1,35 +1,51 @@ #!/bin/sh -# conflily -# ugh: must be executed from lilypond-x.x.x (bin/conflily) - -# the lilypond root dir looks like this: -# current -> ./lilypond-x.x.x symlink to current source -# lilypond-x.x.x the lilypond source -# patches gzipped patches -# releases gzipped releases - -# the lily root dir +# conflily --- configure LilyPond sourcetree # -lelie=$HOME/music/lily +# You should set LILYPOND_SOURCEDIR to the latest uppacked source dir, +# it will default to: +# +export LILYPOND_SOURCEDIR=$HOME/lelie/current +# +# and create links to here, if necessary # - if [ ! -e $HOME/lelie ]; then - ln -s $lelie $HOME/lelie + (cd ..; ln -s `pwd` $HOME/lelie) fi - -rm $lelie/current 2>&1 > /dev/null +# +# current=`basename \`pwd\`` -echo ln -s $lelie/$current $lelie/current -ln -s $lelie/$current $lelie/current - +(cd ..; rm -f current 2>&1 > /dev/null) +(cd ..; ln -s $current current) +# +# The LilyPond root dir looks like this: +# +# current -> ./lilypond-x.x.x symlink to current source +# lilypond-x.x.x/ the unpacked LilyPond source +# patches/ gzipped patches +# releases/ tar gzipped releases +# test/ latest output of 'release' +# +# if [ "x$LILYINCLUDE" = "x" ]; then - echo you should make add the following to your login script - echo "export LILYINCLUDE=$lelie/current/init:$lelie/current/mutopia:$lelie/current/input:$lelie/current/mutopia/J.S.Bach:" - echo "export PATH=$PATH:$lelie/current/bin" - echo "export MFINPUTS=$MFINPUTS:$lelie/current/mf" + # we can try... + echo you should add the following to your login script + if [ "x$MAILADDRESS" = "x" ]; then + export MAILADDRESS=$USER@`hostname` + echo " export MAILADDRESS=\$USER@`hostname`" + fi + export LILYINCLUDE=$LILYPOND_SOURCEDIR/init:$LILYPOND_SOURCEDIR/mf/out + export PATH=$PATH$LILYPOND_SOURCEDIR/bin: + export MFINPUTS=$MFINPUTS:$LILYPOND_SOURCEDIR/mf + export TEXINPUTS=$TEXINPUTS:$LILYPOND_SOURCEDIR/mf/out + cat <<EOF + export LILYINCLUDE=\$LILYPOND_SOURCEDIR/init:\$LILYPOND_SOURCEDIR/mf/out + export PATH=\$PATH:$LILYPOND_SOURCEDIR/bin + export MFINPUTS=\$MFINPUTS:\$LILYPOND_SOURCEDIR/mf + export TEXINPUTS=\$TEXINPUTS:\$LILYPOND_SOURCEDIR/mf/out +EOF fi -ln -sf $lelie/current/lily/out/lilypond bin/lilypond -ln -sf $lelie/current/mi2mu/out/mi2mu bin/mi2mu +ln -sf $LILYPOND_SOURCEDIR/lily/out/lilypond bin/out/lilypond +ln -sf $LILPPOND_SOURCEDIR/out/mi2mu bin/out/mi2mu configure --prefix=/usr --enable-debugging --enable-printing --enable-checking --disable-optimise diff --git a/bin/make-patch.py b/bin/make-patch.py index bf3eb0ce1f..d72c672e0a 100755 --- a/bin/make-patch.py +++ b/bin/make-patch.py @@ -32,13 +32,12 @@ options = Options() def help(): sys.stdout.write( 'Generate a patch to go to this version.\n' - ' --from=FROM, -f FROM old is FROM\n' - ' --to=TO, -t TO to version TO\n' - ' --dir=DIR, -d TO directory\n' + ' -f, --from=FROM old is FROM\n' + ' -d, --dir=DIR diff to (or from) directory DIR\n' + ' -r, --release diff against latest release\n' + ' -t, --to=TO to version TO\n' ) - - def untar(fn): # os.system('pwd'); sys.stderr.write('untarring ' + fn + '\n') @@ -81,13 +80,13 @@ def makepatch(fromdir, todir, patfile_nm): os.system('pwd') print ('diff -urN ../%s . >> %s' % (fromdir, patfile_nm)) os.system('diff -urN ../%s . >> %s' % (fromdir, patfile_nm)) - os.system('gzip -9f %s' % patfile_nm) + os.system('gzip --quiet -9f %s' % patfile_nm) def main(): os.environ['GZIP'] = '-q' sys.stderr.write('This is make-patch version %s\n' % mp_version) (cl_options, files) = getopt.getopt(sys.argv[1:], - 'd:hf:o:t:', ['output=', 'help', 'from=', 'to=']) + 'd:hf:o:rt:', ['output=', 'help', 'from=', 'to=']) outfn = '' srcdir = '' @@ -106,11 +105,17 @@ def main(): elif o == '--dir' or o == '-d': srcdir = a; to_b=0 - elif o== '--help' or o == '-h': + elif o == '--help' or o == '-h': help() return 0; elif o == '--output' or o == '-o': outfn = os.path.join(os.getcwd(), a) + elif o == '--release' or o == '-r': +# huh? +# if options.from_version[3]: +# options.from_version[3] = ''; + options.from_version = (options.from_version[0], + options.from_version[1], options.from_version[2], ''); else: raise getopt.error diff --git a/bin/make-website.py b/bin/make-website.py deleted file mode 100755 index ac6d865af6..0000000000 --- a/bin/make-website.py +++ /dev/null @@ -1,227 +0,0 @@ -#!@PYTHON@ -# -*-python-*- -# make-website.py -- implement The lilypond WWW site -# -# source file of the GNU LilyPond music typesetter -# -# (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl> -# - -""" - stupid script to generate WWW site. - - The WWW site is my test-suite for LilyPond, I usually don't - distribute versions that fail to complete this script - -You should set the following environment vars: - -LILYPOND_SOURCEDIR -TEXINPUTS -MAILADDRESS - - - """ - -import sys -import os - -lilypath ='' -try: - lilypath = os.environ['LILYPOND_SOURCEDIR'] + '/' -except KeyError: - print 'Please set LILYPOND_SOURCEDIR to the toplevel source, eg LILYPOND_SOURCEDIR=/home/foobar/lilypond-1.2.3/' - sys.exit(1) - -lilypath = lilypath + '/bin/' -sys.path.append(lilypath) - -from lilypython import * -import __main__ -import glob - -depth = '' -makewebsite_id = "<!make_website!>"; -id_str = "make-website 0.9"; -tar = "tar"; -make = "make -f Makefile outdir=out-www"; -mailaddress = "unknown" -fullname = "unknown" -footstr = "" -lilyversion= '' - -include_path=[ 'input', 'mutopia' , 'mutopia/J.S.Bach', 'mutopia/Coriolan', - 'mutopia/J.S.Bach/out' ] - -def set_vars(): - __main__.lilyversion = version_tuple_to_str(lilydirs.version_tuple()) - os.environ["TEXINPUTS"] = os.environ["TEXINPUTS"] + ":%s/input/:" % depth; - os.environ["CONFIGSUFFIX"] = 'www'; - - os.environ["LILYINCLUDE"] = join (':', __main__.include_path) +':'+ os.environ["LILYINCLUDE"]; - os.environ["LILYTOP"] = depth; - __main__.mailaddress= os.environ['MAILADDRESS'] - pw = pwd.getpwuid (os.getuid()); - - __main__.fullname= pw[4]; - -backstr = '\n<hr>Please take me <a href=%s>back to the index</a>\n\ -of LilyPond -- The GNU Project Music typesetter\n\ -<hr><font size=-1>\n\ -This page was built using <code>%s</code> from lilypond-%s by <p>\n\ -<address><br>%s <a href=mailto:%s><<!bla>%s</a>></address>\n\ -<p></font>' - - -def footstr(index): - return backstr % (index, id_str, lilyversion, fullname, mailaddress, mailaddress) - - - -# do something, check return status -def my_system(cmds): - for cmd in cmds: - ignoreret=0; - if cmd[0] == '-': - ignoreret = 1 - cmd = cmd[1:] - - ret = os.system (cmd) - if ret: - if ignoreret: - sys.stderr.write( "ignoring failed command `%s\' (status %d)\n" % (cmd, ret)) - else: - sys.stderr.write( 'make-website: failed on command %s (status %d)\n' % (cmd, ret)) - sys.exit (2) - -base="lilypond/"; - - -def gen_html(): - print 'generating HTML' - my_system (["make -f Makefile -kC .. html"]); - - - -texstuff = ["mudela"] - -def gen_manuals(): - print 'generating TeX doco manuals' - list = open('tex_manuals.html', 'w') - list.write( "<HTML><TITLE>PostScript Manuals</TITLE>\n" - "<BODY><h1>LilyPond manuals (in PostScript)</h1>" - "<ul>\n") - todo='' - for stuff in texstuff: - todo = todo + ' out/' + stuff + '.ps.gz' - list.write("<li><a href=%s.ps.gz>%s.ps.gz</a>" % (stuff, stuff)) - list.write('</ul></BODY></HTML>') - list.close () - - my_system (['make -C .. ' + todo]) - - -def copy_files(): - print "copying files\n" - -# my_system ("ln -s depth/out ./docxx" ) - my_system([ "cp %s/TODO ./TODO.txt" % depth, - "cp %s/ANNOUNCE-0.1 ./ANNOUNCE-0.1.txt" % depth, - "cp %s/NEWS ./NEWS.txt" % depth, - "cp %s/DEDICATION ./DEDICATION.txt" % depth]); - my_system([ "make -C .. gifs"]); - -def docxx_update(): - print 'docxx.. \n' - banner= open('/tmp/lilybanner.html', 'w'); - banner.write (footstr('../index.html')) - banner.close () - my_system(['BANNEROPT=\"-B /tmp/lilybanner.html\" %s/bin/out/make-docxx' % depth]); -# os.unlink( "/tmp/lilybanner.html"); - -def get_glob(exts): - result = [] - for a in exts: - result = result + glob.glob1('./', '*.' + a) - - return result - -def join(inter, list): - return reduce (lambda x,y, i=inter: x + i + y, list) - -def do_tar(): - print "tarring.\n"; - list = get_glob( ['html', 'gif', 'ps.gz' , 'txt', 'midi']) - files = join (' ', list) - print files - my_system( ['-tar zvhcf website.tar.gz ' + files + ' docxx/*']) - - -def identify(): - print 'This is %s\n' % id_str - -def clean_tmp(): - my_system(['-rm -f /tmp/gs*']) - -def get_top_of_NEWS(): - i = open('NEWS.txt') - lines = i.readlines() - i.close () - s = '' - for l in lines: - if regex.search('^\*\*\*\*\*\*', l) <> -1: - return s; - s = s + l - return s - -def edit_index(): - s = gulp_file('index.html') - s = regsub.sub ('top_of_NEWS', '<XMP>\n' + get_top_of_NEWS () + '\n</XMP>', s) - dump_file ('index.html', s) - -def edit_html(): - files = get_glob(['html']) - for f in files: - - s = gulp_file(f) - if regex.search(makewebsite_id, s) <> -1: - continue; - - s = regsub.sub ('</BODY>', footstr('index.html') + makewebsite_id + '</BODY>', s) - s = regsub.sub('<TITLE>\(.*\)</TITLE>$', - '<TITLE>LilyPond WWW: \\1</TITLE>', s) - - dump_file (f,s) - - -def do_examples (examples, filename): - located_files = gen_examples (examples) - gen_list (examples, filename) -def main(): - identify(); - - os.chdir (lilydirs.topdir + 'Documentation') - -# my_system (['-rm ../WWW/*.pod ../WWW/*.xpm ../WWW/*.doc', -# 'ln ../Documentation/*.pod ../Documentation/*.doc ../Documentation/*.xpm .']); - os.chdir (lilydirs.topdir + 'Documentation/out/') - __main__.depth = "../../"; - __main__.include_path = map(lambda p: __main__.depth + '/' + - p, __main__.include_path) - - set_vars(); - gen_html(); - copy_files(); - do_examples (examples, 'examples_output.html'); - do_examples (mutopia_examples, 'mutopiaexamples_output.html'); - gen_manuals(); - #set_images(); - edit_html(); - edit_index(); - docxx_update() - do_tar() - clean_tmp(); - - -main() - - diff --git a/bin/mutopia-index.py b/bin/mutopia-index.py index ba178fdb72..485578f0dc 100644 --- a/bin/mutopia-index.py +++ b/bin/mutopia-index.py @@ -27,7 +27,7 @@ def gen_list(inputs, subdir, filename): list.write ('<ul>') for ex in subdirs: print 'subdir %s ' % ex - list.write ('<li><a href=%s>Subdirectory: %s</a></li>\n' % (pre + ex + post , ex)) + list.write ('<li><a href=%s/index.html>Subdirectory: %s</a></li>\n' % (pre + ex + post , ex)) list.write ('</ul>') diff --git a/bin/ps-to-gifs.sh b/bin/ps-to-gifs.sh index 57021850f5..c276406a2b 100755 --- a/bin/ps-to-gifs.sh +++ b/bin/ps-to-gifs.sh @@ -17,6 +17,6 @@ esac # generate the pixmap at twice the size, then rescale (for antialiasing) cat $1 | gs -q -sDEVICE=ppmraw \ - -sOutputFile="|pnmscale 0.5|ppmtogif > $FILE-page%d.gif" \ + -sOutputFile="|pnmscale 0.3333|ppmtogif > $FILE-page%d.gif" \ -r200 -dNOPAUSE - -c quit diff --git a/flower/NEWS b/flower/NEWS index e0736d4cf0..e9a2005613 100644 --- a/flower/NEWS +++ b/flower/NEWS @@ -1,3 +1,6 @@ +pl 42.jcn1 + - String_convert::split_arr + pl 42 - interval.*: Slice (Interval of int) trying to get rid of 2.8 ice: diff --git a/flower/include/string-convert.hh b/flower/include/string-convert.hh index 72149f78ec..4842eac2d7 100644 --- a/flower/include/string-convert.hh +++ b/flower/include/string-convert.hh @@ -37,6 +37,7 @@ public: static String rational_str (Rational); static String pointer_str (void const *); static String precision_str (double x, int n); + static Array<String> split_arr (String str, char c); static String i64_str (I64, char const * fmt = 0); }; diff --git a/flower/string-convert.cc b/flower/string-convert.cc index 79fbe1829e..dd89038d09 100644 --- a/flower/string-convert.cc +++ b/flower/string-convert.cc @@ -11,6 +11,7 @@ #include "string.hh" #include "string-convert.hh" #include "rational.hh" +#include "varray.hh" /** a safe length for stringconversion buffers @@ -289,3 +290,20 @@ String_convert::precision_str (double x, int n) return (sign (x) > 0 ? str : "-" + str); } +Array<String> +String_convert::split_arr (String str, char c) +{ + Array<String> a; + int i = str.index_i (c); + while (i >=0) + { + String s = str.left_str (i); + a.push (s); + str = str.cut (i + 1, INT_MAX); + i = str.index_i (c); + } + if (str.length_i ()) + a.push (str); + return a; +} + diff --git a/init/book-fragment.ly b/init/book-fragment.ly index f6789cf262..01762e927e 100644 --- a/init/book-fragment.ly +++ b/init/book-fragment.ly @@ -1,6 +1,6 @@ % Toplevel initialisation file. -\version "0.1.9"; +\version "0.1.10"; \include "declarations.ly" diff --git a/init/declarations.ly b/init/declarations.ly index 76933ee128..e54f56738d 100644 --- a/init/declarations.ly +++ b/init/declarations.ly @@ -28,4 +28,7 @@ down = -1 % zillie spellink? center=0 +break = { \penalty = 10000; } +nobreak = { \penalty = -10000; } + \include "property.ly" diff --git a/init/lily-init.ly b/init/lily-init.ly index 22b5bffa6d..81fec7443f 100644 --- a/init/lily-init.ly +++ b/init/lily-init.ly @@ -1,8 +1,8 @@ % Toplevel initialisation file. -\version "0.1.10"; +\version "0.1.13"; -\include "declarations.ly" +\include "declarations.ly"; \maininput diff --git a/init/paper-params16.ly b/init/paper-params16.ly new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/init/paper-params16.ly diff --git a/init/paper-params20.ly b/init/paper-params20.ly new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/init/paper-params20.ly diff --git a/init/paper11.ly b/init/paper11.ly index ce5bc83169..4ad47c88ac 100644 --- a/init/paper11.ly +++ b/init/paper11.ly @@ -1,38 +1,20 @@ -% paper20.ly +% paper11.ly -\include "table11.ly" +\include "table11.ly"; paper_eleven = \paper { + staffheight = 11.0\pt; linewidth = 15.0 \cm; - indent = 8.0\mm; - rulethickness = 0.25\pt; - barsize = 11.0 \pt; - interline = 2.75\pt; - notewidth = 7.15\pt; % ugh see table20 for sizes - wholewidth = 10.44\pt; - unitspace = 22.\pt; -% basicspace = 4.\pt; -% geometric = 1.414; - geometric = 0.; - basicspace = 9.\pt; - arithmetic_basicspace = 2.; - arithmetic_multiplier = 7.\pt; - - % - % three beams span two interlines, including stafflines: - % 2 interbeam + beam_thickness = 2 interline - staffline_thickness - % ( beam_thickness = 0.48 interline for now...) - % interbeam = interline - (beam_thickness + staffline_thickness) / 2 - % interbeam = 3.6; - % ugh: interline *in fact* is rule_thickness + "interline"? - interbeam = 3.0\pt; + % ugh see table11 for sizes + quartwidth = 3.63\pt; + wholewidth = 5.45\pt; - gourlay_energybound = 100000.; - gourlay_maxmeasures = 12.; + basicspace = 3.\pt; + arithmetic_basicspace = 2.; + arithmetic_multiplier = 4.8\pt; - castingalgorithm = \Gourlay; \symboltables { \table_eleven } -\include "engraver.ly" + \include "params.ly"; } diff --git a/init/paper13.ly b/init/paper13.ly index 0ed8c70eea..6642832691 100644 --- a/init/paper13.ly +++ b/init/paper13.ly @@ -1,38 +1,20 @@ -% paper20.ly +% paper13.ly -\include "table13.ly" +\include "table13.ly"; paper_thirteen = \paper { + staffheight = 13.0\pt; linewidth = 15.0 \cm; - indent = 8.0\mm; - rulethickness = 0.25\pt; - barsize = 13.0 \pt; - interline = 3.25\pt; - notewidth = 7.15\pt; % ugh see table20 for sizes - wholewidth = 10.44\pt; - unitspace = 22.\pt; -% basicspace = 4.\pt; -% geometric = 1.414; - geometric = 0.; - basicspace = 9.\pt; - arithmetic_basicspace = 2.; - arithmetic_multiplier = 7.\pt; - - % - % three beams span two interlines, including stafflines: - % 2 interbeam + beam_thickness = 2 interline - staffline_thickness - % ( beam_thickness = 0.48 interline for now...) - % interbeam = interline - (beam_thickness + staffline_thickness) / 2 - % interbeam = 3.6; - % ugh: interline *in fact* is rule_thickness + "interline"? - interbeam = 3.5\pt; + % ugh see table13 for sizes + quartwidth = 4.29\pt; + wholewidth = 6.44\pt; - gourlay_energybound = 100000.; - gourlay_maxmeasures = 12.; + basicspace = 3.\pt; + arithmetic_basicspace = 2.; + arithmetic_multiplier = 4.8\pt; - castingalgorithm = \Gourlay; \symboltables { \table_thirteen } - \include "engraver.ly" + \include "params.ly"; } diff --git a/init/paper16.ly b/init/paper16.ly index 35b411d5d9..b9b777403d 100644 --- a/init/paper16.ly +++ b/init/paper16.ly @@ -1,6 +1,6 @@ % paper16.ly -\include "table16.ly" +\include "table16.ly"; %{ @@ -9,42 +9,20 @@ TODO make this somehow parametric. for example the linewidth was chosen to look good on A4 paper. This probably looks less good on US paper sizes. - %} + paper_sixteen = \paper { + staffheight = 16.0\pt; linewidth = 15.5 \cm; - indent = 10.\mm; - rulethickness = 0.4\pt; - barsize = 16.0 \pt; - interline = 4.\pt; - notewidth = 5.93\pt; % ugh, see table16 for sizes - wholewidth = 8.64\pt; - unitspace = 22.\pt; - %geometric = 1.414; - basicspace = 4.\pt; - geometric = 0.; + % ugh, see table16 for sizes + quartwidth = 5.28\pt; + wholewidth = 7.92\pt; + + basicspace = 4.\pt; arithmetic_basicspace = 2.; arithmetic_multiplier = 4.8\pt; - % three beams span two interlines, including stafflines: - % 2ib + bt = 2 il - st - % bt = 0.48(il - st) for now. - % 2ib + 0.48il - 0.48 st = 2il - st - % 2ib = 1.52il - 0.52 st - % ib = 0.76il - 0.26st = 2.94 --jcn - % now, it seams rather ib = 0.76il + 0.26st = 3.14 - % interbeam = 2.94\pt; - % No -- hwn - interbeam = 3.14\pt; - - gourlay_energybound = 100000.; - %{ - The following bounds the number of measures - on a line. Decreasing it greatly reduces computation time - %} - gourlay_maxmeasures = 10.; - castingalgorithm = \Gourlay; \symboltables { \table_sixteen } - \include "engraver.ly" + \include "params.ly"; } diff --git a/init/paper20.ly b/init/paper20.ly index eca46a73a4..0375e79def 100644 --- a/init/paper20.ly +++ b/init/paper20.ly @@ -1,39 +1,20 @@ % paper20.ly -\include "table20.ly" +\include "table20.ly"; paper_twenty = \paper { + staffheight = 20.0\pt; linewidth = 17.0 \cm; - indent = 12.\mm; - rulethickness = 0.4\pt; - barsize = 20.0 \pt; - interline = 5.\pt; - notewidth = 7.15\pt; % ugh see table20 for sizes - wholewidth = 10.44\pt; - unitspace = 22.\pt; -% basicspace = 4.\pt; -% geometric = 1.414; - geometric = 0.; - basicspace = 8.\pt; + % ugh see table20 for sizes + quartwidth = 6.61\pt; + wholewidth = 9.90\pt; + + basicspace = 8.\pt; arithmetic_basicspace = 2.; arithmetic_multiplier = 6.\pt; - % three beams span two interlines, including stafflines: - % 2ib + bt = 2 il - st - % bt = 0.48(il - st) for now. - % 2ib + 0.48il - 0.48 st = 2il - st - % 2ib = 1.52il - 0.52 st - % ib = 0.76il - 0.26st = 3.70 - % now, it seams rather ib = 0.76il + 0.26st = 3.90 - % interbeam = 3.70\pt; - interbeam = 3.90\pt; - - gourlay_energybound = 100000.; - gourlay_maxmeasures = 10.; - - castingalgorithm = \Gourlay; \symboltables { \table_twenty } -\include "engraver.ly" + \include "params.ly"; } diff --git a/init/paper26.ly b/init/paper26.ly index f7ba97952f..1e38b8bec8 100644 --- a/init/paper26.ly +++ b/init/paper26.ly @@ -1,39 +1,20 @@ -% paper20.ly +% paper26.ly -\include "table26.ly" +\include "table26.ly"; paper_twentysix = \paper { - linewidth = 15.0 \cm; - indent = 12.0\mm; - rulethickness = 0.5\pt; - barsize = 26.0 \pt; - interline = 6.5\pt; - notewidth = 7.15\pt; % ugh see table20 for sizes - wholewidth = 10.44\pt; - unitspace = 22.\pt; -% basicspace = 4.\pt; -% geometric = 1.414; - geometric = 0.; - basicspace = 9.\pt; + staffheight = 20.0\pt; + linewidth = 17.0 \cm; - arithmetic_basicspace = 2.; - arithmetic_multiplier = 7.\pt; - - % three beams span two interlines, including stafflines: - % 2ib + bt = 2 il - st - % bt = 0.48(il - st) for now. - % 2ib + 0.48il - 0.48 st = 2il - st - % 2ib = 1.52il - 0.52 st - % ib = 0.76il - 0.26st = 4.81 - % interbeam = 4.81\pt; - % now, it seams rather ib = 0.76il + 0.26st = 5.07 - interbeam = 5.07\pt; + % ugh see table26 for sizes + notewidth = 8.59\pt + wholewidth = 12.87\pt; - gourlay_energybound = 100000.; - gourlay_maxmeasures = 12.; + basicspace = 8.\pt; + arithmetic_basicspace = 2.; + arithmetic_multiplier = 6.\pt; - castingalgorithm = \Gourlay; - \symboltables { \table_twentysix } -\include "engraver.ly" + \symboltables { \table_twenty } + \include "params.ly"; } diff --git a/init/params.ly b/init/params.ly new file mode 100644 index 0000000000..f6313c648b --- /dev/null +++ b/init/params.ly @@ -0,0 +1,49 @@ +% params.ly +% generic paper parameters + +interline = staffheight / 4.0; +internote = interline / 2.0; +staffline = interline / 10.0; + +beam_thickness = 0.48 * (interline - staffline); +interbeam = (2.0 * interline - beam_thickness) / 2.0; +interbeam4 = (3.0 * interline - beam_thickness) / 3.0; + +% OSU: suggested gap = ss / 5; +slur_x_gap = interline / 5.0; +slur_x_minimum = 2.0 * interline; +tie_x_minimum = slur_x_minimum; +tie_x_gap = slur_x_gap; + +% ugh: rename to bow (in bezier.cc and fonts.doc too...) +slur_thickness = 1.8 * staffline; +slur_height_limit = staffheight; +slur_ratio = 1.0 / 3.0; +slur_clip_ratio = 1.2; +slur_clip_height = 3.0 * staffheight; +slur_clip_angle = 100.0; +slur_rc_factor = 2.4; + +% ugh +notewidth = (quartwidth + wholewidth) / 2.0; + +% ugh +barsize = staffheight; +rulethickness = staffline; + +% mmm +indent = linewidth / 14.0; + +% uhm +unitspace = 22.\pt; +geometric = 0.; + +gourlay_energybound = 100000.; +%{ +The following bounds the number of measures +on a line. Decreasing it greatly reduces computation time +%} +gourlay_maxmeasures = 10.; +castingalgorithm = \Gourlay; +\include "engraver.ly"; + diff --git a/init/property.ly b/init/property.ly index 587db1d47f..9520dbb86f 100644 --- a/init/property.ly +++ b/init/property.ly @@ -17,6 +17,10 @@ pletvisibility 1 show number pletvisibility 2 show number, and bracket-if-no-beam pletvisibility 4 show number, and bracket +slurdash 0 normal slurs +slurdash 1 dotted slurs +slurdash >1 dashed slurs + [Score?] beamslopedamping 0 no damping \beamslopeproportional beamslopedamping 1 damping1) \beamslopedamped @@ -127,3 +131,11 @@ beampostraditional = { \property Score.beamquantisation = \traditional } +slurnormal = { + \property Voice.slurdash = 0 +} + +slurdotted = { + \property Voice.slurdash = 1 +} + diff --git a/input/Makefile b/input/Makefile index 4167e225f9..b74c0c32a3 100644 --- a/input/Makefile +++ b/input/Makefile @@ -9,6 +9,6 @@ SUBDIRS=test bugs include $(depth)/make/Mutopia.make -WWW_examples=twinkle-pop praeludium-fuga-E cadenza twinkle +examples=twinkle-pop praeludium-fuga-E cadenza twinkle include $(depth)/make/WWW.make diff --git a/input/pedal.ly b/input/pedal.ly index 41affb55f2..bdf20beb9d 100644 --- a/input/pedal.ly +++ b/input/pedal.ly @@ -39,10 +39,10 @@ < 'c-\ltoe-\lheel 'e > < c'-\rtoe-\rheel e' > < 'c-\lheel-\ltoe 'e > < c'-\rheel-\rtoe e' > | % 46 - \duration 16; - [d-\lfheel e-\rbtoe fis-\ltoe e-\rbtoe] + + [d16-\lfheel e-\rbtoe fis-\ltoe e-\rbtoe] [d-\lfheel e-\rbtoe fis-\lheel e] [d e fis e] [d e fis e] | - d4 r4 r4 [b-\rtoe a-\ltoe b-\rtoe fis-\ltoe] | + d4 r4 r4 [b16-\rtoe a-\ltoe b-\rtoe fis-\ltoe] | } \paper{} } diff --git a/input/scales.ly b/input/scales.ly index 3e3ad7de7f..3736895648 100644 --- a/input/scales.ly +++ b/input/scales.ly @@ -64,7 +64,7 @@ blah = \melodic { \meter 4/4; c1 - \duration 8; + r8-"text" r8^. r8_. r8 r8 r8 r8 r8 [c-> d-> e-> f->][g-> a-> b-> c'->] % 1 \octave c'; [c'-^ b-^ a-^ g-^][f-^ e-^ d-^ c-^] diff --git a/input/test/Makefile b/input/test/Makefile index b03bae72a4..9fa614ef2e 100644 --- a/input/test/Makefile +++ b/input/test/Makefile @@ -6,4 +6,8 @@ depth = ../.. # +examples = font20 + include $(depth)/make/Mutopia.make + +include $(depth)/make/WWW.make diff --git a/input/test/abbrev.ly b/input/test/abbrev.ly index c2522e60a1..c57aeabdae 100644 --- a/input/test/abbrev.ly +++ b/input/test/abbrev.ly @@ -5,13 +5,13 @@ 'a1 'a1:32 'c4:8 c': 'c4:16 c': -% [ 'c8:16 'c 'c 'c ] [ a a a a ] -% [ 'c 'f 'b e ] -% [ 'c16:32 'c 'c 'c ] [ a16:32 a a a ] -%% % there's still some hairy beam bugfixing todo -%% [ c'8:16 g d 'a ] -%% [ c'16:32 g d 'a ] -%% [ 'c8:32 'f 'b e ] + [ 'c8:16 'c 'c 'c ] [ a a a a ] + [ 'c 'f 'b e ] + [ 'c16:32 'c 'c 'c ] [ a16:32 a a a ] +% % there's still some hairy beam bugfixing todo + [ c'8:16 g d 'a ] + [ c'16:32 g d 'a ] + [ 'c8:32 'f 'b e ] [:32 c16 e] [:32 c16 e] [:16 c8 e] diff --git a/input/test/beam-pos.ly b/input/test/beam-pos.ly index 74367dc474..76030ec43e 100644 --- a/input/test/beam-pos.ly +++ b/input/test/beam-pos.ly @@ -3,7 +3,9 @@ \property Score.beamquantisation = 3 % TEST \octave c'; [c8 c] [c c] [c c] [c c] - [a'8 a'] [a' a'] [a' a'] [a' a'] + [a' a'] [a' a'] [a' a'] [a' a'] + [c16 c] [c c] [c c] [c c] + [a' a'] [a' a'] [a' a'] [a' a'] } \paper{ castingalgorithm = \Wordwrap; diff --git a/input/test/clefs.ly b/input/test/clefs.ly index 7722d99d1b..3c14564347 100644 --- a/input/test/clefs.ly +++ b/input/test/clefs.ly @@ -8,6 +8,8 @@ \clef "tenor";c1^"{tenor}" \bar "||"; \clef "baritone";c1^"{baritone}" \bar "||"; \clef "varbaritone";c1^"{varbaritone}" \bar "||"; + \clef "G_8";c1^"{sub 8?}" \bar "||"; + \clef "G^8";c1^"{sup 8?}" \bar "|."; \clef "bass";c1^"{bass}" \bar "||"; \clef "subbass";c1^"{subbass}" \bar "|."; } diff --git a/input/test/dotted-slur.ly b/input/test/dotted-slur.ly new file mode 100644 index 0000000000..067f019be2 --- /dev/null +++ b/input/test/dotted-slur.ly @@ -0,0 +1,20 @@ +\score{ + \melodic{ + c( d e )c | + \slurdotted; + c( d e )c | + \slurnormal; + c( d e )c | + \property Voice.slurdash = 3 + c( d e )c | + \slurnormal; + c( d e )c | + } + \paper{ + indent = 0.0\pt; + %for broken! + % linewidth= 30.\mm; + castingalgorithm = \Wordwrap; + } +} + diff --git a/input/test/multi-rest.ly b/input/test/multi-rest.ly new file mode 100644 index 0000000000..691427bd49 --- /dev/null +++ b/input/test/multi-rest.ly @@ -0,0 +1,30 @@ +voice_one = \melodic { \octave c'; \stemup + R1 * 2 | f'4-. r r2 | R1 * 3 | + f'4-. r r2 | R1 * 3 | + es'4-. r r2 | r1 | + \property Score.SkipBars = 1 + g4-. r r2 | g4-. r r2 | + R1 * 5 | + r2 r4 g4-. | + } + +voice_two = \melodic + { \transpose 'c { \stemdown + R1 * 2 | f'4-. r r2 | R1 * 3 | + f'4-. r r2 | R1 * 3 | + es'4-. r r2 | r1 | + \property Score.SkipBars = 1 + g4-. r r2 | g4-. r r2 | + R1 * 5 | + r2 r4 g4-. | + + }} + +\score { \melodic + \type Staff < + \$voice_two + \$voice_one + > + + } + diff --git a/input/test/slurs.ly b/input/test/slurs.ly index 6663ffdffa..14dedf18fe 100644 --- a/input/test/slurs.ly +++ b/input/test/slurs.ly @@ -3,7 +3,6 @@ \score{ \melodic{\octave c'; - \duration "last"; 'c4 ~ 'c c'' ~ c'' ~ g ~ c ~ d ~ e ~ f ~ g ~ diff --git a/lily/abbrev.cc b/lily/abbrev.cc index 54088537b6..977c1307c6 100644 --- a/lily/abbrev.cc +++ b/lily/abbrev.cc @@ -30,10 +30,9 @@ Abbreviation::do_print () const Molecule* Abbreviation::brew_molecule_p () const { - Real dy = paper ()->interbeam_f (); + Real dy = paper ()->interbeam_f (stem_l_->mult_i_); Real w = 1.5 * paper ()->lookup_l ()->ball (2).dim_.x ().length (); Real interline_f = paper ()->interline_f (); - Real beamdy = interline_f/2; int beams_i = 0; Real slope_f = paper ()->internote_f () / 4; diff --git a/lily/abbreviation-beam-engraver.cc b/lily/abbreviation-beam-engraver.cc index ca62b92d24..f2a69f5504 100644 --- a/lily/abbreviation-beam-engraver.cc +++ b/lily/abbreviation-beam-engraver.cc @@ -94,6 +94,7 @@ Abbreviation_beam_engraver::acknowledge_element (Score_elem_info i) else s->beams_right_i_ = s->flag_i_; + abeam_p_->multiple_i_ = s->flag_i_; if (s->type_i () != 1) // no abbrev gaps on half note s->beam_gap_i_ = s->flag_i_ - ((s->type_i () >? 2) - 2); diff --git a/lily/bar-grav.cc b/lily/bar-grav.cc index b711bf4a07..33e62ad6a9 100644 --- a/lily/bar-grav.cc +++ b/lily/bar-grav.cc @@ -46,24 +46,6 @@ Bar_engraver::create_bar () } } -void -Bar_engraver::acknowledge_element (Score_elem_info i) -{ - if (!bar_p_ || !i.elem_l_->is_type_b (Multi_measure_rest::static_name ())) - return; - -#if 0 - if (!bar_p_ || !i.req_l_ || !i.req_l_->musical () - || !i.req_l_->musical ()->multi_measure ()) - return; - - // would this be enough? - //urg segfault - bar_p_->unlink (); - delete bar_p_; - bar_p_ = 0; -#endif -} void Bar_engraver::do_creation_processing () @@ -101,8 +83,9 @@ Bar_engraver::do_process_requests() if (!bar_p_) { - Disallow_break_req r; - daddy_grav_l()->try_request (&r); + Break_req r; + r.penalty_i_ = Break_req::DISALLOW; + daddy_grav_l ()->try_request (&r); } } diff --git a/lily/beam.cc b/lily/beam.cc index fef050e58b..e792aeddbd 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -11,7 +11,6 @@ /* [TODO] - * lowest beam of (UP) beam must never be lower than second staffline * centre beam symbol * less hairy code * redo grouping @@ -68,10 +67,7 @@ Beam::brew_molecule_p () const { Molecule *mol_p = new Molecule; - Real interline_f = paper ()->interline_f (); - Real internote_f = interline_f / 2; - Real staffline_f = paper ()->rule_thickness (); - Real beam_f = 0.48 * (interline_f - staffline_f); + Real internote_f = paper ()->internote_f (); Real x0 = stems_[0]->hpos_f (); for (int j=0; j <stems_.size (); j++) @@ -275,7 +271,7 @@ Beam::quantise_dy () Real interline_f = paper ()->interline_f (); Real internote_f = interline_f / 2; Real staffline_f = paper ()->rule_thickness (); - Real beam_f = 0.48 * (interline_f - staffline_f); + Real beam_f = paper ()->beam_thickness_f (); Real dx_f = stems_.top ()->hpos_f () - stems_[0]->hpos_f (); @@ -330,12 +326,16 @@ Beam::quantise_left_y (bool extend_b) hang straddle sit inter hang */ - Real interbeam_f = paper ()->interbeam_f (); Real interline_f = paper ()->interline_f (); - Real internote_f = interline_f / 2; + Real internote_f = paper ()->internote_f (); Real staffline_f = paper ()->rule_thickness (); - Real beam_f = 0.48 * (interline_f - staffline_f); - Real symbol_f = beam_f + interbeam_f * (multiple_i_ - 1); + Real beam_f = paper ()->beam_thickness_f (); + + /* + [TODO] + it would be nice to have all allowed positions in a runtime matrix: + (multiplicity, minimum_beam_dy, maximum_beam_dy) + */ Real straddle = 0; Real sit = beam_f / 2 - staffline_f / 2; @@ -354,25 +354,28 @@ Beam::quantise_left_y (bool extend_b) // dim(left_y_) = internote Real dy_f = dir_ * left_y_ * internote_f; + Real beamdx_f = stems_.top ()->hpos_f () - stems_[0]->hpos_f (); + Real beamdy_f = beamdx_f * slope_f_ * internote_f; + Array<Real> allowed_position; if (quantisation_ != TEST) { if (quantisation_ <= NORMAL) { - if ((multiple_i_ <= 2) || (abs (dy_f) >= staffline_f / 2)) + if ((multiple_i_ <= 2) || (abs (beamdy_f) >= staffline_f / 2)) allowed_position.push (straddle); - if ((multiple_i_ <= 1) || (abs (dy_f) >= staffline_f / 2)) + if ((multiple_i_ <= 1) || (abs (beamdy_f) >= staffline_f / 2)) allowed_position.push (sit); allowed_position.push (hang); } else // TODO: check and fix TRADITIONAL { - if ((multiple_i_ <= 2) || (abs (dy_f) >= staffline_f / 2)) + if ((multiple_i_ <= 2) || (abs (beamdy_f) >= staffline_f / 2)) allowed_position.push (straddle); - if ((multiple_i_ <= 1) && (dy_f <= staffline_f / 2)) + if ((multiple_i_ <= 1) && (beamdy_f <= staffline_f / 2)) allowed_position.push (sit); - if (dy_f >= -staffline_f / 2) + if (beamdy_f >= -staffline_f / 2) allowed_position.push (hang); } } @@ -420,18 +423,7 @@ Beam::quantise_left_y (bool extend_b) void Beam::set_stemlens () { - Real interbeam_f = paper ()->interbeam_f (); - Real interline_f = paper ()->interline_f (); - Real internote_f = interline_f / 2; Real staffline_f = paper ()->rule_thickness (); - Real beam_f = 0.48 * (interline_f - staffline_f); - - /* - if we have more than three beams they must open-up - in order to not collide with staff lines - */ - if (multiple_i_ > 3) - interbeam_f += 2.0 * staffline_f / 4; Real x0 = stems_[0]->hpos_f (); Real dy = 0; @@ -457,13 +449,6 @@ Beam::set_stemlens () } } while (abs (dy) > epsilon); - // ugh asymmetric symbol ? - if (dir_ == UP) - left_y_ -= dir_ * staffline_f / 4; - - if ((multiple_i_ >= 3) && (dir_ == UP)) - left_y_ -= dir_ * staffline_f / 4; - test_pos++; test_pos %= 4; } @@ -519,13 +504,10 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const assert (!prev || prev->hpos_f () < here->hpos_f ()); Real staffline_f = paper ()->rule_thickness (); - Real interbeam_f = paper ()->interbeam_f (); - Real internote_f =paper ()->internote_f (); - Real interline_f = 2 * internote_f; - Real beamheight_f = 0.48 * (interline_f - staffline_f); + Real interbeam_f = paper ()->interbeam_f (multiple_i_); + Real internote_f = paper ()->internote_f (); + Real beam_f = paper ()->beam_thickness_f (); - if (multiple_i_ > 3) - interbeam_f += 2.0 * staffline_f / 4; Real dy = interbeam_f; Real stemdx = staffline_f; Real sl = slope_f_* internote_f; @@ -542,7 +524,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const Real w = (here->hpos_f () - prev->hpos_f ())/4 <? paper ()->note_width ();; Atom a; if (lhalfs) // generates warnings if not - a = paper ()->lookup_l ()->beam (sl, w, beamheight_f); + a = paper ()->lookup_l ()->beam (sl, w, beam_f); a.translate (Offset (-w, -w * sl)); for (int j = 0; j < lhalfs; j++) { @@ -558,7 +540,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const int rwholebeams = here->beams_right_i_ <? next->beams_left_i_; Real w = next->hpos_f () - here->hpos_f (); - Atom a = paper ()->lookup_l ()->beam (sl, w + stemdx, beamheight_f); + Atom a = paper ()->lookup_l ()->beam (sl, w + stemdx, beam_f); a.translate_axis( - stemdx/2, X_AXIS); int j = 0; Real gap_f = 0; @@ -574,7 +556,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const // TODO: notehead widths differ for different types gap_f = paper ()->note_width () / 2; w -= 2 * gap_f; - a = paper ()->lookup_l ()->beam (sl, w + stemdx, beamheight_f); + a = paper ()->lookup_l ()->beam (sl, w + stemdx, beam_f); } for (; j < rwholebeams; j++) @@ -586,7 +568,7 @@ Beam::stem_beams (Stem *here, Stem *next, Stem *prev) const w = w/4 <? paper ()->note_width (); if (rhalfs) - a = paper ()->lookup_l ()->beam (sl, w, beamheight_f); + a = paper ()->lookup_l ()->beam (sl, w, beam_f); for (; j < rwholebeams + rhalfs; j++) { diff --git a/lily/bezier.cc b/lily/bezier.cc index 2267e2d42c..2242c4ffa5 100644 --- a/lily/bezier.cc +++ b/lily/bezier.cc @@ -144,8 +144,7 @@ Bezier_bow::blow_fit () Real internote_f = STAFFHEIGHT / 8; #endif - //urg - Real epsilon = internote_f / 2; + Real epsilon = internote_f / 4; if (abs (dy2 - dy1) < epsilon) return; @@ -200,7 +199,7 @@ Bezier_bow::calc_f (Real height) Real dy = check_fit_f (); calc_return (0, 0); - transform_controls_back (); + transform_back (); return dy; } @@ -211,7 +210,7 @@ Bezier_bow::calc () calc_controls (); - transform_controls_back (); + transform_back (); } /* @@ -249,30 +248,33 @@ bool Bezier_bow::calc_clipping () { #ifndef STANDALONE - Real staffsize_f = paper_l_->get_var ("barsize"); + Real clip_height = paper_l_->get_var ("slur_clip_height"); + Real clip_ratio = paper_l_->get_var ("slur_clip_ratio"); + Real clip_angle = paper_l_->get_var ("slur_clip_angle"); #else Real staffsize_f = STAFFHEIGHT; + Real clip_height = 3.0 * staffsize_f; + Real clip_ratio = 1.2; + Real clip_angle = 100; #endif Real b = control_[3].x () - control_[0].x (); - Real clip_h = 1.2 * b <? 3.0 * staffsize_f; + Real clip_h = clip_ratio * b <? clip_height; Real begin_h = control_[1].y () - control_[0].y (); Real end_h = control_[2].y () - control_[3].y (); Real begin_dy = 0 >? begin_h - clip_h; Real end_dy = 0 >? end_h - clip_h; Real pi = M_PI; - Real begin_alpha = (control_[1] - control_[0]).arg () + alpha_; - Real end_alpha = pi - (control_[2] - control_[3]).arg () - alpha_; + Real begin_alpha = (control_[1] - control_[0]).arg () + dir_ * alpha_; + Real end_alpha = pi - (control_[2] - control_[3]).arg () - dir_ * alpha_; - Real max_alpha = (100.0 / 90) * pi/2; + Real max_alpha = clip_angle / 90 * pi / 2; if ((begin_dy < 0) && (end_dy < 0) && (begin_alpha < max_alpha) && (end_alpha < max_alpha)) return false; - encompass_.rotate (alpha_); - origin_.y () *= dir_; - encompass_.translate (origin_); + transform_back (); bool again = true; @@ -280,8 +282,8 @@ Bezier_bow::calc_clipping () { Real dy = (begin_dy + end_dy) / 4; dy *= cos (alpha_); - encompass_[0].y () += dy; - encompass_[encompass_.size () - 1].y () += dy; + encompass_[0].y () += dir_ * dy; + encompass_[encompass_.size () - 1].y () += dir_ * dy; } else { @@ -292,17 +294,14 @@ Bezier_bow::calc_clipping () if (end_alpha >= max_alpha) end_dy = 0 >? c * end_alpha / max_alpha * end_h; - encompass_[0].y () += begin_dy; - encompass_[encompass_.size () - 1].y () += end_dy; + encompass_[0].y () += dir_ * begin_dy; + encompass_[encompass_.size () - 1].y () += dir_ * end_dy; Offset delta = encompass_[encompass_.size () - 1] - encompass_[0]; alpha_ = delta.arg (); } - origin_ = encompass_[0]; - encompass_.translate (-origin_); - origin_.y () *= dir_; - encompass_.rotate (-alpha_); + transform (); return again; } @@ -335,7 +334,7 @@ void Bezier_bow::calc_return (Real begin_alpha, Real end_alpha) { #ifndef STANDALONE - Real thick = 1.8 * paper_l_->rule_thickness (); + Real thick = paper_l_->get_var ("slur_thickness"); #else Real thick = 1.8 * 0.4 PT; #endif @@ -400,7 +399,13 @@ Bezier_bow::calc_tangent_controls () // emperic computer science: // * tangents somewhat steeper than minimal line +#ifndef STANDALONE + Real internote = paper_l_->internote_f (); + Real rc_correct = paper_l_->get_var ("slur_rc_factor"); +#else + Real internote = STAFFHEIGHT / 8; Real rc_correct = 2.4; +#endif begin_rc *= rc_correct; end_rc *= rc_correct; @@ -411,11 +416,6 @@ Bezier_bow::calc_tangent_controls () Real end_alpha = atan (-end_rc); Real theta = (begin_alpha - end_alpha) / 2; -#ifndef STANDALONE - Real internote = paper_l_->internote_f (); -#else - Real internote = STAFFHEIGHT / 8; -#endif Real epsilon = internote / 5; // if we have two disturbing points, have height line through those... @@ -491,11 +491,8 @@ Bezier_bow::transform () } void -Bezier_bow::transform_controls_back () +Bezier_bow::transform_back () { - // silly name; let's transform encompass back too - // to allow recalculation without re-set()ting encompass array - if (dir_ == DOWN) { control_.flipy (); @@ -511,7 +508,6 @@ Bezier_bow::transform_controls_back () encompass_.rotate (alpha_); encompass_.translate (origin_); - } /* @@ -522,13 +518,13 @@ Bezier_bow::calc_default (Real h) { Real pi = M_PI; #ifndef STANDALONE - Real staffsize_f = paper_l_->get_var ("barsize"); + Real height_limit = paper_l_->get_var ("slur_height_limit"); + Real ratio = paper_l_->get_var ("slur_ratio"); #else Real staffsize_f = STAFFHEIGHT; -#endif - Real height_limit = staffsize_f; Real ratio = 1.0/3.0; +#endif Real alpha = height_limit * 2.0 / pi; Real beta = pi * ratio / (2.0 * height_limit); diff --git a/lily/bow.cc b/lily/bow.cc index 770fd8a973..b986debd30 100644 --- a/lily/bow.cc +++ b/lily/bow.cc @@ -21,16 +21,22 @@ Bow::Bow () { dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = 0.0; dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0; + dash_i_ = 0; } Molecule* Bow::brew_molecule_p () const { - Molecule* mol_p = new Molecule; - + Real thick = paper ()->get_var ("slur_thickness"); Array<Offset> c = get_controls (); - Atom a = paper ()->lookup_l ()->slur (c); Real dy = c[3].y () - c[0].y (); + Atom a; + + if (!dash_i_) + a = paper ()->lookup_l ()->slur (c); + else + a = paper ()->lookup_l ()->dashed_slur (c, thick, dash_i_); + if (check_debug && !monitor->silent_b ("Bow")) { static int i = 1; @@ -46,6 +52,7 @@ Bow::brew_molecule_p () const } a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT])); + Molecule* mol_p = new Molecule; mol_p->add (a); return mol_p; diff --git a/lily/break.cc b/lily/break.cc index f25ac5e32f..42db7970f5 100644 --- a/lily/break.cc +++ b/lily/break.cc @@ -9,15 +9,17 @@ #include "score-column.hh" #include "break.hh" #include "paper-def.hh" -#include "line-spacer.hh" +#include "spring-spacer.hh" #include "debug.hh" #include "scoreline.hh" #include "p-score.hh" #include "p-col.hh" #include "cpu-timer.hh" +#include "command-request.hh" String -Col_stats::str () const { +Col_stats::str () const +{ String s (count_i_); s += _ (" lines"); if (count_i_) @@ -98,7 +100,7 @@ Break_algorithm::find_breaks () const Line_spacer* Break_algorithm::generate_spacing_problem (Line_of_cols curline, Interval line) const { - Line_spacer * sp= (*get_line_spacer) (); + Spring_spacer * sp= (Spring_spacer*) (*get_line_spacer) (); // ugh sp->paper_l_ = pscore_l_->paper_l_; sp->add_column (curline[0], true, line.min ()); @@ -106,7 +108,10 @@ Break_algorithm::generate_spacing_problem (Line_of_cols curline, Interval line) sp->add_column (curline[i]); if (line.length () > 0) - sp->add_column (curline.top (), true, line.max ()); + { + sp->add_column (curline.top (), true, line[RIGHT]); + sp->energy_normalisation_f_ = sqr (line.length ()); + } else sp->add_column (curline.top ()); @@ -138,7 +143,7 @@ Break_algorithm::feasible (Line_of_cols curline) const for (int i=0; i < curline.size (); i++) { if (i && i < curline.size () -1 - && ((Score_column*)curline[i])->forced_break_b ()) + && (((Score_column*)curline[i])->break_penalty_i () >= Break_req::FORCE)) return false; } return true; diff --git a/lily/clef-grav.cc b/lily/clef-grav.cc index d7ce0c4df0..bc981272a4 100644 --- a/lily/clef-grav.cc +++ b/lily/clef-grav.cc @@ -20,6 +20,7 @@ Clef_engraver::Clef_engraver() clef_req_l_ =0; clef_type_str_ = 0; c0_position_i_ =0; + octave_dir_ = CENTER; } /* @@ -28,6 +29,18 @@ Clef_engraver::Clef_engraver() bool Clef_engraver::set_type (String s) { + if (s.right_str(2) == "_8") // Down one octave + { + octave_dir_ = DOWN; + s = s.left_str(s.length_i() - 2); + } + else if (s.right_str(2) == "^8") // Up one octave + { + octave_dir_ = UP; + s = s.left_str(s.length_i() - 2); + } + else + octave_dir_ = CENTER; clef_type_str_ = s; if (clef_type_str_ == "violin" || clef_type_str_ == "G" || clef_type_str_ == "G2") c0_position_i_= -6; @@ -64,6 +77,7 @@ Clef_engraver::set_type (String s) default: return false; } + c0_position_i_ -= (int) octave_dir_ * 7; return true; } diff --git a/lily/clef-item.cc b/lily/clef-item.cc index eda65592b9..234b85fbb4 100644 --- a/lily/clef-item.cc +++ b/lily/clef-item.cc @@ -13,7 +13,7 @@ #include "paper-def.hh" #include "lookup.hh" #include "clef-grav.hh" - +#include "text-item.hh" void Clef_item::do_pre_processing() @@ -32,7 +32,12 @@ Clef_item::Clef_item() breakable_b_ =true; default_b_ = false; change_b_ = true; + octave_dir_ = CENTER; read ("violin"); + // Ugh: This should be const, I guess. + octave_marker_td_p_ = new Text_def(); + octave_marker_td_p_->text_str_ = "8"; + octave_marker_td_p_->style_str_ = "italic"; } /* @@ -129,6 +134,7 @@ void Clef_item::read (Clef_engraver const &k) { read (k.clef_type_str_); + octave_dir_ = k.octave_dir_; } Molecule* @@ -140,6 +146,11 @@ Clef_item::brew_molecule_p() const Atom s = paper()->lookup_l ()->clef (t); Molecule*output = new Molecule (Atom (s)); output->translate_axis (paper()->internote_f () * y_position_i_, Y_AXIS); + if (octave_dir_) + output->add_at_edge (Y_AXIS, + octave_dir_, + Molecule(octave_marker_td_p_->get_atom(paper(), + CENTER))); return output; } diff --git a/lily/command-request.cc b/lily/command-request.cc index 6742e6bee7..b4f142a7ed 100644 --- a/lily/command-request.cc +++ b/lily/command-request.cc @@ -90,14 +90,6 @@ IMPLEMENT_IS_TYPE_B1(Command_req,Request); void Command_req::do_print() const{} -IMPLEMENT_IS_TYPE_B1(Disallow_break_req,Command_req); - -void -Disallow_break_req::do_print() const -{ -} -/* *************** */ - IMPLEMENT_IS_TYPE_B1(Barcheck_req,Timing_req); void @@ -252,12 +244,17 @@ Key_change_req::Key_change_req() multi_octave_b_= false; } -void -Break_force_req::do_print () const +IMPLEMENT_IS_TYPE_B1(Break_req, Command_req); + +Break_req::Break_req () { + penalty_i_ = 0; } -IMPLEMENT_IS_TYPE_B1(Break_force_req, Command_req); +void +Break_req::do_print () const +{ +} Key_change_req::Key_change_req (Key_change_req const&c) : Command_req (c) diff --git a/lily/include/bar-grav.hh b/lily/include/bar-grav.hh index 7677f5279d..b513e3e517 100644 --- a/lily/include/bar-grav.hh +++ b/lily/include/bar-grav.hh @@ -26,7 +26,6 @@ public: protected: - virtual void acknowledge_element (Score_elem_info); virtual void do_creation_processing (); virtual void do_removal_processing (); virtual bool do_try_request (Request *req_l); diff --git a/lily/include/bezier.hh b/lily/include/bezier.hh index df6b3362cb..ea8c1ed00d 100644 --- a/lily/include/bezier.hh +++ b/lily/include/bezier.hh @@ -62,7 +62,7 @@ public: Real check_fit_f (); void set (Array<Offset> points, int dir); void transform (); - void transform_controls_back (); + void transform_back (); Paper_def* paper_l_; Curve encompass_; diff --git a/lily/include/bow.hh b/lily/include/bow.hh index 4dbf2ead70..e7e3e912cc 100644 --- a/lily/include/bow.hh +++ b/lily/include/bow.hh @@ -25,6 +25,8 @@ public: DECLARE_MY_RUNTIME_TYPEINFO; + int dash_i_; + protected: virtual Molecule* brew_molecule_p () const; virtual Interval do_width () const; diff --git a/lily/include/clef-grav.hh b/lily/include/clef-grav.hh index 61318648ed..ec4702cac8 100644 --- a/lily/include/clef-grav.hh +++ b/lily/include/clef-grav.hh @@ -13,6 +13,7 @@ #include "scalar.hh" #include "varray.hh" #include "engraver.hh" +#include "direction.hh" /// where is c-0 in the staff? class Clef_engraver : public Engraver { @@ -33,6 +34,7 @@ protected: public: TRANSLATOR_CLONE(Clef_engraver); int c0_position_i_; + Direction octave_dir_; String clef_type_str_; /* ************** */ diff --git a/lily/include/clef-item.hh b/lily/include/clef-item.hh index c6e00a992e..3b82f9d426 100644 --- a/lily/include/clef-item.hh +++ b/lily/include/clef-item.hh @@ -7,6 +7,8 @@ #ifndef CLEFITEM_HH #define CLEFITEM_HH #include "item.hh" +#include "text-def.hh" +#include "direction.hh" /** Set a clef in a staff. @@ -26,6 +28,12 @@ public: /// set because of existence of a bar bool default_b_; + /// should we print an octave symbol (8), and where? (up=1, down=1)? + Direction octave_dir_; + + /// text def to put above/below clef (ugh: should be const) + Text_def * octave_marker_td_p_; + /* *************** */ DECLARE_MY_RUNTIME_TYPEINFO; SCORE_ELEM_CLONE(Clef_item); diff --git a/lily/include/command-request.hh b/lily/include/command-request.hh index 9a12dc8e19..112fa2f6d8 100644 --- a/lily/include/command-request.hh +++ b/lily/include/command-request.hh @@ -26,16 +26,18 @@ public: virtual Meter_change_req * meterchange() { return 0; } virtual Bar_req *bar() { return 0; } virtual Cadenza_req *cadenza() { return 0; } - virtual Disallow_break_req *disallowbreak() { return 0; } virtual Timing_req*timing() { return 0; } virtual Command_script_req*commandscript() { return 0;} - virtual Break_force_req *forcebreak () { return 0; } + virtual Break_req *linebreak () { return 0; } }; -class Break_force_req : public Command_req { +class Break_req : public Command_req { public: - REQUESTMETHODS(Break_force_req, forcebreak); + enum { DISALLOW = -10000, FORCE = 10000 }; + int penalty_i_; + Break_req (); + REQUESTMETHODS (Break_req, linebreak); }; class Command_script_req : public Command_req, public Script_req { @@ -46,13 +48,6 @@ public: REQUESTMETHODS(Command_script_req, commandscript); }; - -class Disallow_break_req : public Command_req { -public: - REQUESTMETHODS(Disallow_break_req, disallowbreak); -}; - - /** Baseclass for meter/partial req. It has to be handled by Staff_{walker,column} baseclass. */ class Timing_req : public Command_req { diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 670125e1c7..9f47f8834e 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -44,8 +44,9 @@ struct Beam_req; struct Blank_req; struct Bow; struct Box; -struct Break_align_item; struct Bracket_req; +struct Break_align_item; +struct Break_req; struct Cadenza_req; struct Change_iterator; struct Change_translator; @@ -68,13 +69,11 @@ struct Decresc_req; struct Dots; struct Dot_column; struct Directional_spanner; -struct Disallow_break_req; struct Durational_req; struct Dynamic; struct Dynamic_req; struct Element_group; struct Element_group_item; -struct Break_force_req; struct General_script_def; struct Graphical_element; struct Music_output; diff --git a/lily/include/lookup.hh b/lily/include/lookup.hh index 9b291ee9ab..292363bb9c 100644 --- a/lily/include/lookup.hh +++ b/lily/include/lookup.hh @@ -50,6 +50,7 @@ struct Lookup { Atom bar (String, Real height) const; Atom dots () const; + Atom dashed_slur (Array<Offset> controls, Real thick, Real dash) const; Atom slur (Array<Offset> controls) const; Atom plet (Real dy, Real dx, Direction dir) const; Atom text (String style, String text, int align = 1) const; diff --git a/lily/include/main.hh b/lily/include/main.hh index e5c3191723..b96b62df56 100644 --- a/lily/include/main.hh +++ b/lily/include/main.hh @@ -22,6 +22,7 @@ void call_constructors (); extern Sources* source_global_l; extern bool no_paper_global_b; extern bool no_timestamps_global_b; +extern bool find_quarts_global_b; extern int exit_status_i_; extern bool experimental_features_global_b; extern bool dependency_global_b; diff --git a/lily/include/multi-measure-rest-engraver.hh b/lily/include/multi-measure-rest-engraver.hh index 2809343982..067ff3eae1 100644 --- a/lily/include/multi-measure-rest-engraver.hh +++ b/lily/include/multi-measure-rest-engraver.hh @@ -22,16 +22,18 @@ public: Multi_measure_rest_engraver (); protected: - virtual void do_removal_processing (); virtual void do_process_requests (); virtual bool do_try_request (Request*); virtual void do_pre_move_processing (); - + virtual void do_post_move_processing (); private: - bool part_b_; - Moment last_mom_; + Moment rest_req_stop_mom_; + Moment rest_item_creation_mom_; + Moment req_start_mom_; + + + int start_measure_i_; Multi_measure_rest_req* multi_measure_req_l_; Multi_measure_rest* mmrest_p_; }; - #endif // MULTI_MEASURE_REST_ENGRAVER_HH diff --git a/lily/include/musical-request.hh b/lily/include/musical-request.hh index 329b1cd0d0..850ba3463f 100644 --- a/lily/include/musical-request.hh +++ b/lily/include/musical-request.hh @@ -163,6 +163,7 @@ public: class Multi_measure_rest_req : public Rhythmic_req { public: REQUESTMETHODS(Multi_measure_rest_req, multi_measure); + }; /** diff --git a/lily/include/my-lily-parser.hh b/lily/include/my-lily-parser.hh index 63b520ecab..8c751af072 100644 --- a/lily/include/my-lily-parser.hh +++ b/lily/include/my-lily-parser.hh @@ -30,16 +30,21 @@ class My_lily_parser { Chord * get_note_element (Note_req * ,Duration *); Chord* get_rest_element (String,Duration *); Chord* get_word_element (Text_def*, Duration*); + Melodic_req* get_melodic_req (Melodic_req* melodic, int quotes); + void set_nearest (Melodic_req* melodic); + String notename_str (Melodic_req* melodic); void set_last_duration (Duration const *); void set_default_duration (Duration const *); void set_abbrev_beam (int type_i); void set_duration_mode (String s); + void set_octave_mode (String s); friend int yyparse (void*); public: int abbrev_beam_type_i_; int default_octave_i_; + Melodic_req* last_melodic_; Duration default_duration_; Plet plet_; Header *default_header_p_; @@ -47,6 +52,7 @@ public: String textstyle_str_; bool first_b_; bool last_duration_mode_b_ ; + bool relative_octave_mode_b_; Array<Request*> pre_reqs, post_reqs; int fatal_error_i_; Sources * source_l_; diff --git a/lily/include/paper-def.hh b/lily/include/paper-def.hh index 671faf456e..d2728d42f3 100644 --- a/lily/include/paper-def.hh +++ b/lily/include/paper-def.hh @@ -59,21 +59,28 @@ public: void set (Lookup*); Paper_def (Paper_def const&); - /// The distance between beams - Real interbeam_f () const; - /** - The distance between lines - */ + /// The distance between beams of multiplicity_i + Real interbeam_f (int multiplicity_i) const; + + /// The thickness of a beam + Real beam_thickness_f () const; + + /// The distance between lines Real interline_f () const; /// half the distance between lines Real internote_f () const; /// thickness of the standard line Real rule_thickness () const; + + /// thickness of the staff line + Real staffline_f () const; + Interval line_dimensions_int (int) const; Real linewidth_f () const; + /// height of the staff - Real standard_height () const; + Real staffheight_f () const; /// width of a crotchet ball Real note_width () const; diff --git a/lily/include/score-column.hh b/lily/include/score-column.hh index 961de68e2b..e82b51aa80 100644 --- a/lily/include/score-column.hh +++ b/lily/include/score-column.hh @@ -30,10 +30,11 @@ class Score_column : public Paper_column { friend class Score_engraver; bool musical_b_; - bool forced_break_b_; + int break_penalty_i_; Moment when_; + public: - bool forced_break_b () { return forced_break_b_ ; } + int break_penalty_i () { return break_penalty_i_; } DECLARE_MY_RUNTIME_TYPEINFO; SCORE_ELEM_CLONE(Score_column); /// length of notes/rests in this column diff --git a/lily/include/score-grav.hh b/lily/include/score-grav.hh index 4f11fd0f8f..bd89d2fd36 100644 --- a/lily/include/score-grav.hh +++ b/lily/include/score-grav.hh @@ -20,7 +20,7 @@ class Score_engraver : public Engraver_group_engraver, public Global_translator { Line_of_score * scoreline_l_; - bool disallow_break_b_; + int break_penalty_i_; int breaks_i_; Link_array<Score_elem> elem_p_arr_; diff --git a/lily/include/spring-spacer.hh b/lily/include/spring-spacer.hh index ea94a97c68..609fb666d6 100644 --- a/lily/include/spring-spacer.hh +++ b/lily/include/spring-spacer.hh @@ -45,6 +45,7 @@ class Spring_spacer : public Line_spacer { friend class Durations_iter; + Pointer_list<Idealspacing *> ideal_p_list_; Array<Colinfo> cols_; @@ -83,7 +84,8 @@ class Spring_spacer : public Line_spacer { Real calculate_energy_f (Vector) const; public: static Line_spacer *constructor(); - + Real energy_normalisation_f_; + Spring_spacer (); virtual void solve (Col_hpositions*) const; virtual void lower_bound_solution (Col_hpositions*) const; virtual void add_column (Paper_column *, bool fixed=false, Real fixpos=0.0); diff --git a/lily/include/time-description.hh b/lily/include/time-description.hh index cafd9a0664..5a84817ed9 100644 --- a/lily/include/time-description.hh +++ b/lily/include/time-description.hh @@ -13,40 +13,41 @@ /// full info on where we are struct Time_description { - Moment when_; + Moment when_; - /// found an error so far? - bool error_b_ ; + /// found an error so far? + bool error_b_ ; - /// if true, no bars needed, no reduction of whole_in_measure - bool cadenza_b_; + /// if true, no bars needed, no reduction of whole_in_measure + bool cadenza_b_; - /// current measure info - Moment whole_per_measure_; - - /// where am i - Moment whole_in_measure_; - - /// how long is one beat? - Moment one_beat_; - - /// idem - int bars_i_; - - /* *************** */ - void set_cadenza (bool); - void OK() const; - Time_description(); - void add (Moment dt); - bool allow_meter_change_b(); - String str() const; - void print() const; - void setpartial (Moment p); - String try_set_partial_str (Moment) const; - Moment barleft() const; - Moment next_bar_moment() const; - void set_meter (int,int); - static int compare (const Time_description&, const Time_description&); + /// current measure info + Moment whole_per_measure_; + + /// where am i + Moment whole_in_measure_; + + /// how long is one beat? + Moment one_beat_; + + /// idem + int bars_i_; + + /* *************** */ + void set_cadenza (bool); + Moment when_mom () const { return when_; } + void OK() const; + Time_description(); + void add (Moment dt); + bool allow_meter_change_b(); + String str() const; + void print() const; + void setpartial (Moment p); + String try_set_partial_str (Moment) const; + Moment barleft() const; + Moment next_bar_moment() const; + void set_meter (int,int); + static int compare (const Time_description&, const Time_description&); }; #include "compare.hh" @@ -57,7 +58,7 @@ INSTANTIATE_COMPARE(Time_description&,Time_description::compare); void process_timing_reqs (Time_description &time_, - Rhythmic_grouping *default_grouping, - Array<Timing_req*> const& timing_req_l_arr); + Rhythmic_grouping *default_grouping, + Array<Timing_req*> const& timing_req_l_arr); #endif // Time_description_HH diff --git a/lily/include/timing-grav.hh b/lily/include/timing-grav.hh index 22c7274a34..01c36c1aca 100644 --- a/lily/include/timing-grav.hh +++ b/lily/include/timing-grav.hh @@ -18,7 +18,6 @@ class Timing_engraver : public Timing_translator, public Engraver { protected: - virtual void acknowledge_element (Score_elem_info i); virtual void fill_staff_info (Staff_info&); virtual Engraver * engraver_l () { return Engraver::engraver_l (); } public: diff --git a/lily/include/timing-translator.hh b/lily/include/timing-translator.hh index 82aa0e19de..1b2fe054ea 100644 --- a/lily/include/timing-translator.hh +++ b/lily/include/timing-translator.hh @@ -33,6 +33,5 @@ protected: virtual void do_pre_move_processing(); virtual void do_post_move_processing(); - bool mmrest_b_; }; #endif // TIMING_TRANSLATOR_HH diff --git a/lily/lexer.ll b/lily/lexer.ll index 6d38b2451e..7e09d03e58 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -33,6 +33,7 @@ #include "debug.hh" #include "parseconstruct.hh" #include "main.hh" +#include "musical-request.hh" #include "identifier.hh" void strip_trailing_white (String&); void strip_leading_white (String&); @@ -136,9 +137,9 @@ TELP \\\] <notes,INITIAL,lyrics>\\include { yy_push_state (incl); } -<incl>\"[^"]*\" { /* got the include file name */ +<incl>\"[^"]*\";? { /* got the include file name */ String s (YYText ()+1); - s = s.left_str (s.length_i ()-1); + s = s.left_str (s.index_last_i ('"')); DOUT << "#include `" << s << "\'\n"; new_input (s,source_global_l); yy_pop_state (); @@ -153,6 +154,9 @@ TELP \\\] DOUT << "rest:"<< yylval.string; return RESTNAME; } +<notes>R { + return MEASURES; +} <INITIAL,lyrics,notes>\\\${BLACK}*{WHITE} { String s=YYText () + 2; s=s.left_str (s.length_i () - 1); @@ -370,6 +374,7 @@ My_lily_lexer::scan_escaped_word (String str) if (mel_l) { DOUT << "(notename)\n"; yylval.melreq = mel_l; + mel_l->set_spot (Input (source_file_l (), here_ch_C ())); return NOTENAME_ID; } } @@ -390,6 +395,7 @@ My_lily_lexer::scan_bare_word (String str) if (mel_l) { DOUT << "(notename)\n"; yylval.melreq = mel_l; + mel_l->set_spot (Input (source_file_l (), here_ch_C ())); return NOTENAME_ID; } } diff --git a/lily/lookup.cc b/lily/lookup.cc index bbdfd3c111..2a446f01a7 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -147,6 +147,39 @@ Lookup::flag (int j, Direction d) const } Atom +Lookup::dashed_slur (Array<Offset> controls, Real thick, Real dash) const +{ + assert (controls.size () == 8); + + String ps = "\\embeddedps{\n"; + + Real dx = controls[3].x () - controls[0].x (); + Real dy = controls[3].y () - controls[0].y (); + + for (int i = 1; i < 4; i++) + ps += String_convert::double_str (controls[i].x ()) + " " + + String_convert::double_str (controls[i].y ()) + " "; + + ps += String_convert::double_str (controls[0].x ()) + " " + + String_convert::double_str (controls[0].y ()) + " "; + + ps += String_convert::double_str (thick) + " "; + Real on = dash > 1? thick * dash - thick : 0; + Real off = 2 * thick; + ps += "[" + String_convert::double_str (on) + " "; + ps += String_convert::double_str (off) + "] "; + ps += String_convert::int_str (0) + " "; + ps += " draw_dashed_slur}"; + + Atom s; + s.tex_ = ps; + + s.dim_[X_AXIS] = Interval (0, dx); + s.dim_[Y_AXIS] = Interval (0 <? dy, 0 >? dy); + return s; +} + +Atom Lookup::slur (Array<Offset> controls) const { assert (controls.size () == 8); @@ -196,7 +229,7 @@ Lookup::hairpin (Real width, bool decresc, bool continued) const { String embed; Atom ret; - Real height = paper_l_->get_var ("barsize") / 6; + Real height = paper_l_->staffheight_f () / 6; embed = "\\embeddedps{\n" ; embed += String (width) + " " + String (height) + " " diff --git a/lily/main.cc b/lily/main.cc index 2049462714..bd5c6276de 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -24,6 +24,7 @@ bool version_ignore_global_b = false; bool no_paper_global_b = false; bool no_timestamps_global_b = false; +bool find_quarts_global_b = false; String default_outname_base_global = "lelie"; int default_count_global; @@ -45,6 +46,7 @@ Long_option_init theopts[] = { {0, "no-paper", 'M'}, {0, "dependencies", 'd'}, {0, "no-timestamps", 'T'}, + {0, "find-quarts", 'Q'}, {0, "ignore-version", 'V'}, {0,0,0} }; @@ -58,17 +60,17 @@ usage () "\n" "Options:\n" " -D, --debug enable debugging output\n" - " -d, --dependencies write dependency files for every output\n" + " -d, --dependencies write Makefile dependencies for every input file\n" + " -Q, --find-quarts show all intervals bigger than a quart\n" " -I, --include=DIR add DIR to search path\n" " -i, --init=FILE use FILE as init file\n" " -h, --help this help\n" - " -w, --warranty show warranty and copyright\n" + " -M, --no-paper produce midi output only\n" " -o, --output=FILE set FILE as default output\n" " -t, --test switch on experimental features\n" - " -M, --no-paper produce midi output only\n" - " -V, --ignore-version ignore mudela version\n" - " -T, --no-timestamps don't timestamp the output\n" + " -V, --ignore-version ignore mudela version\n" + " -w, --warranty show warranty and copyright\n" "\n" "GNU LilyPond was compiled with the following settings:\n") #ifdef NDEBUG @@ -85,8 +87,6 @@ usage () "\n"; ; - - } void @@ -160,6 +160,9 @@ main (int argc, char **argv) notice (); exit (0); break; + case 'Q': + find_quarts_global_b = true; + break; case 'I': path.push (oparser.optional_argument_ch_C_); break; diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 2c93ec04c6..56a3b8d93c 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -2,6 +2,7 @@ multi_measure_rest-engraver.cc -- implement Multi_measure_rest_engraver (c) 1998 Jan Nieuwenhuizen <jan@digicash.com> + Han-Wen Nienhuys <hanwen@cs.ruu.nl> */ #include "proto.hh" @@ -9,13 +10,15 @@ #include "multi-measure-rest.hh" #include "multi-measure-rest-engraver.hh" #include "score-column.hh" +#include "time-description.hh" IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest_engraver, Engraver); ADD_THIS_TRANSLATOR (Multi_measure_rest_engraver); Multi_measure_rest_engraver::Multi_measure_rest_engraver () { - last_mom_ = 0; + start_measure_i_ = 0; + rest_item_creation_mom_ = rest_req_stop_mom_ =0; multi_measure_req_l_ = 0; mmrest_p_ = 0; } @@ -26,59 +29,54 @@ Multi_measure_rest_engraver::do_try_request (Request* req_l) if (!req_l->musical () || !req_l->musical ()->multi_measure ()) return false; + if (multi_measure_req_l_) + if (!multi_measure_req_l_->equal_b (req_l) + || req_start_mom_ != now_moment ()) + return false; + multi_measure_req_l_ = req_l->musical ()->multi_measure (); - last_mom_ = now_moment () + multi_measure_req_l_->duration_.length (); + req_start_mom_ = now_moment (); + + rest_req_stop_mom_ = req_start_mom_ + multi_measure_req_l_->duration_.length (); return true; } void -Multi_measure_rest_engraver::do_removal_processing () +Multi_measure_rest_engraver::do_process_requests () { - if (mmrest_p_) + if (multi_measure_req_l_ && !mmrest_p_) { - typeset_element (mmrest_p_); - mmrest_p_ = 0; + Time_description const *time = get_staff_info().time_C_; + mmrest_p_ = new Multi_measure_rest; + rest_item_creation_mom_ = time->when_mom (); + announce_element (Score_elem_info (mmrest_p_, multi_measure_req_l_)); + start_measure_i_ = time->bars_i_; } } void -Multi_measure_rest_engraver::do_process_requests () +Multi_measure_rest_engraver::do_pre_move_processing () { - if (mmrest_p_ || !multi_measure_req_l_) - return; - - mmrest_p_ = new Multi_measure_rest; - - Scalar prop = get_property ("part"); - if (prop.isnum_b ()) - part_b_ = prop.to_bool (); - -// if (!part_b_) -// return; - - int measures_i = (int)multi_measure_req_l_->duration_.plet_.iso_i_; - if (part_b_) - mmrest_p_->measures_i_ = measures_i; - - announce_element (Score_elem_info (mmrest_p_, multi_measure_req_l_)); - - multi_measure_req_l_ = 0; + Moment now (now_moment ()); + if (mmrest_p_ && rest_item_creation_mom_ == now) + { + typeset_element (mmrest_p_); + } } void -Multi_measure_rest_engraver::do_pre_move_processing () +Multi_measure_rest_engraver::do_post_move_processing () { - if (!mmrest_p_) - return; - - typeset_element (mmrest_p_); - mmrest_p_ = 0; - - if (part_b_) - return; - - if (last_mom_ <= now_moment ()) + Time_description const *time = get_staff_info().time_C_; + Moment now (now_moment ()); + if (rest_req_stop_mom_ <= now) multi_measure_req_l_ = 0; -} + if (mmrest_p_ && (!time->whole_in_measure_ || !multi_measure_req_l_)) + { + assert (rest_item_creation_mom_ < now); + mmrest_p_->measures_i_ = time->bars_i_ - start_measure_i_; + mmrest_p_ = 0; + } +} diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index a018c53107..4e7e05ff4c 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -44,7 +44,7 @@ Multi_measure_rest::brew_molecule_p () const Real interline_f = paper ()->interline_f (); mol_p->translate_axis (interline_f, Y_AXIS); - if (measures_i_) + if (measures_i_ > 1) { Text_def text; text.text_str_ = measures_i_; diff --git a/lily/musical-request.cc b/lily/musical-request.cc index 3469aaff33..a74eed0700 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -260,6 +260,8 @@ Rest_req::do_print () const /* *************** */ + + IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest_req, Rhythmic_req); void @@ -268,6 +270,7 @@ Multi_measure_rest_req::do_print () const Rhythmic_req::do_print (); } + /* *************** */ IMPLEMENT_IS_TYPE_B1 (Beam_req,Span_req); diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index 77f13bf18e..fc6cae778d 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -24,7 +24,6 @@ static Keyword_ent the_key_tab[]={ {"accepts", ACCEPTS}, {"bar", BAR}, - {"break", BREAK}, {"cadenza", CADENZA}, {"clear", CLEAR}, {"clef", CLEF}, @@ -50,6 +49,7 @@ static Keyword_ent the_key_tab[]={ {"output", OUTPUT}, {"partial", PARTIAL}, {"paper", PAPER}, + {"penalty", PENALTY}, {"property", PROPERTY}, {"pt", PT_T}, {"score", SCORE}, diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index beb8d7df3c..cb1666207b 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -30,6 +30,13 @@ My_lily_parser::My_lily_parser (Sources * source_l) last_duration_mode_b_ = true; fatal_error_i_ = 0; default_header_p_ =0; + + relative_octave_mode_b_ = false; + + last_melodic_ = new Melodic_req; + last_melodic_->octave_i_ = 0; // -1; // huh? + last_melodic_->notename_i_ = 0; + last_melodic_->accidental_i_ = 0; } My_lily_parser::~My_lily_parser() @@ -105,6 +112,23 @@ My_lily_parser::set_duration_mode (String s) } void +My_lily_parser::set_octave_mode (String s) +{ + s = s.upper_str(); + if (s == "RELATIVE") + { + relative_octave_mode_b_ = true; + // must reset these + last_melodic_ = new Melodic_req; + last_melodic_->octave_i_ = 0; // -1; // huh? + last_melodic_->notename_i_ = 0; + last_melodic_->accidental_i_ = 0; + } + else + relative_octave_mode_b_ = false; +} + +void My_lily_parser::set_abbrev_beam (int type_i) { abbrev_beam_type_i_ = type_i; @@ -132,6 +156,71 @@ My_lily_parser::set_last_duration (Duration const *d) } } +String +My_lily_parser::notename_str (Melodic_req* melodic) +{ + // ugh + String str ((char)('a' + ((melodic->notename_i_ + 2) % 7))); + int i = melodic->accidental_i_; + while (i-- > 0) + str += "is"; + i++; + while (i++ < 0) + str += "es"; + return str; +} + +Melodic_req* +My_lily_parser::get_melodic_req (Melodic_req* melodic, int quotes) +{ + if (relative_octave_mode_b_) + { + set_nearest (melodic); + int d = melodic->pitch () - last_melodic_->pitch (); + if (quotes && (sign (d) == sign (quotes))) + quotes -= sign (quotes); + melodic->octave_i_ += quotes; + } + else + { + Melodic_req nearest (*melodic); + set_nearest (&nearest); + melodic->octave_i_ += quotes; + + if (find_quarts_global_b) + { + int e = melodic->pitch () - nearest.pitch (); + if (e) + { + int d = melodic->pitch () - last_melodic_->pitch (); + String str = _("Interval bigger than quart"); + int n = 1 + (abs (d) - 1) / 12; + String quote_str ('\'', n); +#if 0 + str += d < 0 ? _(", prepend: ") : _(", append: "); + str += quote_str; +#else + str += _(", relative: "); + String name_str = notename_str (melodic); + str += d < 0 ? quote_str + name_str : name_str + quote_str; +#endif + melodic->warning (str); + } + } + } + delete last_melodic_; + last_melodic_ = melodic->clone ()->musical ()->melodic (); + return melodic; +} + +void +My_lily_parser::set_nearest (Melodic_req* melodic) +{ + melodic->octave_i_ = last_melodic_->octave_i_; + int d = melodic->pitch () - last_melodic_->pitch (); + if (abs (d) > 6) + melodic->octave_i_ -= sign (d); +} Chord* My_lily_parser::get_word_element (Text_def* tdef_p, Duration * duration_p) @@ -149,6 +238,7 @@ My_lily_parser::get_word_element (Text_def* tdef_p, Duration * duration_p) return velt_p; } + Chord * My_lily_parser::get_rest_element (String s, Duration * duration_p) { @@ -163,16 +253,6 @@ My_lily_parser::get_rest_element (String s, Duration * duration_p) skip_p->set_spot (here_input()); velt_p->add (skip_p); } - else if ((duration_p->plet_.type_i_ == 1) && (duration_p->plet_.iso_i_ > 1)) - { - Multi_measure_rest_req* m = new Multi_measure_rest_req; - // these shouldn't be necessary anymore -// plet_.iso_i_ = 1; -// default_duration_.plet_.iso_i_ = 1; - m->duration_ = *duration_p; - m->set_spot (here_input()); - velt_p->add (m); - } else { Rest_req * rest_req_p = new Rest_req; @@ -337,3 +417,4 @@ My_lily_parser::add_notename (String s, Melodic_req * m_p) { lexer_p_->add_notename (s, m_p); } + diff --git a/lily/paper-def.cc b/lily/paper-def.cc index 20e412dde8..dbb99fd730 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -20,13 +20,13 @@ #include "main.hh" -Paper_def::Paper_def() +Paper_def::Paper_def () { lookup_p_ = 0; real_vars_p_ = new Dictionary<Real>; } -Paper_def::~Paper_def() +Paper_def::~Paper_def () { delete real_vars_p_; delete lookup_p_; @@ -50,7 +50,7 @@ Real Paper_def::get_var (String s) const { if (! real_vars_p_->elt_b (s)) - error (_("unknown paper variable `") + s+"'"); + error (_ ("unknown paper variable `") + s+"'"); return real_vars_p_->elem (s); } @@ -70,6 +70,12 @@ Paper_def::line_dimensions_int (int n) const } Real +Paper_def::beam_thickness_f () const +{ + return get_var ("beam_thickness"); +} + +Real Paper_def::linewidth_f () const { return get_var ("linewidth"); @@ -78,9 +84,9 @@ Paper_def::linewidth_f () const Real Paper_def::duration_to_dist (Moment d,Real k) const { - if (get_var("geometric")) - return geometric_spacing(d); - return arithmetic_spacing(d,k); + if (get_var ("geometric")) + return geometric_spacing (d); + return arithmetic_spacing (d,k); } @@ -94,21 +100,21 @@ Paper_def::duration_to_dist (Moment d,Real k) const */ Real -Paper_def::arithmetic_constant(Moment d) const +Paper_def::arithmetic_constant (Moment d) const { - return get_var("arithmetic_basicspace") - log_2(Moment(1,8) <? d); + return get_var ("arithmetic_basicspace") - log_2 (Moment (1,8) <? d); } Real -Paper_def::arithmetic_spacing(Moment d ,Real k) const +Paper_def::arithmetic_spacing (Moment d ,Real k) const { - return (log_2(d) + k)* get_var("arithmetic_multiplier"); + return (log_2 (d) + k)* get_var ("arithmetic_multiplier"); } Real -Paper_def::geometric_spacing(Moment d) const +Paper_def::geometric_spacing (Moment d) const { - Real dur_f = (d) ?pow (get_var ("geometric"), log_2(d)) : 0; + Real dur_f = (d) ?pow (get_var ("geometric"), log_2 (d)) : 0; return get_var ("basicspace") + get_var ("unitspace") * dur_f; } @@ -122,66 +128,81 @@ Paper_def::set (Lookup*l) } Real -Paper_def::interline_f() const +Paper_def::interline_f () const { return get_var ("interline"); } +Real +Paper_def::rule_thickness () const +{ + return get_var ("rulethickness"); +} Real -Paper_def::rule_thickness() const +Paper_def::staffline_f () const { return get_var ("rulethickness"); } Real -Paper_def::interbeam_f() const +Paper_def::staffheight_f () const +{ + return get_var ("staffheight"); +} + +Real +Paper_def::interbeam_f (int multiplicity_i) const { - return get_var ("interbeam"); + if (multiplicity_i <= 3) + return get_var ("interbeam"); + else + return get_var ("interbeam4"); } + Real -Paper_def::internote_f() const +Paper_def::internote_f () const { - return interline_f() / 2; + return get_var ("internote"); } Real -Paper_def::note_width() const +Paper_def::note_width () const { return get_var ("notewidth"); } void -Paper_def::print() const +Paper_def::print () const { #ifndef NPRINT Music_output_def::print (); DOUT << "Paper {"; - lookup_p_->print(); - for (Assoc_iter<String,Real> i (*real_vars_p_); i.ok(); i++) + lookup_p_->print (); + for (Assoc_iter<String,Real> i (*real_vars_p_); i.ok (); i++) { - DOUT << i.key() << "= " << i.val () << "\n"; + DOUT << i.key () << "= " << i.val () << "\n"; } DOUT << "}\n"; #endif } Lookup const * -Paper_def::lookup_l() +Paper_def::lookup_l () { assert (lookup_p_); return lookup_p_; } -IMPLEMENT_IS_TYPE_B1(Paper_def, Music_output_def); +IMPLEMENT_IS_TYPE_B1 (Paper_def, Music_output_def); String Paper_def::TeX_output_settings_str () const { - String s("\n "); - for (Assoc_iter<String,Real> i (*real_vars_p_); i.ok(); i++) + String s ("\n "); + for (Assoc_iter<String,Real> i (*real_vars_p_); i.ok (); i++) s += String ("\\def\\mudelapaper") + i.key () + "{" + i.val () + "}\n"; - s += lookup_p_->texsetting + "%(Tex id)\n"; + s += lookup_p_->texsetting + "% (Tex id)\n"; return s; } diff --git a/lily/parser.hh b/lily/parser.hh deleted file mode 100644 index 7e0baa9a6a..0000000000 --- a/lily/parser.hh +++ /dev/null @@ -1,119 +0,0 @@ -typedef union { - Array<Interval>* intarr; - Array<Melodic_req*> *melreqvec;/* should clean up naming */ - Array<String> * strvec; - Array<int> *intvec; - Box *box; - Chord * chord; - Duration *duration; - Identifier *id; - Translator* trans; - Music *music; - Music_list *musiclist; - Score *score; - Header *header; - Interval *interval; - Lookup*lookup; - Melodic_req * melreq; - Musical_req* musreq; - Music_output_def * outputdef; - Midi_def* midi; - Moment *moment; - Note_req *notereq; - Paper_def *paper; - Real real; - Request * request; - General_script_def * script; - Scalar *scalar; - String *string; - Atom * symbol; - Symtable * symtable; - Symtables * symtables; - Text_def * textdef; - Tempo_req *tempo; - char c; - const char *consstr; - int i; - int pair[2]; - int ii[10]; -} YYSTYPE; -#define ALIAS 258 -#define BAR 259 -#define BEAMPLET 260 -#define MAEBTELP 261 -#define BREAK 262 -#define CADENZA 263 -#define CLEAR 264 -#define CLEF 265 -#define CONTAINS 266 -#define CONSISTS 267 -#define ACCEPTS 268 -#define CM_T 269 -#define DURATION 270 -#define ABSDYNAMIC 271 -#define END 272 -#define GROUPING 273 -#define TRANSLATOR 274 -#define HEADER 275 -#define IN_T 276 -#define LYRIC 277 -#define KEY 278 -#define MELODIC 279 -#define MIDI 280 -#define MELODIC_REQUEST 281 -#define METER 282 -#define MM_T 283 -#define MULTI 284 -#define NOTENAMES 285 -#define OCTAVE 286 -#define OUTPUT 287 -#define PAPER 288 -#define PARTIAL 289 -#define PLET 290 -#define TELP 291 -#define PT_T 292 -#define SCORE 293 -#define SCRIPT 294 -#define SHAPE 295 -#define SKIP 296 -#define SPANDYNAMIC 297 -#define STAFF 298 -#define START_T 299 -#define SYMBOLTABLES 300 -#define TABLE 301 -#define TRANSPOSE 302 -#define TEMPO 303 -#define TYPE 304 -#define TEXID 305 -#define TEXTSTYLE 306 -#define TITLE 307 -#define PROPERTY 308 -#define VERSION 309 -#define E_EXCLAMATION 310 -#define E_SMALLER 311 -#define E_BIGGER 312 -#define E_CHAR 313 -#define DIGIT 314 -#define NOTENAME_ID 315 -#define DURATION_IDENTIFIER 316 -#define IDENTIFIER 317 -#define MELODIC_REQUEST_IDENTIFIER 318 -#define MUSIC_IDENTIFIER 319 -#define VOICE_IDENTIFIER 320 -#define POST_REQUEST_IDENTIFIER 321 -#define SCRIPT_IDENTIFIER 322 -#define COMMAND_IDENTIFIER 323 -#define REAL_IDENTIFIER 324 -#define TRANS_IDENTIFIER 325 -#define INT_IDENTIFIER 326 -#define SCORE_IDENTIFIER 327 -#define MIDI_IDENTIFIER 328 -#define PAPER_IDENTIFIER 329 -#define REQUEST_IDENTIFIER 330 -#define REAL 331 -#define RESTNAME 332 -#define STRING 333 -#define UNSIGNED 334 -#define POST_QUOTES 335 -#define PRE_QUOTES 336 - diff --git a/lily/parser.yy b/lily/parser.yy index f4db759c99..871e5d97be 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -11,9 +11,6 @@ #include <iostream.h> -// mmm -#define MUDELA_VERSION "0.1.10" - #include "scalar.hh" #include "translation-property.hh" #include "script-def.hh" @@ -40,6 +37,12 @@ #include "duration-convert.hh" #include "change-translator.hh" #include "file-results.hh" +#include "mudela-version.hh" + +// mmm +Mudela_version oldest_version ("0.1.8"); +Mudela_version version ("0.1.13"); + // needed for bison.simple's malloc() and free() #include <malloc.h> @@ -54,6 +57,8 @@ int guess_plet_a[GUESS_PLET] = 4 }; +Paper_def* current_paper = 0; + #ifndef NDEBUG #define YYDEBUG 1 #endif @@ -131,7 +136,7 @@ yylex (YYSTYPE *s, void * v_l) %token BAR %token BEAMPLET %token MAEBTELP -%token BREAK +%token PENALTY %token CADENZA %token CLEAR %token CLEF @@ -175,6 +180,7 @@ yylex (YYSTYPE *s, void * v_l) %token TEMPO %token TYPE %token TEXID +%token MEASURES %token TEXTSTYLE %token TITLE %token PROPERTY @@ -212,8 +218,9 @@ yylex (YYSTYPE *s, void * v_l) %type <header> mudela_header mudela_header_body %type <box> box %type <i> open_request_parens close_request_parens -%type <c> open_abbrev_parens +%type <i> open_abbrev_parens %type <i> open_plet_parens close_plet_parens +%type <i> post_quotes pre_quotes %type <music> simple_element music_elt full_element lyrics_elt command_elt %type <i> abbrev_type %type <i> int unsigned @@ -236,7 +243,8 @@ yylex (YYSTYPE *s, void * v_l) %type <musiclist> Voice Voice_body %type <chord> Chord Chord_body %type <paper> paper_block paper_body -%type <real> dim real +%type <real> dim real real_expression +%type <real> real_add_expression real_mult_expression real_primary %type <real> unit %type <request> abbrev_command_req %type <request> post_request structured_post_request @@ -275,7 +283,8 @@ mudela: /* empty */ check_version: VERSION STRING ';' { - if (String (*$2) != MUDELA_VERSION) { + Mudela_version ver (*$2); + if (!((ver >= oldest_version) && (ver <= version))) { if (THIS->ignore_version_b_) { THIS->here_input ().error ("Incorrect mudela version"); } else { @@ -368,9 +377,8 @@ identifier_init: $$ = new Lookup_id ($1, IDENTIFIER); } - | real { + | real { $$ = new Real_id (new Real ($1), REAL_IDENTIFIER); - } | int { $$ = new Int_id (new int ($1), INT_IDENTIFIER); @@ -390,8 +398,6 @@ identifier_init: } ; - - translator_spec: TRANSLATOR '{' translator_spec_body '}' { $$ = $3; } @@ -490,11 +496,16 @@ paper_block: '{' paper_body '}' { $$ = $3; } ; +optional_semicolon: + /* empty */ + | ';' + ; + paper_body: /* empty */ { $$ = THIS->default_paper (); } - | PAPER_IDENTIFIER { + | PAPER_IDENTIFIER optional_semicolon { $$ = $1->paperdef (); } | paper_body OUTPUT STRING ';' { @@ -502,11 +513,10 @@ paper_body: delete $3; } | paper_body symtables { $$->set ($2); } - | paper_body STRING '=' dim ';' { - $$->set_var (*$2, $4); - } - | paper_body STRING '=' real ';' { + | paper_body STRING '=' real_expression ';' { $$->set_var (*$2, $4); +// ugh, huh? + current_paper = $$; } | paper_body STRING '=' translator_spec { $$-> assign_translator (*$2, $4); @@ -521,6 +531,43 @@ paper_body: } ; +real_primary: + real + | dim + | STRING { +// ugh, huh? +// $$ = THIS->default_paper ()->get_var (*$1); + $$ = current_paper->get_var (*$1); + } + | '(' real_expression ')' { + $$ = $2; + } + ; + +real_expression: + real_add_expression + ; + +real_add_expression: + real_mult_expression + | real_add_expression '+' real_mult_expression { + $$ = $1 + $3; + } + | real_add_expression '-' real_mult_expression { + $$ = $1 - $3; + } + ; + +real_mult_expression: + real_primary + | real_mult_expression '*' real_primary { + $$ = $1 * $3; + } + | real_mult_expression '/' real_primary { + $$ = $1 / $3; + } + ; + shape_array: /* empty */ { $$ = new Array<Interval>; @@ -727,10 +774,11 @@ verbose_command_req: $$ = new Bar_req (*$2); delete $2; } - | BREAK { - Break_force_req * f = new Break_force_req; - f-> set_spot (THIS->here_input ()); - $$ = f; + | PENALTY '=' int { + Break_req * b = new Break_req; + b->penalty_i_ = $3; + b-> set_spot (THIS->here_input ()); + $$ = b; } | METER unsigned '/' unsigned { Meter_change_req *m = new Meter_change_req; @@ -811,29 +859,56 @@ post_request: } ; +pre_quotes: + PRE_QUOTES { +// int i = $1; + $$ = $1; + } + | pre_quotes PRE_QUOTES { +// int i = $1 + $2; + $$ = $1 + $2; + } + ; +post_quotes: + POST_QUOTES { +// int i = $1; + $$ = $1; + } + | post_quotes POST_QUOTES { +// int i = $1 + $2; + $$ = $1 + $2; + } + ; /* URG!! + + Whitespace mustn't be stripped. So what? + Python is cool, and there even the amount *and* type of whitespace + is significant. So this is not uncool per se, maybe context-free + just sucks for humans. + jcn */ steno_melodic_req: NOTENAME_ID { - $$ = $1->clone ()->musical ()->melodic (); - $$->octave_i_ += THIS->default_octave_i_; + Melodic_req* m = $1->clone ()->musical ()->melodic (); + $$ = THIS->get_melodic_req (m, 0 + THIS->default_octave_i_); } - | steno_melodic_req POST_QUOTES { - $$-> octave_i_ += $2; + | NOTENAME_ID post_quotes { + Melodic_req* m = $1->clone ()->musical ()->melodic (); + $$ = THIS->get_melodic_req (m, $2 + THIS->default_octave_i_); } - | PRE_QUOTES steno_melodic_req { - $$ = $2; - $2-> octave_i_ -= $1; + | pre_quotes NOTENAME_ID { + Melodic_req* m = $2->clone ()->musical ()->melodic (); + $$ = THIS->get_melodic_req (m, -$1 + THIS->default_octave_i_); } ; steno_note_req: steno_melodic_req { $$ = new Note_req; - * (Melodic_req *) $$ = *$1; + *(Melodic_req *) $$ = *$1; delete $1; } | steno_note_req '!' { @@ -926,8 +1001,7 @@ close_request_parens: | E_BIGGER { $$ = '>'; } - | close_plet_parens { - } + | close_plet_parens ; open_abbrev_parens: @@ -969,10 +1043,8 @@ open_request_parens: | '[' { $$='['; } - | open_abbrev_parens { - } - | open_plet_parens { - } + | open_abbrev_parens + | open_plet_parens ; @@ -1099,6 +1171,10 @@ voice_command: THIS->default_octave_i_ = $3->octave_i_; delete $3; } + | OCTAVE STRING { + THIS->set_octave_mode (*$2); + delete $2; + } | TEXTSTYLE STRING { THIS->textstyle_str_ = *$2; delete $2; @@ -1192,7 +1268,18 @@ music_elt: } | RESTNAME notemode_duration { $$ = THIS->get_rest_element (*$1, $2); - delete $1; + delete $1; // delete notename + } + | MEASURES notemode_duration { + Multi_measure_rest_req* m = new Multi_measure_rest_req; + m->duration_ = *$2; + delete $2; + + Chord*velt_p = new Request_chord; + velt_p->set_spot (THIS->here_input ()); + velt_p->add (m); + $$ = velt_p; + } ; diff --git a/lily/rod.cc b/lily/rod.cc index 3e87138669..6bbcbd6dcc 100644 --- a/lily/rod.cc +++ b/lily/rod.cc @@ -10,6 +10,8 @@ #include "p-col.hh" #include "debug.hh" #include "single-malt-grouping-item.hh" +#include "dimen.hh" + Rod::Rod (Single_malt_grouping_item *l, Single_malt_grouping_item *r) { @@ -21,7 +23,7 @@ Rod::Rod (Single_malt_grouping_item *l, Single_malt_grouping_item *r) if (li.empty_b () || ri.empty_b ()) distance_f_ = 0; else - distance_f_ = li[RIGHT] - ri[LEFT]; + distance_f_ = li[RIGHT] - ri[LEFT] + 1.5 PT; // ugh } Rod::Rod () diff --git a/lily/score-column.cc b/lily/score-column.cc index 9f40322a0a..abe35406c0 100644 --- a/lily/score-column.cc +++ b/lily/score-column.cc @@ -9,10 +9,11 @@ #include "debug.hh" #include "p-col.hh" #include "score-column.hh" +#include "command-request.hh" Score_column::Score_column (Moment w) { - forced_break_b_ = false; + break_penalty_i_ = 0; when_ = w; musical_b_ = false; } @@ -22,7 +23,7 @@ Score_column::do_print() const { #ifndef NPRINT DOUT << "mus "<< musical_b_ <<" at " << when_<< '\n'; - if (forced_break_b_) + if (break_penalty_i_ >= Break_req::FORCE) DOUT << "Break forced"; DOUT << "durations: ["; diff --git a/lily/score-grav.cc b/lily/score-grav.cc index cfce99e6b3..27b149a547 100644 --- a/lily/score-grav.cc +++ b/lily/score-grav.cc @@ -20,7 +20,7 @@ Score_engraver::Score_engraver() { - disallow_break_b_ = false; + break_penalty_i_ = 0; scoreline_l_ =0; command_column_l_ =0; musical_column_l_ =0; @@ -34,7 +34,7 @@ Score_engraver::prepare (Moment w) Global_translator::prepare (w); set_columns (new Score_column (w), new Score_column (w)); - disallow_break_b_ = false; + break_penalty_i_ = 0; post_move_processing(); } @@ -165,7 +165,7 @@ Score_engraver::typeset_all() void Score_engraver::do_pre_move_processing() { - if (!disallow_break_b_) + if (break_penalty_i_ > Break_req::DISALLOW) { get_staff_info().command_pcol_l ()-> breakable_b_ = true; breaks_i_ ++; @@ -242,14 +242,18 @@ Score_engraver::do_try_request (Request*r) { bool gotcha = Engraver_group_engraver::do_try_request (r); - if (!gotcha && r->command()) + if (gotcha || !r->command ()) + return gotcha; + + Command_req * c = r->command (); + if (c->linebreak ()) { - Command_req * c = r->command (); - if (c->disallowbreak ()) - disallow_break_b_ = true; - else if (c->forcebreak ()) + Break_req* b = (Break_req*)c->linebreak (); + if (b->penalty_i_ <= Break_req::DISALLOW) + break_penalty_i_ = b->penalty_i_; + else if (b->penalty_i_ >= Break_req::FORCE) { - command_column_l_->forced_break_b_ = true; + command_column_l_->break_penalty_i_ = b->penalty_i_; gotcha = true; } } diff --git a/lily/scores.cc b/lily/scores.cc index 4a25a85a0f..b481921c3a 100644 --- a/lily/scores.cc +++ b/lily/scores.cc @@ -106,12 +106,12 @@ do_one_file (String init_str, String file_str) { if (init_str.length_i () && path.find (init_str).empty_b ()) { - error (_("Can not find `") + init_str +"\'"); + warning (_("Can not find `") + init_str +"\'"); return ; } if (file_str.length_i () && path.find (file_str).empty_b ()) { - error (_("Can not find `") + file_str + "'"); + warning (_("Can not find `") + file_str + "'"); return ; } diff --git a/lily/separating-group-spanner.cc b/lily/separating-group-spanner.cc index 3361dadc55..7ff3fca481 100644 --- a/lily/separating-group-spanner.cc +++ b/lily/separating-group-spanner.cc @@ -10,6 +10,7 @@ #include "separating-group-spanner.hh" #include "single-malt-grouping-item.hh" #include "p-col.hh" +#include "paper-def.hh" Array<Rod> Separating_group_spanner::get_rods () const @@ -22,9 +23,11 @@ Separating_group_spanner::get_rods () const bool lb =spacing_unit_l_arr_[i]->column_l ()->breakable_b_; if (lb) { - a.push (Rod ((Single_malt_grouping_item*) + Rod r((Single_malt_grouping_item*) spacing_unit_l_arr_[i]->find_prebroken_piece (RIGHT), - spacing_unit_l_arr_[i+1])); + spacing_unit_l_arr_[i+1]); + r.distance_f_ += paper ()->interline_f () *1.5; + a.push (r); } bool rb=spacing_unit_l_arr_[i+1]->column_l ()->breakable_b_; if (rb) @@ -35,10 +38,12 @@ Separating_group_spanner::get_rods () const } if (lb && rb) { - a.push (Rod ((Single_malt_grouping_item*) + Rod r((Single_malt_grouping_item*) spacing_unit_l_arr_[i]->find_prebroken_piece (RIGHT), (Single_malt_grouping_item*) - spacing_unit_l_arr_[i+1]->find_prebroken_piece (LEFT))); + spacing_unit_l_arr_[i+1]->find_prebroken_piece (LEFT)); + r.distance_f_ += paper ()->interline_f () *1.5; + a.push (r); } } diff --git a/lily/slur-grav.cc b/lily/slur-grav.cc index 55133511a3..4076e2bb7c 100644 --- a/lily/slur-grav.cc +++ b/lily/slur-grav.cc @@ -81,6 +81,9 @@ Slur_engraver::do_process_requests() // push a new slur onto stack. //(use temp. array to wait for all slur STOPs) Slur * s_p =new Slur; + Scalar prop = get_property ("slurdash"); + if (prop.isnum_b ()) + s_p->dash_i_ = prop; requests_arr_.push (slur_req_l); start_slur_l_arr_.push (s_p); announce_element (Score_elem_info (s_p, slur_req_l)); diff --git a/lily/slur.cc b/lily/slur.cc index f091c426ca..0971bfd738 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -26,7 +26,7 @@ #include "boxes.hh" #include "bezier.hh" #include "encompass-info.hh" -// #include "main.hh" +#include "main.hh" IMPLEMENT_IS_TYPE_B1(Slur,Bow); @@ -95,10 +95,10 @@ Slur::do_post_processing () if (!dir_) set_default_dir (); - Real interline = paper ()->interline_f (); - Real internote = interline / 2; - Real notewidth = paper ()->note_width (); - Real const SLUR_MIN = 2.0 * interline; + Real interline_f = paper ()->interline_f (); + Real internote_f = interline_f / 2; + Real notewidth_f = paper ()->note_width (); + Real slur_min = paper ()->get_var ("slur_x_minimum"); /* [OSU]: slur and tie placement @@ -109,12 +109,10 @@ Slur::do_post_processing () * y = length < 5ss : horizontal raakpunt + d * 0.25 ss y = length >= 5ss : y next interline - d * 0.25 ss --> height <= 5 length ?? we use <= 3 length, now... - - * suggested gap = ss / 5; */ - // jcn: 1/5 seems so small? - Real gap_f = interline / 2; // 5; + Real gap_f = paper ()->get_var ("slur_x_gap"); + Drul_array<Note_column*> extrema; extrema[LEFT] = encompass_arr_[0]; extrema[RIGHT] = encompass_arr_.top (); @@ -129,29 +127,17 @@ Slur::do_post_processing () if (extrema[d] != spanned_drul_[d]) { dx_f_drul_[d] = -d - *(spanned_drul_[d]->width ().length () -0.5*notewidth); - Direction u = d; - flip(&u); - if ((extrema[u] == spanned_drul_[u]) && extrema[u]->stem_l_) - { - dy_f_drul_[d] = extrema[u]->stem_l_->height ()[dir_]; - dy_f_drul_[u] = extrema[u]->stem_l_->height ()[dir_]; - } + *(spanned_drul_[d]->width ().length () -0.5 * notewidth_f); // prebreak if (d == RIGHT) { dx_f_drul_[LEFT] = spanned_drul_[LEFT]->width ().length (); -// dx_f_drul_[LEFT] -= 2 * notewidth; // urg if (encompass_arr_.size () > 1) - dx_f_drul_[RIGHT] += notewidth; + dx_f_drul_[RIGHT] += notewidth_f; } - - // postbreak - if (d == LEFT) - dy_f_drul_[d] += 2.0 * dir_ * internote; } /* normal slur @@ -159,21 +145,21 @@ Slur::do_post_processing () else if (extrema[d]->stem_l_ && !extrema[d]->stem_l_->transparent_b_) { dy_f_drul_[d] = (int)rint (extrema[d]->stem_l_->height ()[dir_]); - dx_f_drul_[d] += 0.5 * notewidth - d * gap_f; + dx_f_drul_[d] += 0.5 * notewidth_f - d * gap_f; if (dir_ == extrema[d]->stem_l_->dir_) { if (dir_ == d) - dx_f_drul_[d] += 0.5 * (dir_ * d) * d * notewidth; + dx_f_drul_[d] += 0.5 * (dir_ * d) * d * notewidth_f; else - dx_f_drul_[d] += 0.25 * (dir_ * d) * d * notewidth; + dx_f_drul_[d] += 0.25 * (dir_ * d) * d * notewidth_f; } } else { dy_f_drul_[d] = (int)rint (extrema[d]->head_positions_interval () - [dir_])* internote; + [dir_]) * internote_f; } - dy_f_drul_[d] += dir_ * interline; + dy_f_drul_[d] += dir_ * interline_f; } while (flip(&d) != LEFT); @@ -185,14 +171,22 @@ Slur::do_post_processing () */ if (extrema[d] != spanned_drul_[d]) { + Direction u = d; + flip(&u); + + // postbreak + if (d == LEFT) + dy_f_drul_[u] += dir_ * internote_f; + + dy_f_drul_[d] = dy_f_drul_[(Direction)-d]; + // pre and post - if (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT] < SLUR_MIN) + if (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT] < slur_min) { - dx_f_drul_[d] -= d * SLUR_MIN + dx_f_drul_[d] -= d * slur_min - (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]); - dx_f_drul_[d] = dx_f_drul_[(Direction)-d] + d * SLUR_MIN; + dx_f_drul_[d] = dx_f_drul_[(Direction)-d] + d * slur_min; } - dy_f_drul_[d] = dy_f_drul_[(Direction)-d]; } } while (flip(&d) != LEFT); diff --git a/lily/span-score-bar.cc b/lily/span-score-bar.cc index 6e921573c9..0849f15c60 100644 --- a/lily/span-score-bar.cc +++ b/lily/span-score-bar.cc @@ -51,7 +51,9 @@ Piano_brace::do_width() const Atom Staff_bracket::get_bar_sym (Real dy) const { - return paper()->lookup_l ()->vbracket (dy); + Atom a = paper()->lookup_l ()->vbracket (dy); + a.translate_axis (- 1.5 * a.extent ().x ().length (), X_AXIS); + return a; } Interval diff --git a/lily/spring-spacer.cc b/lily/spring-spacer.cc index ac4b00b623..3855777a58 100644 --- a/lily/spring-spacer.cc +++ b/lily/spring-spacer.cc @@ -317,6 +317,11 @@ Spring_spacer::lower_bound_solution (Col_hpositions*positions) const positions->satisfies_constraints_b_ = check_constraints (solution_vec); } +Spring_spacer::Spring_spacer () +{ + energy_normalisation_f_ = 1.0; +} + void Spring_spacer::solve (Col_hpositions*positions) const { @@ -340,7 +345,7 @@ Spring_spacer::solve (Col_hpositions*positions) const WARN << _("solution doesn't satisfy constraints.\n") ; } position_loose_cols (solution_vec); - positions->energy_f_ = calculate_energy_f (solution_vec); + positions->energy_f_ = calculate_energy_f (solution_vec) / energy_normalisation_f_; positions->config = solution_vec; positions->error_col_l_arr_ = error_pcol_l_arr(); } diff --git a/lily/stem-info.cc b/lily/stem-info.cc index 11990ea3e7..d109e96e80 100644 --- a/lily/stem-info.cc +++ b/lily/stem-info.cc @@ -28,8 +28,8 @@ Stem_info::Stem_info (Stem const *s) mult_i_ = s->mult_i_; /* - [todo] - * get algorithm runtime + [TODO] + make this runtime Breitkopf + H\"artel: miny_f_ = interline + #beams * interbeam @@ -45,18 +45,16 @@ Stem_info::Stem_info (Stem const *s) Real internote_f = s->paper ()->internote_f (); Real interline_f = 2.0 * internote_f; - Real interbeam_f = s->paper ()->interbeam_f (); - Real staffline_f = s->paper ()->rule_thickness (); - Real beam_f = 0.48 * (interline_f - staffline_f); + Real interbeam_f = s->paper ()->interbeam_f (mult_i_); + Real beam_f = s->paper ()->beam_thickness_f (); - if (check_debug && !monitor->silent_b ("Stem_info")) - { + + { static int i = 1; - cout << "******" << i++ << "******" << endl; - cout << "begin_f: " << s->stem_begin_f () * dir_ << endl; - // urg urg urg - cout << "chord_f/i: " << s->chord_start_f () * dir_ / internote_f << endl; - } + DOUT << "******" << i++ << "******\n" + << "begin_f: " << s->stem_begin_f () * dir_ + << "\nchord_f/i: " << s->chord_start_f () * dir_ / internote_f << '\n'; + } /* For simplicity, we'll assume dir = UP and correct if @@ -84,13 +82,12 @@ Stem_info::Stem_info (Stem const *s) idealy_f_ /= internote_f; miny_f_ /= internote_f; - if (check_debug && !monitor->silent_b ("Stem_info")) - { - cout << "dir_: " << dir_ << endl; - cout << "mult_i_: " << mult_i_ << endl; - cout << "idealy_f_: " << idealy_f_ << endl; - cout << "miny_f_: " << miny_f_ << endl; - } + + DOUT << "dir_: " << dir_ << '\n'; + DOUT << "mult_i_: " << mult_i_ << '\n'; + DOUT << "idealy_f_: " << idealy_f_ << '\n'; + DOUT << "miny_f_: " << miny_f_ << '\n'; + idealy_f_ = miny_f_ >? idealy_f_; } diff --git a/lily/stem.cc b/lily/stem.cc index a2361b4fe8..d867f16bf3 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -162,7 +162,7 @@ void Stem::set_default_stemlen () { Real len = STEMLEN; - Real dy = paper ()->interbeam_f (); + Real dy = paper ()->interbeam_f (mult_i_); if (!dir_) set_default_dir (); diff --git a/lily/tie-grav.cc b/lily/tie-grav.cc index a690cb36a1..ae9f6d2961 100644 --- a/lily/tie-grav.cc +++ b/lily/tie-grav.cc @@ -61,6 +61,9 @@ Tie_engraver::do_process_requests() if (req_l_ && ! tie_p_) { tie_p_ = new Tie; + Scalar prop = get_property ("slurdash"); + if (prop.isnum_b ()) + tie_p_->dash_i_ = prop; } } diff --git a/lily/tie.cc b/lily/tie.cc index 0d17f409ce..9fe73f7d9e 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -11,6 +11,7 @@ #include "note-head.hh" #include "p-col.hh" #include "debug.hh" +#include "main.hh" // experimental features IMPLEMENT_IS_TYPE_B1(Tie,Bow); @@ -65,7 +66,7 @@ Tie::do_post_processing() Real notewidth = paper ()->note_width (); Real interline_f = paper ()->interline_f (); - Real const TIE_MIN = 2.0 * interline_f; + Real tie_min = paper ()->get_var ("tie_x_minimum"); /* [OSU]: slur and tie placement @@ -76,11 +77,9 @@ Tie::do_post_processing() * y = length < 5ss : horizontal raakpunt y = length >= 5ss : y next interline - d * 0.25 ss --> height <= 5 length ?? we use <= 3 length, now... - - * suggested gap = ss / 5; */ - // jcn: 1/5 seems so small? - Real gap_f = interline_f / 2; // 5; + + Real gap_f = paper ()->get_var ("slur_x_gap"); Direction d = LEFT; do @@ -122,11 +121,11 @@ Tie::do_post_processing() // tie attached to outer notehead if (!head_l_drul_[d]) { - if (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT] < TIE_MIN) + if (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT] < tie_min) { - dx_f_drul_[d] -= d * TIE_MIN + dx_f_drul_[d] -= d * tie_min - (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]); - dx_f_drul_[d] = dx_f_drul_[(Direction)-d] + d * TIE_MIN; + dx_f_drul_[d] = dx_f_drul_[(Direction)-d] + d * tie_min; } dy_f_drul_[d] = dy_f_drul_[(Direction) -d]; diff --git a/lily/timing-grav.cc b/lily/timing-grav.cc index 17f110fda3..a994334fc2 100644 --- a/lily/timing-grav.cc +++ b/lily/timing-grav.cc @@ -11,14 +11,6 @@ #include "score-elem-info.hh" #include "multi-measure-rest.hh" -void -Timing_engraver::acknowledge_element (Score_elem_info i) -{ - if (!i.elem_l_->is_type_b (Multi_measure_rest::static_name ())) - return; - if (((Multi_measure_rest*)i.elem_l_->item ())->measures_i_) - mmrest_b_ = true; -} void Timing_engraver::fill_staff_info (Staff_info &inf) diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index b244db903c..ce04be40a9 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -16,7 +16,6 @@ Timing_translator::Timing_translator () { default_grouping_ = Rhythmic_grouping (MInterval (0, 1), 4); // ugh - mmrest_b_ = false; } bool @@ -115,9 +114,10 @@ Timing_translator::do_pre_move_processing() Global_translator *global_l = daddy_trans_l_->ancestor_l (100)->global_l (); // ugh 100. - if (!time_.cadenza_b_ && !mmrest_b_) + + bool allbars = ! get_property ("SkipBars").to_bool (); + if (!time_.cadenza_b_ && allbars) global_l->add_moment_to_process (time_.next_bar_moment ()); -// mmrest_b_ = false; } IMPLEMENT_IS_TYPE_B1(Timing_translator, Translator); diff --git a/make/Docrules.make b/make/Docrules.make index e718c7779a..578dcea07e 100644 --- a/make/Docrules.make +++ b/make/Docrules.make @@ -30,11 +30,12 @@ POD2HTML5004=$(POD2HTML) --noindex --infile $< --outfile=$@; sh $(depth)/bin/ad POD2HTML5003=$(POD2HTML) $< ; mv $(notdir $@) $(outdir)/ -do_pod2html=$(POD2HTML5003) +do_pod2html=$(POD2HTML5004) $(outdir)/%.html: %.pod $(depth)/VERSION $(do_pod2html) + add-html-footer $@ $(outdir)/%.5: %.pod $(pod2groff) diff --git a/make/Mutopia.make b/make/Mutopia.make index 65f407c8fb..bb489a95d4 100644 --- a/make/Mutopia.make +++ b/make/Mutopia.make @@ -3,9 +3,8 @@ include $(depth)/make/Include.make LYFILES = $(wildcard *.ly) -TEXFILES = $(wildcard *.tex) M4FILES = $(wildcard *.m4) -DISTFILES = Makefile $(EXTRA_DISTFILES) $(LYFILES) $(TEXFILES) $(wildcard *.m4) +DISTFILES = Makefile $(EXTRA_DISTFILES) $(LYFILES) $(wildcard *.m4) # OUTFILES = $(addprefix $(outdir)/,$(M4FILES:%.m4=%)) diff --git a/make/Toplevel.make.in b/make/Toplevel.make.in index f10c3474c7..ef9c9ccd78 100644 --- a/make/Toplevel.make.in +++ b/make/Toplevel.make.in @@ -66,13 +66,24 @@ Makefile: make/Toplevel.make.in website: + $(MAKE) CONFIGSUFFIX='www' local-WWW $(MAKE) CONFIGSUFFIX='www' -C Documentation WWW - + tar cfz $(outdir)/htmldoc.tar.gz `find Documentation -type d -name 'out-www' -print` out-www examples: $(MAKE) CONFIGSUFFIX='www' -C input WWW $(MAKE) CONFIGSUFFIX='www' -C mutopia WWW - tar cfz $(outdir)/examples.tar.gz `find input mutopia -type d -name 'out-www' -print` + tar --exclude='*.dvi' --exclude='*.tex' --exclude='*.ps' -czf $(outdir)/examples.tar.gz `find input mutopia -type d -name 'out-www' -print` + + + + +local-WWW: $(outdir)/index.html +$(outdir)/index.html: Documentation/$(outdir)/topweb.html NEWS + cp Documentation/$(outdir)/topweb.html $@ + add-html-footer --news=NEWS $@ +Documentation/$(outdir)/topweb.html: + make -C Documentation/ html diff --git a/make/WWW.make b/make/WWW.make index bb47c54f87..7f9c96fbea 100644 --- a/make/WWW.make +++ b/make/WWW.make @@ -10,4 +10,5 @@ html_subdirs=$(addprefix --subdirs ,$(SUBDIRS)) local-WWW: $(ly_examples) $(ps_examples) $(gif_examples) (cd $(outdir); $(PYTHON) ../$(depth)/bin/mutopia-index.py --prefix=../ --suffix=/$(outdir) $(html_subdirs) $(examples)) + add-html-footer $(outdir)/index.html diff --git a/make/lilypond.spec.in b/make/lilypond.spec.in index bf99632045..594fc77517 100644 --- a/make/lilypond.spec.in +++ b/make/lilypond.spec.in @@ -9,17 +9,18 @@ URL: http://www.cs.uu.nl/~hanwen/lilypond Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl> Icon: lelie_icon.gif Buildroot: /tmp/lilypond-install +Prereq: tetex %description -LilyPond is the GNU Project music typesetter. The program -generates visual or auditive output from a music -definition file: it can typeset formatted sheet music -to a TeX file and play (mechanical) performances to a +LilyPond is the GNU Project music typesetter. This program can print +beautiful sheet music from a music +definition file. It can also play a play (mechanical) performances to a MIDI file. Features include multiple staffs, meters, clefs, keys, lyrics, versatile input-language, cadenzas, beams, slurs, triplets. It includes a nice font of musical symbols. + %prep %setup %build @@ -53,8 +54,8 @@ make prefix="$RPM_BUILD_ROOT/usr" install /usr/share/lilypond/ %post -ln -s + +ln -s /usr/lib/texmf/texmf/tex/lilypond /usr/lib/texmf/texmf/tex/latex/lilypond # suck me plenty texhash # takes some time... rm `find /var/lib/texmf -name 'feta*pk' -or -name 'feta*tfm'` -ln -s /usr/lib/texmf/texmf/tex/lilypond /usr/lib/texmf/texmf/tex/latex/lilypond # suck me plenty diff --git a/make/out/lelievijver.lsm b/make/out/lelievijver.lsm index d110ebc68e..b735fc4dda 100644 --- a/make/out/lelievijver.lsm +++ b/make/out/lelievijver.lsm @@ -1,7 +1,7 @@ Begin3 Titel: LilyPond -Versie: 0.1.61 -Inschrijf datum: 03MAY98 +Versie: 0.1.62 +Inschrijf datum: 06MAY98 Beschrijving: LilyPond is de muziek typesetter van het GNU Project. Het programma genereert muziek in zichtbare of hoorbare vorm uit uit een muzikale definitie file: @@ -16,8 +16,8 @@ Auteur: hanwen@stack.nl (Han-Wen Nienhuys) jan@digicash.com (Jan Nieuwenhuizen) Onderhouden door: hanwen@stack.nl (Han-Wen Nienhuys) Voornaamste plek: sunsite.unc.edu /pub/Linux/apps - 395k lilypond-0.1.61.tar.gz + 395k lilypond-0.1.62.tar.gz Oorspronkelijke plek: pcnov095.win.tue.nl /pub/lilypond/ - 395k lilypond-0.1.61.tar.gz + 395k lilypond-0.1.62.tar.gz Copi"eer politie: GPL End diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index ab0be3a745..b8eb27fcb8 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,7 +1,7 @@ Begin3 Title: LilyPond -Version: 0.1.61 -Entered-date: 03MAY98 +Version: 0.1.62 +Entered-date: 06MAY98 Description: LilyPond is the GNU Project music typesetter. The program generates visual or auditive output from a music definition file: it can typeset formatted sheet music @@ -15,8 +15,8 @@ Author: hanwen@cs.ruu.nl (Han-Wen Nienhuys) jan@digicash.com (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert - 570k lilypond-0.1.61.tar.gz + 570k lilypond-0.1.62.tar.gz Original-site: pcnov095.win.tue.nl /pub/lilypond/development/ - 570k lilypond-0.1.61.tar.gz + 570k lilypond-0.1.62.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index 289561852b..6f7c2d11c7 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,25 +1,26 @@ Name: lilypond -Version: 0.1.61 +Version: 0.1.62 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: pcnov095.win.tue.nl:/pub/lilypond/development/lilypond-0.1.61.tar.gz +Source0: pcnov095.win.tue.nl:/pub/lilypond/development/lilypond-0.1.62.tar.gz Summary: A program for typesetting music. URL: http://www.cs.uu.nl/~hanwen/lilypond Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl> Icon: lelie_icon.gif Buildroot: /tmp/lilypond-install +Prereq: tetex %description -LilyPond is the GNU Project music typesetter. The program -generates visual or auditive output from a music -definition file: it can typeset formatted sheet music -to a TeX file and play (mechanical) performances to a +LilyPond is the GNU Project music typesetter. This program can print +beautiful sheet music from a music +definition file. It can also play a play (mechanical) performances to a MIDI file. Features include multiple staffs, meters, clefs, keys, lyrics, versatile input-language, cadenzas, beams, slurs, triplets. It includes a nice font of musical symbols. + %prep %setup %build @@ -53,8 +54,8 @@ make prefix="$RPM_BUILD_ROOT/usr" install /usr/share/lilypond/ %post -ln -s + +ln -s /usr/lib/texmf/texmf/tex/lilypond /usr/lib/texmf/texmf/tex/latex/lilypond # suck me plenty texhash # takes some time... rm `find /var/lib/texmf -name 'feta*pk' -or -name 'feta*tfm'` -ln -s /usr/lib/texmf/texmf/tex/lilypond /usr/lib/texmf/texmf/tex/latex/lilypond # suck me plenty @@ -1,43 +1,5 @@ -This is a font of music symbols. All MF sources are original. The -symbols are modelled after various editions of music, notably - - - Baerenreiter - - Hofmeister - - Breitkopf - - Durand & C'ie - -The best references on Music engraving are [Wanske] and [Ross], some -of their insights have also been used. Although a matter of taste, -I'd say that Baerenreiter has the finest typography of all. - -Traditional engraving uses a set of 9 standardised sizes for Staffs -(running from 0 to 8). - -I tried measuring those (helped by a magnifying glass), and I get the -staffsizes in the following table. 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. - -Staffsize Numbers Name - -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 - - -This table is partially taken from [Ross]. Most music is set in No.3, -but the papersizes usually are bigger than standard printer paper -(such as A4). If you plot these, you'll notice that the sizes (With -exception of 26) almost (but not quite) form a arithmetic progression. - -[Ross] states that the dies (the stamps to make the symbols) come in -12 different sizes. - +This is a font of music symbols. All MF sources are original. Most +of the doco is in comments in the MF code, and in +Documentation/tex/fonts.doc diff --git a/mi2mu/mudela-stream.cc b/mi2mu/mudela-stream.cc index 2a869d647c..5fa339cb66 100644 --- a/mi2mu/mudela-stream.cc +++ b/mi2mu/mudela-stream.cc @@ -91,7 +91,7 @@ Mudela_stream::header() *os_p_ << filename_str_g; *os_p_ << "\n\n"; // ugh - *os_p_ << "\\version \"0.1.10\";\n"; + *os_p_ << "\\version \"0.1.11\";\n"; } void diff --git a/mudela-mode.el b/mudela-mode.el index 48e53aa779..27444a9425 100644 --- a/mudela-mode.el +++ b/mudela-mode.el @@ -112,7 +112,7 @@ ; FIXME ; ( ?% . ". 124b" ) -: ( ?{ . ". 23" ) +; ( ?{ . ". 23" ) )) ) diff --git a/mutopia/Coriolan/clarinetti-part.ly b/mutopia/Coriolan/clarinetti-part.ly index 6c99e7ed70..53ff1a74cd 100644 --- a/mutopia/Coriolan/clarinetti-part.ly +++ b/mutopia/Coriolan/clarinetti-part.ly @@ -11,9 +11,8 @@ copyright = "public domain"; \include "global.ly" \include "clarinetti.ly" - +\include "part-paper.ly" \score{ -% \property Score.part = 1 \$clarinetti_staff \paper{} } diff --git a/mutopia/Coriolan/clarinetto-1.ly b/mutopia/Coriolan/clarinetto-1.ly index e7cccf9b0c..0e11954b5e 100644 --- a/mutopia/Coriolan/clarinetto-1.ly +++ b/mutopia/Coriolan/clarinetto-1.ly @@ -13,11 +13,11 @@ copyright = "public domain"; clarinetto1 = \melodic{ \octave c'; - r1*2 | c'4-.\ff r r2 | r1*3 | - d'4-. r r2 | r1*3 | + R1 *2 | c'4-.\ff r r2 | R1 *3 | + d'4-. r r2 | R1 *3 | es'4-. r r2 | r1 | es'4-. r r2 | d'4-. r r2 | - r1*4 | + R1 *4 | as2\p_"\ \ \ cresc." ( g | )fis2. g4-.\f | } diff --git a/mutopia/Coriolan/clarinetto-2.ly b/mutopia/Coriolan/clarinetto-2.ly index 0ad1fa5f6f..cc12989f5b 100644 --- a/mutopia/Coriolan/clarinetto-2.ly +++ b/mutopia/Coriolan/clarinetto-2.ly @@ -20,11 +20,11 @@ clarinetto2 = \melodic{ % huh? % r1 | r1 | as4-.\ff r r2 | r1 | - r1*2 | as4-. r r2 | r1*3 | - b4-. r r2 | r1*3 | + R1 *2 | as4-. r r2 | R1 *3 | + b4-. r r2 | R1 *3 | c'4-. r r2 | r1 | c'4-. r r2 | b4-. r r2 | - r1*5 | + R1 *5 | r2 r4 'b4-. | } diff --git a/mutopia/Coriolan/coriolan.ly b/mutopia/Coriolan/coriolan.ly index 83334d2b1e..d012bb23b6 100644 --- a/mutopia/Coriolan/coriolan.ly +++ b/mutopia/Coriolan/coriolan.ly @@ -61,6 +61,7 @@ strijkers = \type Staff_group = strijkers_group < \score{ < \textstyle "italic"; + \$legno \$koper \$timpani_g diff --git a/mutopia/Coriolan/corni-part.ly b/mutopia/Coriolan/corni-part.ly index eb12f83988..8b468982bd 100644 --- a/mutopia/Coriolan/corni-part.ly +++ b/mutopia/Coriolan/corni-part.ly @@ -13,9 +13,8 @@ copyright = "public domain"; \include "global.ly" \include "corni.ly" - +\include "part-paper.ly" \score{ -% \property Score.part = 1 \$corni_staff \paper{} } diff --git a/mutopia/Coriolan/corno-1.ly b/mutopia/Coriolan/corno-1.ly index 3b05a15208..53e2a68f4d 100644 --- a/mutopia/Coriolan/corno-1.ly +++ b/mutopia/Coriolan/corno-1.ly @@ -13,11 +13,11 @@ copyright = "public domain"; corno1 = \melodic{ \octave c'; - r1*2 | as'4-.\ff r r2 | r1*3 | - as'4-. r r2 | r1*3 | + R1 *2 | as'4-.\ff r r2 | R1 *3 | + as'4-. r r2 | R1 *3 | es'4-. r r2 | r1 | g'4-. r r2 | g'4-. r r2 | - r1*5 | + R1 *5 | r2 r4 g'4-.\f | } diff --git a/mutopia/Coriolan/corno-2.ly b/mutopia/Coriolan/corno-2.ly index 73f7340206..cebe2e3d1a 100644 --- a/mutopia/Coriolan/corno-2.ly +++ b/mutopia/Coriolan/corno-2.ly @@ -15,11 +15,11 @@ corno2 = \melodic{ \octave c'; % koor: corno-part.ly % r1 | r1 | f'4-.\ff r r2 | r1 | - r1*2 | f'4-. r r2 | r1*3 | - f'4-. r r2 | r1*3 | + R1 *2 | f'4-. r r2 | R1 *3 | + f'4-. r r2 | R1 *3 | es'4-. r r2 | r1 | g4-. r r2 | g4-. r r2 | - r1*5 | + R1 *5 | r2 r4 g4-. | } diff --git a/mutopia/Coriolan/fagotti-part.ly b/mutopia/Coriolan/fagotti-part.ly index 8e51cf6373..1b47dc6cf2 100644 --- a/mutopia/Coriolan/fagotti-part.ly +++ b/mutopia/Coriolan/fagotti-part.ly @@ -13,9 +13,8 @@ copyright = "public domain"; \include "global.ly" \include "fagotti.ly" - +\include "part-paper.ly" \score{ -% \property Score.part = 1 \$fagotti_staff \paper{} } diff --git a/mutopia/Coriolan/fagotto-1.ly b/mutopia/Coriolan/fagotto-1.ly index f238406f28..9340102b27 100644 --- a/mutopia/Coriolan/fagotto-1.ly +++ b/mutopia/Coriolan/fagotto-1.ly @@ -13,11 +13,11 @@ copyright = "public domain"; fagotto1 = \melodic{ \octave c; - r1*2 | as4-.\ff r r2 | r1*3 | - as4-. r r2 | r1*3 | + R1 *2 | as4-.\ff r r2 | R1 *3 | + as4-. r r2 | R1 *3 | a4-. r r2 | r1 | c'4-. r r2 | b4-. r r2 | - r1*5 | + R1 *5 | r2 r4 g4-.\f | } diff --git a/mutopia/Coriolan/fagotto-2.ly b/mutopia/Coriolan/fagotto-2.ly index 1a1f0bbeda..852af207f3 100644 --- a/mutopia/Coriolan/fagotto-2.ly +++ b/mutopia/Coriolan/fagotto-2.ly @@ -15,11 +15,11 @@ fagotto2 = \melodic{ \octave c; % koor % r1 | r1 | f4-.\ff r r2 | r1 | - r1*2 | f4-. r r2 | r1*3 | - f4-. r r2 | r1*3 | + R1 *2 | f4-. r r2 | R1 *3 | + f4-. r r2 | R1 *3 | fis4-. r r2 | r1 | g4-. r r2 | g4-. r r2 | - r1*5 | + R1 *5 | r2 r4 'g4-. | } diff --git a/mutopia/Coriolan/flauti-part.ly b/mutopia/Coriolan/flauti-part.ly index aa6e8d5820..59750180df 100644 --- a/mutopia/Coriolan/flauti-part.ly +++ b/mutopia/Coriolan/flauti-part.ly @@ -13,9 +13,9 @@ copyright = "public domain"; \include "global.ly" \include "flauti.ly" +\include "part-paper.ly" \score{ -% \property Score.part = 1 \$flauti_staff \paper{} } diff --git a/mutopia/Coriolan/flauto-1.ly b/mutopia/Coriolan/flauto-1.ly index 58ed585f9e..71412f636c 100644 --- a/mutopia/Coriolan/flauto-1.ly +++ b/mutopia/Coriolan/flauto-1.ly @@ -13,11 +13,11 @@ copyright = "public domain"; flauto1 = \melodic{ \octave c''; - r1*2 | c'4-.\ff r r2 | r1*3 | - d'4-. r r2 | r1*3 | + R1 *2 | c'4-.\ff r r2 | R1 *3 | + d'4-. r r2 | R1 *3 | es'4-. r r2 | r1 | g'4-. r r2 | b4-. r r2 | - r1*4 | + R1 *4 | r2 es'\p_"\ \ \ cresc." ( | )dis'2. es'4-.\f | } diff --git a/mutopia/Coriolan/flauto-2.ly b/mutopia/Coriolan/flauto-2.ly index 7a3f7707aa..3d983054f5 100644 --- a/mutopia/Coriolan/flauto-2.ly +++ b/mutopia/Coriolan/flauto-2.ly @@ -15,11 +15,11 @@ flauto2 = \melodic{ \octave c''; % koor % r1 | r1 | as4-.\ff r r2 | r1 | - r1*2 | as4-. r r2 | r1*3 | - b4-. r r2 | r1*3 | + R1 *2 | as4-. r r2 | R1 *3 | + b4-. r r2 | R1 *3 | c'4-. r r2 | r1 | es'4-. r r2 | d4-. r r2 | - r1*4 | + R1 *4 | r2 r2 | r2 r4 b4-. | } diff --git a/mutopia/Coriolan/oboe-1.ly b/mutopia/Coriolan/oboe-1.ly index a9b7601c5a..2be8732ec3 100644 --- a/mutopia/Coriolan/oboe-1.ly +++ b/mutopia/Coriolan/oboe-1.ly @@ -13,11 +13,11 @@ copyright = "public domain"; oboe1 = \melodic{ \octave c''; - r1*2 | as4-.\ff r r2 | r1*3 | - as4-. r r2 | r1*3 | + R1 *2 | as4-.\ff r r2 | R1 *3 | + as4-. r r2 | R1 *3 | a4-. r r2 | r1 | g4-. r r2 | g4-. r r2 | - r1*4 | + R1 *4 | as2\p_"\ \ \ cresc." ( g | )fis2. g4-.\f | } diff --git a/mutopia/Coriolan/oboe-2.ly b/mutopia/Coriolan/oboe-2.ly index 1090871206..827629ad2d 100644 --- a/mutopia/Coriolan/oboe-2.ly +++ b/mutopia/Coriolan/oboe-2.ly @@ -15,11 +15,11 @@ oboe2 = \melodic{ \octave c''; % koor % r1 | r1 | f4-.\ff r r2 | r1 | - r1*2| f4-. r r2 | r1*3 | - f4-. r r2 | r1*3 | + R1 *2| f4-. r r2 | R1 *3 | + f4-. r r2 | R1 *3 | es4-. r r2 | r1 | es4-. r r2 | 'b4-. r r2 | - r1*5 | + R1 *5 | r2 r4 'b4-. | } diff --git a/mutopia/Coriolan/oboi-part.ly b/mutopia/Coriolan/oboi-part.ly index 99a94e7c98..f3d8ed7c8a 100644 --- a/mutopia/Coriolan/oboi-part.ly +++ b/mutopia/Coriolan/oboi-part.ly @@ -13,10 +13,10 @@ copyright = "public domain"; \include "global.ly" \include "oboi.ly" +\include "part-paper.ly" \score{ -% \property Score.part = 1 - \$oboi_staff + \$oboi_staff \paper{} } diff --git a/mutopia/Coriolan/part-paper.ly b/mutopia/Coriolan/part-paper.ly new file mode 100644 index 0000000000..2c312d834e --- /dev/null +++ b/mutopia/Coriolan/part-paper.ly @@ -0,0 +1,32 @@ +% paper20.ly + +\include "table20.ly" +\include "paper20.ly" +default_paper = \paper { + \paper_twenty + Score = \translator { + \type Score_engraver; + + \consists "Timing_engraver"; + % uncomment to bar numbers on a whole system. +%{ + \consists "Bar_column_engraver"; + \consists "Bar_number_engraver"; +%} + \consists "Span_score_bar_engraver"; + \consists "Score_priority_engraver"; + \consists "Priority_horizontal_align_engraver"; + \consists "Vertical_align_engraver"; + + + \accepts "Staff_group"; + \accepts "Staff"; + \accepts "Rhythmic_staff"; + \accepts "Lyrics"; + \accepts "Grand_staff"; + SkipBars = "1"; +} + + +} + diff --git a/mutopia/Coriolan/timpani.ly b/mutopia/Coriolan/timpani.ly index 8936643c76..e08b14e2d1 100644 --- a/mutopia/Coriolan/timpani.ly +++ b/mutopia/Coriolan/timpani.ly @@ -13,11 +13,11 @@ copyright = "public domain"; timpani = \melodic{ \octave c; - r1*2 | c4-.\ff r r2 | r1*3 | - c4-. r r2 | r1*3 | + R1 *2 | c4-.\ff r r2 | R1 *3 | + c4-. r r2 | R1 *3 | c4-. r r2 | r1 | 'g4-. r r2 | 'g4-. r r2 | - r1*5 | + R1 *5 | r2 r4 'g4-. | } diff --git a/mutopia/Coriolan/trombe-part.ly b/mutopia/Coriolan/trombe-part.ly index 802a494d0d..47911886ab 100644 --- a/mutopia/Coriolan/trombe-part.ly +++ b/mutopia/Coriolan/trombe-part.ly @@ -13,10 +13,9 @@ copyright = "public domain"; \include "global.ly" \include "trombe.ly" - +\include "part-paper.ly" \score{ -% \property Score.part = 1 - \$trombe_staff + \$trombe_staff \paper{} } diff --git a/mutopia/Coriolan/trombo-1.ly b/mutopia/Coriolan/trombo-1.ly index 6b3bef51ab..d8d489027f 100644 --- a/mutopia/Coriolan/trombo-1.ly +++ b/mutopia/Coriolan/trombo-1.ly @@ -13,11 +13,11 @@ copyright = "public domain"; trombo1 = \melodic{ \octave c'; - r1*2 | c'4-.\ff r r2 | r1*3 | - c'4-. r r2 | r1*3 | + R1 *2 | c'4-.\ff r r2 | R1 *3 | + c'4-. r r2 | R1 *3 | c'4-. r r2 | r1 | g4-. r r2 | g4-. r r2 | - r1*5 | + R1 *5 | r2 r4 g4-.\f | } diff --git a/mutopia/Coriolan/trombo-2.ly b/mutopia/Coriolan/trombo-2.ly index f123b9a32c..f47ef9acbb 100644 --- a/mutopia/Coriolan/trombo-2.ly +++ b/mutopia/Coriolan/trombo-2.ly @@ -15,11 +15,11 @@ trombo2 = \melodic{ \octave c'; % koor % r1 | r1 | c4-.\ff r r2 | r1 | - r1*2 | c4-. r r2 | r1*3 | - c4-. r r2 | r1*3 | + R1 *2 | c4-. r r2 | R1 *3 | + c4-. r r2 | R1 *3 | c4-. r r2 | r1 | 'g4-. r r2 | 'g4-. r r2 | - r1*5 | + R1 *5 | r2 r4 'g4-. | } diff --git a/mutopia/Coriolan/violino-2.ly b/mutopia/Coriolan/violino-2.ly index 2726b10874..1d8447b86f 100644 --- a/mutopia/Coriolan/violino-2.ly +++ b/mutopia/Coriolan/violino-2.ly @@ -17,7 +17,7 @@ violino2 = \melodic{ c1 ~ | c | <as'4-. b-. d-.> r r2 | r1 | c1 ~ | c | <c''4-. es'-. fis-.> r r2 | r1 | <c'4-. es-. 'g-.> r r2 | <b4-. d-. 'g-.> r r2 | - r1*3 | + R1 *3 | r2 ['b8-.\p f-.] [f()es] | [es8-. as-.] as4.-"cresc." g8-. g4 ~ | [g8 fis-.] fis4 ~ fis g-.\f | diff --git a/mutopia/J.S.Bach/Makefile b/mutopia/J.S.Bach/Makefile index 46c474af95..6141969190 100644 --- a/mutopia/J.S.Bach/Makefile +++ b/mutopia/J.S.Bach/Makefile @@ -5,6 +5,7 @@ depth = ../.. # +EXTRA_DISTFILES=preludes.tex # descent order into subdirectories: # SUBDIRS = diff --git a/mutopia/J.S.Bach/preludes-1.ly b/mutopia/J.S.Bach/preludes-1.ly index e75e39eb83..96a0ab180e 100644 --- a/mutopia/J.S.Bach/preludes-1.ly +++ b/mutopia/J.S.Bach/preludes-1.ly @@ -12,8 +12,6 @@ enteredby = "jcn"; copyright = "public domain"; } -\include "paper20.ly" - one = \melodic{ \octave c''; \textstyle "italic"; @@ -114,8 +112,7 @@ grand_staff = \type Grand_staff < > a4 = \paper{ - \paper_twenty - linewidth= 195.\mm; + linewidth= 193.\mm; } \score{ diff --git a/mutopia/J.S.Bach/preludes-2.ly b/mutopia/J.S.Bach/preludes-2.ly index 7ccc808db8..9bd557f3f2 100644 --- a/mutopia/J.S.Bach/preludes-2.ly +++ b/mutopia/J.S.Bach/preludes-2.ly @@ -12,8 +12,6 @@ enteredby = "jcn"; copyright = "public domain"; } -\include "paper20.ly" - one = \melodic{ \octave c''; \textstyle "italic"; @@ -120,8 +118,7 @@ grand_staff = \type Grand_staff < > a4 = \paper{ - \paper_twenty - linewidth= 195.\mm; + linewidth= 193.\mm; } \score{ diff --git a/mutopia/J.S.Bach/preludes-3.ly.m4 b/mutopia/J.S.Bach/preludes-3.ly.m4 index 0643095b97..fa170f74a8 100644 --- a/mutopia/J.S.Bach/preludes-3.ly.m4 +++ b/mutopia/J.S.Bach/preludes-3.ly.m4 @@ -12,8 +12,6 @@ enteredby = "jcn"; copyright = "public domain"; } -\include "paper20.ly" - define(comma, r16 [$1$4 $2 $3] [$2 $1 $2 $6$1] r $1$7 r $5$1 |) define(s, `comma(translit($*,` ', `,'))') define(t, r16 [$1$4 $2 $3] [$2 $1 $2 $6$1] r $1$7 r $5$1 |) @@ -167,8 +165,7 @@ grand_staff = \type Grand_staff < > a4 = \paper{ - \paper_twenty - linewidth= 195.\mm; + linewidth= 193.\mm; } \score{ diff --git a/mutopia/J.S.Bach/preludes-4.ly b/mutopia/J.S.Bach/preludes-4.ly index 64008af3e4..474d012d9d 100644 --- a/mutopia/J.S.Bach/preludes-4.ly +++ b/mutopia/J.S.Bach/preludes-4.ly @@ -11,8 +11,6 @@ enteredby = "jcn"; copyright = "public domain"; } -\include "paper20.ly" - one = \melodic{ \octave c''; \textstyle "italic"; @@ -194,8 +192,7 @@ grand_staff = \type Grand_staff < > widea4 = \paper{ - \paper_twenty - linewidth= 195.\mm; + linewidth= 193.\mm; % arithmetic_basicspace = 2.; % arithmetic_multiplier = 6.\pt; arithmetic_basicspace = 3.; diff --git a/mutopia/J.S.Bach/preludes-5.ly b/mutopia/J.S.Bach/preludes-5.ly index 35efe1587c..1572329e3a 100644 --- a/mutopia/J.S.Bach/preludes-5.ly +++ b/mutopia/J.S.Bach/preludes-5.ly @@ -10,8 +10,6 @@ enteredby = "jcn"; copyright = "public domain"; } -\include "paper20.ly" - one = \melodic{ \octave c'; \textstyle "italic"; @@ -203,7 +201,7 @@ widea4 = \paper { % arithmetic_multiplier = 6.\pt; arithmetic_basicspace = 2.; arithmetic_multiplier = 8.\pt; - linewidth= 195.\mm; + linewidth= 193.\mm; } \score{ diff --git a/mutopia/J.S.Bach/preludes-6.ly b/mutopia/J.S.Bach/preludes-6.ly index e76cbcd1af..0eb6d492fe 100644 --- a/mutopia/J.S.Bach/preludes-6.ly +++ b/mutopia/J.S.Bach/preludes-6.ly @@ -11,8 +11,6 @@ enteredby = "jcn"; copyright = "public domain"; } -\include "paper20.ly" - one = \melodic{ \octave c'; \skip 4*4; | @@ -115,8 +113,7 @@ grand_staff = \type Grand_staff < > a4 = \paper{ - \paper_twenty - linewidth = 195.\mm; + linewidth = 193.\mm; } \score{ diff --git a/mutopia/J.S.Bach/scsii-menuetto.ly b/mutopia/J.S.Bach/scsii-menuetto.ly index a8b41cc70c..aaf38d3c21 100644 --- a/mutopia/J.S.Bach/scsii-menuetto.ly +++ b/mutopia/J.S.Bach/scsii-menuetto.ly @@ -12,7 +12,8 @@ copyright = "public domain"; } %{ - Tested Features:breaking algorithm, chords, multivoice, accents + Tested Features:breaking algorithm, chords, multivoice, accents, + dotted slurs %} \version "0.1.10"; @@ -27,131 +28,62 @@ copyright = "public domain"; % \slope{30} % Fool MusiXTeX into 30 / 10 steeper beam % % because piece is set very tightly +%{ + This file has a long heritage. + It should probably be rewritten as two separate voices. +%} + + IImenuetto = \melodic{ -% \property Voice.beamslopedamping = \infinity \clef"alto"; \property Staff.instrument = cello \meter 3/4; \key bes; \octave c'; - \duration 8; - < a2 f2 d2 \f > bes4-. | -%%2 - \textstyle "finger"; % ugh. - - \multi 2 < - { \stemup; [ bes8^"1"( )a8 bes8-. g8-. ] a4-.^"4" } - - { \stemdown; < e8_"2" c8_"4" > } - > | - \stemboth; -%%3 -% \property Voice.beamslopedamping = \normal - < d4 'bes4-. > g4-. [ f8-. e8-. ] | -% \property Voice.beamslopedamping = \infinity -%%4 - \multi 2 < - { \stemup; [ f8( e8 )d8 cis8-. 'b8-. 'a8-. ] } - { \stemdown; 'a } - > | - \stemboth; -%%5 - < a2 f2 d2 > bes!4-. | -%%6 - \multi 2 < - { \stemup; [ bes8 a8 bes8-. g8-. ] } - { \stemdown; e8 } - > - \stemboth; - c'!4-. | -%%7 - < a4-. f4> - < d'4-.-\upbow f4 'bes4 > - < e'4-.-\downbow g4 'g4 > | -%%8 - < cis'2.-\upbow e2. 'a2. > - \bar ":|:"; -%%9 + <a2 f d \f> bes4-. | + <{\voiceone; [bes8^1 a bes-. g-.] a4-.^4 } {\voicetwo; <e8_2 c_4> }> | + \onevoice; + <d4 'bes-.> g-. [f8-. e-.] | + <{\voiceone; [f8( e )d cis-. 'b-. 'a-.] } {\voicetwo; 'a8 }> | + \onevoice; + <a2 f d> bes!4-. | + <{\voiceone; [bes8 a bes-. g-.] } {\voicetwo; e8 }> + \onevoice; + c'!4-. | <a-. f> <d'-.-\upbow f 'bes> + <e'-.-\downbow g 'g> | <cis'2.-\upbow e 'a> \bar ":|:"; \clef "violin"; - < e'2 a2 \f > -% \property Voice.beamslopedamping = \normal - [ d'8( e'16 )f'16 ] | -% \property Voice.beamslopedamping = \infinity -%%10 - \multi 2 < - { \stemup; [ e'8( d' cis'_"2" )e' a( )g8 ] } - { \stemdown; g8 } - > | - \stemboth; -%%11 - \multi 2 < - { \stemup; a4( )d'4 cis'4-. } - { \stemdown; f2 e4 } - > | - \stemboth; -%%12 - \multi 2 < - { \stemup; [ g'8^"4"( f' e' )f' d'^"3"( ) c' ] } - { \stemdown; d8 } - > | - \stemboth; -%%13 + <e'2 a\f> + [d'8( e'16 )f'] | + \slurdotted; + <{\voiceone; [e'8( d' cis'_2 )e' a( )g] } {\voicetwo; g8 }> | + \onevoice; + <{\voiceone; a4 ~ d' cis'-. } {\voicetwo; f2 e4 }> | + \onevoice; + <{\voiceone; [g'8^4( f' e' )f' d'^3( ) c'] } {\voicetwo; d8 }> | + \onevoice; \clef "alto"; - \multi 2 < - - { \stemup; bes2 c'4 } - { \stemdown; g4( )f4 e4 }% ugh - > | - \stemboth; -%%14 - \multi 2 < - { \stemup; [ a8 g8 a8 f8 ] } - { \stemdown; f8 } - > - \stemboth; - < d'4-\upbow e4 'bes4 > | -%%15 - < c'4-\downbow f4 'a4 > [ bes8( )a8 g8 a8 ] | -%%16 - [ f( e8 )f a8-. g8-. bes8-. ] | -%%17 - < a2^"0"^\trill fis2_"3" > bes4 | -%%18 - \multi 2 < - { \stemup; [ c'8( )bes8 c' a8 ] } - { \stemdown; es8 } - > - \stemboth; + <{\voiceone; bes2 c'4 } {\voicetwo; g4 ~ f e }> | + \onevoice; + <{\voiceone; [a8 g a f] } {\voicetwo; f8 }> + \onevoice; + <d'4-\upbow e 'bes> | + <c'-\downbow f 'a> [bes8 a g a] | + [f8( e )f a-. g-. bes-.] | + <a2^"0"^\trill fis_3> bes4 | + <{\voiceone; [c'8 bes c' a] } {\voicetwo; es8 }> + \onevoice; fis4^\trill | -%%19 - < d'4-\downbow g4 'bes4 > < c'4-\upbow g4 c4 > < [ bes8 d8 > a8 ] | -%%20 - \multi 2 < - { \stemup; [ c'8( bes8 a8 )bes g( )bes8 ] } - { \stemdown; < d8 g8 > } - > | - \stemboth; -%%21 - \multi 2 < - { \stemup; d'4( )cis'4 d'4 } - { \stemdown; g2 f4 } - > | - \stemboth; -%%22 - \multi 2 < - { \stemup; [ g8( )f8 g8 e8 ] f4 } - { \stemdown; cis8 d4 } - > | - \stemboth; -%%23 -% \property Voice.beamslopedamping = \normal - [ 'g8 g8 ] < e4.^\trill 'a4. > d8-\upbow | -% \property Voice.beamslopedamping = \infinity -%%24 - \textstyle "roman"; % ugh - < d2.^"fine" 'a2. 'd2._"3 mins."> - \bar ":|"; + <d'4-\downbow g 'bes> <c'-\upbow g c> <[bes8( d> )a] | + <{\voiceone; [c'8( bes a )bes g( )bes] } {\voicetwo; <d8 g> }> | + \onevoice; + <{\voiceone; d'4 ~ cis' d' } {\voicetwo; g2 f4 }> | + \onevoice; + <{\voiceone; [g8 f g e] f4 } {\voicetwo; cis8 d4 }> | + \onevoice; + ['g8 g] <'a4. { e^\trill ~ d8-\upbow }> | + \textstyle "italic"; % ugh + <d2._"fine" 'a 'd> \bar ":|"; } \score{ @@ -159,16 +91,9 @@ IImenuetto = \melodic{ \IImenuetto } \paper{ - linewidth= 150.0\mm; - % how does this work? - % why does space not have dim? - arithmetic_basicspace = 3.2; - % how can multiplier have dim? - arithmetic_mulitplier = 9.\pt; - %\output "scsii-menuetto.out"; + linewidth= 185.0\mm; } \midi{ \tempo 4 = 120; - %\output "scsii-menuetto.midi"; } } diff --git a/mutopia/J.S.Bach/wtk1-fugue2.ly b/mutopia/J.S.Bach/wtk1-fugue2.ly index 7cb045ba17..7af1d7746f 100644 --- a/mutopia/J.S.Bach/wtk1-fugue2.ly +++ b/mutopia/J.S.Bach/wtk1-fugue2.ly @@ -165,7 +165,7 @@ bassdux = \melodic { \score { - \melodic { + \type Grand_staff < \type Staff = treble < \global @@ -177,7 +177,6 @@ bassdux = \melodic { \bassdux > > - } \paper { gourlay_maxmeasures = 5.; diff --git a/mutopia/Makefile b/mutopia/Makefile index dc989a75a2..acb5a44fc0 100644 --- a/mutopia/Makefile +++ b/mutopia/Makefile @@ -10,7 +10,7 @@ depth = .. SUBDIRS = J.S.Bach Coriolan EXTRA_DISTFILES += TODO -examples=standje gallina +examples=standchen gallina # diff --git a/mutopia/los-toros-oboe-16.tex b/mutopia/los-toros-oboe-16.tex deleted file mode 100644 index a1424d8ee9..0000000000 --- a/mutopia/los-toros-oboe-16.tex +++ /dev/null @@ -1,38 +0,0 @@ -\documentclass{article} %UGH - -\usepackage{a4} - -% UGH UGH -% ugh, centre -\advance\oddsidemargin-30mm -\evensidemargin\oddsidemargin -\advance\textwidth60mm -\advance\topmargin-20mm -\addtolength{\textheight}{40mm} -\footskip5mm - -\usepackage{fancyheadings} -\lhead{} -\rhead{} -\chead{} -\lfoot{} -\cfoot{\ifnum\thepage=1{\hfill\LilyIdString}\fi} -\rfoot{\ifnum\thepage>1{\hfill\thepage\hfill}\fi} - -\headrulewidth0mm -\pagestyle{fancy} -\thispagestyle{fancy} - - -\begin{document} -% \input lilyponddefs -\input titledefs -\def\interscoreline{\vskip3mm} -\title{La Feria\normalsize\\[2ex]Los Toros} -\composer{Paul Lac\^ome d'Estalenx (1838-1920)} -%\instrument{} % heu -%#%\tempo{M\"a\ss ig} -\makelilytitle -\input{los-toros-oboe-1.tex} -\end{document} - diff --git a/mutopia/los-toros-oboe-20.tex b/mutopia/los-toros-oboe-20.tex deleted file mode 100644 index 555a046d0d..0000000000 --- a/mutopia/los-toros-oboe-20.tex +++ /dev/null @@ -1,39 +0,0 @@ -\documentclass{article} %UGH - -\usepackage{a4} - -% UGH UGH -\advance\oddsidemargin-25mm -\evensidemargin\oddsidemargin -% ugh, centre -\advance\textwidth40mm -\advance\topmargin-20mm -\addtolength{\textheight}{40mm} -\footskip5mm - -\usepackage{fancyheadings} -\lhead{} -\rhead{} -\chead{} -\lfoot{} -\cfoot{\ifnum\thepage=1{\hfill\LilyIdString}\fi} -\rfoot{\ifnum\thepage>1{\hfill\thepage\hfill}\fi} - -\headrulewidth0mm -\pagestyle{fancy} -\thispagestyle{fancy} - - -\begin{document} -\input lilyponddefs -\input titledefs -\def\interscoreline{\vskip3mm} -\title{La Feria\normalsize\\[2ex]Los Toros} -\composer{Paul Lac\^ome d'Estalenx (1838-1920)} -%\instrument{} % heu -%#%\tempo{M\"a\ss ig} -\makelilytitle -\input{los-toros-oboe.tex} -% \input{los-toros-oboe-1.tex} -\end{document} - diff --git a/mutopia/los-toros-oboe.ly b/mutopia/los-toros-oboe.ly index 6032b7c74a..2fc2ea26a7 100644 --- a/mutopia/los-toros-oboe.ly +++ b/mutopia/los-toros-oboe.ly @@ -1,19 +1,20 @@ \header{ filename = "los-toros-oboe.ly"; -title = "La Feria" +title = "La Feria"; subtitle = "Los Toros"; opus = ""; composer = "Paul Lac\\^ome d'Estalenx (1838-1920)"; enteredby = "jcn"; copyright = "public domain"; +latexheaders= "headers"; } +\include "paper16.ly" + %{ Silly latex file dropped; use ly2dvi %} -\include "paper20.ly" - hoboonestart = \melodic{ % ugh: can't copy: allegro/primo tempo \octave c'; @@ -101,14 +102,14 @@ hoboonemid = \melodic{ % d'4(\^"Un peu plus lent et \\'el\\'egant"< \textstyle "italic"; d'4(\< - [e'8 \!f'8] | + [e'8 \!fis'8] | % [)b'-. a'-.] [g16( fis' e' )d'] | \textstyle "bold"; [)b'-.^"Un peu plus lent et \\'el\\'egant" a'-.] [g16( fis' e' )d'] | \textstyle "italic"; - [d'( c' b\< c'] [)\!f'8-. e'-.] | + [d'( c' b\< c'] [)\!fis'8-. e'-.] | d4-> ~ [d16 e( fis g] | - [a b\< d' fis] [)\!a'8-. g'-.] | + [a b\< d' fis'] [)\!a'8-. g'-.] | [fis'16( e' a )c'] e'4 ~ | [e'16 d'( e c'] [)b8-. a-.] | g2 ~ | @@ -122,8 +123,8 @@ hoboonemid = \melodic{ fis'2-> ~ | [fis'16 g'-.\< a'-. b'-.] [\!c''8-. c'-.] | [es'8.->(-"espress.") d'16] d'4 ~ | - [d'16 e'( fis a'] [)g'8 b-.] | - [b8.->( )c'16] c4 ~ | + [d'16 e'( fis' a'] [)g'8 b-.] | + [b8.->( )c'16] c'4 ~ | [c'16\< cis'( d' \!dis'] [)e'8-.-"dim." fis-.] | [fis8.->( g16] )g4 ~ | @@ -167,7 +168,7 @@ hoboonelast = \melodic{ [fis'16-.\p fis'-. fis'-. fis'-.] [fis'8-. g'-.] | % same measure [fis'16-.\p fis'-. fis'-. fis'-.] [fis'8-. g'-.] | - [fis'8-. g-. fis-. g-.] | + [fis'8-. g'-. fis'-. g'-.] | [a'-. bes'-. a'-. bes'-. ] | [a'-.\f bes'-. a'-. bes'-. ] | [c''-.-"cresc." f'-. g'-. a'-.] | @@ -187,8 +188,11 @@ hoboonelast = \melodic{ % r2^"Un peu plus lent et \\'el\\'egant" % r2^"\\fetanummer8" r2*8 - r4 r8\p bes | - g2->^"Un peu plus lent et \\'el\\'egant" ~ | +% r4 r8\p bes | + r4^"Un peu plus lent et \\'el\\'egant" + r8\p bes | +% g2->^"Un peu plus lent et \\'el\\'egant" ~ | + g2-> ~ | \textstyle "italic"; g8 r r c' | c'2-> ~ | @@ -198,7 +202,7 @@ hoboonelast = \melodic{ d'2-> ~ | [d'16-"dim."( es' f' g'] [)as'8 as-.] | [ces'8.->\p( )bes16-.] bes4 ~ | - [bes16( c' d' f] [)es'8 g-.] | + [bes16( c'! d' f'] [)es'8 g-.] | [g8.->( )as16] as4 ~ | [as16( a bes b] [)c'8-. d-.] | % a deux @@ -211,39 +215,39 @@ hoboonelast = \melodic{ [bes'8.-> g'16-.] [es'16-. bes-. g-. as-.] | [bes-. c'-. d'-. es'-.] [f'-. g'-. as'-. bes'-.] | d''8-. r c''4-> ~ | - [c''16 f-. g'-. a-.] [bes'-. c'-. d'-. es'-.] | + [c''16 f'-. g'-. a'-.] [bes'-. c'-. d'-. es'-.] | g'8-. r f'4-> ~ | - [f'16 bes-. c'-. d-.] [es'-. f'-. g-. as-.] | + [f'16 bes-. c'-. d'-.] [es'-. f'-. g'-. as'-.] | c''8 r bes'4 ~ | [bes'8 as'-. g'8.-. e'16-.] | - g'8-. r f4-> ~ | + g'8-. r f'4-> ~ | [f'8 es'-. ces'8.-. as16-.] | % `a deux \textstyle "large"; [ces'8.->^"Plus vite" bes16-.(] [a bes es' d'] | \textstyle "italic"; - [)c!8.-> bes16] [a( bes es' )d'] | + [)c'!8.-> bes16] [a( bes es' )d'] | [c'->( bes es' )d'] [c'->( bes es' )d'] | % same measure [c'->( bes es' )d'] [c'->( bes es' )d'] | - [c'( bes a bes] [c' d es' e] | + [c'( bes a bes] [c' d' es' e'] | [g' )f' d'( es'] [f' g' as' a'] | [c'' )bes' bes( c'] [d' es' f' g'] | [as' g' f' g'] [as' bes' c'' d''] | \textstyle "large"; - [)es''-.^"Tempo 1$^o$" g'-. g'-. g-.] [g'8-. g'-.] | + [)es''-.^"Tempo 1$^o$" g'-. g'-. g'-.] [g'8-. g'-.] | \textstyle "italic"; bes'4.-> g'8-. | gis'2->( | )as'! | - [g'16-. g'-. g'-. g-.] [g'8-. g'-.] | + [g'16-. g'-. g'-. g'-.] [g'8-. g'-.] | bes'4.-> g'8-. | gis'2->( | % )as'! | )as' | - [bes'16-. bes'-. bes'-. bes-.] [bes'8-. bes'-.] | + [bes'16-. bes'-. bes'-. bes'-.] [bes'8-. bes'-.] | bes'4.-> g'8-. | - [g'16-._"h\\^atez" g'-. g'-. g-.] [g'8-. g'-.] | + [g'16-._"h\\^atez" g'-. g'-. g'-.] [g'8-. g'-.] | g'4.-> g'8-. | es'4.-> es'8-. | bes4.-> bes8-. | @@ -251,7 +255,7 @@ hoboonelast = \melodic{ g'4.->^"Presto" g'8-. | \textstyle "italic"; es'4.-> es'8-. | - [bes-. bes-. es'-. g-.] | + [bes-. bes-. es'-. g'-.] | [bes'-. bes-. es'-. g'-.] | bes'-. r r4 | g'8-. r r4 | @@ -288,7 +292,7 @@ $staff_hoboone = \type Staff = hoboonestaff < > a4 = \paper{ - \paper_twenty +% \paper_twenty linewidth= 185.\mm; gourlay_maxmeasures = 10.0; Staff = \translator { @@ -313,6 +317,7 @@ a4 = \paper{ } a4sixteen = \paper{ + \paper_sixteen linewidth= 193.\mm; Staff = \translator { \type "Engraver_group_engraver"; diff --git a/mutopia/ltor.ly b/mutopia/ltor.ly new file mode 100644 index 0000000000..afc524c505 --- /dev/null +++ b/mutopia/ltor.ly @@ -0,0 +1,361 @@ +\header{ +filename = "los-toros-oboe.ly"; +title = "La Feria"; +subtitle = "Los Toros"; +opus = ""; +composer = "Paul Lac\\^ome dEstalenx (1838-1920)"; +enteredby = "jcn"; +copyright = "public domain"; +latexheaders= "headers"; +} + +%{ +Silly latex file dropped; use ly2dvi + +Converted to relative octave from los-toros-oboe.ly: + :s/[^\\]'/'x/g + :s/'x//g + (511 substitutions on 155 lines) + + lilypond -f los-toros-oboe 2> bla + wc -l bla + 138 + 138 / 3 = 46 octave quotes of 511 remain! + +%} + +\include "paper16.ly" + +hoboonestart = \melodic{ +% ugh: cant copy: allegro/primo tempo + \octave relative; + \textstyle "large"; + [es''16-.^"Allegro" es-. es-. es-.] [es8-. d-.] | + \textstyle "italic"; +} + +hobooneintro = \melodic{ + \octave relative; +% \textstyle "roman"; +% [es''16-.-"Allegro" es-. es-. es-.] [es8-. d-.] | +% \textstyle "italic"; + [f''8.-> es16(] [)d8 c-.] | + [bes16( c d es] [)d8 c-.] | + [bes-. as->~] [as16( g f g] | + [as bes c d] [)es8 c-.] | + [d8-. c16( bes] )as4 ~ | + [as16 g( f g] [as c bes as] | +% [)g8 as16 g(] [)f8 g16( f] | + [)g8 as16 g(] [)f8 g16( f] | + [)es8 f16-. g-.] [as-. bes-. c-. d-.] | + [es-. es-. es-. es-.] [es8-. d-.] | + [f8.-> es16(] [)d8 c-.] | + [bes16( c d es] [)d8 c-.] | + [bes8 a->~] [a16 g( fis g] | + [a bes c d] [)es8 d16()c] | + [bes-. g-. bes-. d-.] g4-> ~ | + [g16 f( es d] [c es d c] | + [)bes8 c16( bes] [)a8 bes16( a] | + [)g8 r d'] r | +} + +hoboonemid = \melodic{ + \octave relative; + [g'16-. g-. g-. g-.] [g8-. f-.] | + as2-> | + [as16-. as-. as-. as-.] [as8-. g-.] | + bes2-> | + [bes16-. bes-. bes-. bes-.] [bes8-. c] | + + r-"cresc." [d8-. r c-.] | + r\f [d-. es-. f-.] | + [g8.-> es16] [bes8 g] | + + % four measures copied from 8 measures back... + [g16-.\p g-. g-. g-.] [g8-. f-.] | + as2-> | + [as16-. as-. as-. as-.] [as8-. g-.] | + bes2-> | + [b16-. b-. b-. b-.] [b8-. c-.] | + + % same measure + [b16-. b-. b-. b-.] [b8-. c-.] | + + [b8-.-"cresc." c-. b-. c-.] | + [d-. es-. d-. es-.] | + [f\f-. g-. f-. g-.] | + [as-.\< g-. as-. bes-.] | + [\!g16\ff-. g-. g-. g-.] [g8-. g-.] | + [g8.-> g16] [g8 g] | + [g8.-> g16] [g8 g] | + [f8.-> f16] [f8 f] | + [f8.-> f16] [f8 f] | + [bes8-. as16( g] )f4 ~ | + [f16 es( d es] [f as g )f] | + [es( g f es] [d f es d] | + [c es d c] [b d c b] | + [a c bes a] [g bes a g] | + [fis a g fis] [e g fis )e] | + % `a deux + [d8 d'] [es8.-> c16] | + [a8 bes g es] | + [c' d es8. bes16] | + [g8 es bes' 'c] | + [d16-. d-. d-. d-.] [d8.-. es16->] | + [d'16-.-"cresc." d-. d-. d-.] [d8.-. es16->] | + [d16-. d-. d-. d-.] [d8.-. es16->] | + [d16 d d d] [d8 es16-.] r16-\fermata^"court"^"tr\\`es" | + % Un peu plus lent. + \textstyle "bold"; + +% ugh +% d4(\<^"Un peu plus lent" \textstyle "italic; _"tr\\`es \\'el\\'egant" +% d4(\^"Un peu plus lent et \\'el\\'egant"< + \textstyle "italic"; + d4(\< + [e8 \!fis8] | +% [)b-. a-.] [g16( fis e )d] | + \textstyle "bold"; + [)b-.^"Un peu plus lent et \\'el\\'egant" a-.] [''g16( fis' e )d] | + \textstyle "italic"; + [d( c b\< c] [)\!fis8-. e-.] | + ''d4-> ~ [d16 e( fis g] | + [a b\< d fis] [)\!a8-. g-.] | + [fis16( e 'a )c] e4 ~ | + [e16 d( 'e c'] [)b8-. a-.] | + g2 ~ | + [g8 \[/3 d16( e fis ]1/1 [)g8 d'-.] | + b2-> ~ | + [b8 \[/3 'd16( e fis ]1/1 [)g8-"cresc. poco" e'-.] | + e2-> ~ | + [e8 \[/3 ''d16( e fis ]1/1 [)g8\f d'-.] | + [d8.-> b'16-.] [g16-. d-. b-. c-.] | + [d-. e-. fis-. a-.] [g8-. e-.] | + fis2-> ~ | + [fis16 g-.\< a-. b-.] [\!c8-. 'c-.] | + [es8.->(-"espress.") d16] d4 ~ | + [d16 e( fis a] [)g8 'b-.] | + [b8.->( )c16] c4 ~ | + [c16\< cis( d \!dis] [)e8-.-"dim." 'fis-.] | + [fis8.->( g16] )g4 ~ | + + % (only notes! of) five measures copied from 14 measures above + [g8 \[/3 d16( e fis ]1/1 [)g8 d'-.] | + b2->-"cresc." ~ | + [b8 \[/3 'd16( e fis ]1/1 [)g8 e'-.] | + e2-> ~ | + [e8 \[/3 ''d16(_"h\\^atez" e fis ]1/1 [)g8\f d'-.] | + [d8.-> b16-.] [g16-.-"cresc." d'-. b-. c-.] | + [d16\f\< e-. fis-. g-.] [a-. 'b-. c-. \!d-.] +} + + +hoboonesecondstart = \melodic{ + \octave relative; +% ugh: cant copy: allegro/primo tempo + \textstyle "large"; + [es''16-.\ff^"Tempo 1$^o$" es-. es-. es-.] [es8-. d-.] | + \textstyle "italic"; + +} + +hoboonelast = \melodic{ + \octave relative; + % could transpose/copy from measure 19... + [d''16-.\p d-. d-. d-.] [d8-. c-.] | + es2-> | + [es16-. es-. es-. es-.] [es8-. d-.] | + f2-> | + [f16-. f-. f-. f-.] [f8-. g-.] | + r8 [a-.-"cresc." r g-.] | + r [a-.\f bes-.\< \!c-.] | + [d8.->\> \!bes16] [f8 d] | + + % four measures copied from 8 measures back... + [d16-.\p d-. d-. d-.] [d8-. c-.] | + es2-> | + [es16-. es-. es-. es-.] [es8-. d-.-"cresc."] | + f2-> | + [fis16-.\p fis-. fis-. fis-.] [fis8-. g-.] | + % same measure + [fis16-.\p fis-. fis-. fis-.] [fis8-. g-.] | + [fis8-. g-. fis-. g-.] | + [a-. bes-. a-. bes-. ] | + [a-.\f bes-. a-. bes-. ] | + [c-.-"cresc." 'f-. g-. a-.] | + [bes-. bes-. ces8.-> as16] | + [f8-. ges-. es-. ces-.] | + % `a deux + [as-. bes-. ces8.-> ges16] | + [es8-. ces'-. ges-. as-.] | + bes\p r r4 | + [bes16-.-"cresc." bes-. bes-. bes-.] [bes8-. ces->] | + % same measure + [bes16-. bes-. bes-. bes-.] [bes8-. ces->] | + [bes'16-.\ff bes-. bes-. bes-.] [bes8-. ces16->] r16^"court"-\fermata | + % ugh: eight measures rest (ugh: r1 -> four beats...) + % eiht measures rest.. + \textstyle "bold"; +% r2^"Un peu plus lent et \\'el\\'egant" + R2*8 +% r4 r8\p bes | + r4^"Un peu plus lent et \\'el\\'egant" + r8\p ''bes | +% g2->^"Un peu plus lent et \\'el\\'egant" ~ | + g2-> ~ | + \textstyle "italic"; + g8 r r c | + c2-> ~ | + c8 r r bes'\f | + [bes8.->\f g16-.] [es16-. bes-. g-. as-.] | + [bes-.-"dim." c-. d-. f-.] [es8-. c-.] | + d2-> ~ | + [d16-"dim."( es f g] [)'as8 as-.] | + [ces8.->\p( )bes16-.] bes4 ~ | + [bes16( c! d f] [)es8 'g-.] | + [g8.->( )as16] as4 ~ | + [as16( a bes b] [)c8-. 'd-.] | + % a deux + [d8.->( ) es16] es4 ~ | + es4 r8 bes'-. | + g2-> ~ | + g8 r r c | + c2 ~ | + c8 r r bes' | + [bes8.-> g16-.] [es16-. bes-. g-. as-.] | + [bes-. c-. d-. es-.] [f-. g-. as-. bes-.] | + d8-. r c4-> ~ | + [c16 'f-. g-. a-.] [bes-. 'c-. d-. es-.] | + g8-. r f4-> ~ | + [f16 'bes-. c-. d-.] [es-. f-. g-. as-.] | + c8 r bes4 ~ | + [bes8 as-. g8.-. e16-.] | + g8-. r f4-> ~ | + [f8 es-. ces8.-. as16-.] | + % `a deux + \textstyle "large"; + [ces8.->^"Plus vite" bes16-.(] [a bes es d] | + \textstyle "italic"; + [)c!8.-> bes16] [a( bes es )d] | + [c->( bes es )d] [c->( bes es )d] | + % same measure + [c->( bes es )d] [c->( bes es )d] | + [c( bes a bes] [c d es e] | + [g )f d( es] [f g as a] | + [c )bes 'bes( c] [d es f g] | + [as g f g] [as bes c d] | + \textstyle "large"; + [)es-.^"Tempo 1$^o$" 'g-. g-. g-.] [g8-. g-.] | + \textstyle "italic"; + bes4.-> g8-. | + gis2->( | + )as! | + [g16-. g-. g-. g-.] [g8-. g-.] | + bes4.-> g8-. | + gis2->( | +% )as! | + )as | + [bes16-. bes-. bes-. bes-.] [bes8-. bes-.] | + bes4.-> g8-. | + [g16-._"h\\^atez" g-. g-. g-.] [g8-. g-.] | + g4.-> g8-. | + es4.-> es8-. | + bes4.-> bes8-. | + \textstyle "large"; + g'4.->^"Presto" g8-. | + \textstyle "italic"; + es4.-> es8-. | + [bes-. bes-. es-. g-.] | + [bes-. 'bes-. es-. g-.] | + bes-. r r4 | + g8-. r r4 | + g8-. r r4 | +} + +hoboone = \melodic { + \hoboonestart + \hobooneintro + \hoboonemid + \hoboonesecondstart + \hobooneintro + \hoboonelast +} + +global = \melodic{ + \key bes es as; + \meter 2/4; + \skip 4*110; + \key fis; | + \bar "||"; + \skip 4*58; + \key bes es as; | + \bar "||"; + \skip 4*220; + \bar "|."; +} + + +$staff_hoboone = \type Staff = hoboonestaff < + \global + \property Staff.instrument = "oboe" + \hoboone +> + +a4 = \paper{ +% \paper_twenty + linewidth= 185.\mm; + gourlay_maxmeasures = 10.0; + Staff = \translator { + \type "Engraver_group_engraver"; + defaultclef = violin; + + \consists "Bar_engraver"; + \consists "Clef_engraver"; + \consists "Key_engraver"; + \consists "Meter_engraver"; + \consists "Local_key_engraver"; + \consists "Staff_sym_engraver"; + \consists "Collision_engraver"; + \consists "Rest_collision_engraver"; + \consists "Bar_column_engraver"; + \consists "Bar_number_engraver"; + \consists "Separating_line_group_engraver"; + \consists "Line_group_engraver"; + + \accepts "Voice"; + } +} + +a4sixteen = \paper{ + \paper_sixteen + linewidth= 193.\mm; + Staff = \translator { + \type "Engraver_group_engraver"; + defaultclef = violin; + + \consists "Bar_engraver"; + \consists "Clef_engraver"; + \consists "Key_engraver"; + \consists "Meter_engraver"; + \consists "Local_key_engraver"; + \consists "Staff_sym_engraver"; + \consists "Collision_engraver"; + \consists "Rest_collision_engraver"; + \consists "Bar_column_engraver"; + \consists "Bar_number_engraver"; + \consists "Separating_line_group_engraver"; + \consists "Line_group_engraver"; + + \accepts "Voice"; + } +} + +\score{ + \$staff_hoboone + \paper{ \a4 } + \midi{ + \tempo 4 = 80; + } +% \paper{ \a4sixteen } +} + diff --git a/mutopia/standchen-16.tex b/mutopia/standchen-16.tex deleted file mode 100644 index 21ef2cf758..0000000000 --- a/mutopia/standchen-16.tex +++ /dev/null @@ -1,32 +0,0 @@ -\documentclass{article} %UGH -\usepackage{a4} - -\advance\oddsidemargin-15mm -\evensidemargin\oddsidemargin -\advance\textwidth30mm -\footskip5mm - -\usepackage{fancyheadings} -\lhead{} -\rhead{} -\chead{} -\lfoot{} -\cfoot{\ifnum\thepage=1{\hfill\LilyIdString}\fi} -\rfoot{\ifnum\thepage>1{\hfill\thepage\hfill}\fi} - -\headrulewidth0mm -\pagestyle{fancy} -\thispagestyle{fancy} - -\input titledefs -%\pagestyle{empty} -\begin{document} -\def\interscoreline{\vskip3mm} -\title{St\"andchen\normalsize\\[2ex](Serenade)} -\composer{Franz Schubert (1797-1828)} -\instrument{M\"a\ss ig} % heu -%#%\tempo{M\"a\ss ig} -\makelilytitle -\input{standchen-16.out} -\end{document} - diff --git a/mutopia/standchen-20.ly b/mutopia/standchen-20.ly index f3e8784590..443ef0b9e5 100644 --- a/mutopia/standchen-20.ly +++ b/mutopia/standchen-20.ly @@ -8,6 +8,7 @@ enteredby = "JCN"; copyright = "public domain"; description = "A schubert song in 20 pt"; } + \version "0.1.10"; % fool make-website diff --git a/mutopia/standchen-20.tex b/mutopia/standchen-20.tex deleted file mode 100644 index 4ee0201a27..0000000000 --- a/mutopia/standchen-20.tex +++ /dev/null @@ -1,37 +0,0 @@ -\documentclass{article} %UGH -\usepackage{a4} - -% UGH UGH -\advance\oddsidemargin-30mm -\evensidemargin\oddsidemargin -% ugh, centre -\advance\textwidth60mm -\advance\topmargin-20mm -\addtolength{\textheight}{40mm} -\footskip5mm - -\usepackage{fancyheadings} -\lhead{} -\rhead{} -\chead{} -\lfoot{} -\cfoot{\ifnum\thepage=1{\hfill\LilyIdString}\fi} -\rfoot{\ifnum\thepage>1{\hfill\thepage\hfill}\fi} - -\headrulewidth0mm -\pagestyle{fancy} -\thispagestyle{fancy} - - -\begin{document} -\input lilyponddefs -\input titledefs -\def\interscoreline{\vskip3mm} -\title{St\"andchen\normalsize\\[2ex](Serenade)} -\composer{Franz Schubert (1797-1828)} -\instrument{M\"a\ss ig} % heu -%#%\tempo{M\"a\ss ig} -\makelilytitle -\input{standchen-20.out} -\end{document} - diff --git a/mutopia/standchen-easy.ly b/mutopia/standchen-easy.ly new file mode 100644 index 0000000000..39d5168ae1 --- /dev/null +++ b/mutopia/standchen-easy.ly @@ -0,0 +1,522 @@ +\header{ +filename = "standchen-easy.ly"; +title = "St\"andchen"; +subtitle = "(Serenade)\\\``Leise flehen meine Lieder''"; +opus = "D. 957 No. 4"; +composer = "Franz Schubert (1797-1828)\\\ \hfill Text by Ludwig Rellstab (1799-1860)"; +enteredby = "JCN"; +copyright = "public domain"; +% transcribed version +% simplified and transposed to d minor +} + +%{ + Tested Features: multivoice, accents, lyrics, chords, piano music, +multiple \paper{}s in one \score +%} + +\include "paper16.ly" +\version "0.1.10"; + +commands = \melodic{ + \skip 2.*4; + \bar "|:"; + \skip 2.*24; +% volta1 + \skip 2.*8; +% volta2 + \bar ":|"; + \skip 2.*22; + \bar "|."; + } + +melodie = \melodic{ + \meter 3/4; + \clef "violin"; + \key bes; + \octave c'; + \duration 8; + r \pp < [ d 'a-| > f-| < d 'a-| > f-| < d 'a-| ] > | +%%2 + r < [ d 'bes-| > f-| < d 'bes-| > f-| < d 'bes-| ] > | +%%3 + \textstyle "italic"; + r_"simile" < [ d 'bes > e < d 'bes > e < d 'bes ] >| + \textstyle "roman"; + +%%4 + r < [ 'a cis > e < 'a cis > e < 'a cis ] > | +%%5 + [2/3 a() bes a ]1/1 d'4. a | +%%6 + [2/3 g() a g ]1/1 d'4 g r | + +%%7 + a4.^> g [2/3 g() f e ]1/1 | +%%8 + f2 r4 | +%%9 + < { a'4.() g' [2/3 g'( f' )e' ]1/1 } + { cis'4. e'_"dolce" \[2/3 e' \] } > | +%%10 + < f'2. d'2. > | +%%11 + [2/3 a () bes a ]1/1 f'4. a | +%%12 + [2/3 g() a g ]1/1 e'4. d' | +%%13 + c'4. bes [2/3 bes() a g ]1/1 | +%%14 + a2 r + < { d'() c'4. g [2/3 bes a g ]1/1 } + { f \p () e4._"dolce" bes \[2/3 g \] } > | +%%16 + < a2. f2. > | +%%17 + \textstyle "italic"; + [ a8._"cresc." cis'16 ] f'4. e' + \textstyle "roman";| +%%18 + [ d'8. a16 ] f4. d | +%%19 +%#% c'\grace\stemup + [2/3 bes () a bes ]1/1 d'4. bes | +%%20 + a2. | +%%21 +%#% a\grace + [2/3 g() fis g ]1/1 bes4.^> g | +%%22 + f!2. | +%%23 + [ a8. \mf cis'16 ] f'4. e' | +%%24 + [ d'8. a16 ] fis4. d | +%%25 + [2/3 b \mf() ais b ]1/1 d'4. b | +%%26 + < a2. fis2. > | +%%27 + [2/3 e' \f() dis' e' ]1/1 g'4. cis' | +%%28 + < d'2. fis2. > | +%#%\volta1 +%%29 + < { bes2( [ d'8.() )bes16 ] } + { g2 \mf [ bes8. g16 ] } > | +%%30 + < { a4. [ a-. a-. a-. ] } + { fis4. [ fis-.( fis-. )fis-. ] } > | +%%31 + < { a4. [ a-. a-. a-. ] } + { g4. [ cis-.( e-. )g-. ] } > | +%%32 + < a2 fis2 \pp > < a4 fis4 > | +%%33 + < { b2( [ d'8.() )b16 ] } + { g2 [ b8. g16 ] } > | +%%34 + < { a4. [ a-. a-. a-. ] } + { fis4. [ fis-.( fis-. )fis-. ] } > | +%%35 + < { a4. [ a-. a-. a-. ] } + { g4. [ cis-.( e-. )g-. ] } > | +%%36 + < a2. fis2. > | +%#%\volta2 +%%37 + [ a8. a16 ] [ cis'8. cis'16 ] [ e'8. e'16 ] | +%%38 + d'4() cis'4 r4 | +%%39 +%#% > a4. [ cis' e'8. >! d'16 ] | + a4. \> [ cis' e'8. \! d'16 ] | +%%40 + cis'2 r4 | +%%41 + < fis'4. \> cis'4. \f > e' [2/3 e'() d' \! cis' ]1/1 | +%%42 + [ b8. cis'16 ] d'4^> b r | +%%43 + + [ b8. \f cis'16 ] d'4^> b r | +%%44 + [ b8. \> cis'16 ] d'4^> b \! r | +%%45 + [2/3 b \p () ais b ]1/1 d'4. b | +%%46 + <a!2. fis2. > | +%%47 + [2/3 e' \f() dis' e' ]1/1 g'4.^> cis' | +%%48 + \textstyle "italic"; + < + { fis2.( + %\group "+1"; + \stemdown )f2. } + { d'2. ( \stemup + ) d'4 r4_"decresc." d'4 } + > + \textstyle "roman"; | +%%50 + < bes2. e2. > | +%%51 + < a2. cis2. > | +%%52 + < fis2 d2 > < a4 fis4 \pp > | +%%53 + + < bes2 g2 > < [ d'8.^> bes8. > < bes16 g16 ] > | +%%54 + < { a4. [ a-. a-. a-. ] } + { fis4. [ fis-.( fis-. )fis-.] } > | +%%55 + < { a4. [ a-. a-. a-. ] } + { g4. [ cis-.( e-. )g-. ] } > | +%%56 + \textstyle "italic"; + < a2. fis2._"dim." > + \textstyle "roman"; | +%%57 + < a2. fis2. > | +%%58 + < a2.^\fermata fis2. > | +%#%\tighten +} + +begeleiding = \melodic{ + \meter 3/4; + \clef"bass"; + \key bes; + \octave c'; + \duration 2; + 'd r4 | +%%2 + ''bes r4 | + +%%3 + ''g r4 | + +%%4 + ''a r4 | +%%5 +\duration 8; + \multi 2 < { \stemup + [ 'f 'a d 'a d 'a ] + [ 'd 'e 'g 'e 'g 'e ] + [ 'cis 'e 'g 'e 'g 'e ] + [ 'd 'a d 'a d 'a ] + } + { \stemdown + 'd2 r4 + ''bes2 r4 + ''a2 r4 + 'd2 r4 + } > +%%9 + \stemboth + [ 'a e g e g e ] | +%%10 + [ 'd 'a d 'a d 'a ] | +%%11 + \multi 2 < + { \stemup + [ 'f 'a d 'a d 'a ] + [ 'd 'e 'g 'e 'g 'e ] + [ 'e 'g 'bes 'g 'bes 'g ] + [ 'a c f c f c ] + } { \stemdown + 'd2 r4 + ''bes2 r4 + 'c2 r4 + 'f2 r4 } + > +%%15 + \stemboth + [ 'c 'g 'bes 'g 'bes 'g ] | +%%16 + [ ''f 'c 'f 'c 'f 'c ] | + \multi 2 < + { \stemup + [ ''a 'e 'g 'e 'g 'e ][ 'd 'a d 'a d 'a ] + [ ''bes 'f 'bes 'f 'bes 'f ][ ''f 'c 'f 'c 'f 'c ] } + { \stemdown + ''a2 r4 + 'd2 r4 + ''bes2 r4 + ''f2 r4 + } > +%%21 + \stemboth + < [ 'e 'c > 'g c 'g c 'g ] | +%%22 + [ 'f 'a c 'a 'f 'c ] | + \multi 2 < { + \stemup + [ ''a 'e 'g 'e 'g 'e ] + [ 'd 'fis 'a 'fis 'a 'fis ] + [ ''g 'd 'b 'd 'b 'd ] + [ 'd 'a d 'a d 'a ] + } + {\stemdown + ''a2 r4 + 'd2 r4 + ''g2 r4 + 'd2 r4 + } + > + \stemboth + < [ 'cis ''a > 'e 'a 'e 'a 'e ] | +%%28 + [ 'd 'a d 'a d 'a ] | +%%29 + [ 'd 'g 'bes 'g 'bes 'g ] | +%#%\volta1 +%%30 + [ 'd 'fis 'a 'fis 'a 'fis ] | +%%31 + [ ''a 'e 'a 'e 'a 'e ] | +%%32 + [ 'd 'fis 'a 'fis 'a 'fis ] | +%%33 + [ 'd 'g 'b 'g 'b 'g ] | +%%34 + [ 'd 'fis 'a 'fis 'a 'fis ] | +%%35 + [ ''a 'e 'a 'e 'a 'e ] | +%%36 + [ 'd 'fis 'a 'fis 'a 'fis ] | +%#%\volta2 +%%37 + [ ''a 'e 'g 'e ''bes^> 'e ] | +%%38 + [ ''a < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a ] > | +%%39 + [ ''a 'e 'g 'e ''bes^> 'e ] | +%%40 + [ ''a < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a ] > | +%%41 + [ ''ais 'e 'fis 'e 'fis 'e ] | +%%42 + < [ 'd ''b > 'fis 'b 'fis 'b 'fis ] | +%%43 + < [ 'e ''b > 'g 'b 'g 'b 'g ] | +%%44 + < [ 'd ''b > 'fis 'b 'fis 'b 'fis ] | +%%45 + \multi 2 < { \stemup + [ ''g 'd 'b 'd 'b 'd ] + [ 'd 'a d 'a d 'a ] + } { + \stemdown + ''g2 r4 + 'd2 r4 + } > + +%%47 + \stemboth + < [ 'cis ''a > 'e 'a 'e 'a 'e ] | +%%48 + [ 'd 'fis 'a 'fis 'a 'fis ] | +%%49 + [ 'd 'a d 'a d 'a ] | +%%50 + [ ''g 'e 'g 'e 'g 'e ] | +%%51 + [ ''a 'e 'g 'e 'g 'e ] | +%%52 + [ ''d 'd 'fis 'd 'fis 'd ] | +%%53 + [ 'd 'g 'bes 'g 'bes 'g ] | +%%54 + [ 'd 'fis 'a 'fis 'a 'fis ] | +%%55 + [ ''a 'e 'g 'e 'g 'e ] | +%%56 + [ ''d ''a 'd ''a 'd ''a ] | +%%57 + [ ''d ''a 'd ''a 'd ''a ] +%%58 + < 'd2.^\fermata ''d2. > | + } + + +tekstI = \lyric{ + \meter 3/4; + \duration 4; + _ _ _ + _ _ _ + _ _ _ + _ _ _ +% 5 + \[2/3 Lei- se8 \] fleh-4. en8 + \[2/3 mei- ne8 \] Lie- der8 _8 + Durch4. die8 \[2/3 Nacht zu8 \] + dir;2 _ + _ _ _ + _ _ _ +% 11 + \[2/3 In den8 \] stil-4. len8 + \[2/3 Hain her-8 \] nie-4. der,8 + Lieb4. chen,8 \[2/3 komm zu8 \] + mir!2 _ + _ _ _ + _ _ _ + +% 17 + Fl\"us-8. ternd16 schlan-4. ke8 + Wip-8. fel16 rau-4. schen8 + \[2/3 In des8 \] Mon-4. des8 + Licht;2. + _ _ _ + _ _ _ + +% 23 + Des8. Ver-16 r\"a-4. ters8 + feind-8. lich16 Lau-4. schen8 + \[2/3 F\"urch- te,8 \] Hol-4. de,8 + nicht.2. + _ _ _ + _ _ _ + +% volta 1 +% 29 + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + +% volta 2 +% 37 + La\ss8. auch16 dir8. die16 Brust8. be-16 + we- gen, _ + Lieb-4. chen,8 h\"o-8. re16 + mich!2 _ + Be-8. bend16 harr' ich8 _8 + dir8. ent-16 ge- gen!8 _8 + \[2/3 Komm, be-8 \] gl\"u4. cke8 + mich!2. + _ _ _ _ _ _ +% 47 + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ +% 57 + _ _ _ _ _ _ + +} + +tekstII = \lyric{ + \meter 3/4; + \duration 4; + _ _ _ + _ _ _ + _ _ _ + _ _ _ +% 5 + \[2/3 H\"orst die8 \] Nach-4. ti-8 + \[2/3 gal- len8 \] schla- gen?8 _8 + Ach!4. sie8 \[2/3 fleh- en8 \] + dich,2 _ + _ _ _ + _ _ _ + +% 11 + \[2/3 Mit der8 \] T\"o-4. ne8 + \[2/3 s\"u\ss- en8 \] Kla-4. gen8 + Fleh-4. en8 \[2/3 sie f\"ur8 \] + mich.2 _ + _ _ _ + _ _ _ + +% 17 + Sie-8. ver-16 stehn4. des8 + Bus-8. ens16 Seh-4. nen,8 + \[2/3 Ken- nen8 \] Lieb-4. es-8 + schmerz,2. + _ _ _ + _ _ _ + +% 23 + R\"uh-8. ren16 mit4. den8 + Sil-8. ber-16 t\"o-4. nen8 + \[2/3 Jed- es8 \] wei-4. che8 + Herz.2. + _ _ _ + _ _ _ +% volta 1 +% 29 + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + +% volta 2 +% 37 + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ +% 47 + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ + _ _ _ _ _ _ +% 57 + _ _ _ _ _ _ + +} + +$treble_staff = \type Staff = treble< + \commands + \melodie +> + +$bass_staff = \type Staff = bass< + \commands + \begeleiding +> + +$grand_staff = \type Grand_staff< + \$treble_staff + \$bass_staff +> + +$lyric_staff = \type Lyrics = lyric< + \tekstI + \tekstII +> + +themusic = < + \$lyric_staff + \$grand_staff +> + +\score{ + \themusic + \midi{ + \tempo 4 = 54; + } + \paper{ + % 20pt music uses whole pagewidth + % ja Vette Pech. Koop maar een A3 printer + % huh? [jcn] + linewidth= 193.\mm; +% arithmetic_multiplier = 7.\pt; + + gourlay_maxmeasures = 9.; + \output "standchen-20.out"; + } + \paper{ + \paper_sixteen + % 16pt mustn't use whole page width + linewidth= 160.\mm; +% arithmetic_multiplier = 6.\pt; +% gourlay_maxmeasures = 9.; + \output "standchen-16.out"; + } +} diff --git a/mutopia/standchen.ly b/mutopia/standchen.ly index 2a407932f0..03148d90a0 100644 --- a/mutopia/standchen.ly +++ b/mutopia/standchen.ly @@ -1,519 +1,458 @@ \header{ -filename = "standchen.ly"; -title = "St\"andchen (Serenade)\\\``Leise flehen meine Lieder''"; -opus = "D. 957 No. 4"; -composer = "Franz Schubert (1797-1828)\\\ \hfill Text by Ludwig Rellstab (1799-1860)"; -enteredby = "JCN"; -copyright = "public domain"; +filename = "standchen.ly"; +title = "St\"andchen"; +subtitle = "(Serenade)\\\``Leise flehen meine Lieder''"; +opus = "D. 957 No. 4"; +composer = "Franz Schubert (1797-1828)" + "Text by Ludwig Rellstab (1799-1860)"; +enteredby = "JCN"; +copyright = "public domain"; } %{ - Tested Features: multivoice, accents, lyrics, chords, piano music, + Tested Features@ multivoice, accents, lyrics, chords, piano music, multiple \paper{}s in one \score %} -\include "paper20.ly" \version "0.1.10"; -commands = \melodic{ - \skip 2.*4; - \bar "|:"; - \skip 2.*24; -% volta1 - \skip 2.*8; -% volta2 - \bar ":|"; - \skip 2.*22; - \bar "|."; - } - -melodie = \melodic{ - \meter 3/4; - \clef "violin"; - \key bes; +$vocal_verse1 = \melodic{ \octave c'; - \duration 8; - r \pp < [ d 'a-| > f-| < d 'a-| > f-| < d 'a-| ] > | -%%2 - r < [ d 'bes-| > f-| < d 'bes-| > f-| < d 'bes-| ] > | -%%3 - \textstyle "italic"; - r_"simile" < [ d 'bes > e < d 'bes > e < d 'bes ] >| - \textstyle "roman"; -%%4 - r < [ 'a cis > e < 'a cis > e < 'a cis ] > | -%%5 - [2/3 a() bes a ]1/1 d'4. a | -%%6 - [2/3 g() a g ]1/1 d'4 g r | - -%%7 - a4.^> g [2/3 g() f e ]1/1 | -%%8 - f2 r4 | -%%9 - < { a'4.() g' [2/3 g'( f' )e' ]1/1 } - { cis'4. e'_"dolce" \[2/3 e' \] } > | -%%10 - < f'2. d'2. > | -%%11 - [2/3 a () bes a ]1/1 f'4. a | -%%12 - [2/3 g() a g ]1/1 e'4. d' | -%%13 - c'4. bes [2/3 bes() a g ]1/1 | -%%14 - a2 r - < { d'() c'4. g [2/3 bes a g ]1/1 } - { f \p () e4._"dolce" bes \[2/3 g \] } > | -%%16 - < a2. f2. > | -%%17 - \textstyle "italic"; - [ a8._"cresc." cis'16 ] f'4. e' - \textstyle "roman";| -%%18 - [ d'8. a16 ] f4. d | -%%19 -%#% c'\grace\stemup - [2/3 bes () a bes ]1/1 d'4. bes | -%%20 - a2. | -%%21 -%#% a\grace - [2/3 g() fis g ]1/1 bes4.^> g | -%%22 - f!2. | -%%23 - [ a8. \mf cis'16 ] f'4. e' | -%%24 - [ d'8. a16 ] fis4. d | -%%25 - [2/3 b \mf() ais b ]1/1 d'4. b | -%%26 - < a2. fis2. > | -%%27 - [2/3 e' \f() dis' e' ]1/1 g'4. cis' | -%%28 - < d'2. fis2. > | -%#%\volta1 -%%29 - < { bes2( [ d'8.() )bes16 ] } - { g2 \mf [ bes8. g16 ] } > | -%%30 - < { a4. [ a-. a-. a-. ] } - { fis4. [ fis-.( fis-. )fis-. ] } > | -%%31 - < { a4. [ a-. a-. a-. ] } - { g4. [ cis-.( e-. )g-. ] } > | -%%32 - < a2 fis2 \pp > < a4 fis4 > | -%%33 - < { b2( [ d'8.() )b16 ] } - { g2 [ b8. g16 ] } > | -%%34 - < { a4. [ a-. a-. a-. ] } - { fis4. [ fis-.( fis-. )fis-. ] } > | -%%35 - < { a4. [ a-. a-. a-. ] } - { g4. [ cis-.( e-. )g-. ] } > | -%%36 - < a2. fis2. > | -%#%\volta2 -%%37 - [ a8. a16 ] [ cis'8. cis'16 ] [ e'8. e'16 ] | -%%38 - d'4() cis'4 r4 | -%%39 -%#% > a4. [ cis' e'8. >! d'16 ] | - a4. \> [ cis' e'8. \! d'16 ] | -%%40 - cis'2 r4 | -%%41 - < fis'4. \> cis'4. \f > e' [2/3 e'() d' \! cis' ]1/1 | -%%42 - [ b8. cis'16 ] d'4^> b r | -%%43 - - [ b8. \f cis'16 ] d'4^> b r | -%%44 - [ b8. \> cis'16 ] d'4^> b \! r | -%%45 - [2/3 b \p () ais b ]1/1 d'4. b | -%%46 - <a!2. fis2. > | -%%47 - [2/3 e' \f() dis' e' ]1/1 g'4.^> cis' | -%%48 - \textstyle "italic"; - < - { fis2.( - %\group "+1"; - \stemdown )f2. } - { d'2. ( \stemup - ) d'4 r4_"decresc." d'4 } - > - \textstyle "roman"; | -%%50 - < bes2. e2. > | -%%51 - < a2. cis2. > | -%%52 - < fis2 d2 > < a4 fis4 \pp > | -%%53 - - < bes2 g2 > < [ d'8.^> bes8. > < bes16 g16 ] > | -%%54 - < { a4. [ a-. a-. a-. ] } - { fis4. [ fis-.( fis-. )fis-.] } > | -%%55 - < { a4. [ a-. a-. a-. ] } - { g4. [ cis-.( e-. )g-. ] } > | -%%56 - \textstyle "italic"; - < a2. fis2._"dim." > - \textstyle "roman"; | -%%57 - < a2. fis2. > | -%%58 - < a2.^\fermata fis2. > | -%#%\tighten + % ugh: treble/bass +% \clef treble; +% \clef violin; + [/3 g8( )as] g \] c'4. g8 | + [/3 f8( )g] f \] c'4 f8 r | + g4.-> f8 [/3 f( )es] d \] | + es2 r4 | + % ugh: a whole should be a measure + %r1 | + r2. | + r2. | + [/3 g8( )as] g \] es'4. g8 | + [/3 f8( )g] f \] d'4. c'8 | + bes4. as8 [/3 as( )g] f \] | + g2 r4 | + r2. | + r2. | + g8. b16 es'4. d'8 | + c'8. g16 es4. c8 | + % [/3 as\grace( bes ] ) + [/3 as8( )g] as \] c'4. as8 | + g2. | + %[/3 f\grace( g] ) + [/3 f8( )e] f \] as4. f8 | + es!2. | + g8. b16 es'4. d'8 | + c'8. g16 e4. c8 | + % [/3 a\grace( b] ) + [/3 a!8( ) gis] a \] c'4. a8 | + g!2. | + % [/3 a\grace( b] ) + [/3 d'8\f cis'] d' \] f'4. b8 | + c'!2. | } -begeleiding = \melodic{ - \meter 3/4; - \clef"bass"; - \key bes; +$vocal_through = \melodic{ \octave c'; - \duration 2; - 'd r4 | -%%2 - ''bes r4 | - -%%3 - ''g r4 | - -%%4 - ''a r4 | -%%5 -\duration 8; - \multi 2 < { \stemup - [ 'f 'a d 'a d 'a ] - [ 'd 'e 'g 'e 'g 'e ] - [ 'cis 'e 'g 'e 'g 'e ] - [ 'd 'a d 'a d 'a ] - } - { \stemdown - 'd2 r4 - ''bes2 r4 - ''a2 r4 - 'd2 r4 - } > -%%9 - \stemboth - [ 'a e g e g e ] | -%%10 - [ 'd 'a d 'a d 'a ] | -%%11 - \multi 2 < - { \stemup - [ 'f 'a d 'a d 'a ] - [ 'd 'e 'g 'e 'g 'e ] - [ 'e 'g 'bes 'g 'bes 'g ] - [ 'a c f c f c ] - } { \stemdown - 'd2 r4 - ''bes2 r4 - 'c2 r4 - 'f2 r4 } - > -%%15 - \stemboth - [ 'c 'g 'bes 'g 'bes 'g ] | -%%16 - [ ''f 'c 'f 'c 'f 'c ] | - \multi 2 < - { \stemup - [ ''a 'e 'g 'e 'g 'e ][ 'd 'a d 'a d 'a ] - [ ''bes 'f 'bes 'f 'bes 'f ][ ''f 'c 'f 'c 'f 'c ] } - { \stemdown - ''a2 r4 - 'd2 r4 - ''bes2 r4 - ''f2 r4 - } > -%%21 - \stemboth - < [ 'e 'c > 'g c 'g c 'g ] | -%%22 - [ 'f 'a c 'a 'f 'c ] | - \multi 2 < { - \stemup - [ ''a 'e 'g 'e 'g 'e ] - [ 'd 'fis 'a 'fis 'a 'fis ] - [ ''g 'd 'b 'd 'b 'd ] - [ 'd 'a d 'a d 'a ] - } - {\stemdown - ''a2 r4 - 'd2 r4 - ''g2 r4 - 'd2 r4 - } - > - \stemboth - < [ 'cis ''a > 'e 'a 'e 'a 'e ] | -%%28 - [ 'd 'a d 'a d 'a ] | -%%29 - [ 'd 'g 'bes 'g 'bes 'g ] | -%#%\volta1 -%%30 - [ 'd 'fis 'a 'fis 'a 'fis ] | -%%31 - [ ''a 'e 'a 'e 'a 'e ] | -%%32 - [ 'd 'fis 'a 'fis 'a 'fis ] | -%%33 - [ 'd 'g 'b 'g 'b 'g ] | -%%34 - [ 'd 'fis 'a 'fis 'a 'fis ] | -%%35 - [ ''a 'e 'a 'e 'a 'e ] | -%%36 - [ 'd 'fis 'a 'fis 'a 'fis ] | -%#%\volta2 -%%37 - [ ''a 'e 'g 'e ''bes^> 'e ] | -%%38 - [ ''a < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a ] > | -%%39 - [ ''a 'e 'g 'e ''bes^> 'e ] | -%%40 - [ ''a < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a > < e cis 'a ] > | -%%41 - [ ''ais 'e 'fis 'e 'fis 'e ] | -%%42 - < [ 'd ''b > 'fis 'b 'fis 'b 'fis ] | -%%43 - < [ 'e ''b > 'g 'b 'g 'b 'g ] | -%%44 - < [ 'd ''b > 'fis 'b 'fis 'b 'fis ] | -%%45 - \multi 2 < { \stemup - [ ''g 'd 'b 'd 'b 'd ] - [ 'd 'a d 'a d 'a ] - } { - \stemdown - ''g2 r4 - 'd2 r4 - } > - -%%47 - \stemboth - < [ 'cis ''a > 'e 'a 'e 'a 'e ] | -%%48 - [ 'd 'fis 'a 'fis 'a 'fis ] | -%%49 - [ 'd 'a d 'a d 'a ] | -%%50 - [ ''g 'e 'g 'e 'g 'e ] | -%%51 - [ ''a 'e 'g 'e 'g 'e ] | -%%52 - [ ''d 'd 'fis 'd 'fis 'd ] | -%%53 - [ 'd 'g 'bes 'g 'bes 'g ] | -%%54 - [ 'd 'fis 'a 'fis 'a 'fis ] | -%%55 - [ ''a 'e 'g 'e 'g 'e ] | -%%56 - [ ''d ''a 'd ''a 'd ''a ] | -%%57 - [ ''d ''a 'd ''a 'd ''a ] -%%58 - < 'd2.^\fermata ''d2. > | - } - - -tekstI = \lyric{ - \meter 3/4; - \duration 4; - _ _ _ - _ _ _ - _ _ _ - _ _ _ + g8. g16 b8. b16 d'8. d16 | + c'4 b r | + g4. b8 d'8. c'16 | + b2 r4 | + e'4. d'8 [/3 d'( )c'] b \] | + a8. b16 c'4-> a8 r | + r2. | + r2. | + % 4 bars copied from end verse 1 + % [/3 a\grace( b] ) + [/3 a!8( ) gis] a \] c'4. a8 | + g!2. | + % [/3 a\grace( b] ) + [/3 d'8\f cis'] d' \] f'4. b8 | + c'!2. ~ | + c'4 r c' | + as2. | + g | + es2 r4 | +} + +$lyric_verse1 = \lyric{ % 5 - \[2/3 Lei- se8 \] fleh-4. en8 - \[2/3 mei- ne8 \] Lie- der8 _8 - Durch4. die8 \[2/3 Nacht zu8 \] - dir;2 _ - _ _ _ - _ _ _ + \[/3 Lei-4 se8 \] fleh-4. en8 | + \[/3 mei-4 ne8 \] Lie-4 der8 _8 | + Durch4. die8 \[/3 Nacht4 zu8 \] | + dir;2 _4 | + _4 _ _ | + _ _ _ | % 11 - \[2/3 In den8 \] stil-4. len8 - \[2/3 Hain her-8 \] nie-4. der,8 - Lieb4. chen,8 \[2/3 komm zu8 \] - mir!2 _ - _ _ _ - _ _ _ - + \[/3 In4 den8 \] stil-4. len8 | + \[/3 Hainr4 her-8 \] nie-4. der,8 | + Lieb4. chen,8 \[/3 komm4 zu8 \] | + mir!2 _4 | + _4 _ _ | + _ _ _ | % 17 - Fl\"us-8. ternd16 schlan-4. ke8 - Wip-8. fel16 rau-4. schen8 - \[2/3 In des8 \] Mon-4. des8 - Licht;2. - _ _ _ - _ _ _ - -% 23 - Des8. Ver-16 r\"a-4. ters8 - feind-8. lich16 Lau-4. schen8 - \[2/3 F\"urch- te,8 \] Hol-4. de,8 - nicht.2. - _ _ _ - _ _ _ - -% volta 1 -% 29 - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - -% volta 2 -% 37 - La\ss8. auch16 dir8. die16 Brust8. be-16 - we- gen, _ - Lieb-4. chen,8 h\"o-8. re16 - mich!2 _ - Be-8. bend16 harr' ich8 _8 - dir8. ent-16 ge- gen!8 _8 - \[2/3 Komm, be-8 \] gl\"u4. cke8 - mich!2. - _ _ _ _ _ _ -% 47 - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ -% 57 - _ _ _ _ _ _ - + Fl\"us-8. ternd16 schlan-4. ke8 | + Wip-8. fel16 rau-4. schen8 | + \[/3 In4 des8 \] Mon-4. des8 | + Licht;2. | + _4 _ _ | + _4 _ _ | +% 23 + Des8. Ver-16 r\"a-4. ters8 | + feind-8. lich16 Lau-4. schen8 | + \[/3 F\"urch-4 te,8 \] Hol-4. de,8 | + nicht,2. | + \[/3 f\"urch-4 te,8 \] Hol-4. de,8 | + nicht.2. | } - -tekstII = \lyric{ - \meter 3/4; - \duration 4; - _ _ _ - _ _ _ - _ _ _ - _ _ _ + +$lyric_verse2 = \lyric{ % 5 - \[2/3 H\"orst die8 \] Nach-4. ti-8 - \[2/3 gal- len8 \] schla- gen?8 _8 - Ach!4. sie8 \[2/3 fleh- en8 \] - dich,2 _ - _ _ _ - _ _ _ + \[/3 H\"orst4 die8 \] Nach-4. ti-8 + \[/3 gal-4 len8 \] schla-4 gen?8 _8 + Ach!4. sie8 \[/3 fleh-4 en8 \] + dich,2 _4 + _4 _ _ + _4_ _ % 11 - \[2/3 Mit der8 \] T\"o-4. ne8 - \[2/3 s\"u\ss- en8 \] Kla-4. gen8 - Fleh-4. en8 \[2/3 sie f\"ur8 \] - mich.2 _ - _ _ _ - _ _ _ + \[/3 Mit4 der8 \] T\"o-4. ne8 + \[/3 s\"u\ss-4 en8 \] Kla-4. gen8 + Fleh-4. en8 \[/3 sie4 f\"ur8 \] + mich.2 _4 + _4_ _ + _4_ _ % 17 Sie-8. ver-16 stehn4. des8 Bus-8. ens16 Seh-4. nen,8 - \[2/3 Ken- nen8 \] Lieb-4. es-8 + \[/3 Ken-4 nen8 \] Lieb-4. es-8 + schmerz,2. + \[/3 Ken-4 nen8 \] Lieb-4. es-8 schmerz,2. - _ _ _ - _ _ _ % 23 R\"uh-8. ren16 mit4. den8 Sil-8. ber-16 t\"o-4. nen8 - \[2/3 Jed- es8 \] wei-4. che8 + \[/3 Jed-4 es8 \] wei-4. che8 Herz.2. - _ _ _ - _ _ _ -% volta 1 -% 29 - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - -% volta 2 + \[/3 Jed-4 es8 \] wei-4. che8 + Herz.2. +} + +$lyric_through = \lyric{ % 37 - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ -% 47 - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ _ _ -% 57 - _ _ _ _ _ _ + La\ss8. auch16 dir8. die16 Brust8. be-16 | + we-4 gen, _ | + Lieb-4. chen,8 h\"o-8. re16 | + mich!2 _4 | + Be-8. bend16 harr'4 ich8 _8 | + dir8. ent-16 ge-4 gen!8 _8 | + \[/3 Komm,4 be-8 \] gl\"u4. cke8 | + mich!2. | + \[/3 Komm,4 be-8 \] gl\"u4. cke8 | + mich!2. | + _2 be-4 | + gl\"u-2. | + cke2. | + mich!2 _4 | +} + +$treble_intro = \melodic{ + \octave c'; + \clef violin; + % ugh: i'd like to type this! + %r8\pp [<'g-. c-.> <c-. es-.> <'g-. c-.> <c-. es-.> <'g-. c-.>] | + r8\pp <['g-. c-.> <c-. es-.> <'g-. c-.> <c-. es-.> <'g-. c-.]> | + r8 <['as-. c-.> <c-. es-.> <'as-. c-.> <c-. es-.> <'as-. c-.]> | + r8 <['as-. c-.> <c-. d-.> <'as-. c-.> <c-. d-.> <'as-. c-.]> | + r8 <['g-. 'b-.> <'b-. d-.> <'g-. 'b-.> <'b-. d-.> <'g-. 'b-.]> | + \break; } -$treble_staff = \type Staff = treble< - \commands - \melodie +$treble_verse1 = \melodic{ + \octave c'; +% \clef violin; + r8 <['g c> <c es> <'g c> <c es> <'g c]> | + r8 <['f c> <c d> <'f c> <c d> <'f c]> | + r8 <['f 'g 'b> <'g 'b d> <'f 'g 'b> <'g 'b d> <'f 'g 'b]> | + r8 <['es 'g c> <'g c es> <'es 'g c> <'g c es> <'es 'g c]> | + <g'4.( b> <)f'8 d'> <[/3 f' d'> <es' c'> <d' b]1/1> | + <c'2. es'> | + r8 <['g c> <c es> <'g c> <c es> <'g c]> | + r8 <['f c> <c d> <'f c> <c d> <'f c]> | + r8 <['f 'as 'bes> <'as 'bes d> <'f 'g 'bes> <'g 'bes d> <'f 'g 'bes]> | + r8 <['es 'g 'bes> <'g 'bes es> <'es 'g 'bes> <'g 'bes es]> + <{ es'( | )bes4. as8}{ c'( | )d4.( )f8 } > + < [/3 f as> <es g> <d f]1/1> | + <es2. g> | + r8 <['f 'g> <'g 'b> <'f 'g> <'g 'b> <'f 'g]> | + r8 <['es 'g> <'g c> <'es 'g> <'g c> <'es 'g]> | + r8\pp <['es 'as c> <'as c es> <'es 'as c> <'as c es> <'es 'as c]> | + r8 <['es 'g 'bes> <'g 'bes 'es> <'es 'g 'bes> <'g 'bes 'es> <'es 'g 'bes]> | + % [/3 as\grace( bes ) + [/3 as8(( g )as]1/1 c'4.-> ) as8 | + g2. | + r8 <['f 'g> <'g 'b> <'f 'g> <'g 'b> <'f 'g]> | + r8 <['e 'g> <'g c> <'e 'g> <'g c> <'e 'g]> | + r8 <['f 'a c> <'a c f> <'f 'a c> <'a c f> <'f 'a c]> | + r8 <['e 'g c> <'g c e> <'e 'g c> <'g c e> <'e 'g c]> | + <{[/3 f'8\f( e' f']1/1 a'4. )f'8 } {\[/3 f e f \] a4. f8 } > | + <e2 e'> r4 | +} + +$treble_eentje = \melodic{ + \octave c'; + <f2\mf as!(> <[as8.->( c'> <)f16 )as]> | + <e4. g> <[e8-. g-.(> <e-. g-.> <e-. )g-.]> | + <f4. g> <['b8-. g-.(> <d-. g-.> <f-. )g-.]> | + <e2 g\pp> <e4 g> | + <f2\mf a(> <[a8.( c'> <)f16 )a]> | + <e4. g> <[e8-. g-.(> <e-. g-.> <e-. )g-.]> | + <f4. g> <['b8-. g-.(> <d-. g-.> <f-. )g-.]> | + <e2. g> | +} + +$treble_through = \melodic{ + \octave c'; + r2. | + % lily: 221: warning: Junking request: Span_dynamic_req: the \> + <['g8.\< g> <'g16 g> <'b8. b> <\!'b16\> b16> <d8. d'> <d16 d']> | + % lily: 222: warning: Can't find cresc to end. + < { c4( )'b } { c'4( )b } > \!r | +% ugh +% <'g4. g> <'b8 b> <[d8.-> d'->> c'16] | + <'g4. g> <'b8 b> [d'8.-> c'16] | +% ugh, ugh: connecting chords + < { d2.\f( )a2} { e2. ~ e2 } { b2. c2 }> r4 | + < + { + \voiceone + [a8. b16] c'4->( )a8 r | + [a8. b16] c'4->( )a8 r | + } + { + \voicetwo + <d4\f f> <d2 f> | + <c!4\f es> <c2 es> | + } + > + % 4 bars copied from end verse1 + r8 <['f\p 'a c> <'a c f> <'f 'a c> <'a c f> <'f 'a c]> | + r8 <['e 'g c> <'g c e> <'e 'g c> <'g c e> <'e 'g c]> | + <{[/3 f'8\f( e' f']1/1 a'4. )f'8 } {\[/3 f e f \] a4. f8 } > | + <e2 e'> r4 | + <es2 es'> r4 | + <d2 d'> r4 | + <'b2 b> r4 | + <c2 c'> <e4\pp g> | + + % four copied from begin eentje + <f2\mf as!(> <[as8.->( c'> <)f16 )as]> | + <e4. g> <[e8-. g-.(> <e-. g-.> <e-. )g-.]> | + <f4. g> <['b8-. g-.(> <d-. g-.> <f-. )g-.]> | + \textstyle "italic"; + <e2._"dim." g> | + <'g2. e g> | + <'g2.-\fermata e g> | +} + +$bass_intro = \melodic{ + \octave c; + \clef bass; + <'c2 c> r4 | + <''as2 'as> r4 | + <''f2 'f> r4 | + <''g2 'g> r4 | +} + +$bass_verse1 = \melodic{ + \octave c; +% \clef bass; + <'c2 c> r4 | + <''as2 'as> r4 | + <''g2 'g> r4 | + <'c2 c> r4 | + <''g8 'g> <[g d'> <d' f'> <g d'> <d' f'> <g d']> | + <'c8 c> <[g c'> <c' es'> <g c'> <c' es'> <g c']> | + <'c2 c> r4 | + <''as2 'as> r4 | + <''bes2 'bes> r4 | + <''es2 'es> r4 | + ''bes8 <['bes f> <f bes> <'bes f> <f bes> <'bes f]> | + ''es8 <['bes es> <es g> <'bes es> <es g> <'bes es]> | + <''g2 'g> r4 | + <'c2 c> r4 | + <''as2 'as> r4 | + <''es2 'es> r4 | + <''bes8 'bes> <[f bes> <bes d'> <f bes> <bes d'> <f bes]> | + <''es8 'es> <[es g bes> <g bes es'> <es g bes> <g bes es'> <es g bes]> | + <''g2 'g> r4 | + <'c2 c> r4 | + <''f2 'f> r4 | + <'c2 c> r4 | + <''g8 'g> <[d g> <g b> <d g> <g b> <d g]> | + 'c8 <[c e g> <e g c'> <c e g> <e g c'> <c e g]> | +} + +$bass_eentje = \melodic{ + \octave c; + <'c8 c> <[c f as!> <f as c'> <c f as> <f as c'> <c f as]> | + 'c8 <[c e g> <e g c'> <c e g> <e g c'> <c e g]> | + <''g8 'g> <[d g> <g b> <d g> <g b> <d g]> | + 'c8 <[e g> <g c'> <e g> <g c'> <e g]> | + <'c8 c> <[c f a> <f a c'> <c f a> <f a c'> <c f a]> | + 'c8 <[c e g> <e g c'> <c e g> <e g c'> <c e g]> | + <''g8 'g> <[d g> <g b> <d g> <g b> <d g]> | + 'c8 <[e g> <g c'> <e g> <g c'> <e g]> | +} + +$bass_through = \melodic{ + \octave c; + <''g8 'g> <['g 'b d> <'b d f> <'g 'b d> <'as!-> b-> d->> <'b d f]> | + <''g8 'g> <['g d> <d f> <'g d> <'as-> b-> d->> <'b d f]> | + % copied + <''g8 'g> <['g d> <d f> <'g d> <'as-> b-> d->> <'b d f]> | + <''g8 'g> <['g d e> <d f> <'g d> <'gis-> 'b-> d->> <'b d f]> | + <''gis8 'gis> <[d e> <e b> <d e> <e b> <d e]> | + <''a8 'a> <[c e> <e a> <c e> <e a> <c e]> | + <''a8 'a> <['a d f> <d f a> <'a d f> <d f a> <'a d f]> | + <''a8 'a> <['a c e> <c e a> <'a c e> <c e a> <'a c e]> | + % 4 bars copied from end verse1 + <''f2 'f> r4 | + <'c2 c> r4 | + <''g8 'g> <[d g> <g b> <d g> <g b> <d g]> | + 'c8 <[c e g> <e g c'> <c e g> <e g c'> <c e g]> | + + <'c8 c> <[c es! g> <es g c'> <c es! g> <es g c'> <c es! g]> | + <''f8 'f> <[d f> <f as!> <d f> <f as!> <d f]> | + <''g8 'g> <[d f> <f g> <d f> <f g> <d f]> | + 'c8 <[c e> <e g> <c e> <e g> <c e]> | + 'c8 <[c f> <f as> <c f> <f as> <c f]> | + 'c8 <[c e> <e g> <c e> <e g> <c e]> | + ''g8 <['g d> <d f> <'g d> <d f> <'g d]> | + % copied from two bars back + 'c8 <[c e> <e g> <c e> <e g> <c e]> | + 'c8 <[c e> <e g> <c e> <e g> <c e]> | + <'c2._\fermata 'g c> | +} + +global = \melodic{ + \meter 3/4; + \key bes es as; + \skip 4 * 12; + \break; + \skip 4 * 234; + \bar "|."; +} + + +$lyric_four = \lyric{ + _4 _ _ + _ _ _ + _ _ _ + _ _ _ +} + +lyrics = \melodic{ + \meter 3/4; +% \skip 4 * 12; + \$lyric_four + \$lyric_verse1 +% \skip 4 * 24; + \$lyric_four + \$lyric_four + \$lyric_verse2 + \$lyric_through +} + +$lyric_staff = \type Lyrics = lyric< + \$lyrics > + +vocals = \melodic{ + \skip 4 * 12; + \$vocal_verse1 + \skip 4 * 24; + \$vocal_verse1 + \$vocal_through +} + +$vocal_staff = \type Staff = vocal< + \property Staff.instrument = "alto sax" + \global + \$vocals +> + +% treble = \melodic{ +treble = { + \$treble_intro + \$treble_verse1 + \$treble_eentje + \$treble_verse1 + \$treble_through +} + +$treble_staff = \type Staff = treble< + \global + \treble +> + +bass = \melodic{ + \$bass_intro + \$bass_verse1 + \$bass_eentje + \$bass_verse1 + \$bass_through +} $bass_staff = \type Staff = bass< - \commands - \begeleiding + \global + \bass > - + $grand_staff = \type Grand_staff< \$treble_staff \$bass_staff > -$lyric_staff = \type Lyrics = lyric< - \tekstI - \tekstII -> +a4 = \paper{ + gourlay_maxmeasures = 7.; + linewidth= 193.\mm; +Score = \translator { + \type Score_engraver; -themusic = < - \$lyric_staff - \$grand_staff -> + \consists "Timing_engraver"; + \consists "Bar_column_engraver"; + \consists "Bar_number_engraver"; + \consists "Span_score_bar_engraver"; + \consists "Score_priority_engraver"; + \consists "Priority_horizontal_align_engraver"; + \consists "Vertical_align_engraver"; + + + \accepts "Staff_group"; + \accepts "Staff"; + \accepts "Rhythmic_staff"; + \accepts "Lyrics"; + \accepts "Grand_staff"; +} +} \score{ - \themusic + < + \$vocal_staff + \$lyric_staff + \$grand_staff + > + \paper{ \a4 } \midi{ \tempo 4 = 54; } - \paper{ - \paper_twenty - % 20pt music uses whole pagewidth - % ja Vette Pech. Koop maar een A3 printer - % huh? [jcn] - linewidth= 193.\mm; -% arithmetic_multiplier = 7.\pt; - - gourlay_maxmeasures = 9.; - \output "standchen-20.out"; - } - \paper{ - % 16pt mustn't use whole page width - linewidth= 160.\mm; -% arithmetic_multiplier = 6.\pt; -% gourlay_maxmeasures = 9.; - \output "standchen-16.out"; - } } + + + diff --git a/mutopia/standje.ly b/mutopia/standje.ly deleted file mode 100644 index 9193c65f05..0000000000 --- a/mutopia/standje.ly +++ /dev/null @@ -1,457 +0,0 @@ -\header{ -filename = "standje.ly"; -title = "St\\\"andchen (Serenade) ``Leise flehen meine Lieder''"; -opus = "D. 957 No. 4"; -composer = "Franz Schubert (1797-1828)" - "Text by Ludwig Rellstab (1799-1860)"; -enteredby = "JCN"; -copyright = "public domain"; -} - -%{ - Tested Features@ multivoice, accents, lyrics, chords, piano music, -multiple \paper{}s in one \score -%} - -\version "0.1.10"; - -$vocal_verse1 = \melodic{ - \octave c'; - - % ugh: treble/bass -% \clef treble; -% \clef violin; - [/3 g8( )as] g \] c'4. g8 | - [/3 f8( )g] f \] c'4 f8 r | - g4.-> f8 [/3 f( )es] d \] | - es2 r4 | - % ugh: a whole should be a measure - %r1 | - r2. | - r2. | - [/3 g8( )as] g \] es'4. g8 | - [/3 f8( )g] f \] d'4. c'8 | - bes4. as8 [/3 as( )g] f \] | - g2 r4 | - r2. | - r2. | - g8. b16 es'4. d'8 | - c'8. g16 es4. c8 | - % [/3 as\grace( bes ] ) - [/3 as8( )g] as \] c'4. as8 | - g2. | - %[/3 f\grace( g] ) - [/3 f8( )e] f \] as4. f8 | - es!2. | - g8. b16 es'4. d'8 | - c'8. g16 e4. c8 | - % [/3 a\grace( b] ) - [/3 a!8( ) gis] a \] c'4. a8 | - g!2. | - % [/3 a\grace( b] ) - [/3 d'8\f cis'] d' \] f'4. b8 | - c'!2. | -} - -$vocal_through = \melodic{ - \octave c'; - g8. g16 b8. b16 d'8. d16 | - c'4 b r | - g4. b8 d'8. c'16 | - b2 r4 | - e'4. d'8 [/3 d'( )c'] b \] | - a8. b16 c'4-> a8 r | - r2. | - r2. | - % 4 bars copied from end verse 1 - % [/3 a\grace( b] ) - [/3 a!8( ) gis] a \] c'4. a8 | - g!2. | - % [/3 a\grace( b] ) - [/3 d'8\f cis'] d' \] f'4. b8 | - c'!2. ~ | - c'4 r c' | - as2. | - g | - es2 r4 | -} - -$lyric_verse1 = \lyric{ -% 5 - \[/3 Lei-4 se8 \] fleh-4. en8 | - \[/3 mei-4 ne8 \] Lie-4 der8 _8 | - Durch4. die8 \[/3 Nacht4 zu8 \] | - dir;2 _4 | - _4 _ _ | - _ _ _ | -% 11 - \[/3 In4 den8 \] stil-4. len8 | - \[/3 Hainr4 her-8 \] nie-4. der,8 | - Lieb4. chen,8 \[/3 komm4 zu8 \] | - mir!2 _4 | - _4 _ _ | - _ _ _ | -% 17 - Fl\"us-8. ternd16 schlan-4. ke8 | - Wip-8. fel16 rau-4. schen8 | - \[/3 In4 des8 \] Mon-4. des8 | - Licht;2. | - _4 _ _ | - _4 _ _ | -% 23 - Des8. Ver-16 r\"a-4. ters8 | - feind-8. lich16 Lau-4. schen8 | - \[/3 F\"urch-4 te,8 \] Hol-4. de,8 | - nicht,2. | - \[/3 f\"urch-4 te,8 \] Hol-4. de,8 | - nicht.2. | -} - -$lyric_verse2 = \lyric{ -% 5 - \[/3 H\"orst4 die8 \] Nach-4. ti-8 - \[/3 gal-4 len8 \] schla-4 gen?8 _8 - Ach!4. sie8 \[/3 fleh-4 en8 \] - dich,2 _4 - _4 _ _ - _4_ _ - -% 11 - \[/3 Mit4 der8 \] T\"o-4. ne8 - \[/3 s\"u\ss-4 en8 \] Kla-4. gen8 - Fleh-4. en8 \[/3 sie4 f\"ur8 \] - mich.2 _4 - _4_ _ - _4_ _ - -% 17 - Sie-8. ver-16 stehn4. des8 - Bus-8. ens16 Seh-4. nen,8 - \[/3 Ken-4 nen8 \] Lieb-4. es-8 - schmerz,2. - \[/3 Ken-4 nen8 \] Lieb-4. es-8 - schmerz,2. - -% 23 - R\"uh-8. ren16 mit4. den8 - Sil-8. ber-16 t\"o-4. nen8 - \[/3 Jed-4 es8 \] wei-4. che8 - Herz.2. - \[/3 Jed-4 es8 \] wei-4. che8 - Herz.2. -} - -$lyric_through = \lyric{ -% 37 - La\ss8. auch16 dir8. die16 Brust8. be-16 | - we-4 gen, _ | - Lieb-4. chen,8 h\"o-8. re16 | - mich!2 _4 | - Be-8. bend16 harr'4 ich8 _8 | - dir8. ent-16 ge-4 gen!8 _8 | - \[/3 Komm,4 be-8 \] gl\"u4. cke8 | - mich!2. | - \[/3 Komm,4 be-8 \] gl\"u4. cke8 | - mich!2. | - _2 be-4 | - gl\"u-2. | - cke2. | - mich!2 _4 | -} - -$treble_intro = \melodic{ - \octave c'; - \clef violin; - % ugh: i'd like to type this! - %r8\pp [<'g-. c-.> <c-. es-.> <'g-. c-.> <c-. es-.> <'g-. c-.>] | - r8\pp <['g-. c-.> <c-. es-.> <'g-. c-.> <c-. es-.> <'g-. c-.]> | - r8 <['as-. c-.> <c-. es-.> <'as-. c-.> <c-. es-.> <'as-. c-.]> | - r8 <['as-. c-.> <c-. d-.> <'as-. c-.> <c-. d-.> <'as-. c-.]> | - r8 <['g-. 'b-.> <'b-. d-.> <'g-. 'b-.> <'b-. d-.> <'g-. 'b-.]> | - \break; - -} - -$treble_verse1 = \melodic{ - \octave c'; -% \clef violin; - r8 <['g c> <c es> <'g c> <c es> <'g c]> | - r8 <['f c> <c d> <'f c> <c d> <'f c]> | - r8 <['f 'g 'b> <'g 'b d> <'f 'g 'b> <'g 'b d> <'f 'g 'b]> | - r8 <['es 'g c> <'g c es> <'es 'g c> <'g c es> <'es 'g c]> | - <g'4.( b> <)f'8 d'> <[/3 f' d'> <es' c'> <d' b]1/1> | - <c'2. es'> | - r8 <['g c> <c es> <'g c> <c es> <'g c]> | - r8 <['f c> <c d> <'f c> <c d> <'f c]> | - r8 <['f 'as 'bes> <'as 'bes d> <'f 'g 'bes> <'g 'bes d> <'f 'g 'bes]> | - r8 <['es 'g 'bes> <'g 'bes es> <'es 'g 'bes> <'g 'bes es]> - <{ es'( | )bes4. as8}{ c'( | )d4.( )f8 } > - < [/3 f as> <es g> <d f]1/1> | - <es2. g> | - r8 <['f 'g> <'g 'b> <'f 'g> <'g 'b> <'f 'g]> | - r8 <['es 'g> <'g c> <'es 'g> <'g c> <'es 'g]> | - r8\pp <['es 'as c> <'as c es> <'es 'as c> <'as c es> <'es 'as c]> | - r8 <['es 'g 'bes> <'g 'bes 'es> <'es 'g 'bes> <'g 'bes 'es> <'es 'g 'bes]> | - % [/3 as\grace( bes ) - [/3 as8(( g )as]1/1 c'4.-> ) as8 | - g2. | - r8 <['f 'g> <'g 'b> <'f 'g> <'g 'b> <'f 'g]> | - r8 <['e 'g> <'g c> <'e 'g> <'g c> <'e 'g]> | - r8 <['f 'a c> <'a c f> <'f 'a c> <'a c f> <'f 'a c]> | - r8 <['e 'g c> <'g c e> <'e 'g c> <'g c e> <'e 'g c]> | - <{[/3 f'8\f( e' f']1/1 a'4. )f'8 } {\[/3 f e f \] a4. f8 } > | - <e2 e'> r4 | -} - -$treble_eentje = \melodic{ - \octave c'; - <f2\mf as!(> <[as8.->( c'> <)f16 )as]> | - <e4. g> <[e8-. g-.(> <e-. g-.> <e-. )g-.]> | - <f4. g> <['b8-. g-.(> <d-. g-.> <f-. )g-.]> | - <e2 g\pp> <e4 g> | - <f2\mf a(> <[a8.( c'> <)f16 )a]> | - <e4. g> <[e8-. g-.(> <e-. g-.> <e-. )g-.]> | - <f4. g> <['b8-. g-.(> <d-. g-.> <f-. )g-.]> | - <e2. g> | -} - -$treble_through = \melodic{ - \octave c'; - r2. | - % lily: 221: warning: Junking request: Span_dynamic_req: the \> - <['g8.\< g> <'g16 g> <'b8. b> <\!'b16\> b16> <d8. d'> <d16 d']> | - % lily: 222: warning: Can't find cresc to end. - < { c4( )'b } { c'4( )b } > \!r | -% ugh -% <'g4. g> <'b8 b> <[d8.-> d'->> c'16] | - <'g4. g> <'b8 b> [d'8.-> c'16] | -% ugh, ugh: connecting chords - < { d2.\f( )a2} { e2. ~ e2 } { b2. c2 }> r4 | - < - { - \voiceone - [a8. b16] c'4->( )a8 r | - [a8. b16] c'4->( )a8 r | - } - { - \voicetwo - <d4\f f> <d2 f> | - <c!4\f es> <c2 es> | - } - > - % 4 bars copied from end verse1 - r8 <['f\p 'a c> <'a c f> <'f 'a c> <'a c f> <'f 'a c]> | - r8 <['e 'g c> <'g c e> <'e 'g c> <'g c e> <'e 'g c]> | - <{[/3 f'8\f( e' f']1/1 a'4. )f'8 } {\[/3 f e f \] a4. f8 } > | - <e2 e'> r4 | - <es2 es'> r4 | - <d2 d'> r4 | - <'b2 b> r4 | - <c2 c'> <e4\pp g> | - - % four copied from begin eentje - <f2\mf as!(> <[as8.->( c'> <)f16 )as]> | - <e4. g> <[e8-. g-.(> <e-. g-.> <e-. )g-.]> | - <f4. g> <['b8-. g-.(> <d-. g-.> <f-. )g-.]> | - \textstyle "italic"; - <e2._"dim." g> | - <'g2. e g> | - <'g2.-\fermata e g> | -} - -$bass_intro = \melodic{ - \octave c; - \clef bass; - <'c2 c> r4 | - <''as2 'as> r4 | - <''f2 'f> r4 | - <''g2 'g> r4 | -} - -$bass_verse1 = \melodic{ - \octave c; -% \clef bass; - <'c2 c> r4 | - <''as2 'as> r4 | - <''g2 'g> r4 | - <'c2 c> r4 | - <''g8 'g> <[g d'> <d' f'> <g d'> <d' f'> <g d']> | - <'c8 c> <[g c'> <c' es'> <g c'> <c' es'> <g c']> | - <'c2 c> r4 | - <''as2 'as> r4 | - <''bes2 'bes> r4 | - <''es2 'es> r4 | - ''bes8 <['bes f> <f bes> <'bes f> <f bes> <'bes f]> | - ''es8 <['bes es> <es g> <'bes es> <es g> <'bes es]> | - <''g2 'g> r4 | - <'c2 c> r4 | - <''as2 'as> r4 | - <''es2 'es> r4 | - <''bes8 'bes> <[f bes> <bes d'> <f bes> <bes d'> <f bes]> | - <''es8 'es> <[es g bes> <g bes es'> <es g bes> <g bes es'> <es g bes]> | - <''g2 'g> r4 | - <'c2 c> r4 | - <''f2 'f> r4 | - <'c2 c> r4 | - <''g8 'g> <[d g> <g b> <d g> <g b> <d g]> | - 'c8 <[c e g> <e g c'> <c e g> <e g c'> <c e g]> | -} - -$bass_eentje = \melodic{ - \octave c; - <'c8 c> <[c f as!> <f as c'> <c f as> <f as c'> <c f as]> | - 'c8 <[c e g> <e g c'> <c e g> <e g c'> <c e g]> | - <''g8 'g> <[d g> <g b> <d g> <g b> <d g]> | - 'c8 <[e g> <g c'> <e g> <g c'> <e g]> | - <'c8 c> <[c f a> <f a c'> <c f a> <f a c'> <c f a]> | - 'c8 <[c e g> <e g c'> <c e g> <e g c'> <c e g]> | - <''g8 'g> <[d g> <g b> <d g> <g b> <d g]> | - 'c8 <[e g> <g c'> <e g> <g c'> <e g]> | -} - -$bass_through = \melodic{ - \octave c; - <''g8 'g> <['g 'b d> <'b d f> <'g 'b d> <'as!-> b-> d->> <'b d f]> | - <''g8 'g> <['g d> <d f> <'g d> <'as-> b-> d->> <'b d f]> | - % copied - <''g8 'g> <['g d> <d f> <'g d> <'as-> b-> d->> <'b d f]> | - <''g8 'g> <['g d e> <d f> <'g d> <'gis-> 'b-> d->> <'b d f]> | - <''gis8 'gis> <[d e> <e b> <d e> <e b> <d e]> | - <''a8 'a> <[c e> <e a> <c e> <e a> <c e]> | - <''a8 'a> <['a d f> <d f a> <'a d f> <d f a> <'a d f]> | - <''a8 'a> <['a c e> <c e a> <'a c e> <c e a> <'a c e]> | - % 4 bars copied from end verse1 - <''f2 'f> r4 | - <'c2 c> r4 | - <''g8 'g> <[d g> <g b> <d g> <g b> <d g]> | - 'c8 <[c e g> <e g c'> <c e g> <e g c'> <c e g]> | - - <'c8 c> <[c es! g> <es g c'> <c es! g> <es g c'> <c es! g]> | - <''f8 'f> <[d f> <f as!> <d f> <f as!> <d f]> | - <''g8 'g> <[d f> <f g> <d f> <f g> <d f]> | - 'c8 <[c e> <e g> <c e> <e g> <c e]> | - 'c8 <[c f> <f as> <c f> <f as> <c f]> | - 'c8 <[c e> <e g> <c e> <e g> <c e]> | - ''g8 <['g d> <d f> <'g d> <d f> <'g d]> | - % copied from two bars back - 'c8 <[c e> <e g> <c e> <e g> <c e]> | - 'c8 <[c e> <e g> <c e> <e g> <c e]> | - <'c2._\fermata 'g c> | -} - -global = \melodic{ - \meter 3/4; - \key bes es as; - \skip 4 * 12; - \break; - \skip 4 * 234; - \bar "|."; -} - - -$lyric_four = \lyric{ - _4 _ _ - _ _ _ - _ _ _ - _ _ _ -} - -lyrics = \melodic{ - \meter 3/4; -% \skip 4 * 12; - \$lyric_four - \$lyric_verse1 -% \skip 4 * 24; - \$lyric_four - \$lyric_four - \$lyric_verse2 - \$lyric_through -} - -$lyric_staff = \type Lyrics = lyric< - \$lyrics -> - -vocals = \melodic{ - \skip 4 * 12; - \$vocal_verse1 - \skip 4 * 24; - \$vocal_verse1 - \$vocal_through -} - -$vocal_staff = \type Staff = vocal< - \property Staff.instrument = "alto sax" - \global - \$vocals -> - -% treble = \melodic{ -treble = { - \$treble_intro - \$treble_verse1 - \$treble_eentje - \$treble_verse1 - \$treble_through -} - -$treble_staff = \type Staff = treble< - \global - \treble -> - -bass = \melodic{ - \$bass_intro - \$bass_verse1 - \$bass_eentje - \$bass_verse1 - \$bass_through -} - -$bass_staff = \type Staff = bass< - \global - \bass -> - -$grand_staff = \type Grand_staff< - \$treble_staff - \$bass_staff -> - -a4 = \paper{ - gourlay_maxmeasures = 7.; -% linewidth= 193.\mm; - linewidth= 175.\mm; - Staff = \translator { - \type "Engraver_group_engraver"; - defaultclef = violin; - - \consists "Bar_engraver"; - \consists "Clef_engraver"; - \consists "Key_engraver"; - \consists "Meter_engraver"; - \consists "Local_key_engraver"; - \consists "Staff_sym_engraver"; - \consists "Collision_engraver"; - \consists "Rest_collision_engraver"; - \consists "Bar_column_engraver"; - \consists "Bar_number_engraver"; - \consists "Separating_line_group_engraver"; - \consists "Line_group_engraver"; - - \accepts "Voice"; - } -} - -\score{ - < - \$vocal_staff - \$lyric_staff - \$grand_staff - > - \paper{ \a4 } - \midi{ - \tempo 4 = 54; - } -} - diff --git a/test/bow.cc b/test/bow.cc index dc077b4f29..418538880e 100644 --- a/test/bow.cc +++ b/test/bow.cc @@ -15,6 +15,7 @@ typedef void *Paper_def; bool experimental_features_global_b = true; +//bool experimental_features_global_b = false; #include "bezier.hh" @@ -139,9 +140,12 @@ main () bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-20, 100,-100 }, 6, 1); bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-140, 100,-100 }, 6, -1); bow ((Point[7]){ 0,0, 20,40, 100,0, 150,0, 200,0, 280,40, 300,0 }, 7, 1); - bow ((Point[7]){ 0,0, 20,40, 100,0, 150,0, 200,0, 280,40, 300,0 }, 7, 1); + bow ((Point[7]){ 0,0, 20,-40, 100,0, 150,0, 200,0, 280,-40, 300,0 }, 7, -1); bow ((Point[7]){ 0,20, 20,40, 100,0, 150,0, 200,0, 280,40, 300,20 }, 7, 1); bow ((Point[3]){ 0,0, 10,10, 20,-20 }, 3, 1); + + bow ((Point[4]){ 0,0, 33,100, 75,0, 100,100 }, 4, -1); + bow ((Point[4]){ 0,0, 33,-100, 75,0, 100,-100 }, 4, 1); #endif #if 1 @@ -154,7 +158,6 @@ main () bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,140, 100,100 }, 6, 1); #endif - cout << "\\end" << endl; return 0; diff --git a/tex/headers.tex b/tex/headers.tex index 915d3c1388..81dd884c8c 100644 --- a/tex/headers.tex +++ b/tex/headers.tex @@ -1,5 +1,9 @@ +\advance\topmargin-20mm +\addtolength{\textheight}{40mm} +\footskip5mm + \usepackage{fancyheadings} \lhead{} \rhead{} @@ -10,3 +14,4 @@ \headrulewidth0mm \pagestyle{fancy} \thispagestyle{fancy} + diff --git a/tex/lily-ps-defs.tex b/tex/lily-ps-defs.tex index 59e4d4e857..074eb7d1ce 100644 --- a/tex/lily-ps-defs.tex +++ b/tex/lily-ps-defs.tex @@ -120,7 +120,7 @@ staffrulethickness 1.2 mul /plet_t exch def plet_dx plet_dy lineto stroke } bind def -staffheight 2 div /slurhtlimit exch def +% /draw_slur { staffrulethickness setlinewidth @@ -132,7 +132,18 @@ staffheight 2 div /slurhtlimit exch def fill grestore stroke - } bind def +} bind def +% +/draw_dashed_slur +{ + 1 setlinecap + 1 setlinejoin + setdash + setlinewidth + moveto + curveto + stroke +} bind def % staffheight 4 div /interline exch def % diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index aa31034329..8a345d603c 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -149,7 +149,7 @@ \musixcalc } \def\musixelevendefs{ - \elevendefs + \elevenfonts \musixcalc } |