> “This sounds like a job for… Custom Engraver!!” :) \version "2.24.2"
#(define (Custom_engraver!! context) (define (format-time seconds) (let ((minutes (euclidean-quotient seconds 60)) (rest (euclidean-remainder seconds 60))) (string-append (if (zero? minutes) "" (format #f "~am" minutes)) (format #f "~as" (round rest))))) (let ((wholes-per-minute 15) (last-time ZERO-MOMENT) (total-time 0) (marks '())) (make-engraver ((process-music engraver) (let* ((new-time (ly:context-current-moment context)) (time-delta (ly:moment-main (ly:moment-sub new-time last-time))) (new-wholes-per-minute (and=> (ly:context-property context 'tempoWholesPerMinute #f) ly:moment-main))) (set! total-time (+ total-time (* 60 (/ time-delta wholes-per-minute)))) (set! last-time new-time) (when new-wholes-per-minute (set! wholes-per-minute new-wholes-per-minute)))) (acknowledgers ((text-mark-interface engraver grob source-engraver) (set! marks (cons grob marks)))) ((process-acknowledged engraver) (for-each (lambda (grob) (when (assq-ref (ly:grob-property grob 'details) 'time-mark) (ly:grob-set-property! grob 'text (format-time total-time)))) marks) (set! marks '()))))) \layout { \context { \Score \consists #Custom_engraver!! } } timeMark = \tweak details.time-mark ##t \tweak color "red" \textEndMark "Abracadabra" { c'1 \timeMark \tempo 4 = 120 c'4 8. 16 2 \timeMark \tempo 4 = 180 c'2 2 \timeMark \repeat unfold 180 c'4 \timeMark }
signature.asc
Description: This is a digitally signed message part