>From 60d76599a453863a402dcf16d2089c396f0e7701 Mon Sep 17 00:00:00 2001 From: Zefram Date: Sun, 23 Dec 2012 09:52:48 +0000 Subject: [PATCH 2/2] articulate TremoloEvent Expand TremoloEvent to repeated notes, in the unfolding stage of articulation. --- ly/articulate.ly | 39 ++++++++++++++++++++++++++++++++++++++- 1 files changed, 38 insertions(+), 1 deletions(-) diff --git a/ly/articulate.ly b/ly/articulate.ly index 6f09510..3b8c110 100644 --- a/ly/articulate.ly +++ b/ly/articulate.ly @@ -92,6 +92,7 @@ \version "2.16.0" #(use-modules (srfi srfi-1)) +#(use-modules (srfi srfi-11)) #(use-modules (ice-9 debug)) #(use-modules (scm display-lily)) @@ -443,6 +444,42 @@ (- rc (length ealtl)) (lambda (i) (list (ly:music-deep-copy body) (ly:music-deep-copy (car ealtl))))) (map (lambda (alt) (list (ly:music-deep-copy body) alt)))))))))) + ((EventChord) + (let-values + (((trem evl) + (partition (lambda (v) (eq? (ly:music-property v 'name) 'TremoloEvent)) + (ly:music-property m 'elements)))) + (if (null? trem) + m + (let* + ((tremtype (ly:music-property (car trem) 'tremolo-type)) + (tremtype-log (1- (integer-length tremtype))) + (durev (find (lambda (v) (not (null? (ly:music-property v 'duration)))) evl)) + (totaldur (if durev (ly:music-property durev 'duration) (ly:make-duration tremtype-log 0 1))) + (tgt-nrep (* (/ (ash 1 tremtype-log) (ash 1 (ly:duration-log totaldur))) + (/ (1- (ash 2 (ly:duration-dot-count totaldur))) + (ash 1 (ly:duration-dot-count totaldur))))) + (eff-nrep (max (truncate tgt-nrep) 1)) + (tremdur (ly:make-duration tremtype-log 0 + (* (/ tgt-nrep eff-nrep) (ly:duration-scale totaldur))))) + (or (and (= eff-nrep tgt-nrep) (= (ash 1 tremtype-log) tremtype)) + (ly:warning (_ "non-integer tremolo ~a:~a") + (duration->lily-string + (ly:make-duration + (ly:duration-log totaldur) + (ly:duration-dot-count totaldur) + 1) + #:force-duration #t + #:time-scale 1) + tremtype)) + (for-each + (lambda (v) + (or (null? (ly:music-property v 'duration)) + (set! (ly:music-property v 'duration) tremdur))) + evl) + (set! (ly:music-property m 'elements) evl) + (make-sequential-music + (list-tabulate eff-nrep (lambda (i) (ly:music-deep-copy m)))))))) ((MultiMeasureRestMusic) (make-sequential-music (list @@ -828,7 +865,7 @@ articulate = #(define-music-function (parser location music) (lambda () (music-map ac:articulate-chord - (event-chord-wrap! (ac:unfoldMusic music) parser))) + (ac:unfoldMusic (event-chord-wrap! music parser)))) (lambda () (or (= ac:stealForward 0) (begin -- 1.7.2.5