Hi all!
Playing a little around with lilypond 1.0.9, I found some items that
I would like to comment. Below is an example file included, that
shows some problems that I encountered (see the pending notes in
the file). The score is based on an edition found in the book
"Chor aktuell", Gustav Bosse Verlag. The book as a whole is
copyrighted, but it contains many old pieces without explicit
copyright notice, while the newer pieces and new editions of old
pieces are individually copyrighted. Mozart's Ave verum belongs to
the pieces without explicit copyright notice. So I strongly suppose,
the copyright of the below edition is expired. However, before
putting it as a lilypond source file or as compiled PostScript file on
a Web-Server or otherwise distributing it outside of this group, one
might want to definitely clarify this. Hence, I post it here only
for debugging/development purposes of lilypond.
Bye,
Juergen Reuter
P.S.: Are "Urtext" editions of old pieces (e.g. those of
Koehnemann Verlag, Hungary) free of copyright?
\header{
filename = "ave-verum.ly";
title = "Ave verum";
description = "";
opus = "KV 618, 1791";
source = "Chor aktuell";
composer = "W. A. Mozart (1756-1791)";
enteredby = "";
copyright = "expired (?)";
}
\version "1.0.3";
% [PENDING: This file contains comments that describe problems that
% occurred while entering this piece of music. Each of these comment
% starts with the characters "% [PENDING:". The problems refer to
% lilypond 1.0.9. Maybe, they have been solved in newer versions.]
\include "paper16.ly"
global = \notes {
\time 4/4;
\key D;
}
bars = \notes{
\skip 1*46;
\bar "|.";
}
$text_shared =
\lyric {
_1 _
A-2 ve, a- ve ve- rum cor- pus na-2 _4 tum
de Ma- ri- a vir-2 _4 gi- ne,1
ve-2 _4 re pas-2 sum im- _4 mo- la-2 tum _ in
cru- ce4 pro ho2 _4 mi ne1 _1 _ _
Cu-2 _4 jus la-2 tus per- fo- ra- tum un- _4 da
flu-2 xit4 et san-2 _4 gui- ne2 _ e- _4 sto
no-2 bis prae- _4 gu- sta-2 tum4 in
mor-1 _2 tis4 ex- a-2 _4 _8 mi- ne,2 _ _ in
mor-1 _ _2 tis4 ex- a-2 _4 _8 mi- ne.1
}
$text_soprano =
\lyric {
_1 _ _ _ _ _ _ _ _ _ _ _ _
_2 _4 in-4 cru-1 _2 ce4 _4 _1 _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _2 in2 mor-1 _1 _ _2 tis4
}
$text_lower_voices =
\lyric {
_1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ e-2 _4 sto4 no-2 bis prae- _4 gu- sta-2 tum4 in
mor-2 tis4 ex- a-2 mi-2 ne,
}
soprano =
\notes\relative c'{
\clef "violin";
\stemup
\property Voice . textstyle = "large"
r1^"Adagio"
\property Voice . textstyle = "italic" |
r | a'2 d4( )fis, | a( )gis g2 | g4( )b a( )g |
g( )fis fis2 | e2. e4 | fis fis g g | g2( )fis4 fis |
e1 | e2. a4 | a( )gis gis2 | e4( )gis2 b4 |
b( )a a a | d1(~ | d4 )cis b a | a2( )gis4 gis |
a1 | r1 | r | r | a2. a4 | a( )bes bes2 |
bes4( )d c( )bes | bes( )a a2 | g2. g4 |
g( )bes a g | g2( [f8 )e] f4 | e2 r2 |
fis!2. fis4 | fis( )e d( )g | g2. g4 | g( )fis e a |
a1(~ |
% [PENDING: The tie, which ties the preceding note (bar 34) with the next
% one, should be that of an upper voice (the bending pointing upwards), but
% it is that of a lower voice (the bending pointing downwards). Is
% this mine fault or lilypond's? Perhaps you could provide a property
% similar to property slurydirection (or, respectively \slurup etc.), but
% for ties instead of slurs.]
a4 )g a b | fis2( )e4. fis8 | g2 g | d'1~( |
d2 dis | e4 b cis d! | cis [b8 )a] d4 g, |
fis2( )e4. e8 | d1 | r1 | r | r |
}
alto =
\notes\relative c'{
\stemdown
s1 | s |
fis2 fis | e e | e4( )g fis( )e | e( )d d2 |
cis2. cis4 | d d e e | e2( )d4 d | cis1 |
e2. e4 | e2 e | e2. gis!4 |
% [PENDING: Mmh. In piano scores, the scope of accidentals usually
% starts with its first occurrence within a bar of a staff and ends at the
% end of the bar, regardless of the number of voices in that staff.
% In vocal and orchestral scores however, the scope of accidentals usually
% is limited to single voices, even if different voices are put together
% into a single staff.
% lilypond seems to handle the scope in the style of piano scores.
% Consequently, in the preceding bar (bar 13) I have explicitly to
% say gis! so that the accidental appears, because there is already a gis
% in the same bar in the soprano voice.
% Maybe, lilypond should apply the piano style scoping only on GrandStaffs?
% Or you could provide a boolean property such as:
% \property Voice.protectaccidentals = true
% which protects notes of that voice from being altered by accidentals of
% other voices.]
gis( )a a2 | r2 gis2 |
a fis4 fis | e2. e4 | e1 | s1 | s | s |
e2. e4 | e2 e | e2. e4 | e( )f f2 | d2. d4 |
e4( )f e e | e2( [d8 )cis] d4 | cis2 s2 | d2. d4 |
d( )cis b( )e | e2. e4 | e( )d cis fis |
fis1~( | fis4 )g fis e | d2( )cis4. cis8 | d2 r2 |
r fis | g( fis | e1~ | e4 [d8 )cis] d4 d |
d2( )cis4. cis8 | d1 | s1 | s | s |
}
% [PENDING: Many slurs/ties collide with lyrics. If lilypond can not
% manage this automatically, it would be nice if you could manually
% force additional white space between staffs (e.g. by means of an
% invisible "PadStaff" context).]
tenore =
\notes\relative c{
\clef "bass";
\stemup
r1 | r | a'2 a | b b | a a | a a | a2. a4 | a a a a |
a2. a4 | a1 | cis2. cis4 | cis( )d d2 | b2. d4 |
d( )cis cis2 | r2 d2 | e2 d4 cis | b2. b4 |
cis1 | r1 | r | r | cis2. cis4 | cis2 cis4( )c |
c( bes )a g | g( )a a2 | b!2. b4 | cis!( )d e cis |
cis2( )d4 b! | e,2 r2 | r1 | b'2. b4 | b( )a g( )cis |
cis2. cis4 | cis( )b a d | d2 d4 d | a2. a4 |
g2 r2 | r c | d( c | b4 d cis! b | )a2 a4 g |
a2( )g4. g8 | fis1 | r1 | r | r |
}
basso =
\notes\relative c{
\stemdown
s1 | s | d2 d | d d | cis cis | d d | a2. a4 |
d d cis cis | d2. d4 | a1 | a'2. a4 | a( )b b2 |
gis e | eis4( )fis fis2 | s2 b, | cis d4 d | e2. e4 |
a,1 | s1 | s | s | a'2. a4 | a( )g g2 | c,2. c4 |
c( )f f2 | f2. f4 | e( )d cis! a | bes2( )a4 gis |
a2 s2 | s1 | g'2. g4 | g( )fis e( )a | a2. a4 |
a( )g fis b | b2 a4 gis | a2 a, | b s2 | s a' |
bes( a | gis1 | )g!2 fis4 b, | a2. a4 | d1 |
s1 | s | s |
}
$organ_soprano =
\notes\relative c'{
\clef "violin";
\stemup
d4( a d )e | fis( d fis )g |
a( )fis d'( )fis, | a( gis )g g | g( b a )g |
g( )fis fis( )a | a( )e e( )a | a( )fis' g g, | g2( )fis |
e4( )cis cis( )e | e( )e' cis( )a | a( )gis gis( )e |
e( )e' d( )b | b( )a a a( | )d d2 d4~( |
d )cis b( )a | b,( )a' b,( )gis' | a, a'(( )e'2~ |
e4 d e )fis | a,4.. cis16 b4.( )a8 |
% The cis16 is really a grace note: a,2 \grace cis8 b4.( )a8
a4( )e cis( )e | a( )e cis( )a' | a( )bes bes( )bes |
bes( d c )bes | bes( )a a( )a, | g( )d' g( )b,! |
cis! bes'( a )g | g2 [f8( e] )f4 | e cis( d )e |
fis!2. fis4 | fis( e d )g | g2. g4 | g( fis e )a |
a2. a4 | a( g a )b | fis2 e4.( )fis8 | g4 g2 g4( |
)d' d2 d4( | )d d( )dis dis( | e b cis! )d! |
cis( [b8 )a] d4( )g, | fis2( )e | d4( )fis a2~( |
a4 )d, g2 | fis e4.(^\trill [d16 )e] | d1 |
}
% [PENDING: The 16th note in bar 20 is rather an 8th grace note.]
$organ_alto =
\notes\relative c'{
\stemdown
a2.( )cis4 | d( a d )e |
fis2. d4 | e2 e | e4( g fis )e | e( )d d2 |
cis2. e4 | fis( )d' e e, | e2( )d | cis4( )a a( )cis |
cis2. cis4 | cis4( )d d2 | b2.( )gis'4 | gis( )a a2 |
r2 r4 gis4 | a2( )fis | e( )d | cis2. e4( | )a a2 a4 |
cis,( )e d( )e | cis2 a4( )cis | e2. e4 | e2 e |
e2. e4 | e( )f f2 | d2.( )g4 | g( f )e e |
e2 [d8( cis] )d4 | cis4 a4( b )cis | d2. d4 |
d( cis b )e | e2. e4 | e( d cis )fis |
fis2. fis4 | fis( g fis )e | d2 cis | d2 r2 |
% [PENDING: lilypond puts the preceding r2 (bar 37) of the organ_alto
% voice between the notes of the organ_soprano voice. This looks a
% little bit strange. The following r4 (bar 38) is placed
% correctly. Yes, I know, this special case is everything but trivial
% to handle :-).
% Maybe, I could explicitly tell lilypond to place rest r2 a little
% bit deeper?]
r4 b4( c fis | )g bes,( c )fis | b,!( d cis! )b |
e4( [d8 )cis] d2 | d2( )cis | d2 fis~( |
fis4 )b, e2~( | e4 d2 )cis4 | d1 |
% [PENDING: The last note d1 is the same for both, the organ_soprano voice
% and the organ_alto voice. As whole notes do not have a stem,
% lilypond should actually produce two whole notes and place them side
% by side instead of putting one ontop of the other so that you only can
% see a single note.]
}
$organ_tenore =
\notes\relative c{
\clef "bass";
\stemup
fis2.( )a4 | a( fis )a a |
a2 a | b b | a a | a a | a2. cis4 | d2 a |
a1 | a4 e e a | a2 e' | e e | e2.( )d4 |
d( )cis cis2 | r4 a4( gis )b | e2 d4( )cis |
b2. b4 | a2. cis4~ | cis( d cis )b | e2 gis, |
a e4( )a | cis2. cis4 | cis2.( )c4 |
c( bes a )g | g( )a a2 | b!2.( )d4 | g,( bes e, )cis'! |
cis2( d4 )b! | e,4 a2 a4 | a2 d, | b'2. b4 | b( a g )cis |
cis2. cis4 | cis( b a )d | d2. d4 | a2 a |
g2 r2 | r4 b4( c fis | )g bes,!( c )fis |
b,!( d cis! )b | a2.( )g4 | a2( )g2 | fis2 r4 a4( |
)d2. b4 | a2 g | fis1 |
}
$organ_basso =
\notes\relative c{
\stemdown
d1 | d | d2 d | d d | cis cis | d d | a2. a4 |
d d cis cis | d d fis d | a a' e cis | a2 a' | a4( )b b2 |
gis e | eis4( )fis fis2 | s2 b, | cis d | e1 |
a,2. cis4 | fis2 e4( )dis | e2 e, | a1 | a2 a' |
a4( )g g2 | c, c | c4( )f f2 | f f | e4 d cis! a |
bes bes a gis | a4 a'2 [g8( )e] | d1 | g2. g4 |
g( fis e )a | a2. a4 | a( g fis )b | b2 a4 gis |
a2 a, | b s2 | r a' | bes a | gis1 | g!2 fis4 b, | a1 |
d2 s4 fis,4( | )b2. g4 | a1 | d1 |
}
% [PENDING: Stacking only works with notes, but not with skipped spaces:
% \notes { c4^"x"^"y" } %% that works
% \notes { s4^"x"^"y" } %% that doesn't work]
$basso_continuo =
\notes{
s1 | s | s2_"5"_"3" s_"\_"_"\_" |
s4_"6"_"5"_"2" s_"\ "_"4\\textsharp"
s2_"\_"_"4\\textnatural"_"\_" |
s2_"6"_"5" s_"\_"_"\_" |
s4_"9"_"4" s_"8"_"3" s2_"\_"_"\_" |
s1 | s2 s4_"6"_"5" s_"\_"_"\_" |
s_"9"_"4" s_"\_"_"\_" s2_"6" |
s4_"5" s4 s2 | s1 |
s4 s_"6\\textsharp"_"4"_"3" s2_"\_"_"\_"_"\_" |
s_"6"_"5" s_"7"_"\\textsharp" |
s1_"\_"_"\_" | s2 s_"6\\textsharp" |
s4_"9"_"6" s_"8"_"\_" s_"6" s_"7"_"5" |
s2_"5"_"4" s_"\_"_"\\textsharp" |
s2. s4_"6" | s4_"7" s_"6" s_"6"_"4" s_"6"_"5" |
s2_"6"_"4" s_"7" | s1 |
s2_"5"_"3" s_"\_"_"\_" |
s4_"\_"_"\_" s_"6"_"4"_"3\\textflat"
s_"\_"_"\_"_"\_" s_"\ "_"4\\textnatural" |
s_"7\\textflat"_"5"_"3" s_"9"_"7\\textflat"_"\_"
s_"8\\textnatural"_"6"_"\_" s_"7\\textflat"_"5"_"\_" |
s_"7\\textflat"_"5" s_"5\\textnatural" s2_"\_" |
s_"6"_"4\\textnatural"_"2" s_"\_"_"\_"_"\_" |
s4_"6\\textsharp"_"5\\textflat" s_"6\\textflat"_"3"
s_"6" s_"7" |
s_"6"_"4"_"2" s_"\_"_"\_"_"\_"
s_"6\\textnatural"_"4" s_"7\\textnatural" |
s2 s4_"4"_"2" s8_"4"_"2" s_"\_"_"\_" |
s1 | s2._"7"_"5" s4_"6" | s2. s4_"7" |
s2._"7" s4_"6" | s2. s4_"7" |
s4_"\_" s_"6" s_"6"_"4" s_"6"_"5" |
s2_"6"_"4" s4_"5"_"3" s_"6"_"\_" |
s1_"6" | s2 s_"6"_"4"_"3\\textnatural" |
s_"6" s_"6"_"4"_"3\\textnatural" |
s1_"6"_"5\\textnatural" |
s2_"4"_"2" s4_"6" s_"6" |
s2_"6"_"4" s_"7"_"3" |
s2. s4_"6" | s2_"7" s4_"6"_"4"_"3" s_"\_"_"\_"_"\_" |
s4_"6"_"5" s_"\_"_"4" s_"5"_"\_" s_"\_"_"3" |
s1 |
}
$the_music =
<
\type StaffGroup = voices <
\type Lyrics = soprane_lyrics < \$text_soprano >
\type Staff = upper_voices <
\property Staff.instrument = "soprano, alto"
\global
\soprano
\alto
\bars
>
\type Lyrics = shared_lyrics < \$text_shared >
\type Staff = lower_voices <
\property Staff.instrument = "tenore, basso"
\global
\tenore
\basso
\bars
>
\type Lyrics = lower_voices_lyrics <
\$text_lower_voices
>
>
% [PENDING: StaffGroup ends here, and GrandStaff start in the next line
% below. However, lilypond produces output with a StaffGroup that overlaps
% with the GrandStaff. Interestingly, if you replace "StaffGroup" by
% "GrandStaff" (above) and vice versa (below), they do not overlap any
% more. This is a bug, I suppose? Anyway, for consistency reasons, what
% about renaming "StaffGroup" into "GroupStaff" (as an analogon to
% "GrandStaff")?]
\type GrandStaff = organ <
% [PENDING: For some reason, the following declaration disturbs staff
% layout, but only in the first line(!)]
% \property Staff.instrument = "organ"
\type Staff = organ_right_hand <
\property Staff.instrument = "right hand"
\global
\$organ_soprano
\$organ_alto
\bars
>
\type Staff = organ_left_hand <
\property Staff.instrument = "left hand"
\global
\$organ_tenore
\$organ_basso
\$basso_continuo
\bars
>
>
>
% [PENDING:
% The FAQ says:
%
% ...
%
% How do I place lyrics under em(each) of the staves in a
% score, as choral music. I can work out how to put lyrics for each line
% all under the top line, or at the bottom but not between!
%
% You change the order lyrics and staves. You have to name all
% staves (lyric and melodic), otherwise they will end up in the same
% staff/lyricline
%
% \score {
% < \melodic \type Staff = "treble" \trebleMelody
% \lyric \type Lyrics = "tlyrics" \trebtext
% \type Staff = "bass" \melodic \bassMelody
% \lyric \type Lyrics = "blyrics" \basstext
% >
% \paper { }
% }
%
% ...
%
% This is only true, if you are not inside of a GrandStaff. Of
% course, you may argue that lyrics within a grand staff is quite
% unusual. But then, it may be a good idea to explicitly forbid it
% (or print out a warning).]
\score {
\$the_music
% \include "score-paper.ly";
\paper{
\include "bar-numbering.ly";
% [PENDING: This attaches bar numbers on *each* staff. Is it possible
% to attach them only once above the uppermost staff?]
linewidth= 170.\mm;
gourlay_maxmeasures =5.;
\output "ave-verum.ly";
}
\midi {
\tempo 4 = 72;
\output "ave-verum.mid";
}
}
% EOF