]> git.donarmstrong.com Git - lilypond.git/blobdiff - ly/articulate.ly
Makelsr.py run
[lilypond.git] / ly / articulate.ly
index 6f095103a8c74037e60801e65a57e36840aea330..6992c87ebdc94b8a7a09860153d7494655b8354a 100644 (file)
 %  * Add Mordents (reported by Patrick Karl)
 %
 
-\version "2.16.0"
+\version "2.17.11"
 
 #(use-modules (srfi srfi-1))
+#(use-modules (srfi srfi-11))
 #(use-modules (ice-9 debug))
 #(use-modules (scm display-lily))
 
 
 % How much to slow down for a rall. or a poco rall.
 % (or speed up for accel or poco accel)
-#(define ac:rallFactor (ly:make-moment 60 100)) % 40% slowdown
-#(define ac:pocoRallFactor (ly:make-moment 90 100)) % 10% slowdown
+#(define ac:rallFactor (ly:make-moment 60/100)) % 40% slowdown
+#(define ac:pocoRallFactor (ly:make-moment 90/100)) % 10% slowdown
 
 % The absolute time for a twiddle in a trill, in minutes.
 % Start with 1/4 seconds == 1/240 minutes
-#(define ac:maxTwiddleTime (ly:make-moment 1 240))
+#(define ac:maxTwiddleTime (ly:make-moment 1/240))
 
 % How long ordinary grace notes should be relative to their notated
 % duration.  9/40 is LilyPond's built-in behaviour for MIDI output
                 (cons 6 0))))
 
 
-#(define ac:currentTempo (ly:make-moment 15 1)) % 4 = 60, measured wholes per minute
+#(define ac:currentTempo (ly:make-moment 15/1)) % 4 = 60, measured wholes per minute
 #(define ac:lastTempo ac:currentTempo) % for 'a tempo' or 'tempo I'
 
 % The duration of the current note.  Start at a crotchet
 % for no good reason.
-#(define ac:currentDuration (ly:make-duration 2 0 1 1))
+#(define ac:currentDuration (ly:make-duration 2 0 1/1))
 
 % Amount of musical time (in whole notes) that we need to steal from the
 % next events seen.
     pre-t
     (let loop ((len (ly:music-length music)))
      (if (ly:moment<? t len)
-      (loop (ly:moment-mul len (ly:make-moment 1 2)))
+      (loop (ly:moment-mul len (ly:make-moment 1/2)))
       len)))))
 
 
 #(define (ac:trill music)
   " Replace music with time-compressed repeats of the music,
     maybe accelerating if the length is longer than a crotchet "
-  (let* ((hemisemidur (ly:make-duration 5 0 1 1))
+  (let* ((hemisemidur (ly:make-duration 5 0 1/1))
         (orig-len  (ly:music-length music))
         (t (ac:twiddletime music))
         (uppernote '())
-        (note_moment (ly:moment-mul t (ly:make-moment 1 2)))
+        (note_moment (ly:moment-mul t (ly:make-moment 1/2)))
         (c1 (ly:moment-div orig-len note_moment))
         (c2 (inexact->exact
              (round (/ (ly:moment-main-numerator c1)
          'metronome-count
          tempo
          'tempo-unit
-         (ly:make-duration 0 0 1 1))
+         (ly:make-duration 0 0 1/1))
     (context-spec-music
     (make-property-set 'tempoWholesPerMinute  tempo) 'Score))))
 
            (list-tabulate
             (- 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))))))))))
+           (map (lambda (alt) (list (ly:music-deep-copy body) alt)) ealtl))))))))
+     ((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 (/ (duration-visual-length totaldur) (duration-log-factor tremtype-log)))
+         (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 (duration-visual totaldur) #: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
        ; We implement as a half-shake.
        (let*
         ((totallength (ly:music-length music))
-         (newlen (ly:moment-sub totallength (ly:make-moment 3 32)))
+         (newlen (ly:moment-sub totallength (ly:make-moment 3/32)))
          (newdur (ly:make-duration
                   0 0
                   (ly:moment-main-numerator newlen)
                   (ly:moment-main-denominator newlen)))
-         (gracedur (ly:make-duration 5 0 1 1))
+         (gracedur (ly:make-duration 5 0 1/1))
          (gracenote (ly:music-deep-copy music))
          (abovenote (ly:music-deep-copy music))
          (mainnote (ly:music-deep-copy music))
         ((totaldur (ly:music-property
                (car (ly:music-property music 'elements)) 'duration))
          (dur (ly:duration-length totaldur))
-         (newlen (ly:moment-sub dur (ly:make-moment 2 32)))
+         (newlen (ly:moment-sub dur (ly:make-moment 2/32)))
          (newdur (ly:make-duration
                0 0
                   (ly:moment-main-numerator newlen)
          (music-map (lambda (n)
           (if (eq? 'NoteEvent (ly:music-property n 'name))
            (set! (ly:music-property n 'duration)
-            (ly:make-duration 5 0 1 1)))
+            (ly:make-duration 5 0 1/1)))
                      n)
           mordent)
          (music-map (lambda (n)
@@ -828,7 +857,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
@@ -877,10 +906,10 @@ appoggiatura =
         (main-orig-len (ly:music-length main))
         (numerator (ly:moment-main-numerator maindur))
         (factor (if (eq? (remainder numerator 3) 0)
-                 (ly:make-moment 1 3) (ly:make-moment 1 2))))
+                 (ly:make-moment 1/3) (ly:make-moment 1/2))))
    (ly:music-compress grace
     (ly:moment-mul factor (ly:moment-div main-orig-len grace-orig-len)))
-   (ly:music-compress main (ly:moment-sub (ly:make-moment 1 1) factor))
+   (ly:music-compress main (ly:moment-sub (ly:make-moment 1/1) factor))
 
     (set! (ly:music-property grace 'elements)
      (append (ly:music-property grace 'elements)