and
lurl(ftp://ftp.debian.org/debian/dists/unstable/main/binary-i386/tex/lilypond_*.deb)
+Precompiled i386 RedHat RPMS are available from
+lurl(http://linux.umbc.edu/software/lilypond/rpms/).
+
sect(News)
manpageseealso()
-LilyPond comes with various other documentation files, but most are in
-the form of manual pages. They are included in the source
-package. Interesting documents include
-
-description(
-dit(MANIFESTO)
- Goals of the GNU LilyPond project.
-dit(FAQ)
- The GNU LilyPond FAQ list
-)
+LilyPond comes with various other documentation files. They are
+included in the source package.
A further source for information is the website, which can be found at
lurl(http://www.lilypond.org/). The website contains on-line versions
.IP o
Send a description of the bug itself\&.
.IP o
-Send it to bug-gnu-music@gnu\&.org <bug-gnu-music@gnu\&.org>; you don\'t have to be subscribed
+Send it to bug-gnu-music@gnu\&.org; you don\'t have to be subscribed
to this mailinglist\&.
.PP
.SH "FILES"
.PP
.SH "SEE ALSO"
.PP
-LilyPond comes with various other documentation files, but most are in
-the form of manual pages\&. They are included in the source
-package\&. Interesting documents include
-.PP
-.IP "MANIFESTO"
-Goals of the GNU LilyPond project\&.
-.IP "FAQ"
-The GNU LilyPond FAQ list
+LilyPond comes with various other documentation files\&. They are
+included in the source package\&.
.PP
A further source for information is the website, which can be found at
http://www\&.lilypond\&.org/\&. The website contains on-line versions
For programs which are part of the GNU music project, the following
mailing list have been setup:
.PP
-.IP "info-gnu-music@gnu\&.org <info-gnu-music@gnu\&.org>"
+.IP "info-gnu-music@gnu\&.org"
For information on the GNU Music project, to subscribe: send mail with
-subject "subscribe" to info-gnu-music-request@gnu\&.org <info-gnu-music-request@gnu\&.org>
-.IP "help-gnu-music@gnu\&.org <help-gnu-music@gnu\&.org>"
+subject "subscribe" to info-gnu-music-request@gnu\&.org
+.IP "help-gnu-music@gnu\&.org"
For help with programs from the GNU music project\&. To subscribe: send
-mail with subject "subscribe" to help-gnu-music-request@gnu\&.org <help-gnu-music-request@gnu\&.org>
-.IP "bug-gnu-music@gnu\&.org <bug-gnu-music@gnu\&.org>"
+mail with subject "subscribe" to help-gnu-music-request@gnu\&.org
+.IP "bug-gnu-music@gnu\&.org"
If you have bugreports, you should send them to this list\&. If you want
to read all bugreports, you should subscribe to this list\&. To
subscribe: send mail with subject "subscribe" to
-bug-gnu-music-request@gnu\&.org <bug-gnu-music-request@gnu\&.org>
-.IP "gnu-music-discuss@gnu\&.org <gnu-music-discuss@gnu\&.org>"
+bug-gnu-music-request@gnu\&.org
+.IP "gnu-music-discuss@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>
+gnu-music-discuss-request@gnu\&.org
.PP
Announces of new versions will be sent to info-gnu-music and
gnu-music-discuss\&.
subsect(NEWS) label(news)
-The FAT16, FAT32, and NTFS file system problems have been corrected.
-I have tested various installations that are known to be operational.
-The following configurations that have been tested.
-
-description(
- dit(Windows NT)
- description(
- dit(Installed on NTFS)
- itemize(
- it()Runs from NTFS partion
- it()Runs from FAT16 partion
- )
- dit(Installed on FAT16)
- itemize(
- it()Runs from NTFS partion
- it()Runs from FAT16 partion
- )
- )
-)
-
-description(
- dit(Windows 95)
- description(
- dit(Installed on FAT16)
- itemize(
- it()Runs from FAT16 partion
- it()Runs from FAT32 partion
- )
- dit(Installed on FAT32)
- itemize(
- it()Runs from FAT16 partion
- it()Runs from FAT32 partion
- )
- )
-)
-
-The installer was created with
-url(CreateInstall)(http://www.gentee.com/). This is a shareware
-application that has capabilities close to the high dollar installers
-bf(InstallShield), bf(Install Vise), and bf(WiseInstaller).
-bf(CreateInstall) does cost $38 to register which is probably going to
-be frowned upon, but I was unable to find a freeware install builder
-that was suitable. The self extracting distribution currently:
-
-itemize(
- it() Installs the lilypond distribution on any valid file system.
- it() Optionally creates a em(Lilypond) shortcut group on your start
- menu with the following shortcuts.
- itemize(
- it() bf(lilyshell)
- it() bf(uninstall)
- )
- it() Allows unistall through the Add/Remove Program interface on the
- control panel.
- it() The bf(lilyshell) uses the /E and /K switches to extend the
- environment size and initialize the shell environment.
- it() It has the look and feel of a real Windows installer
-)
-
-The bf(lilyshell) shortcut initializes the environment so you can
-generate music from a MSDOS prompt with commands like:
+I have made my first attempt at distributing lilypond as a self
+extracting executable for Windows NT 4.0 and Windows 95. The
+executable will extract the distribution in the directory specified by
+the user and create em(lilypond-@TOPLEVEL_VERSION@\lily.bat). This
+batch file initializes the LilyPond environment and fires up a Command
+Prompt. From this Command Prompt you may run:
itemize(
it()ly2dvi
it()mi2mu
)
-If you are upgrading from a previous version of lilypond you will most
-likely need to flush your font cache. I generally just toss
-file(D:\localtexmf\fonts\tfm\public\ehrhardt) and
-file(D:\localtexmf\fonts\pk\ljfour\public\ehrhardt) in the Recyle
-Bin. Your local font directory may be different, please refer to your
-local installation of code(TeX).
-
I have also converted the Manual Pages for the above tools to HTML for
easy browsing. This release has been tested on Windows NT 4.0sp3 and
Windows 95 and found to be operational. If you have any troubles and
subsect(Download) label(download)
itemize(
- it()Windows 95
- url(lilypond-@TOPLEVEL_VERSION@-95)(lilypond-@TOPLEVEL_VERSION@-95.exe)
- it()Windows NT 4.0
- url(lilypond-@TOPLEVEL_VERSION@-nt)(lilypond-@TOPLEVEL_VERSION@-nt.exe)
+ it()url(lilypond-@TOPLEVEL_VERSION@)(lily1123jbr1.exe)
)
link(Back to top)(contents)
itemize(
it()Take a look at url(angels.ly)(angels.ly)
it()Save angels.ly to your local disk
- it()Select the bf(lilyshell) shortcut from the em(Lilypond) group nl()
+ it()Execute lilypond-@TOPLEVEL_VERSION@\lily.bat nl()
+NOTE: If you get an em(out of environment memory error), simply increase
+the environment memory by selecting
+em(lilypond-@TOPLEVEL_VERSION@\lily.bat) Properties/Memory and increase
+the available environment memory to 1024.
it() From a LilyPond Command Prompt run: nl()
bf(ly2dvi angels.ly) nl()
bf(dvips angels.dvi) nl()
isbn = {ISBN 3-7957-2886-x},
}
+{willemze,
+ note = {A comprehensive overview of music theory;
+the (Dutch) authority on general music theory},
+ year = {1964-1993},
+ title = {Algemene muziekleer},
+ author = {Theo Willemze},
+ publisher = {Aula, Het Spectrum},
+ address = {Utrecht},
+ isbn = {ISBN 90-274-1817-9},
+}
@Book {hader48,
\mudelafile{noteheadstyle.ly}
Multiple measure rests do not collide with barlines and clefs. They
-are not expanded when you set Score.SkipBars
+are not expanded when you set \verb+Score.SkipBars+. Although the
+multi-measure-rest is a Spanner, minimum distances are set to keep it
+colliding from barlines.
\mudelafile{multi-measure-rest.ly}
\mudelafile{collisions.ly}
The number of stafflines of a staff can be set with the property
-numberOfStaffLines. Ledger lines both on note heads and rests are adjusted.
+numberOfStaffLines. Ledger lines both on note heads and rests are
+adjusted. Barlines also are adjusted.
+
\mudelafile{number-staff-lines.fly}
following words are keywords:
verb(accepts duration midi relative textscript
alternative font mm remove time
-bar grouping musicalpitch repeat times
+bar musicalpitch repeat times
cadenza header name scm translator
chordmodifiers in notenames scmfile transpose
chords include notes score type
your music by typing code(|). Whenever LilyPond encounters a code(|)
that doesn't fall at a measure boundary, she prints a warning message.
-Rhythmic grouping is a concept closely associated with this.
-A default grouping is selected for the chosen time signature.
-The default consists of combinations of 2 and 3 beats with as many
-groups of 3 as possible, and the groups of 3 coming first. For
-example, 4/4 is divided into 2+2 and 8/8 is divided into 3+3+2. This
-default grouping can be changed using the \grouping keyword which
-takes a list of durations to specify the grouping.
-
COMMENT(
sect(Composition: forming bigger structures)
dit(code(\font) var(string)) Internal keyword. Used within
code(\paper) to specify the font.
-dit(code(\grouping) var(durationseq)code(;)) Sets the metric structure of
-the measure. Each argument specifies the duration of one metric unit.
-For example, code(\duration 16*5;) specifies a grouping of five beats
-together in 5/16 time. The default grouping is to have as many groups
-of 3 as possible followed by groups of two.
dit(code(\header) code({) var(key1) = var(val1); var(key2) = var(val2); ... code(}))
Specifies information about the music. A header should appear at the
\key g;
\time 3/4;
- \repeat 2 {
+ \repeat "semi" 2 {
d4 g,8 a b c d4 g, g |
e'4 c8 d e fis g4 g, g |
c4 d8( )c b a( )b4 c8 b a g |
[d'8 dis'] e' c''4 e'8 c''4
)
-dit(code(\grouping) var(durationslist)) sets the metric structure of the measure.
- Its effect can best be shown by an example:
- mudela(fragment,verbatim,center)(
- \time 5/16;
- \grouping 16*3 16*2;
- [c'8 c'16 c'8]
- \grouping 16*2 16*3;
- [c'8 c'16 c'8]
- \grouping 16*5 ;
- [c'8 c'16 c'8]
- )
-
-In practice, you won't be needing this command often: the
-grouping is switched automatically when you issue a code(\time)
-command. It is set to a combination of groups
-of 2 and 3 beats, with as many groups of
-3 as possible (in other words: 4/4 is divided in two times two beats
-(2+2), 8/8 in 3+3+2)
-)
The commands described above aren't really music, but they can best be
thought as as notes with no duration. Since they are grammatically
itemize(
it()xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
users: it is included within the package libgr-progs).
-it()Bib2html lurl(http://pertsserver.cs.uiuc.edu/~hull/bib2html.)
- Which, in turn depends on man2html for proper installation.
-man2html can be had from lurl(http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05).
+ the original is at
+lurl(ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz)
- TeTeX users should not forget to rerun texhash.
-)
+it()pnmtopng, which is also in libgr-progs for RedHat. The original is
+at
+lurl(ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz).i
-Building the website requires pnmtopng. The version of file(pnmtopng)
-that is distributed with RedHat 5.1 and 5.2 contains a bug: pnmtopng
-is dynamically linked to the wrong version of libpng. Recompile it
-from source, and make sure that the pnmtopng binary is linked
-statically to the libpng that is included in libgr. RedHat 6.0 does
-not have this problem.
+The version of file(pnmtopng) that is distributed with RedHat 5.1 and
+5.2 contains a bug: pnmtopng is dynamically linked to the wrong
+version of libpng. Recompile it from source, and make sure that the
+pnmtopng binary is linked statically to the libpng that is included in
+libgr. RedHat 6.0 does not have this problem.
verb( tar xzf libgr-2.0.13.tar.gz
make
You can then install the new pnmtopng into /usr/local/bin/
+it()Bib2html lurl(http://pertsserver.cs.uiuc.edu/~hull/bib2html.)
+ Which, in turn depends on man2html for proper installation.
+man2html can be had from lurl(http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05).
+
+ TeTeX users should not forget to rerun texhash.
+)
+
+You also have to install file(buildscripts/out/ps-to-gifs) in a
+directory that is in the path.
+
+
sect(CONFIGURING and COMPILING)
to install GNU LilyPond, simply type:
rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
)
-Precompiled i386 eRedHat RPMS are available from
+Precompiled i386 RedHat RPMS are available from
lurl(http://linux.umbc.edu/software/lilypond/rpms/).
it()url(Mailing Lists)(DOEXPAND(docdir)/DOEXPAND(outdir)/mail.html)
it()url(All of the LilyPond documentation)(DOEXPAND(docdir)/DOEXPAND(outdir)/index.html)
it()url(The DOC++ documentation of the C++ sources.)(DOEXPAND(depth)/docxx/index.html)
-it()url(The installation instructions)(DOEXPAND(tops)/INSTALL.html)
+it()url(The installation instructions)(INSTALL.html)
)
nsect(Sites)
o xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
users: it is included within the package libgr-progs).
-o Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html.
- Which, in turn depends on man2html for proper installation.
-man2html can be had from http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05.
+ the original is at
+ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz
- TeTeX users should not forget to rerun texhash.
+o pnmtopng, which is also in libgr-progs for RedHat. The original is
+at
+ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz.i
-Building the website requires pnmtopng. The version of pnmtopng
-that is distributed with RedHat 5.1 and 5.2 contains a bug: pnmtopng
-is dynamically linked to the wrong version of libpng. Recompile it
-from source, and make sure that the pnmtopng binary is linked
-statically to the libpng that is included in libgr. RedHat 6.0 does
-not have this problem.
+The version of pnmtopng that is distributed with RedHat 5.1 and
+5.2 contains a bug: pnmtopng is dynamically linked to the wrong
+version of libpng. Recompile it from source, and make sure that the
+pnmtopng binary is linked statically to the libpng that is included in
+libgr. RedHat 6.0 does not have this problem.
tar xzf libgr-2.0.13.tar.gz
make
You can then install the new pnmtopng into /usr/local/bin/
+o Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html.
+ Which, in turn depends on man2html for proper installation.
+man2html can be had from http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05.
+
+ TeTeX users should not forget to rerun texhash.
+
+You also have to install buildscripts/out/ps-to-gifs in a
+directory that is in the path.
+
6: CONFIGURING and COMPILING
to install GNU LilyPond, simply type:
rpm -tb lilypond-x.y.z.tar.gz
rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
-Precompiled i386 eRedHat RPMS are available from
+Precompiled i386 RedHat RPMS are available from
http://linux.umbc.edu/software/lilypond/rpms/.
10: DEBIAN GNU/LINUX
A Debian package is also available; contact Anthony Fok
-<foka@debian.org>. The build scripts are in the subdirectory
+foka@debian.org. The build scripts are in the subdirectory
debian/.
11: WINDOWS NT/95
---- ../lilypond-1.1.53.jbr1/NEWS Wed Jul 07 23:47:42 1999
-++ b/NEWS Thu Jul 08 17:07:30 1999
-@@ -1,3 +1,6 @@
-pl 53.jbr2
- - Documentation/ntweb/index.html: Updated nt distribution web page
-
- pl 53.jbr1
- - scripts/ly2dvi.py: A fix for the multitude of file systems supported
- by windows. As long as the paths that the cygwin apps use are--- ../lilypond-1.1.53/NEWS Mon Jul 05 05:56:28 1999
-++ b/NEWS Wed Jul 07 23:47:42 1999
-@@ -1,3 +1,9 @@
pl 53.jbr1
- scripts/ly2dvi.py: A fix for the multitude of file systems supported
by windows. As long as the paths that the cygwin apps use are
UNC style and the paths that the native windows apps use are DOS
style everybody is happy. I add quick and dirty unc2dos function
to facilitate this approach.
-
- pl 52.jcn3
- - bf: mi2mu: midi without keypl 53.gp1
+
+pl 53.hwn1
+ - bf mudela-book.
+ - better min distance for multi measure rests.
+ - junk ATOM_SMOB
+ - control tuplet gap size from paper.
+ - bf: output header as PS strings for PS out.
+ - bf: cached-fontname
+ - control volta height from paper block.
+
+pl 53.jcn5
+ - \rhythm-ified and text bfs: standchen.ly
+ - walk rhythm through *_iterator::next_music_l ()
+
+pl 53.jcn4
+ - more abc2ly hacking, including lyrics and \rhythm
+ - bfs: \rhythm
+ - \rhythm-ified input/twinkle.ly
+
+pl 53.jcn3
+ - put rhythm A on pitches/lyrics B: \rhythm MUSICA MUSICB
+ input/test/rhythm-melody.fly
+ input/test/rhythm-lyrics.fly
+ - syntax changes:
+o * dot-only duration dropped: use c4 c4. iso now invalid: c4 c.
+ * chords: optional_dot now mandatory:
+ \chords { c-1.2.3 } iso now invalid: \chords { c-1 2 3 }
+ * @c@ (notemode_chords) syntax dropped. rather use:
+ \notes { c d \chords { e f } }
+
+pl 53.jcn2
+ - \property graceFraction: part of next note taken-up by grace(s).
+ - Note_performer: add moments for delayed notes,
+ fine for single grace notes: hear gnossienne-4.ly
+
+pl 53.jcn1
+ - grace performance
+ - fixed tie-performance
+ - bf: abe
+
+pl 53.gp1
- added Hyphen-engraver, Hyphen-spanner
************
pl 52.jcn3
* beam over barlines
* non-fitting stems handled gracefully (eg. [c8 c4 c8] )
- junked rhythmic grouping, \grouping and all associated bits.
- - bf: do try_visibility_lambda for nonbreakable items as well (fixes \nobreak on barline)
+ - bf: do try_visibility_lambda for nonbreakable items as well
+ (fixes \nobreak on barline)
- bf: Cons_list::truncate()
pl 52.hwn1
- Added barSize property. Junked barsize variable.
************
-i
pl 51.uu2
- grace note flags, move Lookup::flag into Stem
- faq updates: doc++, Matt's page
- Span_bar bugfix (there you go, Mats).
- bf: Score copy ctor (-> bf declaring score)
- new Tie behavior: only tie identical pitches, switchable with
-oldTieBehavior
+ oldTieBehavior
- junked cautionary_b_ from Musical_pitch
pl 32.jcn1
pl5.jcn3
- website fixes
-opl5.jcn2
+pl5.jcn2
- extender-*, see input/test/extender.ly
- bf: half-beam length (urg)
- fixes: standchen, star
- tex output support
- all output through scheme
- option: f, output-format=X
-o - geile placebox
+ - geile placebox
- mf/mfplain.ini
pl 17.jcn2
. * indent = 0.0 with linewidth=-1.0
. * music ending in grace notes.
. * PostScript
-. * header for PS enteredby = "bla <bla@bar.com>"
. * ps/lily.ps see comments.
. * didot / big point.
. * fix singleStaffBracket
-. * declare performers in \midi
. * check EGCS version
. * input/test/stem-spacing.ly: 12/4 touches first note
. * \shape 1st dim skipped?
. * We need feta-din*.mf files for more sizes than 10.
. * fix dynamics decently, ie. use kerning & ligatures.
. * dots & rest collisions?
-. * mudela-book.py
-. * fix \mudelafile{} to have decent functionality
-. * P.P.S. It can be cool in mudela-book to distinguish in
-pre,postMudelaExample, whether MudelaExample is epsed or not: ( if
-this fragment is floating eps, than 1, otherwise 2). say
-preMudelaExample[eps]{}, and change it in document body sometimes.
-. * use less RE's
-. * junk _ in lyric mode for " "
+. * behavior of "that the obvious solution
+\lyrics { foo1*4 __ _ }" is unintuitive.
. * Lyrics and scripts collide.
. * a note with a circle after it, meaning:
. * Remove non-free software links.
. * Remove meta article LilyPond.
. * break priority setting from SCM.
-. * Gade score
-. * remove [] in favour of auto-beamer
. * hangOnClef with non-breakable clefs.
-. * Aha, the problem is the new TeX code generation for changing fonts.
-> (The explanation below is mostly intended for Han-Wen and Jan)
-> Before, the font was changed with macros declared separately for
-> pure TeX and LaTeX, but now all the fonts are declared directly in
-> the generated code using the low-level TeX commands. This circumvents
-> the fontencoding mechanism of LaTeX and is a potential source of
-> problems also for us users of the Latin-1 character set.
-> I think it still works since the inputencoding latin1 is
-> declared by ly2dvi, but it still means that e.g. an o with
-> umlaut is typeset as a combination of the two symbols 'o' and
-> 'umlaut' instead of as a single character, as would be the case
-> if fontencoding OT1 had been used. This shouldn't give any
-> difference in layout, though. One of the main argument for using
-> fontencoding OT1 is for the hyphenation mechanism to work, an
-> argument that's clearly irrelevant in our application. Yet we
-> see the problem for August.
. * Abstraction for engravers:
. * make "in-between" engraver (Tie, Extender)
. * make wide_spanner_engraver (line_group_spanner, staff_symbol)
. * PS output
. * optimal pagebreaking.
-. * Unicode support? -> man 7 unicode
-. * 16 bit Strings
-. * -u switch
-. * detect of 16/8 bit files
-. * examples to go with it.
+. * internationalisation for input.
+. * Unicode support? -> man 7 unicode
+. * (The explanation below is mostly intended for Han-Wen and Jan)
+> Before, the font was changed with macros declared separately for
+> pure TeX and LaTeX, but now all the fonts are declared directly in
+> the generated code using the low-level TeX commands. This circumvents
+> the fontencoding mechanism of LaTeX and is a potential source of
+> problems also for us users of the Latin-1 character set.
+> I think it still works since the inputencoding latin1 is
+> declared by ly2dvi, but it still means that e.g. an o with
+> umlaut is typeset as a combination of the two symbols 'o' and
+> 'umlaut' instead of as a single character, as would be the case
+> if fontencoding OT1 had been used. This shouldn't give any
+> difference in layout, though. One of the main argument for using
+> fontencoding OT1 is for the hyphenation mechanism to work, an
+> argument that's clearly irrelevant in our application. Yet we
+> see the problem for August.
. * \header
. * output header info to MIDI too.
. * SMDL?
. * add to MIDI output:
-. * tied notes for MIDI
. * sharp / flat on trills (in MIDI ??)
. * tempo change
. * ornaments (and trills?)
. * specify number of lines
.* INPUTLANGUAGE
-. * \rhythms 4 16 16 16 16; c c c c c -> c4 c16 etc.
. * convention for slurs vs. phrasing marks.
. * Language:
. * \translator -> ?
. * fix confusing naming in Engraver vs Engraver_group_engraver (context)
-. * progress when creating MIDI elts.
-
. * A range for context errors (eg. mark both { and }. )
. * lyric in staff (sharpsharp in staff, text below)
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=1
-PATCH_LEVEL=53
-MY_PATCH_LEVEL=jbr2
+PATCH_LEVEL=54
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
dnl WARNING WARNING WARNING WARNING
dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
-dnl WARNING WARNING WARNING WARNING
-dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
dnl aclocal.m4 -*-shell-script-*-
dnl StepMake subroutines for configure.in
--- /dev/null
+text = \lyrics { four4 syl- la ble }
+two = \notes { c4. c8 }
+fourn = \notes { c4. c8 c4. c8 }
+fiven = \notes { [c16 c16 \bar ""; <{ c8 } { c16 c16 }> c8 }
+
+\score { \notes{
+ \context Staff = SA
+ < \context Staff { \two }
+ \context Lyrics { \rhythm \fourn \text }
+ >
+ < \context Staff { \two }
+ \context Lyrics { \rhythm \two \text }
+ >
+ < \context Staff { \fiven }
+ \context Lyrics { \rhythm \fiven \text }
+ >
+
+}
+}
+++ /dev/null
-
-%
-% Jan -> dit is Auto_B_E bug, niet grouping bug.
-%
-
-\score{
- \notes{ \time 13/8;
- % \property Voice.beamAutoBegin = "1/8"
- % \property Voice.beamAutoEnd = "3/8"
- \property Voice.beamAutoEnd = "10/8"
- \property Voice."beamAutoEnd_16" = "1/8"
- \property Voice.beamAutoBegin = "1/4"
-
- a8 a a a16 a16 a16 a16 a16 a16 a8 a a a a a
- a a a a a a a a a a a a a
- a8 a8 a8 a8 a8 a a a a a a a a
- }
- \paper{ linewidth = -1.;}
-}
-
}
tab = \notes\transpose c'''\chords{
- c1 c-m c-4 c-m4 c-5+ c-5- c-m5- c-5-.5+ c-6\break %c-m6\break
+ c1 c-m c-4 c-m.4 c-5+ c-5- c-m.5- c-5-.5+ c-6\break %c-m6\break
}
\score{
>
}
-\version "1.0.21";
+\version "1.1.53";
\score{
\notes \transpose c''{
- @c1@ @c-7@ @c-7^5@-1-3
+% 1.1.53: @x@ syntax dropped
+% if you want fingering, write chord explicitily; eg < c1-1 e-2 g-3 >
+% @c1@ @c-7@ @c-7^5@-1-3
+ \chords { c1 c-7 c-7^5 }
}
}
--- /dev/null
+\context Voice=VoiceOne
+\property Voice.graceFraction = "1/4"
+\grace c8 d4 d d d d
+\property Voice.graceFraction = "1/2"
+\grace { e16 f e f } d4 d d d d
-c8 c c ~ c c c c ~ c ~ c ~ c ~ c c c
+c8 c c ~ c c c c ~ c ~ c ~ c c c
%\grace { d16 c16 d16 } c8
--- /dev/null
+text = \lyrics { Feel the rhy- thm }
+
+melody = \notes {
+ e4. d8 e4. c8
+}
+
+\score{
+ <
+ \context Voice \notes\relative c'' \melody
+ \context Lyrics \rhythm \melody \text
+ >
+}
--- /dev/null
+\rhythm { 4. 8 8. 16 } { c'' d e f }
--- /dev/null
+\score{
+ \context Voice \notes\relative c''{
+ c4. 8 4. 8
+ }
+}
\score{
- \notes \context Voice {
+ \notes \context Voice \relative c'' {
\times 2/3 { \times 2/3 { a8 b c} c }
\times 3/4 { c4 c4 c4 c4 }
\time 6/8;
\property Voice.tupletDirection = \down
\property Voice.tupletVisibility = 0
-\times2/3{c,4^"tupletDirection = \\textbackslash{}down" d e}
+\times2/3{c,4^"tupletDirection = down" d e}
\times2/3{[[f8 g a]]} \times2/3{b16 c d} c8 |
\property Voice.tupletVisibility = 1
\times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
\property Voice.tupletDirection = \up
\property Voice.tupletVisibility = 0
-\times2/3{c,4^"tupletDirection = \\textbackslash{}up" d e}
+\times2/3{c,4^"tupletDirection = up" d e}
\times2/3{[[f8 g a]]} \times2/3{b16 c d} c8 |
\property Voice.tupletVisibility = 1
\times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
%}
%{
-Tested Features: lyrics, interleaving lyrics and staffs, repeats
+Tested Features: lyrics, interleaving lyrics and staffs, repeats,
+ auto beaming, applying new rhythm on lyrics
%}
\version "1.1.52";
}
tekst = \lyrics{
- Al-4 tijd is Kort- jak- je ziek,2
- midden4 "in de" week maar "'s zon-" dags niet.2
- "'s Zon-"4 dags gaat ze naar de kerk,2
- met4 een boek vol zil- ver werk.2
- Al-4 tijd is Kort- jak- je ziek,2
- mid-8 den in de week4 maar "'s zon-" dags niet.2
+ Al- tijd is Kort- jak- je ziek, " "
+ midden "in de" week maar "'s zon-" dags " " niet.
+ "'s Zon-" dags gaat ze naar de kerk, " "
+ met een boek vol zil- ver " " werk. " "
+ Al- tijd is Kort- jak- je ziek, " "
+ midden "in de" week maar "'s zon-" dags " " niet.
}
%}
hegedraagjetekst = \lyrics{
- Al-4 tijd zuigt Bill Gates mijn piek,2
- "\TeX"4 is slecht- ser dan mu- ziek.2
- "'s Zon-"4 dags gaat het door een raam,2
- Weet4 dat ik me er- voor schaam.2
- Al-4 tijd zuigt Bill Gates mijn piek,2
- "\TeX"4 is slecht- ser dan mu- ziek.2
+ Al- tijd zuigt Bill Gates mijn piek, " "
+ "\TeX" is slecht- ser dan mu- " " ziek.
+ "'s Zon-" dags gaat het door een raam, " "
+ Weet dat ik me er- voor " " schaam.
+ Al- tijd zuigt Bill Gates mijn piek, " "
+ "\TeX" is slecht- ser dan mu- " " ziek.
}
texte = \lyrics{
\property Lyrics . textStyle" = "italic"
% \property Lyrics . textStyle" = "roman"
- Ah!4 vous dir- ai- je ma- man2
- Ce4 qui cau- se mon tour- ment2
- Pa-4 pa veut que je rai- son- ne
- Comm' u- ne gran- de per- son- ne
- Moi je dis que les bon- bons2
- Va-4 lent mieux que la rai- son2
+ Ah! vous dir- ai- je ma- man " "
+ Ce qui cau- se mon tour- " " ment
+ Pa- pa veut que je rai- son- ne
+ Comm' u- ne gran- de per- " " son- ne
+ Moi je dis que les bon- bons " "
+ Va- lent mieux que la rai- " " son
}
texti = \lyrics{
\property "Lyrics"."textStyle" = "roman"
- Twin-4 kle, twin- kle, lit- tle star,2
- How4 I won- der what you are.2
- Up4 a- bove the world so high,2
- Like4 a dia- mond in the sky.2
- Twin-4 kle, twin- kle, lit- tle star,2
- How4 I won- der what you are!2
+ Twin- kle, twin- kle, lit- tle star, " "
+ How I won- der what you " " are.
+ Up a- bove the world so high, " "
+ Like a dia- mond in the " " sky. " "
+ Twin- kle, twin- kle, lit- tle star, " "
+ How I won- der what you " " are!
}
textii = \lyrics{
- When4 the bla- zing sun is gone,2
- When4 he no- thing shines up- on,2
- Then4 you show your lit- tle light,2
- Twin-4 kle, twin- kle, all the night.2
- Twin-4 kle, twin- kle, lit- tle star,2
- How4 I won- der what you are!2
-
+ When the bla- zing sun is gone, " "
+ When he no- thing shines up- " " on,
+ Then you show your lit- tle light, " "
+ Twin- kle, twin- kle, all the " " night. " "
+ Twin- kle, twin- kle, lit- tle star, " "
+ How I won- der what you " " are!
}
textiii = \lyrics{
- Then4 the tra- veler in the dark2
- Thanks4 you for your ti- ny spark;2
- He4 could not see which way8 to8 go,2
- If4 you did not twin- kle so.2
- Twin-4 kle, twin- kle, lit- tle star,2
- How4 I won- der what you are!2
+ Then the tra- veler in the dark " "
+ Thanks you for your ti- ny " " spark;
+ He could not see which way to go,
+ If you did not twin- kle " " so. " "
+ Twin- kle, twin- kle, lit- tle star, " "
+ How I won- der what you " " are!
}
\score{
<
\context Staff=i \repeat semi 2 < \global\melody >
- \context Lyrics=top \context LyricVoice \repeat fold 2 {} \alternative { \tekst \texte }
+ \context Lyrics=top \context LyricVoice
+ \repeat fold 2 {}
+ \alternative {
+ \rhythm \melody \tekst
+ \rhythm \melody \texte
+ }
\context GrandStaff <
\context Staff=ii \repeat semi 2 < \global\melody >
\context Staff=iii \repeat semi 2 < \global\accompany >
>
- \context Lyrics =bottom \context LyricVoice \repeat fold 3 {}
- \alternative { \texti \textii \textiii }
+ \context Lyrics =bottom \context LyricVoice
+ \repeat fold 3 {}
+ \alternative {
+ \rhythm \melody \texti
+ \rhythm \melody \textii
+ \rhythm \melody \textiii
+ }
>
\paper{
gourlay_maxmeasures = 14.0;
{
func_ = s;
}
-
-
-#ifdef ATOM_SMOB
-int
-Atom::smob_display (SCM smob, SCM port, scm_print_state*)
-{
- Atom* a =(Atom*) SCM_CDR(smob);
- String i (a->off_.str ());
-
- scm_puts ("#<Atom ", port);
- scm_puts (i.ch_C(), port);
- gh_display (a->func_);
- scm_puts (">", port);
-
- /* non-zero means success */
- return 1;
-}
-
-
-scm_sizet
-Atom::smob_free (SCM smob)
-{
- Atom * a= (Atom*) SCM_CDR(smob);
- delete a;
- return sizeof (Atom);
-}
-
-SCM
-Atom::smob_mark (SCM smob)
-{
- Atom * a= (Atom*) SCM_CDR(smob);
- scm_gc_mark (a->func_);
- return a->font_;
-}
-
-long Atom::smob_tag_;
-
-void
-Atom::init_smob ()
-{
- static scm_smobfuns type_rec;
-
- type_rec.mark = smob_mark;
- type_rec.free = smob_free;
- type_rec.print = smob_display;
- type_rec.equalp = 0;
-
- smob_tag_ = scm_newsmob (&type_rec);
-}
-
-
-SCM
-Atom::make_smob () const
-{
- SCM smob;
- SCM_NEWCELL (smob);
- SCM_SETCAR (smob, smob_tag_);
- SCM_SETCDR (smob, this);
- return smob;
-}
-
-SCM
-Atom::make_atom (SCM outputfunc)
-{
- Atom * a= new Atom(outputfunc);
- return a->make_smob ();
-}
-
-SCM
-Atom::copy_self () const
-{
- return (new Atom (*this))->make_smob ();
-}
-
-bool
-Atom::Atom_b (SCM obj)
-{
- return(SCM_NIMP(obj) && SCM_CAR(obj) == smob_tag_);
-}
-
-Atom*
-Atom::atom_l (SCM a)
-{
- assert (Atom_b (a));
- return (Atom*) SCM_CDR(a);
-}
-
-
-ADD_GLOBAL_CTOR_WITHNAME(atomsmob, Atom::init_smob);
-#endif
-
-
Audio_element::Audio_element ()
{
+ grace_b_ = false;
}
Audio_element::~Audio_element()
{
pitch_ = p;
length_mom_ = m;
+ tied_ = 0;
transposing_i_ = transposing_i;
}
+void
+Audio_note::tie_to (Audio_note* t)
+{
+ tied_ = t;
+ Audio_note* first = t;
+ while (first->tied_)
+ first = first->tied_;
+ first->length_mom_ += length_mom_;
+ length_mom_ = 0;
+}
+
+
Audio_key::Audio_key (Key_def const& k)
{
key_ = k;
{
shortest_mom_ = mom;
consider_end_and_begin ();
+ if (!stem_l_arr_p_)
+ return;
}
shortest_mom_ = mom;
}
source file of the GNU LilyPond music typesetter
- (c) 1998--1999, 1999 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 1998--1999 Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include "chord-name-engraver.hh"
#include "global-translator.hh"
#include "warn.hh"
+Grace_iterator::~Grace_iterator ()
+{
+ // child_iter_p_ = 0;
+}
+
void
Grace_iterator::construct_children ()
{
}
Moment
-Grace_iterator::next_moment () const
+Grace_iterator::next_moment () const
+{
+ return 0;
+}
+
+Music*
+Grace_iterator::next_music_l ()
{
return 0;
}
}
void
-Grace_performer_group::announce_element (Audio_element_info inf)
+Grace_performer_group::announce_element (Audio_element_info info)
{
- announce_info_arr_.push (inf);
+ announce_info_arr_.push (info);
// do not propagate to top
- announce_to_top_.push (inf);
+ announce_to_top_.push (info);
//inf.elem_l_->set_elt_property (grace_scm_sym, SCM_BOOL_T);
+ info.elem_l_->grace_b_ = true;
}
void
#include "lily-proto.hh"
#include "lily-guile.hh"
-//#define ATOM_SMOB
-
-#ifdef ATOM_SMOB
-
-/// a symbol which can be translated, and freely copied
-class Atom {
- static long smob_tag_;
-
- static SCM smob_mark (SCM);
- static scm_sizet smob_free (SCM);
- static int smob_display (SCM, SCM, scm_print_state*);
-public:
- SCM make_smob () const;
-
- Offset off_;
- Atom (SCM s);
-
- static SCM make_atom (SCM outputfunc);
- SCM copy_self () const;
- static Atom *atom_l (SCM);
-
- /// Is #obj# a Foo?
- static bool Atom_b(SCM obj);
- static void init_smob ();
-
- SCM func_;
- SCM font_;
-};
-
-#else
-
class Atom {
public:
Atom (SCM s);
Protected_scm font_;
};
-#endif
#endif
virtual ~Audio_element ();
void print () const;
+
+ // should we use a scm list?
+ bool grace_b_;
protected:
virtual void do_print () const;
public:
Audio_note (Musical_pitch p, Moment m, int transposing_i = 0);
+ void tie_to (Audio_note*);
+
Musical_pitch pitch_;
Moment length_mom_;
+ Moment delayed_mom_;
+ Moment delayed_until_mom_;
int transposing_i_;
+ Audio_note* tied_;
};
class Audio_text : public Audio_item
class Grace_iterator : public Music_wrapper_iterator
{
public:
+ ~Grace_iterator ();
virtual void construct_children () ;
virtual void do_process_and_next (Moment);
Moment next_moment () const;
+ Music* next_music_l ();
};
struct Request;
struct Request_column;
struct Relative_octave_music;
+struct Re_rhythmed_music;
struct Repeat_engraver;
struct Repeated_music;
struct Repeated_music_iterator;
#include "direction.hh"
#include "box.hh"
-/** handy interface to symbol table
- TODO: move this into GUILE?
+/**
+ handy interface to symbol table
+ TODO: move this into GUILE?
*/
class Lookup
{
Molecule fill (Box b) const;
Molecule filledbox (Box b) const;
Molecule hairpin (Real width, Real height, bool decresc, bool continued) const;
- Molecule tuplet_bracket (Real dy, Real dx, Real thick,Real interline, Direction dir) const;
+ Molecule tuplet_bracket (Real dy, Real dx, Real gap, Real thick,Real interline, Direction dir) const;
Molecule rest (int, bool outside, String) const;
Molecule accordion (SCM arg, Real interline_f) const;
Molecule slur (Array<Offset> controls) const;
Molecule text (String style, String text, Paper_def*) const;
Molecule staff_brace (Real dy) const;
Molecule staff_bracket (Real dy) const;
- Molecule volta (Real w, Real h, Real il, bool last_b) const;
+ Molecule volta (Real h, Real w, Real thick, bool last_b) const;
Molecule special_time_signature (String, int,int, Paper_def*) const;
Molecule time_signature (int n,int d, Paper_def*) const;
/**
Turn a note off
*/
-class Midi_note_off : public Midi_item
+class Midi_note_off : public Midi_note
{
public:
Midi_note_off (Midi_note*);
- int pitch_i () const;
virtual String str () const;
Midi_note* on_l_;
#include "lily-proto.hh"
#include "moment.hh"
-struct Midi_note_event : PQueue_ent<Moment, Midi_note_off*>
+struct Midi_note_event : PQueue_ent<Moment, Midi_note*>
{
bool ignore_b_;
Midi_note_event();
/// Find the next interesting point in time.
virtual Moment next_moment() const;
+ /// Return next Music item
+ virtual Music* next_music_l ();
+
///Are we finished with this piece of music?
virtual bool ok() const;
virtual void construct_children ();
virtual Moment next_moment () const;
+ virtual Music* next_music_l ();
virtual bool ok () const;
protected:
{
public:
Musical_pitch do_relative_octave (Musical_pitch, bool);
+ Music_iterator* do_rhythm (Music_iterator*);
void add_music (Music*);
Music_list (Music_list const&);
Music_list ();
VIRTUAL_COPY_CONS(Music);
Musical_pitch do_relative_octave (Musical_pitch p, bool b);
+ Music_iterator* do_rhythm (Music_iterator*);
virtual void transpose (Musical_pitch );
virtual void compress (Moment);
void add_music (Music *music_p);
protected:
virtual Musical_pitch to_relative_octave (Musical_pitch);
+ virtual Music_iterator* to_rhythm (Music_iterator*);
virtual void do_print() const;
};
Simultaneous_music(Music_list *);
virtual Musical_pitch to_relative_octave (Musical_pitch);
+ virtual Music_iterator* to_rhythm (Music_iterator*);
virtual Moment length_mom () const;
};
VIRTUAL_COPY_CONS(Music);
virtual Musical_pitch to_relative_octave (Musical_pitch);
+ virtual Music_iterator* to_rhythm (Music_iterator*);
Request_chord();
};
virtual void construct_children () ;
virtual Moment next_moment () const;
+ virtual Music* next_music_l ();
virtual bool ok () const;
protected:
virtual Moment length_mom () const;
virtual ~Music_wrapper ();
virtual Musical_pitch to_relative_octave (Musical_pitch);
+ virtual Music_iterator* to_rhythm (Music_iterator*);
virtual void compress (Moment);
};
virtual Musical_pitch to_relative_octave (Musical_pitch);
+ virtual Music_iterator* to_rhythm (Music_iterator*);
/// The duration of this piece of music
virtual Moment length_mom () const;
#include "lily-proto.hh"
#include "lily-proto.hh"
#include "duration.hh"
+#include "musical-pitch.hh"
#include "string.hh"
#include "array.hh"
#include "input.hh"
public:
Duration default_duration_;
+ Musical_pitch default_pitch_;
Scope *default_header_p_;
bool first_b_;
int fatal_error_i_;
Simultaneous_music* get_word_element (String, Duration*);
String notename_str (Melodic_req* melodic);
void set_last_duration (Duration const *);
+ void set_last_pitch (Musical_pitch const *);
friend int yyparse (void*);
};
Music_sequence * alternatives_p_;
virtual Musical_pitch to_relative_octave (Musical_pitch);
+ virtual Music_iterator* to_rhythm (Music_iterator*);
/// The duration of this piece of music
virtual Moment length_mom () const;
virtual bool do_try_music (Music *req_l) ;
virtual void do_print () const;
virtual void do_pre_move_processing ();
+ virtual void process_acknowledged ();
+ Global_translator* global_translator_l ();
private:
Array<Note_req*> note_req_l_arr_;
Array<Audio_note*> note_p_arr_;
+ Array<Audio_note*> delayed_p_arr_;
};
#endif // NOTE_PERFORMER_HH
VIRTUAL_COPY_CONS(Music);
virtual Musical_pitch to_relative_octave (Musical_pitch);
+ virtual Music_iterator* to_rhythm (Music_iterator*);
};
*/
Moment elt_length_mom_;
bool last_b_;
+ Cons<Music>* cursor_;
public:
Request_chord_iterator ();
protected:
virtual void do_process_and_next (Moment);
virtual Moment next_moment() const;
+ virtual Music* next_music_l ();
virtual void construct_children();
virtual bool ok() const;
virtual void do_print() const;
virtual void construct_children ();
virtual Moment next_moment () const;
+ virtual Music* next_music_l ();
virtual bool ok () const;
protected:
VIRTUAL_COPY_CONS(Music);
virtual Musical_pitch to_relative_octave (Musical_pitch);
+ virtual Music_iterator* to_rhythm (Music_iterator*);
};
#endif /* TRANSPOSED_MUSIC_HH */
}
Molecule
-Lookup::tuplet_bracket (Real dy , Real dx, Real thick, Real interline_f, Direction dir) const
+Lookup::tuplet_bracket (Real dy , Real dx, Real thick, Real gap, Real interline_f, Direction dir) const
{
Molecule m;
Atom at (gh_list(tuplet_scm_sym,
- gh_double2scm (interline_f),
+ gh_double2scm (interline_f),
+ gh_double2scm (gap),
gh_double2scm (dx),
gh_double2scm (dy),
gh_double2scm (thick),
}
Molecule
-Lookup::volta (Real w, Real thick, Real interline_f, bool last_b) const
+Lookup::volta (Real h, Real w, Real thick, bool last_b) const
{
Molecule m;
Atom at (gh_list (volta_scm_sym,
+ gh_double2scm (h),
gh_double2scm (w),
gh_double2scm (thick),
gh_int2scm (last_b),
SCM_UNDEFINED));
- m.dim_[Y_AXIS] = Interval (-interline_f, interline_f);
+ m.dim_[Y_AXIS] = Interval (- h/2, h/2);
m.dim_[X_AXIS] = Interval (0, w);
m.add_atom (&at);
}
Midi_note_off::Midi_note_off (Midi_note* n)
+ : Midi_note (n->audio_l_)
{
on_l_ = n;
channel_i_ = n->channel_i_;
i += 0x10;
}
-int
-Midi_note_off::pitch_i () const
-{
- return on_l_->pitch_i ();
-}
-
String
Midi_note_off::str () const
{
e.val = new Midi_note_off (note_p);
e.key = stop_mom;
stop_note_queue.insert (e);
-
+
output_event (ptr->audio_column_l_->at_mom (), note_p);
}
}
Moment stop_mom = e.key;
- Midi_note_off* note_p = e.val;
+ Midi_note* note_p = e.val;
output_event (stop_mom, note_p);
}
source file of the GNU LilyPond music typesetter
- (c) 1998--1999, 1999 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 1998--1999 Jan Nieuwenhuizen <janneke@gnu.org>
*/
Real x_off = 0.0;
- Dimension_cache * col_ref = spanned_drul_[LEFT]->column_l ()->dim_cache_[X_AXIS];
+ // Dimension_cache * col_ref = spanned_drul_[LEFT]->column_l ()->dim_cache_[X_AXIS];
Real rx = spanned_drul_[LEFT]->absolute_coordinate (X_AXIS);
/*
if (!(spanned_drul_[LEFT] && spanned_drul_[RIGHT]))
{
programming_error ("Multi_measure_rest::get_rods (): I am not spanned!");
- return a;
+ return a;
}
- Rod r;
- r.item_l_drul_ = spanned_drul_;
- r.distance_f_ = paper_l ()->get_var ("mmrest_x_minimum");
- a.push (r);
+ Item * l = spanned_drul_[LEFT]->column_l ();
+ Item * r = spanned_drul_[RIGHT]->column_l ();
+ Item * lb = l->find_prebroken_piece (RIGHT);
+ Item * rb = r->find_prebroken_piece (LEFT);
- /*
- also set distances in case the left or right ending of the rest is
- a broken column. This is very common: it happens if the rest is in
- the beginning of the line, or at the end.
-
- TODO: merge this code with other discretionary handling code.
-
- TODO: calc mmrest_x_minimum (see brew_molecule_p ())
- */
-
- Drul_array<Item*> discretionaries;
- Direction d = LEFT;
- do
+ Item* combinations[4][2]={{l,r}, {lb,r}, {l,rb},{lb,rb}};
+ for (int i=0; i < 4; i++)
{
- Item *i = r.item_l_drul_[d]->find_prebroken_piece (-d);
- discretionaries[d] = i;
- if (i)
- {
- Rod k (r);
-
- k.item_l_drul_[d] = i;
- a.push (k);
- }
- }
- while ((flip (&d))!= LEFT);
-
- if (discretionaries[LEFT] && discretionaries[RIGHT])
- {
- Rod k(r);
- k.item_l_drul_ = discretionaries;
- a.push (k);
- }
+ Item * l = combinations[i][0];
+ Item *r = combinations[i][1];
+ if (!l || !r)
+ continue;
+ Rod rod;
+ rod.item_l_drul_[LEFT] = l;
+ rod.item_l_drul_[RIGHT] = r;
+ /*
+ should do something more advanced.
+ */
+ rod.distance_f_ = l->extent (X_AXIS)[BIGGER] - r->extent (X_AXIS)[SMALLER]
+ + paper_l ()->get_var ("mmrest_x_minimum");
+
+ a.push (rod);
+ }
+
return a;
}
return 0;
}
+Music*
+Music_iterator::next_music_l ()
+{
+ return 0;
+}
void
Music_iterator::process_and_next (Moment m)
return 0;
}
+Music*
+Music_list_iterator::next_music_l ()
+{
+ return 0;
+}
+
bool
Music_list_iterator::ok () const
{
*/
#include "music-list.hh"
+#include "music-wrapper.hh"
#include "musical-pitch.hh"
#include "request.hh"
#include "musical-request.hh"
+#include "music-iterator.hh"
#include "main.hh"
#include "killing-cons.tcc"
return cumulative_length ();
}
-
Musical_pitch
Simultaneous_music::to_relative_octave (Musical_pitch p)
{
return do_relative_octave (p, true);
}
+Music_iterator*
+Simultaneous_music::to_rhythm (Music_iterator* r)
+{
+ return do_rhythm (r);
+}
+
Musical_pitch
Music_sequence::do_relative_octave (Musical_pitch p, bool b)
{
return music_p_list_p_->do_relative_octave (p, b);
}
+Music_iterator*
+Music_sequence::do_rhythm (Music_iterator* r)
+{
+ return music_p_list_p_->do_rhythm (r);
+}
+
Musical_pitch
Music_list::do_relative_octave (Musical_pitch last, bool ret_first)
{
return retval;
}
+Music_iterator*
+Music_list::do_rhythm (Music_iterator* r)
+{
+ for (Cons<Music> *i = head_; i ; i = i->next_)
+ {
+ r = i->car_->to_rhythm (r);
+ }
+ return r;
+}
Music_list::Music_list (Music_list const &s)
: Cons_list<Music> (s)
return last;
}
+Music_iterator*
+Request_chord::to_rhythm (Music_iterator* it)
+{
+ for (Cons<Music>* i = music_p_list_p_->head_; i ; i = i->next_)
+ {
+ if (Rhythmic_req* r= dynamic_cast <Rhythmic_req*> (i->car_))
+ {
+ for (Music*m = it->next_music_l (); m; m = it->next_music_l ())
+ {
+#if 0
+ // is it sane to assume we don't want rests on lyrics/in rhythm?
+ if (dynamic_cast <Rest_req*> (r)
+ || dynamic_cast <Multi_measure_rest_req*> (r)
+ || dynamic_cast <Skip_req*> (r))
+ {
+ continue;
+ }
+#endif
+ if (Rhythmic_req* d= dynamic_cast <Rhythmic_req*> (m))
+ {
+ r->duration_ = d->duration_;
+ return it;
+ }
+ }
+ }
+ }
+ return it;
+}
Music_list::Music_list ()
{
return do_relative_octave (p, false);
}
+Music_iterator*
+Music_sequence::to_rhythm (Music_iterator* r)
+{
+ return do_rhythm (r);
+}
Moment
Music_sequence::maximum_length () const
return child_iter_p_->next_moment ();
}
+Music*
+Music_wrapper_iterator::next_music_l ()
+{
+ return child_iter_p_->next_music_l ();
+}
+
return element_p_->length_mom ();
}
-
Musical_pitch
Music_wrapper::to_relative_octave (Musical_pitch p)
{
return element_p_->to_relative_octave (p);
}
+Music_iterator*
+Music_wrapper::to_rhythm (Music_iterator* r)
+{
+ return element_p_->to_rhythm (r);
+}
+
Music*
Music_wrapper::element_l () const
{
return m;
}
+Music_iterator*
+Music::to_rhythm (Music_iterator* r)
+{
+ return r;
+}
+
void
Music::transpose (Musical_pitch )
{
{"remove", REMOVE},
{"repeat", REPEAT},
{"repetitions", REPETITIONS},
+ {"rhythm", RHYTHM},
{"scm", SCM_T},
{"scmfile", SCMFILE},
{"score", SCORE},
source_l_ = source_l;
lexer_p_ = 0;
default_duration_.durlog_i_ = 2;
+ default_pitch_ = Musical_pitch (5*7, 0);
error_level_i_ = 0;
fatal_error_i_ = 0;
exit_status_i_ = 1;
}
-
-
void
My_lily_parser::set_last_duration (Duration const *d)
{
default_duration_ = *d;
}
+void
+My_lily_parser::set_last_pitch (Musical_pitch const* p)
+{
+ default_pitch_ = *p;
+}
+
// junk me
Simultaneous_music*
My_lily_parser::get_word_element (String s, Duration * duration_p)
#include "note-performer.hh"
#include "musical-request.hh"
#include "audio-item.hh"
+#include "audio-column.hh"
+#include "global-translator.hh"
#include "debug.hh"
if (!prop.empty_b () && prop.isnum_b ())
transposing_i = prop;
- while(note_req_l_arr_.size ())
+ while (note_req_l_arr_.size ())
{
Note_req* n = note_req_l_arr_.pop ();
Audio_note* p = new Audio_note (n->pitch_, n->length_mom (), transposing_i);
}
}
+void
+Note_performer::process_acknowledged ()
+{
+}
+
+Global_translator*
+Note_performer::global_translator_l ()
+{
+ Translator *t = this;
+ Global_translator *global_l =0;
+ do
+ {
+ t = t->daddy_trans_l_ ;
+ global_l = dynamic_cast<Global_translator*> (t);
+ }
+ while (!global_l);
+
+ return global_l;
+}
+
+
void
Note_performer::do_pre_move_processing ()
{
+
+ // why don't grace notes show up here?
+ // --> grace notes effectively do not get delayed
+ Global_translator* global_l = global_translator_l ();
+ for (int i=0; i < note_p_arr_.size (); i++)
+ {
+ Audio_note* n = note_p_arr_[i];
+ if (Moment m= n->delayed_until_mom_)
+ {
+ global_l->add_moment_to_process (m);
+ delayed_p_arr_.push (n);
+ note_p_arr_[i] = 0;
+ note_p_arr_.del (i);
+ i--;
+ }
+ }
+
+ Moment now = now_mom ();
for (int i=0; i < note_p_arr_.size (); i++)
{
play_element (note_p_arr_[i]);
}
note_p_arr_.clear ();
note_req_l_arr_.clear ();
+ for (int i=0; i < delayed_p_arr_.size (); i++)
+ {
+ Audio_note* n = delayed_p_arr_[i];
+ if (n->delayed_until_mom_ <= now)
+ {
+ play_element (n);
+ delayed_p_arr_[i] = 0;
+ delayed_p_arr_.del (i);
+ i--;
+ }
+ }
}
bool
#include "mudela-version.hh"
#include "scope.hh"
#include "relative-music.hh"
+#include "re-rhythmed-music.hh"
#include "transposed-music.hh"
#include "time-scaled-music.hh"
#include "new-repeated-music.hh"
%token REMOVE
%token REPEAT
%token REPETITIONS
+%token RHYTHM
%token SCM_T
%token SCMFILE
%token SCORE
/* escaped */
%token E_EXCLAMATION E_SMALLER E_BIGGER E_CHAR
-%type <i> dots exclamations questions
+%type <i> exclamations questions
%token <i> DIGIT
%token <pitch> NOTENAME_PITCH
%token <pitch> TONICNAME_PITCH
%type <i> script_dir
%type <i> optional_modality
%type <id> identifier_init
-%type <duration> steno_duration notemode_duration
+%type <duration> steno_duration optional_notemode_duration
%type <duration> entered_notemode_duration explicit_duration
%type <intvec> int_list
%type <reqvec> pre_requests post_requests
%type <pitch> steno_tonic_pitch
%type <pitch_arr> pitch_list
-%type <music> chord notemode_chord
+%type <music> chord
%type <pitch_arr> chord_additions chord_subtractions chord_notes
-%type <pitch> chord_addsub chord_note chord_inversion notemode_chord_inversion
+%type <pitch> chord_addsub chord_note chord_inversion
%type <midi> midi_block midi_body
%type <duration> duration_length
%type <scalar> scalar
-%type <music> Music relative_music Sequential_music Simultaneous_music Music_sequence
+%type <music> Music Sequential_music Simultaneous_music Music_sequence
+%type <music> relative_music re_rhythmed_music
%type <music> property_def translator_change
%type <music_list> Music_list
%type <paper> paper_block paper_def_body
-
%left '-' '+'
%left '*' '/'
%left UNARY_MINUS
;
-optional_dot:
- /* empty */
- | '.'
- ;
-
paper_def_body:
/* empty */ {
Paper_def *p = THIS->default_paper_p ();
}
| MIDI_IDENTIFIER {
$$ = $1-> access_content_Midi_def (true);
+ }
+ | midi_body assignment semicolon {
+
}
| midi_body translator_spec_block {
$$-> assign_translator ($2);
THIS->lexer_p_->pop_state ();
}
| relative_music { $$ = $1; }
+ | re_rhythmed_music { $$ = $1; }
;
relative_music:
}
;
+re_rhythmed_music:
+ RHYTHM Music Music {
+ $$ = new Re_rhythmed_music ($3, $2);
+ }
+ ;
+
translator_change:
TRANSLATOR STRING '=' STRING {
Change_translator * t = new Change_translator;
;
property_def:
- PROPERTY STRING '.' STRING '=' scalar {
+ PROPERTY STRING '.' STRING '=' scalar {
Translation_property *t = new Translation_property;
t-> var_str_ = *$4;
;
musical_pitch:
- steno_musical_pitch
- | explicit_musical_pitch
+ steno_musical_pitch {
+ $$ = $1;
+ THIS->set_last_pitch ($1);
+ }
+ | explicit_musical_pitch {
+ $$ = $1;
+ THIS->set_last_pitch ($1);
+ }
;
explicit_duration:
;
entered_notemode_duration:
- dots {
- $$ = new Duration (THIS->default_duration_);
- if ($1)
- $$->dots_i_ = $1;
- }
- | steno_duration {
+ steno_duration {
THIS->set_last_duration ($1);
}
;
-notemode_duration:
- entered_notemode_duration {
+optional_notemode_duration:
+ {
+ $$ = new Duration (THIS->default_duration_);
+ }
+ | entered_notemode_duration {
$$ = $1;
}
;
simple_element:
- musical_pitch exclamations questions notemode_duration {
+ musical_pitch exclamations questions optional_notemode_duration {
if (!THIS->lexer_p_->note_state_b ())
THIS->parser_error (_ ("have to be in Note mode for notes"));
$$ = v;
}
- | RESTNAME notemode_duration {
+ /*
+ This rhythm option introduces a lot of shift/reduce conflicts;
+ ie, for every optional_notemode_duration.
+ However, we always want the default behaviour, which is to shift:
+ if an optional_notemode_duration is allowed, a following duration
+ is to be taken as this default duration. Thus
+
+ c4 c 8 4
+
+ are three notes, ie: c4 c8 c4.
+ Parsing whitespace is a snaky thing to do.
+ * /
+ | entered_notemode_duration {
+ if (!THIS->lexer_p_->note_state_b ())
+ THIS->parser_error (_ ("have to be in Note mode for notes"));
+
+ Note_req *n = new Note_req;
+
+ n->pitch_ = THIS->default_pitch_;
+ n->duration_ = *$1;
+ delete $1;
+
+ Simultaneous_music*v = new Request_chord;
+ v->set_spot (THIS->here_input ());
+ n->set_spot (THIS->here_input ());
+
+ v->add_music (n);
+
+ $$ = v;
+ }
+*/
+ | RESTNAME optional_notemode_duration {
$$ = THIS->get_rest_element (*$1, $2);
delete $1; // delete notename
}
- | MEASURES notemode_duration {
+ | MEASURES optional_notemode_duration {
Multi_measure_rest_req* m = new Multi_measure_rest_req;
m->duration_ = *$2;
delete $2;
velt_p->add_music (m);
$$ = velt_p;
}
- | REPETITIONS notemode_duration {
+ | REPETITIONS optional_notemode_duration {
Repetitions_req* r = new Repetitions_req;
r->duration_ = *$2;
delete $2;
velt_p->add_music (r);
$$ = velt_p;
}
- | STRING notemode_duration {
+ | STRING optional_notemode_duration {
if (!THIS->lexer_p_->lyric_state_b ())
THIS->parser_error (_ ("have to be in Lyric mode for lyrics"));
$$ = THIS->get_word_element (*$1, $2);
THIS->parser_error (_ ("have to be in Chord mode for chords"));
$$ = $1;
}
- | '@' notemode_chord '@' {
- if (!THIS->lexer_p_->note_state_b ())
- THIS->parser_error (_ ("have to be in Note mode for @chords"));
- $$ = $2;
- }
;
chord:
- steno_tonic_pitch notemode_duration chord_additions chord_subtractions chord_inversion {
+ steno_tonic_pitch optional_notemode_duration chord_additions chord_subtractions chord_inversion {
$$ = THIS->get_chord (*$1, $3, $4, $5, *$2);
};
-notemode_chord:
- steno_musical_pitch notemode_duration chord_additions chord_subtractions notemode_chord_inversion {
- $$ = THIS->get_chord (*$1, $3, $4, $5, *$2);
- };
-
-
chord_additions:
{
$$ = new Array<Musical_pitch>;
;
chord_notes:
- {
+ chord_addsub {
$$ = new Array<Musical_pitch>;
+ $$->push (*$1);
}
- | chord_notes chord_addsub {
+ | chord_notes '.' chord_addsub {
$$ = $1;
- $$->push (*$2);
+ $$->push (*$3);
}
;
chord_addsub:
- chord_note optional_dot
- | CHORDMODIFIER_PITCH optional_dot
+ chord_note
+ | CHORDMODIFIER_PITCH
;
chord_inversion:
}
;
-notemode_chord_inversion:
- {
- $$ = 0;
- }
- | '/' steno_musical_pitch {
- $$ = $2
- }
- ;
-
chord_note:
unsigned {
$$ = new Musical_pitch;
;
-
-
-dots:
- { $$ = 0; }
- | dots '.' { $$ ++; }
- ;
-
-
-
exclamations:
{ $$ = 0; }
| exclamations '!' { $$ ++; }
return last_pitch_;
}
+Music_iterator*
+Relative_octave_music::to_rhythm (Music_iterator* r)
+{
+ return element_l ()->to_rhythm (r);
+}
Relative_octave_music::Relative_octave_music(Music*p,Musical_pitch def)
: Music_wrapper (p)
{
- last_pitch_ = element_l()->to_relative_octave (def);
+ last_pitch_ = element_l ()->to_relative_octave (def);
}
void
return p;
}
+Music_iterator*
+Repeated_music::to_rhythm (Music_iterator* r)
+{
+ if (repeat_body_p_)
+ r = repeat_body_p_->to_rhythm (r);
+
+ if (alternatives_p_)
+ r = alternatives_p_->do_rhythm (r);
+ return r;
+}
+
void
Repeated_music::transpose (Musical_pitch p)
Request_chord_iterator::Request_chord_iterator ()
{
last_b_ = false;
+ // cursor_ = elt_l ()->music_p_list_p_->head_;
+ cursor_ = 0;
}
return (elt_length_mom_ && !last_b_) || first_b_;
}
-
-
Moment
Request_chord_iterator::next_moment() const
{
return m;
}
+Music*
+Request_chord_iterator::next_music_l ()
+{
+ if (first_b_)
+ {
+ cursor_ = elt_l ()->music_p_list_p_->head_;
+ first_b_ = false;
+ }
+ else
+ {
+ if (cursor_)
+ cursor_ = cursor_->next_;
+ }
+ if (cursor_)
+ return cursor_->car_;
+ else
+ return 0;
+}
+
void
Request_chord_iterator::do_print() const
{
return iter_p_->next_moment() + here_mom_;
}
+Music*
+Sequential_music_iterator::next_music_l ()
+{
+ if (!iter_p_)
+ return 0;
+
+ while (1)
+ {
+ if (Music* m = iter_p_->next_music_l ())
+ {
+ return m;
+ }
+ else
+ {
+ // urg FIXME: grace-iterator::next_music_l () fools me!
+ if (dynamic_cast<Grace_iterator*> (iter_p_))
+ iter_p_ = 0;
+ leave_element ();
+
+ if (cursor_)
+ {
+ start_next_element ();
+ set_sequential_music_translator ();
+ }
+ else
+ {
+ delete iter_p_;
+ iter_p_ = 0;
+ return 0;
+ }
+ }
+ }
+}
+
bool
Sequential_music_iterator::ok() const
{
for (int i=0; i< tie_p_arr_.size (); i++)
{
//play_element (tie_p_arr_[i]);
- /*
- urg.
- doesn't work for c ~ c ~ c
- */
- tie_p_arr_[i]->note_l_drul_[LEFT]->length_mom_ +=
- tie_p_arr_[i]->note_l_drul_[RIGHT]->length_mom_;
- tie_p_arr_[i]->note_l_drul_[RIGHT]->length_mom_ = 0;
- }
+ tie_p_arr_[i]->note_l_drul_[RIGHT]->tie_to (tie_p_arr_[i]->note_l_drul_[LEFT]);
+ }
tie_p_arr_.clear ();
}
p->transpose (pit);
}
-
-
void
Transposed_music::do_print () const
{
return p;
}
+Music_iterator*
+Transposed_music::to_rhythm (Music_iterator* r)
+{
+ return r;
+}
+
}
/*
- TODO. We should control the gap for lookup from here.
+ TODO.
*/
Molecule*
Tuplet_spanner::do_brew_molecule_p () const
Real thick = paper_l ()->get_realvar (tuplet_thick_scm_sym);
if (bracket_visibility)
{
- mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, interline, dir_));
+ Real gap = paper_l () -> get_var ("tuplet_spanner_gap");
+
+ mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, interline, dir_));
}
if (number_visibility)
Real dx = internote_f;
Real w = extent (X_AXIS).length () - dx;
- Molecule volta (lookup_l ()->volta (w, t, interline_f, last_b_));
- Real h = volta.dim_.y ().length ();
+ Real h = paper_l()->get_var ("volta_spanner_height");
+ Molecule volta (lookup_l ()->volta (h, w, t, last_b_));
+
Molecule num (lookup_l ()->text ("volta", number_str_, paper_l ()));
Real dy = bar_arr_.top ()->extent (Y_AXIS) [UP] >
barthick_thin = 1.6*\staffline;
barthick_score = 1.6*\staffline;
+tuplet_spanner_gap = 2.0 * \interline;
tuplet_thick = 1.0*\staffline;
volta_thick = 1.6*\staffline;
+volta_spanner_height = 2.0 *\interline;
% relative thickness of thin lines 1.6 : 1 : 0.8
stemthickness = 0.8*\staffline;
% deprecated!
postBreakPadding = 0.0;
+% optical correction amount.
stemSpacingCorrection = 0.5*\interline;
+
+
+
+
\include "engraver.ly";
%
% setup for Request->Element conversion. Guru-only
%
-\translator {
+StaffContext = \translator {
\type "Staff_performer";
\name Staff;
\accepts Voice;
\consists "Key_performer";
\consists "Time_signature_performer";
-}
+};
+\translator { \StaffContext }
%% urg, why (needs praeludium-*.ly) these?
\translator
\consists "Note_performer";
\name VoiceThree;
}
-\translator
-{
+\translator {
\type "Performer_group_performer";
\consists "Note_performer";
\name VoiceOne;
}
-\translator
-{
+VoiceContext = \translator {
\type "Performer_group_performer";
\name Voice;
+% All notes fall to Grace if you leave Thread out (huh?)
+ \consists "Grace_position_performer";
+ \accepts Thread;
+ \accepts Grace;
+};
+\translator { \VoiceContext }
+
+GraceContext = \translator {
+ \type "Performer_group_performer";
+ \name Thread;
\consists "Note_performer";
\consists "Tie_performer";
-% \accepts Grace;
-}
+};
+\translator { \GraceContext }
\translator {
\type "Grace_performer_group";
- \name "Grace";
+ \name Grace;
\consists "Note_performer";
\consists "Tie_performer";
weAreGraceContext = "1";
}
-\translator
-{
+GrandStaffContext = \translator {
\type "Performer_group_performer";
- \accepts Staff;
\name GrandStaff;
-}
+ \accepts Staff;
+};
+\translator { \GrandStaffContext }
-\translator {\type "Performer_group_performer";
- \accepts Staff; \name "PianoStaff";}
+PianoStaffContext = \translator {
+ \type "Performer_group_performer";
+ \name "PianoStaff";
+ \accepts Staff;
+};
+\translator { \PianoStaffContext }
\translator {
\type "Performer_group_performer";
\consists "Lyric_performer";
-\name LyricVoice;
+ \name LyricVoice;
}
\translator{
\name Lyrics;
\consists "Time_signature_performer";
}
-\translator
-{
+\translator {
\type Performer_group_performer;
\name StaffGroup;
\accepts Staff;
}
-\translator {
- \type "Score_performer";
+ScoreContext = \translator {
+ \type "Score_performer";
\name Score;
instrument = "bright acoustic";
\accepts StaffGroup;
\accepts ChoirStaff;
\consists "Swallow_performer";
-}
+};
+\translator { \ScoreContext }
Begin3
Titel: LilyPond
-Versie: 1.1.53
-Inschrijf datum: 05JUL99
+Versie: 1.1.54
+Inschrijf datum: 08JUL99
Beschrijving: @FLAPTEKST@
Trefwoorden: muziek typezetten midi notatie
Auteur: hanwen@stack.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Onderhouden door: hanwen@cs.ruu.nl (Han-Wen Nienhuys)
Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
- 770k lilypond-1.1.53.tar.gz
+ 770k lilypond-1.1.54.tar.gz
Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.53.tar.gz
+ 770k lilypond-1.1.54.tar.gz
Copi-eer voorwaarden: GPL
End
Begin3
Title: LilyPond
-Version: 1.1.53
-Entered-date: 05JUL99
+Version: 1.1.54
+Entered-date: 08JUL99
Description:
LilyPond is the GNU Project music typesetter. This program can print
beautiful sheet music from a music definition file. It can also play
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 770k lilypond-1.1.53.tar.gz
+ 770k lilypond-1.1.54.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.53.tar.gz
+ 770k lilypond-1.1.54.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.1.53
+Version: 1.1.54
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.53.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.54.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
melody = \notes\relative c''{
\clef violin;
\property Voice.verticalDirection = 1
+ \property Voice.graceFraction = "1/4"
r2 r r
r2 r r
r4 a'8--(\< a-- a-- a-- c-- \!b-- a--\> gis f \!e
\property Voice.verticalDirection = 1
\property Voice.scriptVerticalDirection = 1
\melody
- }
+ }
\context AutoSwitchContext \accompany
- >
+ >
}
\paper {
gourlay_maxmeasures = 4.;
}
\translator {
\ScoreContext
- \accepts AutoSwitchGrandStaff;
- }
+ \accepts "AutoSwitchGrandStaff";
+ }
\translator{
\type "Engraver_group_engraver";
\name AutoSwitchGrandStaff;
slurVerticalDirection = 1;
verticalDirection = -1;
beamAutoEnd = "1/2";
- }
+ }
\translator {
\type "Engraver_group_engraver";
- \name "AutoSwitchContext";
+ \name AutoSwitchContext;
\consists "Staff_switching_translator";
- }
}
+ }
\midi {
\tempo 4 = 54;
+ \translator {
+ \ScoreContext
+ \accepts "AutoSwitchGrandStaff";
+ }
+ \translator {
+ \type "Performer_group_performer";
+ \name AutoSwitchGrandStaff;
+ \accepts "AutoSwitchContext";
+ \accepts "Staff";
+ }
+ \translator {
+ \type "Staff_performer";
+ \name AutoSwitchContext;
+ \accepts "Voice";
+ \consists "Key_performer";
+ \consists "Time_signature_performer";
+ }
}
}
}
%{
- Tested Features@ multivoice accents lyrics chords piano music
+ Tested Features: multivoice accents lyrics chords piano music
multiple \paper{}s in one \score
Note: Original key F.
%}
e2 r4 |
}
-lyricVerse1 = \lyrics{
-% 5
- \times 2/3 { Lei-4 se8 } fleh-4. en8 |
- \times 2/3 { mei-4 ne8 } Lie-4 der8 " "8 |
- Durch4. die8 \times 2/3 { Nacht4 zu8 } |
- dir;2 " "4 |
- " "2.*2
-%{ " "4 " " " " |
- " " " " " " |%}
-% 11
- \times 2/3 { In4 den8 } stil-4. len8 |
- \times 2/3 { Hain4 her-8 } nie-4. der8 |
- Lieb-4. chen,8 \times 2/3 { komm4 zu8 } |
- mir!2 " "4 |
- " "2.*2
-%{ " "4 " " " " |
- " " " " " " |%}
-% 17
- Fl\"us-8. ternd16 schlan-4. ke8 |
- Wip-8. fel16 rau-4. schen8 |
- \times 2/3 { In4 des8 } Mon-4. des8 |
- Licht;2. |
- \times 2/3 { In4 des8 } Mon-4. des8 |
- Licht;2. |
-% 23
- Des8. Ver-16 r\"a-4. thers8 |
- feind-8. lich16 Lau-4. schen8 |
- \times 2/3 { F\"urch-4 te8 } Hol-4. de8 |
- nicht2. |
- \times 2/3 { f\"urch-4 te8 } Hol-4. de8 |
- nicht.2. |
+lyricVerseOne = \lyrics{
+ Lei- " " se fleh- en mei- " " ne Lie- der " "
+ Durch die Nacht " " zu dir; " "
+ " "
+ " "
+ In " " den stil- len Hain " " her- nie- der
+ Lieb- chen, komm " " zu mir! " "
+ " "
+ " "
+ Fl\"us- ternd schlan- ke Wip- fel rau- schen
+ In " " des Mon- des Licht,
+ In " " des Mon- des Licht;
+
+ Des Ver- r\"a- ters feind- lich Lau- schen
+ F\"urch- " " te, Hol- de, nicht,
+ f\"urch- " " te, Hol- de, nicht.
}
-lyricVerse2 = \lyrics{
-% 5
- \times 2/3 { H\"orst4 die8 } Nach-4. ti-8
- \times 2/3 { gal-4 len8 } schla-4 gen?8 " "8
- ach!4. sie8 \times 2/3 { fleh-4 en8 }
- dich,2 " "4
- " "2.*2
-%{ " "4 " " " "
- " "4" " " "
-%}
-% 11
- \times 2/3 { Mit4 der8 } T\"o-4. ne8
- \times 2/3 { s\"u-4 "\ss en"8 } Kla-4. gen8
- Fleh-4. en8 \times 2/3 { sie4 f\"ur8 }
- mich2 " "4
- " "2.*2
-%{ " "4" " " "
- " "4" " " "
-%}
-% 17
- Sie-8. ver-16 stehn4. des8
- Bus-8. ens16 Seh-4. nen8
- \times 2/3 { Ken-4 nen8 } Lieb-4. es-8
- schmerz,2.
- \times 2/3 { Ken-4 nen8 } Lieb-4. es-8
- schmerz.2.
+lyricVerseTwo = \lyrics{
+ H\"orst " " die Nach- ti- gal- " " len schla- gen? " "
+ Ach! sie fleh- " " en dich, " "
+ " "
+ " "
+ Mit " " der T\"o- ne s\"u- " " "\ss en" Kla- gen
+ Fleh- en sie " " f\"ur mich. " "
+ " "
+ " "
+ Sie- ver- "steh'n" des Bus- ens Seh- nen
+ Ken- " " nen Lieb- es- schmerz,
+ Ken- " " nen Lieb- es- schmerz.
-% 23
- R\"uh-8. ren16 mit4. den8
- Sil-8. ber-16 t\"o-4. nen8
- \times 2/3 { jed-4 es8 } wei-4. che8
- Herz,2.
- \times 2/3 { jed-4 es8 } wei-4. che8
- Herz.2.
+ R\"uh- ren mit den Sil- ber- t\"o- nen
+ Jed- " " es wei- che Herz,
+ Jed- " " es wei- che Herz.
}
lyricThrough = \lyrics{
-% 37
- La\ss8. auch16 dir8. die16 Brust8. be-16 |
- we-4 gen " " |
- Lieb-4. chen,8 h\"o-8. re16 |
- mich!2 " "4 |
- Be-4. bend8 \times 2/3 { harr'4 ich8} |
- dir8. ent-16 ge-4 gen!8 " "8 |
- " "2. |
- " "2. |
- \times 2/3 { Komm4 be-8 } gl\"u4. cke8 |
- mich!2. |
- \times 2/3 { Komm4 be-8 } gl\"u4. cke8 |
- mich,2. __ |
- " "2 be-4 |
- gl\"u-2. |
- cke2. |
- mich!2 " "4 |
+ La\ss auch dir die Brust be- we- gen " "
+ Lieb- chen, h\"o- re mich! " "
+ Be- bend harr' " " ich dir ent- ge- gen! " "
+ " "
+ " "
+ Komm, " " be- "gl\"uk-" ke mich!
+ Komm, " " be- "gl\"uk-" ke mich, __ " " " "
+ Be- "gl\"uk-" ke mich!
}
trebleIntro = \notes\relative c{
- r8^"\bf m\\\"a\\\ss ig"\pp <g'-. c-.> <c-. es-.> <g-. c-.> <c-. es-.> <g-. c-.> |
+ r8^"\bf M\\\"a\\ss ig"\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
}
-trebleVerse1 = \notes\relative c{
+trebleVerseOne = \notes\relative c{
%5
r8 <g' c> <c es> <g c> <c es> <g c> |
r8 <f c'> <c' d> <f, c'> <c' d> <f, c'> |
<g2 g'> r4 |
}
-bassVerse1 = \notes\relative c{
+bassVerseOne = \notes\relative c{
% \clef bass;
\property Voice.dynamicDir=1
%5
}
-lyricFour = \lyrics{
- " "2.*4
-%{ " "4 " " " "
- " " " " " "
- " " " " " "
- " " " " " "%}
-}
-
-allLyrics = {
- \time 3/4;
-% \skip 4 * 12;
- \lyricFour
- \lyricVerse1
-% \skip 4 * 24;
- \lyricFour
- \lyricFour
- \lyricVerse2
- \lyricThrough
+allLyrics = \lyrics {
+ " "4 * 12
+ \rhythm \vocalVerse \lyricVerseOne
+ " "4 * 12
+ " "4 * 12
+ \rhythm \vocalVerse \lyricVerseTwo
+ \rhythm \vocalThrough \lyricThrough
}
lyricStaff = \context Lyrics = lyric<
\clef treble;
% certainly no auto-beaming for vocals
\property Voice.beamAuto=0
-
\property Voice.dynamicDir = \up
\skip 4 * 12;
\clef treble;
\property Voice.beamAutoBegin=0
\trebleIntro
- \trebleVerse1
+ \trebleVerseOne
\trebleEentje
- \trebleVerse1
+ \trebleVerseOne
\trebleThrough
}
bass = {
\clef bass;
\bassIntro
- \bassVerse1
+ \bassVerseOne
\bassEentje
- \bassVerse1
+ \bassVerseOne
\bassThrough
}
{ \notes { \grandStaff } }
>
\paper {
-% \translator { \OrchestralScoreContext }
-% \translator { \OrchestralPartStaffContext }
\translator { \HaraKiriStaffContext }
}
-%broken 1.1.51
-% \midi{
-% \tempo 4 = 54;
-% }
+ \midi{
+ \tempo 4 = 54;
+ }
}
% round cappings
1 setlinecap
-% URG
-% staffheight 4 div /interline exch def
-% interline 3 div /bracket_b exch def
-% interline 2 mul /bracket_w exch def
-% stafflinethickness 2 mul /bracket_t exch def
-% interline 1.5 mul /bracket_v exch def
-% bracket_v /bracket_u exch def
-% 50 /bracket_alpha exch def
/draw_beam % width slope thick
{
1 copy mul exch 1 copy mul add sqrt
} bind def
-/draw_tuplet % height dx dy thick dir
+/draw_tuplet % height gap dx dy thick dir
{
% urg: the only Level-2 PS, check effect in print
% true setstrokeadjust
1 setlinejoin
/tuplet_dy exch def
/tuplet_dx exch def
+ /tuplet_gapx exch def
/tuplet_h exch def
- staffheight 2 div /tuplet_gapx exch def
tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def
stroke
} bind def
-/draw_volta % w thick last
+/draw_volta % h w thick last
{
/last exch def
setlinewidth
/volta_w exch def
- staffheight 2 div /volta_h exch def
+ /volta_h exch def
% urg: the only Level-2 PS, check effect in print
% true setstrokeadjust
1 setlinecap
(string-append (number->string (cadr c)) " ")))
-(define
- (font i)
+(define (font i)
(string-append
"font"
(make-string 1 (integer->char (+ (char->integer #\A) i)))
(define (text s)
(string-append "\\hbox{" (output-tex-string s) "}"))
- (define (tuplet ht dx dy thick dir)
- (embedded-ps ((ps-scm 'tuplet) ht dx dy thick dir)))
+ (define (tuplet ht gapx dx dy thick dir)
+ (embedded-ps ((ps-scm 'tuplet) ht gapx dx dy thick dir)))
- (define (volta w thick last)
- (embedded-ps ((ps-scm 'volta) w thick last)))
+ (define (volta h w thick last)
+ (embedded-ps ((ps-scm 'volta) h w thick last)))
;; TeX
;; The procedures listed below form the public interface of TeX-scm.
(define (cached-fontname i)
(string-append
- " lilyfont"
+ "lilyfont"
(make-string 1 (integer->char (+ 65 i)))))
(define (select-font font-name)
(define (header-end) "")
(define (lily-def key val)
- (string-append
- "/" key " {" val "} bind def\n"))
+ (if (string=? (substring key 0 (string-length "mudelapaper") ) "mudelapaper")
+ (string-append "/" key " {" val "} bind def\n")
+ (string-append "/" key " (" val ") def\n")
+ )
+ )
(define (header creator generate)
(string-append
"%!PS-Adobe-3.0\n"
(string-append "(" s ") show "))
- (define (volta w thick last)
+ (define (volta h w thick last)
(string-append
- (numbers->string (list w thick (inexact->exact last)))
+ (numbers->string (list h w thick (inexact->exact last)))
" draw_volta"))
- (define (tuplet ht dx dy thick dir)
+ (define (tuplet ht gap dx dy thick dir)
(string-append
- (numbers->string (list ht dx dy thick (inexact->exact dir)))
+ (numbers->string (list ht gap dx dy thick (inexact->exact dir)))
" draw_tuplet"))
header = {}
+lyrics = []
+voices = []
global_voice_stuff = []
default_len = 4
global_key = [0] * 7 # UGH
+names = ["One", "Two", "Three"]
DIGITS='0123456789'
HSPACE=' \t'
pass
+def dump_global ():
+ print ("global = \\notes{")
+ for i in global_voice_stuff:
+ print (i);
+ print ("}")
+
def dump_header (hdr):
print '\\header {'
print '%s = "%s";\n'% (k,hdr[k])
print '}'
+def dump_lyrics ():
+ for i in range (len (lyrics)):
+ print ("verse%s = \\lyrics {" % names [i])
+ print (lyrics [i])
+ print ("}")
+
+def dump_voices ():
+ for i in range (len (voices)):
+ print ("voice%s = \\notes {" % names [i])
+ print (voices [i])
+ print ("}")
+
+def dump_score ():
+ print ("\\score{")
+ print (" \\notes<")
+ print (" \\global")
+ for i in range (len (voices)):
+ print (" \\context Staff=%s \\voice%s" %
+ (names [i], names [i]))
+ for i in range (len (lyrics)):
+ j = i
+ if j >= len (voices):
+ j = len (voices) - 1
+ print (" \\context Lyrics=%s \\rhythm \\voice%s \\verse%s" %
+ (names [i], names [j], names [i]))
+ print (" >")
+ dump_header (header)
+ #print "%%%s" % global_voice_stuff, 1
+ print ("}")
+
def set_default_length (s):
m = re.search ('1/([0-9]+)', s)
if m:
n = i.tell ()
i.seek (0,0)
except:
- print 'can\'t open file: ' + f + '\n'
+ sys.stderr.write ("can't open file: %s\n" % f)
return ''
s = i.read (n)
if len (s) <= 0:
- print 'gulped empty file: ' + f + '\n'
+ sys.stderr.write ("gulped emty file: %s\n" % f)
i.close ()
return s
str = str[1:]
state.parsing_tuplet = 1
- print '\\times %s {' % tup_lookup[dig]
+ voices_append ("\\times %s {" % tup_lookup[dig])
return str
def try_parse_group_end (str, state):
str = str[1:]
if state.parsing_tuplet:
state.parsing_tuplet = 0
- print '}'
+ voices_append ("}")
return str
def header_append (key, a):
s = ''
if header.has_key (key):
s = header[key] + "\n"
- header [key ] = s + a
+ header [key] = s + a
+
+def lyrics_append (a):
+ i = len (lyrics) - 1
+ if i < 0:
+ i = 0
+ if len (lyrics) <= i:
+ lyrics.append ('')
+ lyrics [i] = lyrics [i] + a + "\n"
+
+def voices_append (a):
+ i = len (voices) - 1
+ if i < 0:
+ i = 0
+ if len (voices) <= i:
+ voices.append ('')
+ voices [i] = voices [i] + a + "\n"
def try_parse_header_line (ln):
m = re.match ('^(.): *(.*)$', ln)
header ['subtitle'] = a
if g == 'L':
set_default_length (ln)
-
-
+ if g == 'W':
+ if not len (a):
+ lyrics.append ('')
+ else:
+ lyrics_append (a);
return m
def pitch_to_mudela_name (name, acc):
- print '%s%s%s' % (pitch_to_mudela_name(notename, acc + global_key[notename]) , octave_to_mudela_quotes (octave),
- duration_to_mudela_duration ((num,den), default_len, current_dots))
-
+ voices_append ("%s%s%s" %
+ (pitch_to_mudela_name (notename, acc + global_key[notename]),
+ octave_to_mudela_quotes (octave),
+ duration_to_mudela_duration ((num,den), default_len, current_dots)))
slur_end =0
if str[0] == ')':
slur_begin = 1
sys.stderr.write ("warning: repeat kludge\n")
bs = '|:'
if bs:
- print '\\bar "%s";' % bs
+ voices_append ('\\bar "%s";' % bs)
str = str[1:]
if str and str[:2] == '[|':
sys.stderr.write ("warning: thick-thin bar kludge\n")
- print '\\bar "||";'
+ voices_append ('\\bar "||";')
str = str[2:]
if str and str[:2] == ':|':
sys.stderr.write ("warning: repeat kludge\n")
- print '\\bar ":|:";'
+ voices_append ('\\bar ":|:";')
str = str[2:]
if str and str[:2] == '::':
sys.stderr.write ("warning: repeat kludge\n")
- print '\\bar ":|:";'
+ voices_append ('\\bar ":|:";')
str = str[2:]
return str
def try_parse_chord_delims (str):
if str and str[0] == '[':
str = str[1:]
- print '<'
+ voices_append ('<')
if str and str[0] == ']':
str = str[1:]
- print '>'
+ voices_append ('>')
return str
def try_parse_grace_delims (str):
if str and str[0] == '{':
str = str[1:]
- print '\\grace { '
+ voices_append ('\\grace { ')
if str and str[0] == '}':
str = str[1:]
- print '}'
+ voices_append ('}')
return str
for f in files:
if f == '-':
f = ''
-
- print ("\\score{")
- print (" <")
- print (" \\context Staff=one \\notes {")
parse_file (f)
- print (" }")
- print (" >")
- dump_header (header)
- print "%%%s" % global_voice_stuff, 1
- print ("}")
+
+ dump_global ()
+ dump_lyrics ()
+ dump_voices ()
+ dump_score ()
+
# - bf: Default fragments have linewidth=-1.0
# - Added 'singleline' and 'multiline' options.
# 0.5.6:
-# - \mudelafile{} set linewith correct, -1 for .sly and texlinewidth for .fly
+# - \mudelafile{} set linewidth correct, -1 for .sly and texlinewidth for .fly
# - changes to Mudela_output
# - changed RE to search for pre/postMudelaExample to make it possible to
# comment out a definition.
20:'twenty', 26:'twentysix'}
fontsize_pt2i = {'11pt':11, '13pt':13, '16pt':16, '20pt':20, '26pt':26}
+# perhaps we can do without this?
+
begin_mudela_re = re.compile ('^ *\\\\begin{mudela}')
begin_verbatim_re = re.compile ('^ *\\\\begin{verbatim}')
end_verbatim_re = re.compile ('^ *\\\\end{verbatim}')
f = open (full_path, 'r')
lines =f.readlines ()
+ self.mudela.write ('%% This is a copy of file %s\n' % full_path)
for x in lines:
self.mudela.write (x)
r = file_ext_re.search(fn)
dnl WARNING WARNING WARNING WARNING
dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
-dnl WARNING WARNING WARNING WARNING
-dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
dnl aclocal.m4 -*-shell-script-*-
dnl StepMake subroutines for configure.in
%% set up dimensions
% mudela-book don't like this:
%\parindent=0pt
-\newdimen\smallspace
\newdimen\interlinedist
-\newdimen\stemthickness
\newcount\n %duh. meaningful identifiers.
\newdimen\staffheight
-\newdimen\notewidth
-\newdimen\noteheight
\newdimen\stafflinethickness
-\newdimen\interstaffline
-\newdimen\dist
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% set fonts and primary dimensions
% this has to be synced with the font definition
\def\musixcalc{
- \notewidth=\mudelapapernotewidth pt
- \smallspace=.3\interlinedist
- \interstaffline=\staffheight
- \divide\interstaffline by 4
\stafflinethickness=\mudelapaperrulethickness pt
- \stemthickness=\stafflinethickness
}