On Tue, 2023-12-12 at 12:40 -0800, Aaron Hill wrote: > Any better? > > %%%% > #(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 {} } #})) > %%%%
I was curious about few different test cases so I wrote a script to automate some tests. Test cases are described at the end of this email. In all cases there would ideally be only 1 midi file. Case 1: Found 0 midi files and 1 pdf files. Case 2: Found 1 midi files and 1 pdf files. Case 3: Found 0 midi files and 1 pdf files. Case 4: Found 1 midi files and 1 pdf files. Case 5: Found 0 midi files and 2 pdf files. Case 6: Found 1 midi files and 1 pdf files. With David's modification: (ly:output-def-lookup x 'is-midi #f) making the function look like this: #(define (add-midi-to-score score) (define (has-midi? score) (any (lambda (x) (ly:output-def-lookup x 'is-midi #f)) (ly:score-output-defs score))) (if (has-midi? score) score #{ \score { $score \midi {} } #})) Case 1: Found 1 midi files and 1 pdf files. Case 2: Found 2 midi files and 1 pdf files. Case 3: Found 2 midi files and 1 pdf files. Case 4: Found 3 midi files and 1 pdf files. Case 5: Found 0 midi files and 2 pdf files. Case 6: Found 1 midi files and 1 pdf files. test cases: Case 1 - A single score and no \midi block: \score { \new Staff \music \layout { } } Case 2 - A single score and a \midi block: \score { \new Staff \music \layout { } \midi { } } Case 3 - Two score blocks without a midi block: \score { \new Staff \music \layout { } } \score { \new Staff \music \layout { } } Case 4 - Two score blocks with a midi block: \score { \new Staff \music \layout { } } \score { \new Staff \music \midi { } } Case 5 - Something esoteric without a midi block: \book { \bookOutputName "pdf_file_only" \score { \new Staff \music \layout {} } } \book { \bookOutputName "midi_file_only" \score { \new Staff \music \layout {} } } Case 6 - Something esoteric with a midi block: \book { \bookOutputName "pdf_file_only" \score { \new Staff \music \layout {} } } \book { \bookOutputName "midi_file_only" \score { \new Staff \music \midi {} } } The test script looks like this: #!/bin/sh export PATH=/path/to/lilypond-2.24.3/bin:$PATH rm -rf *.pdf *.midi LIST="1 2 3 4 5 6" for k in $LIST; do rm -rf *.pdf *.midi echo -n "Case $k: " lilypond -s -dinclude-settings=add-midi.ily "case$k.ly" PDFS=`ls 2>/dev/null -1 *.pdf | wc -l` MIDIS=`ls 2>/dev/null -1 *.midi | wc -l` echo Found $MIDIS midi files and $PDFS pdf files. done rm -rf *.pdf *.midi And add-midi.ily looks like this: #(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))) music = { \relative c'' \repeat volta 20 { c4 c c c \break } }