+#(ly:set-option 'old-relative)
+\version "2.1.22"
+
+\header {
+ composer = "ARTHUR GRAY"
+ title = "LES NÉRÉIDES"
+ subtitle = "THE NEREIDS"
+ enteredby = "JCN"
+ piece = "Allegretto scherzando"
+ copyright = "public domain"
+}
+
%{
-cpp -P -traditional -o l.ly les-nereides.ly
-cpp -P -traditional -o l-fake.ly -DFAKE_GRACE les-nereides.ly
+
+Nastiest piece of competition at
+http://www.orphee.com/comparison/study.html, see
+http://www.orphee.com/comparison/gray.pdf
+
+
+lines that contain tweaks (17 currently, not counting reverts) are
+marked with %tweak
+
+possibly more impressive to render without tweaks?
+
+ grep -v tweak input/les-nereides.ly >> lnnt.ly
+ lilypond lnnt.ly
+
%}
-\header{
- composer = "ARTHUR GRAY";
- title = "LES N\\'ER\\'EIDES";
- subtitle = "THE NEREIDS";
- enteredby = "JCN";
- %piece = "Allegretto scherzando";
- copyright = "public domain";
- description = "Natiest piece of competition at http://www.orphee.com/comparison/study.html, see http://www.orphee.com/comparison/gray.pdf";
- comment = "LilyPond (1.3.93) can't really do this yet, I guess";
-}
+#(ly:set-point-and-click 'line-column)
+#(define (make-text-checker text)
+ (lambda (elt) (equal? text (ly:get-grob-property elt 'text))))
-%% cpp: don't start on first column
- #(define (grace-beam-space-function multiplicity)
- (* (if (<= multiplicity 3) 0.816 0.844) 0.8))
-
-%% cpp: don't start on first column
-%% hmm, why doesn't this work?
- #(define (make-text-checker text)
- (lambda (elt)
- (and (not (eq? #f (memq 'text-item-interface (ly-get-elt-property elt 'interfaces))))
- (not (#f (string-match text (ly-get-elt-property elt 'text)))))
- ))
-
-global = \notes{
- \partial 2;
- \key a \major;
- \skip 2;
- \skip 1*2;
-
-#ifndef FAKE_GRACE
- \skip 1;
-#else % FAKE_GRACE
- \skip 2.; \partial 32*24;
- \skip 32*24;
-#endif % FAKE_GRACE
-
- \bar "||";
-}
+treble = \new Voice \notes\relative c''{
+ \key a \major
+ r2
+ | %2
+ \stemUp
+ r4 <cis eis a cis>\arpeggio r2
+ | %3
+ r4 <cis fis a cis>\arpeggio r8.
+
+ \change Staff=bass
-treble = \context Voice=treble \notes\relative c''{
- % Broken?
- \property Voice.NoteColumn \push #'horizontal-shift = #0
- \outputproperty #(make-type-checker 'text-item-interface)
- #'extra-offset = #'(-6 . 2)
- %% *Style* = Large??
- \property Voice.TextScript \push #'style = #"Large"
- r2^"Allegretto scherzando"
- \property Voice.TextScript \pop #'style
- %2
- \property Voice.Stem \pop #'direction
- \property Voice.Stem \push #'direction = #1
- r4 <cis\arpeggio eis a cis> r2
- %3
- r4 <cis\arpeggio fis a cis> r8.
- \translator Staff=bass
- \outputproperty #(make-text-checker "m")
- #'extra-offset = #'(-6 . 2)
- cis,16^2^"m.d."( <fis8 fis,> <e! e,!>
- %4
- <)dis,4 a' dis>
- \translator Staff=treble
- \property Voice.Slur \pop #'direction
- \property Voice.Slur \push #'direction = #1
- \property PianoStaff.connectArpeggios = ##t
- \property Voice.TextSpanner \pop #'type
-
- %% Ghostview is ok, but xdvi shows a solid line
- \property Voice.TextSpanner \push #'line-thickness = #2
- \property Voice.TextSpanner \push #'dash-period = #0.5
-
- \property Voice.TextSpanner \push #'type = #"dotted-line"
- \property Voice.TextSpanner \push #'edge-height = #'(0 . 1.5)
- \property Voice.TextSpanner \push #'edge-text = #'("8 " . "")
- \property Staff."c0-position" = #-13
- \outputproperty #(make-text-checker "m")
- #'extra-offset = #'(-6 . 2)
- cis''''4^"m.g."\arpeggio \spanrequest \start "text" (
-
-#ifndef FAKE_GRACE
-
- \property Voice.Stem \pop #'direction
-
- % grace is a mess
- % maybe we should fake this and put 5/4 in this bar?
+ \once\override TextScript #'extra-offset = #'(-3 . -4) %tweak
+
+ cis,16^2(^\markup {\small \italic "m.d." }
+ <fis fis,>8 <e! e,!>
+ | %4
+ <dis, a' dis>4)
+
+ \change Staff=treble
+
+ \slurUp
+ \set PianoStaff.connectArpeggios = ##t
+ #(set-octavation 1)
+
+ \once\override TextScript #'extra-offset = #'(-3 . -2) %tweak
+
+ \tieUp
+ cis''''4^\markup { \small \italic "m.g." }\arpeggio~
\grace {
- )cis8
- \property Grace.Stem \pop #'direction
- \property Grace.Stem \push #'direction = #0
- \property Grace.Beam \push #'space-function = #grace-beam-space-function
- %% urg, dim. during grace dumps core here
- %% [a16-5( fis dis \spanrequest \stop "text" ]
- %% [cis'32 a-1 fis-4 dis] [cis a )fis-2]
- [a16-5( fis dis \spanrequest \stop "text" ]
- \property Staff."c0-position" = #-6
- [cis32 a-1 fis-4 dis] [cis a )fis-2]
+ \override Stem #'stroke-style = #"grace"
+
+ cis8
+
+ %\stemBoth Hmm
+
+ \override Stem #'direction = #0
+
+ a16[-5( fis dis]
+ #(set-octavation 0)
+
+ cis32[ a-1 fis-4 dis] cis[ a fis)-2]
+ % the small grace in lower staff comes after us
+ s32
+
+ \revert Stem #'stroke-style
}
-#else % FAKE_GRACE
-
- \property Score.PaperColumn \push #'space-factor = #0.6
- \property Score.PaperColumn \push #'to-musical-spacing-factor = #0.04
- \property Voice.NoteHead \push #'font-size = #-1
- \property Voice.Stem \push #'font-size = #-1
- \property Voice.Stem \push #'length = #6
- \property Voice.Stem \push #'beamed-lengths =
- #(map (lambda (x) (* 1.25 x)) '(0.0 2.5 2.0 1.5))
- \property Voice.Stem \push #'beamed-minimum-lengths =
- #(map (lambda (x) (* 1.25 x)) '(0.0 1.5 1.25 1.0))
-
- \property Voice.Beam \push #'font-size = #-1
- \property Voice.TextScript \push #'font-size = #-1
- \property Voice.Fingering \push #'font-size = #-1
- \property Voice.Slur \push #'font-size = #-1
- \property Staff.Accidentals \push #'font-size = #-1
- \property Voice.Beam \push #'space-function = #grace-beam-space-function
-
- )cis16
- \property Voice.Stem \pop #'direction
- \property Voice.Stem \push #'direction = #0
- %% [a16^5( fis dis \spanrequest \stop "text" ]
- %% [cis'32 a-1 fis-4 dis] [cis a )fis-2] s s s
- [a16^5( fis dis \spanrequest \stop "text" ]
- \property Staff."c0-position" = #-6
- [cis32 a^1 fis^4 dis] [cis a )fis-2] s % s s
-
- \property Voice.NoteHead \pop #'font-size
- \property Voice.Stem \pop #'font-size
- \property Voice.Stem \pop #'length
- \property Voice.Stem \pop #'beamed-lengths
- \property Voice.Stem \pop #'beamed-minimum-lengths
- \property Voice.Beam \pop #'font-size
- \property Voice.TextScript \pop #'font-size
- \property Voice.Fingering \pop #'font-size
- \property Voice.Slur \pop #'font-size
- \property Staff.Accidentals \pop #'font-size
- \property Voice.Beam \pop #'space-function
- \property Score.PaperColumn \pop #'space-factor
- \property Score.PaperColumn \pop #'to-musical-spacing-factor
-#endif % FAKE_GRACE
+
+ \stemUp
+ cis'4( bis)
+
+ | %5
+ r8 <a' a,>8(\mf <gis gis,> <fis fis,>
+
+ % \fingerUp
+ \override Fingering #'direction = #1
+ % Manual fix for collision with slur
+ \override Fingering #'extra-offset = #'(0 . 1) %tweak
+ <gis gis,> <fis fis,> e)-1-4-5 r
- \property Voice.Stem \pop #'direction
- \property Voice.Stem \push #'direction = #1
- cis'4()bis
- r8
- <a'8( a,> <gis gis,> <fis fis,> <gis gis,> <fis fis,> )e^" "^1^4^5 r|
- r<a8( a,> <gis gis,> <fis fis,> <gis gis,> <fis fis,> )e r|
+ | %6
+ r <a a,>8(\mf <gis gis,> <fis fis,>
+ <gis gis,> <fis fis,> e) r
+
+ | %7
+ \bar "||"
}
-trebleTwo = \context Voice=trebleTwo \notes\relative c''{
- \property Voice.NoteColumn \push #'horizontal-shift = #1
+trebleTwo = \new Voice \notes\relative c''{
+ \stemDown
+ \slurDown
+ % \fingerDown
+ \override Fingering #'direction = #-1
+ \override Fingering #'extra-offset = #'(0 . 1.2)
s2
+ | %1
s1*2
+ | %4
s4
- \property Voice.Stem \pop #'direction
- \property Voice.Stem \push #'direction = #-1
- <cis'4\arpeggio a fis dis>
-
-#ifdef FAKE_GRACE
- s32*16
-#endif
-
- \property Voice.NoteColumn \push #'force-hshift = #-0.2
- <e,2 gis, e d>
- % Hmm s/r?
- %r8 cis4. d4
+ <cis' a fis dis>4\arpeggio
+ <e, gis, e d!>2
+ | %5
s8 cis4. d4
- \property Voice.NoteColumn \pop #'force-hshift
- [<cis8( e,> <b-3 d,-1> |
- \property Voice.NoteColumn \push #'force-hshift = #-0.2
- <)a-2 cis,-1>] cis4. d4
- \property Voice.NoteColumn \pop #'force-hshift
- [<cis8( e,> <b d,> |
- <)a cis,>]
+ %%<cis e,>8[( <b-3 d,-1>
+ <cis e,>8[( <b d,>-3-1
+ | %6
+ %%<a-2 cis,-1>)] cis4. d4
+ <a cis,>)]-2-1 cis4. d4
+ <cis e,>8[( <b d,>
+ | %7
+ <a cis,>)]
}
-bass = \context Voice=bass \notes\relative c{
- \property Voice.Slur \push #'details =
- #'((height-limit . 2.0) (ratio . 0.333) (force-blowfit . 0.5) (beautiful . 5.0))
- \property Voice.Slur \push #'attachment-offset = #'((0 . -3) . (0 . -6))
- \property Voice.Stem \pop #'direction
- \property Voice.Slur \push #'direction = #-1
- % huh, auto-beamer?
- r8. e,16-2( [<a8 a,> <b b,>] <cis4 cis,> |
- %2
- \translator Staff=treble
- \property Voice.Stem \pop #'direction
- \property Voice.Stem \push #'direction = #-1
- \property Voice.slurEndAttachment = #'stem
- <)a''4\arpeggio eis cis>
- %\stemboth
- \property Voice.slurEndAttachment = ##f
- \translator Staff=bass
- \property Voice.Stem \pop #'direction
- \property Voice.Slur \pop #'y-free
- \property Voice.Slur \push #'y-free = #0.1
- r8. cis,,16( <fis8 fis,> <gis gis,>
- %3
- \property Voice.Stem \pop #'length
- \property Voice.Stem \push #'length = #5
- <a4 a,>
- \translator Staff=treble
- \property Voice.Stem \pop #'length
- \property Voice.Stem \pop #'direction
- \property Voice.Stem \push #'direction = #-1
- <)a'\arpeggio fis cis>
- \translator Staff=bass
- \property Voice.Stem \pop #'direction
+bass = \new Voice \notes\relative c{
+ \partial 2
+ \key a \major
+
+ % Allow ugly (highly blown-up) slurs
+ \override Slur #'beautiful = #5.0 %tweak
+ \override Slur #'attachment-offset = #'((0 . 3) . (0 . -4)) %tweak
+ \slurDown
+
+ \dynamicUp
+
+ r8. e,16(\f_2 <a a,>8[ <b b,>]
+ | %2
+ <cis cis,>4
+ \change Staff=treble
+ \stemDown
+ \override Slur #'attachment = #'(stem . stem) %tweak
+ <a'' eis cis>4)\arpeggio
+
+ \revert Slur #'attachment %tweak
+ \change Staff=bass
+ \stemBoth
+
+ \revert Slur #'y-free %tweak
+ \override Slur #'y-free = #0.1 %tweak
+ \revert Slur #'attachment-offset %tweak
+ \override Slur #'attachment-offset = #'((0 . 3) . (0 . 8)) %tweak
+ r8. cis,,16( <fis fis,>8 <gis gis,>
+
+ | %3
+ \override Stem #'length = #5 %tweak
+ <a a,>4
+ \change Staff=treble
+
+ \revert Stem #'length %tweak
+ \revert Stem #'direction
+ \override Stem #'direction = #-1
+ <a' fis cis>)\arpeggio
+ \change Staff=bass
+ \revert Stem #'direction
r2
- %4
- \property Voice.Slur \pop #'details
- \property Voice.Slur \pop #'attachment-offset
- \property Voice.Stem \pop #'direction
- \property Voice.Stem \push #'direction = #-1
- <b,,4 b,>
- \clef treble;
- \property Voice.Stem \pop #'direction
- \property Voice.Stem \push #'direction = #0
- <
+
+ | %4
+ \revert Slur #'beautiful %tweak
+ \revert Slur #'attachment-offset %tweak
+ \stemDown
+ <b,, b,>4
+ \clef treble
+ \stemBoth
+ <<
%urg: staff-change: ! on dis
- <cis''\arpeggio a fis dis!>
-% { s8. \clef bass;}
- >
-
-#ifndef FAKE_GRACE
- %Hmm
- %\grace { s16 s s s s32 s s s s \clef bass; s }
- \clef bass;
- \grace { <e,,,32( e,> } <)gis'2 e>
-#else
- s4 s8 s32 s s \clef bass;
- \property Score.PaperColumn \push #'space-factor = #0.6
- \property Score.PaperColumn \push #'to-musical-spacing-factor = #0.1
- \property Voice.NoteHead \push #'font-size = #-1
- \property Voice.Stem \push #'font-size = #-1
- \property Voice.Stem \push #'length = #6
- \property Voice.Slur \push #'font-size = #-1
- \property Voice.Slur \push #'attachment-offset = #'((-0.5 . 0) . (0.5 . 0))
- <e,,,32( e,>
-
- \property Voice.NoteHead \pop #'font-size
- \property Voice.Stem \pop #'font-size
- \property Voice.Stem \pop #'length
- \property Voice.Slur \pop #'font-size
- \property Score.PaperColumn \pop #'space-factor
- \property Score.PaperColumn \pop #'to-musical-spacing-factor
- <)gis'2 e>
- \property Voice.Slur \pop #'attachment-offset
-#endif
- %5
- \property Voice.Slur \pop #'direction
- \property Voice.Slur \push #'direction = #1
- a,8 [e'-5(<)a-2 cis-3>]
- r b,-5 <e4-3 gis-5 d'>
- \property Voice.Slur \pop #'direction
- \property Voice.Slur \push #'direction = #0
- [e,8-5(|
- %6
- )a-2]
- \property Voice.Slur \pop #'direction
- \property Voice.Slur \push #'direction = #1
- [e'(<)a cis>] r b, <e4 gis d'>
- \property Voice.Slur \pop #'direction
- \property Voice.Slur \push #'direction = #0
- [e,8(|
- %7
- )a]
+ <cis'' a fis dis!>\arpeggio
+ >>
+
+ \grace {
+ \override Stem #'stroke-style = #"grace"
+
+ s8
+ s16 s s
+ s32 s s
+ s s s
+ \clef bass
+ <e,,, e,>32(
+
+ \revert Stem #'stroke-style
+ }
+ <gis' e>2)
+
+ | %5
+ \slurUp
+
+ % \fingerDown
+ \override Fingering #'direction = #-1
+
+ %%a,8 e'[-5(<a-2 cis-3>])
+ a,8 e'[-5(<a cis>])-2-3
+ %%r b,-5 <e-3 gis-5 d'>4
+ r b,-5 <e gis d'>4-3-5
+ \slurBoth
+ \once \override Fingering #'extra-offset = #'(0 . -1) %tweak
+ e,8[-5(
+
+ | %6
+ \once \override Fingering #'extra-offset = #'(0 . -1) %tweak
+ a)-2]
+ \slurUp
+ e'[(<a cis>)] r b, <e gis d'>4
+ \slurBoth
+ e,8[(
+
+ | %7
+ a)]
}
-bassTwo = \context Voice=bassTwo \notes\relative c{
- \skip 2;
- \skip 1*2;
- \skip 2;
+bassTwo = \new Voice \notes\relative c{
+ \skip 2
+ \skip 1*2
+ \skip 2
-#ifdef FAKE_GRACE
- \skip 32*16;
-#endif
+ \stemUp
+ \slurUp
- \property Voice.Stem \pop #'direction
- \property Voice.Stem \push #'direction = #1
- \property Voice.Slur \pop #'direction
- \property Voice.Slur \push #'direction = #1
-
- cis'4()bis
+ cis'4( bis)
}
-middleDynamics = \context Dynamics=middle \notes{
- s8 s16 s\f s4
+middleDynamics = \notes{
+ \override Dynamics.TextScript #'padding = #-1 %tweak
+ s2
s1*2
- %4
+ | %4
s2
-
-#ifdef FAKE_GRACE
- s32*12
- \outputproperty #(make-type-checker 'dynamic-interface)
- #'extra-offset = #'(0 . 1.5)
- s32\> s s \!s
-#endif
- s32
- \outputproperty #(make-type-checker 'text-item-interface)
- #'extra-offset = #'(0 . 1.5)
- s-"rall." s s
- s8 s4
-
- \outputproperty #(make-type-checker 'dynamic-interface)
- #'extra-offset = #'(0 . 4)
- %s1\mf-"a tempo"
- s2\mf-"a tempo" s4
- \outputproperty #(make-type-checker 'crescendo-interface)
- #'extra-offset = #'(0.5 . -1)
- s\> \!s8
- \outputproperty #(make-type-checker 'dynamic-interface)
- #'extra-offset = #'(-1 . 4)
- s8\mf s4 s4 s8\> s32 s s \!s
+ \grace {
+ \override Stem #'stroke-style = #"grace"
+
+ s8
+ s16 s s
+ s32 s
+ \once\override Dynamics.Hairpin #'extra-offset = #'(0 . 2) %tweak
+ s\> s
+ s32 s s s\!
+
+ \revert Stem #'stroke-style }
+
+ s32 s-"rall." s s s8 s4
+ | %5
+ s2-"a tempo" s8
+ \once\override Dynamics.Hairpin #'extra-offset = #'(1 . 0) %tweak
+ s \> s s
+ | %6
+ s8\!
+ s2 s8 s\> s
+ | %7
+ s8\!
}
-lowerDynamics = \context Dynamics=lower \notes{
+lowerDynamics = \notes{
s2
- %2
- s2\sustaindown s8. s16\sustainup s4
- %3
- s2\sustaindown s8. s16\sustainup s4
- %3
-
-#ifndef FAKE_GRACE
- s4\sustaindown s16
- s32 s s\sustainup s
- s32\sustaindown s s s
- s8
-#else
- s2\sustaindown
- s32*12
- s32 s s\sustainup s
- s32\sustaindown s s s
-#endif
-
- \property Dynamics.stopSustain = #""
- s4 s16. s32\sustainup
-
- %5
- s8\sustaindown s s
- \property Dynamics.stopSustain = #"*"
- \property Dynamics.stopStartSustain = #"-P"
- s s\sustainup\sustaindown s s
- s\sustainup
-
- %6
- \property Dynamics.stopStartSustain = #""
- s8\sustaindown s s
- \property Dynamics.stopStartSustain = #"-P"
- s s\sustainup\sustaindown s s
- s\sustainup
+ | %2
+ s2\sustainDown s8. s16\sustainUp s4
+ | %3
+ s2\sustainDown s8. s16\sustainUp s4
+ | %4
+ s4\sustainDown
+ \set Dynamics.pedalSustainStrings = #'("Ped." "*Ped." "*")
+
+ % grace destroys pedal-line-spanner?
+ % let's do manual tweak:
+ \once\override Dynamics.SustainPedal #'extra-offset = #'(10 . 0) %tweak
+ s8\sustainUp
+ \once\override Dynamics.SustainPedal #'extra-offset = #'(16 . 0) %tweak
+ s8\sustainDown
+%{
+ s4
+ \grace {
+ \override Stem #'stroke-style = #"grace"
+
+ s8
+ s16 s s
+ s32 s s s\sustainUp
+ s32 s s s\sustainDown
+
+ \revert Stem #'stroke-style }
+
+%}
+ s2
+
+ | %5
+ % ugh, I don't think that 'mixed should show last edge, but rather:
+ %
+ % Ped__________/\__________ *
+ %
+ % that's what gray wants, anyway.
+
+ \set Dynamics.pedalSustainStyle = #'mixed
+ s8\sustainDown s s
+ s s\sustainUp\sustainDown s
+ s
+ \once \set Dynamics.pedalSustainStyle = #'text
+ s\sustainUp
+
+ | %6
+ \set Dynamics.pedalSustainStyle = #'mixed
+ s8\sustainDown s s
+ s s\sustainUp\sustainDown s
+ s
+ \once \set Dynamics.pedalSustainStyle = #'text
+ s\sustainUp
+ | %7
}
\score{
- \context PianoStaff <
- \context Staff=treble <
- \global
+ \context PianoStaff <<
+ \context Staff=treble <<
\treble
\trebleTwo
- >
- \context Dynamics=middle <
- \global
+ >>
+ \new Dynamics <<
\middleDynamics
- >
- \context Staff=bass <
- \clef bass;
- \global
+ >>
+ \context Staff=bass <<
+ \clef bass
\bass
\bassTwo
- >
- \context Dynamics=lower <
- \global
+ >>
+ \new Dynamics <<
\lowerDynamics
- >
- >
+ >>
+ >>
\paper {
- %%BURP
- magnification_italic = 1.;
\translator {
\ScoreContext
- TimeSignature \push #'style = #"C"
- SpacingSpanner \push #'maximum-duration-for-spacing = #(make-moment 1 4)
-
- \remove Bar_number_engraver;
+ \remove Bar_number_engraver
}
\translator {
- \type "Engraver_group_engraver";
- \name Dynamics;
- \consists "Output_property_engraver";
- Generic_property_list = #generic-voice-properties
- \consists "Property_engraver";
- DynamicsMinimumVerticalExtent = #(cons -3 -3)
- VerticalAlignment \push #'threshold = #'(9 . 9)
-
- startSustain = #"Ped."
- stopSustain = #"*"
- stopStartSustain = #"*Ped."
- startUnaChorda = #"una chorda"
- stopUnaChorda = #"tre chorde"
+ \type "Engraver_group_engraver"
+ \name Dynamics
+ \consists "Output_property_engraver"
+ minimumVerticalExtent = #'(-1 . 1)
+
+ pedalSustainStrings = #'("Ped." "*Ped." "*")
- \consists "Piano_pedal_engraver";
- \consists "Script_engraver";
- \consists "Dynamic_engraver";
- \consists "Text_engraver";
- %GURGURGU, text is initialised using TextScript
- TextScript \push #'style = #"italic"
- %%% TextScript \push #'font-size = #2
+ \consists "Piano_pedal_engraver"
+ \consists "Script_engraver"
+ \consists "Dynamic_engraver"
+ \consists "Text_engraver"
+
+ TextScript \override #'font-size = #2
+ TextScript \override #'font-shape = #'italic
- \consists "Skip_req_swallow_translator";
+ \consists "Skip_event_swallow_translator"
- \consistsend "Axis_group_engraver";
+ \consistsend "Axis_group_engraver"
}
\translator {
\PianoStaffContext
- \accepts Dynamics;
- VerticalAlignment \push #'threshold = #'(7 . 7)
- }
- \translator {
- \GraceContext
- Stem \push #'flag-style = #""
+ \accepts Dynamics
+ VerticalAlignment \override #'forced-distance = #7
}
}
}
+
+%%% Local variables:
+%%% LilyPond-indent-level:4
+%%% End:
+%% new-chords-done %%