From a30d9d1018f07bb4aa971dd07550d19ad4a741dc Mon Sep 17 00:00:00 2001 From: Eric Teunis de Boone Date: Mon, 29 May 2017 17:09:06 +0200 Subject: [PATCH] semi-stable tutti function and scoop --- lib/flourishing.ily | 28 ++++++------- lib/musical_functions.ily | 88 +++++++++++++++++++++++++++------------ 2 files changed, 75 insertions(+), 41 deletions(-) diff --git a/lib/flourishing.ily b/lib/flourishing.ily index 98d0501..cd1f9a5 100644 --- a/lib/flourishing.ily +++ b/lib/flourishing.ily @@ -328,21 +328,19 @@ flourish = #(define-music-function (parser location notes) (ly:music?) \revert Staff.NoteHead.style #}) -scoop = ^\markup { - \path #.2 #'( (moveto 0 0 ) - (lineto 3 1 ) - (lineto 6 0 ) - ) - } -scoopo = #(define-music-function (parser location beg notes) (ly:music? ly:music?) - #{ - %Set spanner from first to last note - $beg - \startGroup - $notes - \stopGroup - #}) - +%scoop = ^\markup { +% \path #.2 #'( (moveto 0 0 ) +% (lineto 3 1 ) +% (lineto 6 0 ) +% ) +% } +scoop = #(define-music-function (music) (ly:music?) + #{ + <>^"scoop"\startGroup + #(allbutlastnote music) + <>\stopGroup + #(lastnote music) + #}) %---------------------------------------------------% % music function definitions %---------------------------------------------------% diff --git a/lib/musical_functions.ily b/lib/musical_functions.ily index 95cbb7b..1049fa1 100644 --- a/lib/musical_functions.ily +++ b/lib/musical_functions.ily @@ -4,29 +4,29 @@ % Part of lilydrum eighthBeaming = { - \set baseMoment = #(ly:make-moment 1/8) - \set beatStructure = #'( 2 2 2 2) + \set baseMoment = #(ly:make-moment 1/8) + \set beatStructure = #'( 2 2 2 2) } eighthReelBeaming = { - \set baseMoment = #(ly:make-moment 1/8) - \set beatStructure = #'( 4 4 4 4) + \set baseMoment = #(ly:make-moment 1/8) + \set beatStructure = #'( 4 4 4 4) } eighthCompoundBeaming = { - \set baseMoment = #(ly:make-moment 1/8) - \set beatStructure = #'( 3 3 3 3) + \set baseMoment = #(ly:make-moment 1/8) + \set beatStructure = #'( 3 3 3 3) } sixteenthBeaming = { - \set baseMoment = #(ly:make-moment 1/16) - \set beatStructure = #'( 4 4 4 4) + \set baseMoment = #(ly:make-moment 1/16) + \set beatStructure = #'( 4 4 4 4) } sixteenthReelBeaming = { - \set baseMoment = #(ly:make-moment 1/16) - \set beatStructure = #'( 8 8 8 8) + \set baseMoment = #(ly:make-moment 1/16) + \set beatStructure = #'( 8 8 8 8) } sixteenthCompoundBeaming = { - \set baseMoment = #(ly:make-moment 1/16) - \set beatStructure = #'( 6 6 6 6) + \set baseMoment = #(ly:make-moment 1/16) + \set beatStructure = #'( 6 6 6 6) } % triplet triplet = #(define-music-function (parser location notes) (ly:music?) #{ \tuplet 3/2 { $notes } #}) @@ -34,6 +34,20 @@ triplet = #(define-music-function (parser location notes) (ly:music?) #{ \tuplet % dynamics v = #(define-event-function (parser location) () #{ \upbow #}) + +#(define (text-spanner-start-stop mus) + (let ((elts (ly:music-property mus 'elements))) + (make-music 'SequentialMusic 'elements + (append + (list (make-music 'TextSpanEvent 'span-direction -1)) + (reverse (cdr (reverse elts))) + (list (make-music 'TextSpanEvent 'span-direction 1)) + (list (last elts)) + ) + ) + ) +) + % dynamics with extended lines dynLine = #(define-music-function (parser location text) @@ -52,22 +66,44 @@ dynLine = #(define-music-function % unison brackets % TODO: a little 'u' % TODO: open ended brackets(\odr,\ofr) +%unisonbracket = { +% \once \override TextSpanner.style = #'line +% \once \override TextSpanner #'to-barline = ##t +% \once \override TextSpanner.bound-details.left.text = \markup { +% \combine +% \combine +% \draw-line #'(0 . -1) +% \draw-line #'(1 . 0) +% \translate #'(1 . -0.5 ) \whiteout \box "u" +% } +% \once \override TextSpanner.bound-details.right.text = \markup { \draw-line #'(0 . -1) } +% \once \override TextSpanner.bound-details.right.attach-dir = #RIGHT +%} +%dr = { \unisonbracket <>\="unison"\startTextSpan } +%fr = { <>\="unison"\stopTextSpan } +%odr = { \unisonbracket <>\="unison"\startTextSpan } +%ofr = { <>\="unison"\stopTextSpan } dr = #(define-event-function (parser location) () #{ \startGroup #}) fr = #(define-event-function (parser location) () #{ \stopGroup #}) odr = #(define-event-function (parser location) () #{ \startGroup #}) ofr = #(define-event-function (parser location) () #{ \stopGroup #}) -tutti = #(define-music-function (mus) (ly:music?) - ; By Jan-Peter Voigt, Tue, 2 May 2017 11:10:46 +0200 - (let* ((elms (ly:music-property mus 'elements)) - ; first and last music-element ... - (frst (first elms)) ; TODO test for list? and ly:music? - (lst (last elms)) ; TODO test for list? and ly:music? - (fartic (ly:music-property frst 'articulations '())) ; look -for eventchords ... - (lartic (ly:music-property lst 'articulations '())) - ) - (ly:music-set-property! frst 'articulations `(,@fartic ,(make-music 'NoteGroupingEvent 'span-direction -1))) - (ly:music-set-property! lst 'articulations `(,@lartic ,(make-music 'NoteGroupingEvent 'span-direction 1))) + +#(define (allbutlastnote mus) + (let ((elts (ly:music-property mus 'elements))) + (make-music 'SequentialMusic 'elements (reverse (cdr (reverse elts)))) + ) +) +#(define (lastnote mus) + (let ((elts (ly:music-property mus 'elements))) + (make-music 'SequentialMusic 'elements (list (last elts))) + ) +) +% TODO: check whether on one note +tutti = #(define-music-function (music) (ly:music?) #{ - #mus - #})) + \once \override HorizontalBracket.connect-to-neighbor = #'(#t #t) + <>\startGroup + #(allbutlastnote music) + <>\stopGroup + #(lastnote music) + #})