> “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
