\version "2.22.0" \pointAndClickOff %% Defs : %% Cf. doc. => https://lilypond.org/doc/v2.22/Documentation/notation/graphical-notation durLineOn = { \omit Stem \omit Flag \omit Beam \override NoteHead.duration-log = 2 \override DurationLine.style = #'line } durLineOff = { \undo\omit Stem \undo\omit Flag \undo\omit Beam \revert NoteHead.duration-log \revert DurationLine.style } %% Cf. doc. => https://lilypond.org/doc/v2.22/Documentation/notation/graphic#index-path_002c-drawing fulLev = \markup \with-dimensions-from \column { x x x } \override #'(filled . #t) \path #.2 #'((moveto 0 -4) (lineto 100 -4) (lineto 100 0) (lineto 0 0) (closepath)) %% Cf. LSR => http://lsr.di.unimi.it/LSR/Item?id=1028 #(define (variable-bow-thickness min-l max-l min-t max-t) (lambda (grob) (let* (;; get the procedure to calculate the control-points (cpf (assoc-get 'control-points (ly:grob-basic-properties grob))) (cpt (cond ((list? cpf) cpf) ((procedure? cpf) (cpf grob)) ((ly:unpure-pure-container? cpf) (ly:unpure-call cpf grob)))) (cp0 (car cpt)) (cp3 (cadddr cpt)) (dx (- (car cp3) (car cp0))) (dy (- (cdr cp3) (cdr cp0))) (len (magnitude (make-rectangular dx dy))) ;; return a value for thickness ;; below min-l -> min-l ;; greater than max-l -> max-l ;; between min-l and max-l -> calculate a nice value (thickness (cond ((< len min-l) min-t) ((> len max-l) max-t) (else (+ min-t (* (- len min-l) (/ (- max-t min-t) (- max-l min-l)))))))) thickness))) %% Cf. LSR => http://lsr.di.unimi.it/LSR/Item?id=650 #(define-markup-command (arrow-at-angle layout props angle-deg length fill) (number? number? boolean?) (let* ( (PI-OVER-180 (/ (atan 1 1) 34)) (degrees->radians (lambda (degrees) (* degrees PI-OVER-180))) (angle-rad (degrees->radians angle-deg)) (target-x (* length (cos angle-rad))) (target-y (* length (sin angle-rad)))) (interpret-markup layout props (markup #:translate (cons (/ target-x 2) (/ target-y 2)) #:rotate angle-deg #:translate (cons (/ length -2) 0) #:concat (#:draw-line (cons length 0) #:arrow-head X RIGHT fill))))) splitStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \translate #'(-110.1 . 0) \path #.2 #'((moveto 2 -1.95)(lineto 2 1.95)) \translate #'(.05 . 0) { \combine \arrow-at-angle #60 #(sqrt 8) ##t \arrow-at-angle #-60 #(sqrt 8) ##t } }#}) 0)) \break } startStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null \translate #'(-110.1 . 0) \path #.2 #'((moveto 2 -1.95)(lineto 2 1.95)) #}) 0)) \break } convStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null \translate #'(-110.1 . 0) { \combine \path #.2 #'((moveto 2 -1.95)(lineto 2 1.95)) \combine \translate #'(0 . 3.2) \arrow-at-angle #-60 #(sqrt 8) ##t \translate #'(0 . -3.2) \arrow-at-angle #60 #(sqrt 8) ##t }#}) 0)) \break } invDownStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \translate #'(2.7 . -.6)\arrow-at-angle #-80 #(sqrt 200) ##t \translate #'(-109 . -8.5)\arrow-at-angle #-80 #(sqrt 40) ##t }#}) 0)) \break } invUpStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \translate #'(2.7 . .6)\arrow-at-angle #80 #(sqrt 200) ##t \translate #'(-109 . 8.5)\arrow-at-angle #80 #(sqrt 40) ##t }#}) 0)) \break } %% Cf. doc => https://lilypond.org/doc/v2.22/Documentation/notation/graphic#index-path_002c-drawing forza = -\tweak padding #.5 -\tweak stencil #(lambda (grob) (grob-interpret-markup grob #{ \markup \override #'(filled . #t) \path #0 #'((moveto 0 0) (lineto 1 0) (lineto .5 1) (closepath)) #})) ^- %% end defs %%% voixUn = \relative { \time 4/4 | % mes.1 %% Cf. doc => http://lilypond.org/doc/v2.22/Documentation/internals/multimeasurerest \override MultiMeasureRest.expand-limit = #0 R1-"Tacet ~ 1 minute" \startStaffBarLine | % mes.2 \tempo \markup \column { "Allegro entusiasmo." \normal-text "Commencer à peu près lorsque le comédien dit « Des pages et des pages »." } \durLineOn %% Cf. doc => http://lilypond.org/doc/v2.22/Documentation/notation/modifying-shapes \shape #'((0 . 0) (0 . 0) (30 . 0) (43 . 0)) PhrasingSlur fis''4\-\( ^\markup \override #'(height . 1) \override #'(angularity . 1) \draw-squiggle-line #2 #'(102 . 0) ##t d4\- s2 | % mes.3 s8 fis4\- s8 s2 \) \startStaffBarLine \repeat volta 2 { | % mes.4 \durLineOff a2\( b | % mes.5 a4 g( g) fis\) | % mes.6 e4\( d cis d | % mes.7 e4\) r r2 \startStaffBarLine | % mes.8 g2\( fis | % mes.9 b2( b4) a \) | % mes.10 g4\( fis e a8 e\) | % mes.11 g2( fis4) r \splitStaffBarLine | % mes.12 cis2\( ces | % mes.13 des4 ces( bes) c\) \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \arrow-at-angle #0 #(sqrt 5) ##t \translate #'(-109 . -6.5)\arrow-at-angle #80 #(sqrt 40) ##t }#}) 0)) \break | % mes.14 f4( e d e | % mes.15 g-.) r r8 fis( d4-.) \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \translate #'(0 . -.13)\arrow-at-angle #-60 #(sqrt 8) ##t \translate #'(-111.7 . 0)\arrow-at-angle #0 #(sqrt 5) ##t }#}) 0)) \break | % mes.16 cis( d e fis8 gis) | % mes.17 a2( e) | % mes.18 d4( cis b cis8 a) | % mes.19 b2( e,)\convStaffBarLine | % mes.20 cis'4( d e fis8 gis\noBreak | % mes.21 a2 e) | % mes.22 fis4( d b e | % mes.23 a,) r r2\splitStaffBarLine | % mes.24 cis4( d ees f8 ges) | % mes.25\noBreak aes2( ees4.) d8( \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \arrow-at-angle #0 #(sqrt 5) ##t \translate #'(-109 . -6.5)\arrow-at-angle #80 #(sqrt 40) ##t }#}) 0)) \break | % mes.26 c4. bes8 d4 cis8 a) | % mes.27 cis4.( e,8 fis2) \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \translate #'(0 . -.13)\arrow-at-angle #-60 #(sqrt 8) ##t \translate #'(-111.8 . 0)\arrow-at-angle #0 #(sqrt 5) ##t }#}) 0)) \break } | % mes.28 \durLineOn fis4 \- s2 \durLineOff e8-\forza g-\forza | % mes.29 \durLineOn fis4 \- s2 \durLineOff g8-\forza e-\forza \convStaffBarLine | % mes.30 \durLineOn \shape #'((0 . -2) (0 . 0) (-4 . -2) (-2.5 . -2)) Slur d4*4/3\-( fis\- gis\- | % mes.31 s8 cis4\- \durLineOff d8-\forza) ees-\forza f-\forza g-\forza f-\forza \splitStaffBarLine %\pageBreak | % mes.32 a2\( b4 cis8 b | % mes.33 a4 g( g) f\) | % mes.34 e4( d c f8 d | % mes.35 e4) r r2 \invDownStaffBarLine | % mes.36 a,4( b cis d8 b) | % mes.37 cis2( e) | % mes.38 d4( cis b cis8 a) | % mes.39 gis2( e)\invDownStaffBarLine | % mes.40 cis'8( d e d ees f ees ces) | % mes.41 d4( ces8 bes ees4 d8 bes) | % mes.42 c4( bes8 a d4 cis8 b) | % mes.43 cis4.( b8 a8. g16 fis4-.) \invDownStaffBarLine | % mes.44 a'8 b g r ees4 r8 ces | % mes.45 des4. ces8 ees4. bes8 | % mes.46 c2 d | % mes.47 cis4 b8 a a g fis4-. \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \translate #'(0 . -.13)\arrow-at-angle #-60 #(sqrt 8) ##t \translate #'(-109 . -6.5)\arrow-at-angle #80 #(sqrt 40) ##t }#}) 0)) \break | % mes.48 \tempo "Rubato." \durLineOn fis4*4/6\-^( g\- a\- e\- f\- g\- | % mes.49 a8)\- s4 \durLineOff fis8\forza e\forza g\forza fis\forza a\forza \convStaffBarLine | % mes.50 \durLineOn f4^( \- s8 a)\-^\markup\beam #6 #0 #.4 \durLineOff g8\forza a\forza e\forza g\forza | % mes.51 \durLineOn fis4^( \- s8 a)\-^\markup\beam #6 #0 #.4 \durLineOff g8\forza bes\forza f\forza a\forza \startStaffBarLine | % mes.52 \tweak padding #3 \tempo\markup \override #'(baseline-skip . 2.5) \left-column\normal-text { \override #'(line-width . 80) \justify { Octave au choix, mode de jeu au choix, ordre au choix, rythme au choix, notes très détachées, de plus en plus destructuré. } \vspace #.5 \italic "Ritardando" } \repeat volta 4 { \durLineOn \tweak X-offset #1 d,4*4/5-. -\markup \with-dimensions-from \null \path #.2 #'((moveto -1 -2) (lineto 90 -2) (lineto 90 6.5) (lineto -1 6.5) (closepath)) fis-. bes-. des-. d-. \durLineOff \startStaffBarLine } \tweak break-visibility #begin-of-line-invisible \tweak self-alignment-X #RIGHT \mark\markup\small "4×" \break | % mes.53 R1-\markup { "Tacet" \italic "a piacere" } \startStaffBarLine | % mes.54 \tempo "A tempo." a'2( b) | % mes.55 a4\( g( g) fis\) | % mes.56 e4( d cis d) | % mes.57 cis4( d e fis8 gis) | % mes.58 a2( e) | % mes.59 fis4( d b e) \startStaffBarLine | % mes.60 fis16( g fis e) d( e d cis) b( cis b a) g( a g fis) | % mes.61 g4 b8 e c4 b8 cis | % mes.62 d1\fermata\startStaffBarLine \bar "|." } voixDeux = \relative { \time 4/4 | % mes.1-3 s1*3 \repeat volta 2 { | % mes.4-11 s1*8 | % mes.12 cis'8( e g a) ces,( ees ges aes) | % mes.13 des,8( f aes ces) ees,( g bes c) \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \arrow-at-angle #0 #(sqrt 5) ##t \translate #'(-109 . 6.5)\arrow-at-angle #-80 #(sqrt 40) ##t }#}) 0)) \break | % mes.14 f,8( a c e) g,( b d e) | % mes.15 a,8( cis e g) r fis( d4-.) \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \translate #'(0 . .13)\arrow-at-angle #60 #(sqrt 8) ##t \translate #'(-111.8 . 0)\arrow-at-angle #0 #(sqrt 5) ##t }#}) 0)) \break | % mes.16-23 s1*8 | % mes.24 cis,8( e g a) bes,( ees ges aes) | % mes.25 des,8( f aes ces) ees,8( g bes c) \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \arrow-at-angle #0 #(sqrt 5) ##t \translate #'(-109 . 6.5)\arrow-at-angle #-80 #(sqrt 40) ##t }#}) 0)) \break | % mes.26 f,8( a c ees) g,( b d e) | % mes.27 a,8( cis e g) r e,8( fis4) \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \translate #'(0 . .13)\arrow-at-angle #60 #(sqrt 8) ##t \translate #'(-111.8 . 0)\arrow-at-angle #0 #(sqrt 5) ##t }#}) 0)) \break } | % mes.28-31 s1*4 | % mes.32 a'2\( ces4 bes8 ces | % mes.33 aes4 ges( g) f4\) | % mes.34 des4( ces e f8 d | % mes.35 e4) r r2 \invUpStaffBarLine | % mes.36 a,4( b ces des8 bes) | % mes.37 ces2( bes) | % mes.38 c4( d b cis8 a) | % mes.39 gis2( e)\invUpStaffBarLine | % mes.40 cis'4( a'8 g ees2) | % mes.41 des4( ces ees2) | % mes.42 c4( bes8 c d4 cis8 b) | % mes.43 a4.( g8 fis4-.) r\invUpStaffBarLine | % mes.44 a'4-. r8 g aes r ees4 | % mes.45 f8 des( des4) ees2 | % mes.46 c2 b | % mes.47 a4 r g fis-. \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions-from \null { \combine \translate #'(0 . .13)\arrow-at-angle #60 #(sqrt 8) ##t \translate #'(-109 . 6.5)\arrow-at-angle #-80 #(sqrt 40) ##t }#}) 0)) \break | % mes.48-62 s1*15 \bar "|." } DynUn = { \time 4/4 | % mes.1 s1 | % mes.2 s1^\markup \with-dimensions-from "x" \override #'(filled . #t) \path #.2 #'((moveto 0 -2.5) (lineto 102 -2.5) (lineto 102 0) (closepath)) | % mes.3 s1 \repeat volta 2 { | % mes.4 s1^\markup \with-dimensions-from "x" \override #'(filled . #t) \path #.2 #'((moveto 0 0) (lineto 80 0) (lineto 80 -2.5) (lineto 0 -2.5) (closepath)) | % mes.5-7 s1*3 | % mes.8 s1^\markup \with-dimensions-from "x" \override #'(filled . #t) \path #.2 #'((moveto 0 -1.5) (lineto 35 0) (lineto 95 0) (lineto 95 -4) (lineto 0 -4) (closepath)) | % mes.9-11 s1*3 | % mes.12 s1^\markup\fulLev | % mes.13 s1 | % mes.14 s1^\markup\fulLev | % mes.15 s1 | % mes.16 s1^\markup\fulLev | % mes.17-19 s1*3 | % mes.20 s1^\markup \with-dimensions-from \column { x x x } \override #'(filled . #t) \path #.2 #'((moveto 0 -4) (lineto 83 -4) (lineto 83 0) (lineto 0 0) (closepath)) | % mes.21-23 s1*3 | % mes.24 s1^\markup\fulLev | % mes.25 s1 | % mes.26 s1^\markup\fulLev | % mes.27 s1 } | % mes.28 s1-\tweak extra-offset #'(0 . -.5)^\markup\fulLev | % mes.29 s1 | % mes.30 s1^\markup\fulLev | % mes.31 s1 | % mes.32 s1^\markup \with-dimensions-from \column { x x x } \override #'(filled . #t) \path #.2 #'((moveto 0 -4) (lineto 83 -4) (lineto 83 -3) (curveto 65 1 18 1 0 -3) (closepath)) | % mes.33-35 s1*3 | % mes.36 s1-\tweak extra-offset #'(0 . -.5) ^\markup \with-dimensions-from \column { x x x } \override #'(filled . #t) \path #.2 #'((moveto 0 -4) (lineto 100 -4) (lineto 100 -1) (curveto 85 -3 80 0 70 0) (curveto 50 0 50 -3 40 -3) (curveto 20 -2 0 1 0 -4) (closepath)) | % mes.37-39 s1*3 | % mes.40 s1^\markup \with-dimensions-from \column { x x } \override #'(filled . #t) \path #.2 #'((moveto 0 -4) (lineto 100 -4) (lineto 100 -2.5) (curveto 90 0 80 0 77 0) (lineto 15 0) (lineto 0 -2) (closepath)) | % mes.41-43 s1*3 | % mes.44 s1^\markup\fulLev | % mes.45-47 s1*3 | % mes.48 s1^\markup\fulLev | % mes.49 s1 | % mes.50 s1^\markup\fulLev | % mes.51 s1 | % mes.52 s1^\markup \with-dimensions-from \column { x x x } \override #'(filled . #t) \path #.2 #'((moveto 0 -4) (lineto 100 -4) (lineto 0 0) (closepath)) | % mes.53 s1 | % mes.54 s1 ^\markup \with-dimensions-from "x" \override #'(filled . #t) \path #.2 #'((moveto 0 -2.5) (lineto 100 -2.5) (lineto 100 0) (lineto 0 0) (closepath)) | % mes.55-59 s1*5 | % mes.60 s1-\tweak extra-offset #'(0 . -1) ^\markup \with-dimensions-from "x" \override #'(filled . #t) \path #.2 #'((moveto 0 -2.5) (lineto 100 -2.5) (lineto 100 0) (lineto 0 0) (closepath)) | % mes.61-62 s1*2 \bar "|." } DynDeux = { \time 4/4 | % mes.1-3 s1*3 \repeat volta 2 { | % mes.4-11 s1*8 | % mes.12 s1^\markup\fulLev | % mes.13 s1 | % mes.14 s1^\markup\fulLev | % mes.15-23 s1*9 | % mes.24 s1^\markup\fulLev | % mes.25 s1 | % mes.26 s1^\markup\fulLev | % mes.27 s1 } | % mes.28-31 s1*4 | % mes.32 s1^\markup \with-dimensions-from \column { x x } \override #'(filled . #t) \path #.2 #'((moveto 0 -5) (lineto 83 -5) (lineto 83 -1.5) (curveto 77 2 60 -4 40 -4) (curveto 15 -4 10 2 0 -1.5) (closepath)) | % mes.33-35 s1*3 | % mes.36 s1-\tweak extra-offset #'(0 . -1) ^\markup \with-dimensions-from \column { x x } \override #'(filled . #t) \path #.2 #'((moveto 0 -5) (lineto 100 -5) (lineto 100 -1.5) (curveto 95 0 90 0 85 0) (curveto 75 0 70 -3 50 -3) (curveto 30 -2 20 2 0 -3) (closepath)) | % mes.37-39 s1*3 | % mes.40 s1 ^\markup \with-dimensions-from \column { x x } \override #'(filled . #t) \path #.2 #'((moveto 0 -5) (lineto 95 -5) (lineto 95 -2) (lineto 77 -2) (curveto 72 -2 65 -3 55 -3) (curveto 40 -3 35 -1.5 28 -0.5) (curveto 20 1 0 0 0 -5) (closepath)) | % mes.41-43 s1*3 | % mes.44 s1^\markup\fulLev | % mes.45-62 s1*18 \bar "|." } \paper { page-count = 4 markup-system-spacing.basic-distance = 15 } \header { title = \markup\normal-text\fontsize #2 \center-column { "Variations électroniques sur le concerto" \line { "pour violon de" \caps "Beethoven" } } composer = \markup { "Yoann" \caps "Le Bars" } copyright = \markup \fontsize #-2 \column { \vspace #1 \concat { "©" \hspace #.15 "2020 by Johan Le Bars" } } } \score { \new StaffGroup << \new Staff \voixUn \new Dynamics \DynUn \new Staff \with { \RemoveAllEmptyStaves } \voixDeux \new Dynamics \DynDeux >> \layout { indent = 0 system-count = 22 \context { \Score %% Cf. doc => https://lilypond.org/doc/v2.22/Documentation/notation/displaying-pitches#automatic-accidentals \accidentalStyle dodecaphonic %% Cf. doc => https://lilypond.org/doc/v2.22/Documentation/notation/proportional-notation proportionalNotationDuration = #(ly:make-moment 1/4) \override SpacingSpanner.strict-note-spacing = ##t %% Cf. LSR => http://lsr.di.unimi.it/LSR/Item?id=1028 \override PhrasingSlur.thickness = #(variable-bow-thickness 6 25 1 3) \override Slur.thickness = #(variable-bow-thickness 6 25 1 3) \override Tie.thickness = #(variable-bow-thickness 6 18 1 2) \override BarNumber.font-shape = #'italic \override BarNumber.font-size = #-2 \override BarNumber.X-offset= #.3 \override BarNumber.Y-offset = #4 } \context { \StaffGroup \omit SystemStartBracket %% Cf. doc => http://lilypond.org/doc/v2.21/Documentation/notation/flexible-vertical-spacing-within-systems#spacing-of-non_002dstaff-lines \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 13)) } \context { \Voice %% Cf. doc. => https://lilypond.org/doc/v2.22/Documentation/notation/graphical-notation \consists "Duration_line_engraver" } } }