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