]> git.donarmstrong.com Git - lilypond.git/commitdiff
rall. and accel stopped working in articulate.
authorPeter Chubb <peter.chubb@nicta.com.au>
Wed, 14 Mar 2012 22:48:52 +0000 (09:48 +1100)
committerJames Lowe <pkx166h@gmail.com>
Wed, 4 Apr 2012 08:12:52 +0000 (09:12 +0100)
According to the the git logs, in February 2011 the way that tempo
changes for MIDI were interpreted changed from just the
tempoWholesPerMinute property to use a TempoChangeEvent.

This broke rall. in articulated MIDI output.

This patch brings the articulate script up-to-date wrt to the way that
tempo changes are signalled, and also adds accel. and poco accel. to
the list of accepted scripts.

Reported-by: Thomas Morley <thomasmorley65@googlemail.com>
Reviewed-by: Carl Sorensen <Carl.D.Sorensen@gmail.com>
Reviewed-by: Graham Percival <graham@percival-music.ca>
Signed-off-by: Peter Chubb <peter.chubb@nicta.com.au>
ly/articulate.ly

index 59424e515216b95776e038dadf653566ab25b3cb..1397766d51a6ef452f2ea77d2a0cec30d14d67b4 100644 (file)
 ;     (ac:accel trillMusic factor))
  )))
 
-
-
+%
+% Generate a tempoChangeEvent and its associated property setting.
+%
+#(define (ac:tempoChange tempo)
+  (make-sequential-music
+   (list (make-music 'TempoChangeEvent
+         'metronome-count
+         tempo
+         'tempo-unit
+         (ly:make-duration 0 0 1 1))
+    (context-spec-music
+    (make-property-set 'tempoWholesPerMinute  tempo) 'Score))))
 
 % If there's an articulation, use it.
 % If in a slur, use (1 . 1) instead.
             (string= t "rit.")
             (string= t "rall."))
            (loop factor (cons e newelements) tail (cons 'rall actions)))
+          ((or
+            (string= t "accelerando")
+            (string= t "accel")
+            (string= t "accel."))
+           (loop factor (cons e newelements) tail (cons 'accel actions)))
+          ((or
+            (string= t "poco accel."))
+           (loop factor (cons e newelements) tail (cons 'pocoAccel actions)))
           ((or
             (string= t "poco rall.")
             (string= t "poco rit."))
             (make-music 'RestEvent 'duration (ly:make-duration len dots newnum newdenom))))))
          music)))
 
+       ((accel)
+       (set! ac:lastTempo ac:currentTempo)
+       (set! ac:currentTempo (ly:moment-div ac:currentTempo ac:rallFactor))
+       (let ((pset (ac:tempoChange ac:currentTempo)))
+        (if (null? (cdr actions))
+         (make-sequential-music (list pset music))
+         (make-sequential-music
+          (list pset (loop (cdr actions)))))))
+
+       ((pocoAccel)
+       (set! ac:lastTempo ac:currentTempo)
+       (set! ac:currentTempo (ly:moment-div ac:currentTempo ac:pocoRallFactor))
+       (let ((pset (ac:tempoChange ac:currentTempo)))
+        (if (null? (cdr actions))
+         (make-sequential-music (list pset music))
+         (make-sequential-music
+          (list pset (loop (cdr actions)))))))
+
        ((rall)
+       (set! ac:lastTempo ac:currentTempo)
        (set! ac:currentTempo (ly:moment-mul ac:currentTempo ac:rallFactor))
-       (let ((pset (make-music 'PropertySet
-          'value
-          ac:currentTempo
-          'symbol
-          'tempoWholesPerMinute)))
+       (let ((pset (ac:tempoChange ac:currentTempo)))
         (if (null? (cdr actions))
          (make-sequential-music (list pset music))
          (make-sequential-music
           (list pset (loop (cdr actions)))))))
 
        ((pocoRall)
+       (set! ac:lastTempo ac:currentTempo)
        (set! ac:currentTempo (ly:moment-mul ac:currentTempo ac:pocoRallFactor))
-       (let ((pset (make-music 'PropertySet
-          'value
-          ac:currentTempo
-          'symbol
-          'tempoWholesPerMinute)))
+       (let ((pset (ac:tempoChange ac:currentTempo)))
         (if (null? (cdr actions))
          (make-sequential-music (list pset music))
          (make-sequential-music
 
        ((aTempo)
        (set! ac:currentTempo ac:lastTempo)
-       (let ((pset (make-music 'PropertySet
-          'value
-          ac:currentTempo
-          'symbol
-          'tempoWholesPerMinute)))
+
+       (let ((pset (ac:tempoChange ac:currentTempo)))
         (if (null? (cdr actions))
          (make-sequential-music (list pset music))
          (make-sequential-music
      (ac:adjust-props (ly:music-property music 'symbol) music)
      music)
 
-    (else  music))
+    (else music))
  ))
 
 
 
-% At last ... here's the music function that aplies all the above to a
+% At last ... here's the music function that applies all the above to a
 % score.
 articulate = #(define-music-function (parser location music)
               (ly:music?)