>>>>> "pkx166h" == pkx166h  <[email protected]> writes:

pkx166h> Peter, this has passed our 'countdown' review, if you don't
pkx166h> yet have push access you can email me a git-formatted patch
pkx166h> and I can push it for you.

OK here it is.

>From ee64a711a9b046496eeef116a1e1a01fe4a0df2a Mon Sep 17 00:00:00 2001
From: Peter Chubb <[email protected]>
Date: Thu, 15 Mar 2012 09:48:52 +1100
Subject: [PATCH] rall. and accel stopped working in articulate.

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 <[email protected]>
Reviewed-by: Carl Sorensen <[email protected]>
Reviewed-by: Graham Percival <[email protected]>
Signed-off-by: Peter Chubb <[email protected]>
---
 ly/articulate.ly |   65 ++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 46 insertions(+), 19 deletions(-)

diff --git a/ly/articulate.ly b/ly/articulate.ly
index 59424e5..4702e20 100644
--- a/ly/articulate.ly
+++ b/ly/articulate.ly
@@ -341,8 +341,18 @@
 ;     (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.
@@ -414,6 +424,14 @@
             (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."))
            (loop factor (cons e newelements) tail (cons 'pocoRall actions)))
@@ -477,25 +495,37 @@
             (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
@@ -503,11 +533,8 @@
 
        ((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
@@ -621,12 +648,12 @@
      (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?)
-- 
1.7.9.5

_______________________________________________
lilypond-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to