On Tue, 2023-12-12 at 14:46 -0800, Stefano Antonelli wrote:
> #(define (add-midi-to-score score)
>    (define (has-midi? score)
>      (any (lambda (x) (ly:output-def-lookup x 'is-midi))
>           (ly:score-output-defs score)))
>    (if (has-midi? score) score
>      #{ \score { $score \midi {} } #}))
> 
> toplevel-score-handler =
> #(lambda (score)
>    (collect-scores-for-book (add-midi-to-score score)))

It seems to me, that in order to make this work, two things need to
happen:

1. The whole score collection has to be traversed and \midi counted
   This could be done via toplevel-score-handler and some global
   variable.

2. If there are no midi blocks, add one.  This is tricker.  Assuming
   there is a toplevel-of-everything-handler, it would be necessary
   to find a score (which one though?) and then add a midi block.


I took a shot at the first one:

#(define midi-count 0)

#(define (has-midi? score)
     (any (lambda (x) (ly:output-def-lookup x 'is-midi #f))
          (ly:score-output-defs score)))

#(define (count-midi-in-score score)
   (if (has-midi? score) (set! midi-count (+ midi-count 1)))
   score)

toplevel-score-handler =
#(lambda (score)
   (collect-scores-for-book (count-midi-in-score score)))

midi-count now contains the right number.

What can I do with it?







Reply via email to