Hi Jean,

As always… remarkable.

One question: How hard would it be to have this output more precise timings 
(e.g., 1/4 or 1/10th or 1/100th of a second, or SMPTE timecode in 
minutes:seconds:frames)? I could imagine this being *very* useful for 
film/video/media composers.

Thanks!
Kieren.

> On Mar 14, 2024, at 5:45 PM, Jean Abou Samra <j...@abou-samra.fr> wrote:
> 
>> “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
> }
> 

______________________________________________

My work day may look different than your work day. Please do not feel obligated 
to read or respond to this email outside of your normal working hours.


Reply via email to