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


Reply via email to