Jump to content

Multimeasure Rests over a Cadenza

From LilyPond wiki

How to get Multimeasure rests in another staff, over a cadenza.

\version "2.24.0"

%% http://lsr.di.unimi.it/LSR/Item?id=836

cadenzaToMusic =
#(define-music-function (cadenzaMusic music)
                                                (ly:music? ly:music?)
"Adjust the length of `music and the measureLength, to fit the length of
`cadenzaMusic"
(let* ((clen (ly:music-length cadenzaMusic))
     (mlen (ly:music-length music))
     (factor (ly:moment-div clen mlen))
     (compressed (ly:music-compress music factor)))
 ;; (format #t "factor : ~a\n" factor)
 #{
  \set Timing.measureLength = $clen
  $compressed
  \unset Timing.measureLength
 #}))

\include "english.ly"

cadenzaC = \relative c''' {
 b2 ^\markup { \italic "cadenza" } ~
 \oneVoice b8 \fermata [a8] ) e'16 ( [a, fs a] \voiceOne b4 \fermata ~
}

cadenzaD = \relative c''' {
 b4 ~ ^\markup { \italic "cadenza" } b8 \fermata [a8] ) g16 ( [fs e d
e fs ] e4 ) \fermata ~
}

\score {
 <<
  \new Staff {
    \override Score.BarNumber.break-visibility = #'#(#t #t #t)
    \key d \major \numericTimeSignature
    R1
    \cadenzaToMusic \cadenzaC R1
    R1
    \cadenzaToMusic \cadenzaD R1
    R1
  }
  \new Staff \relative c''' {
    \key d \major \numericTimeSignature
    r2 r4 a4 (
    \cadenzaC
    b1 ~
    \cadenzaD
    e,4. r8 r2
  }
 >>
}