2016-12-05 16:52 GMT+01:00 Brin Solomon <amphio...@gmail.com>:
> Hello all,
>
> I'm trying to typeset a piece where one player has an unmetered cadenza
> while every other player rests. I'm trying to use mmrest-of-length to
> generate the rests, but if I use \cadenzaOn, I get the error "programming
> error: Multi_measure_rest::get_rods (): I am not spanned!" and the rests are
> not printed. This error doesn't happen if I use skip-of-rest instead, but in
> that case, I don't get the rests.
>
> Here is a minimal example that demonstrates the problem:
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
> \version "2.18.2"
>
> MyCadenza = \relative c' {
>   c4 d8 e f g g4
>   f2 g4 g \bar "|"
> }
>
> \new GrandStaff <<
>   \new Staff {
>     \cadenzaOn
>     \MyCadenza
>     \cadenzaOff c'1
>   }
>   \new Staff {
>     \cadenzaOn
>     #(mmrest-of-length MyCadenza)
>     \cadenzaOff
>     c'1
>   }
>>>
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
> I'm running version 2.18.2 on Mac OS 10.11.6. Is there a different command I
> should be using to get a full measure rest while I'm using \cadenzaOn?
>
> Thanks in advance,
> Brin


Hi,
found some code on the list (can't say anymore who posted it
initially) and extended it a bit. See attached.
It completely avoids \cadenzaOn/Off, because of the hassle you experienced.
midi may come out strange (not tested), I don't care about midi, though ...

It's 2.15.24 code, but still working. Anyway running convert-ly over
it may be a good idea.

Maybe it helps,
  Harm
\version "2.15.24" 

cadenzaNotes =
#(define-music-function (parser location fermata? music cad-music) (boolean? ly:music? ly:music?)
  (let* ((mus-len (ly:music-length  cad-music))
         (num (ly:moment-main-numerator mus-len))
         (denom (ly:moment-main-denominator mus-len))
         (fermata (make-music 'MultiMeasureTextEvent
                             'tweaks (list
                                      ;; Set the 'text based on the 'direction
                                      (cons 'text (lambda (grob)
                                                    (if (eq? (ly:grob-property grob 'direction) DOWN)
                                                        (markup #:musicglyph "scripts.dfermata")
                                                        (markup #:musicglyph "scripts.ufermata"))))
                                      (cons 'outside-staff-priority 40)
                                      (cons 'outside-staff-padding 0))))
        (lst (list
  	#{
  	  \set Timing.measureLength = $mus-len
  	  \scaleDurations #(cons num denom) $music 
  	  \unset Timing.measureLength
  	#}))
        )
 (make-sequential-music
  (if fermata?
  (cons fermata lst)
  lst))))


othernotes = \relative c'' { d1 c1 }
cnotes = \relative c'' {  c8[ d e f g]  c,8[ d e f g]}
snotes = { $(skip-of-length cnotes) }
mnotesI = \cadenzaNotes ##t R1 \cnotes
mnotesII = \cadenzaNotes ##f \relative c'' { c2 d } \cnotes


\score {
 <<
   \new Staff { \othernotes \cnotes \othernotes }
   \new Staff { \othernotes \snotes \othernotes }
   \new Staff { \othernotes \mnotesI \othernotes }
   \new Staff { \othernotes \mnotesII \othernotes }
   \new Staff \relative c'' { d1 c1~ \cadenzaNotes ##t { c2\fermata g4\fermata c~ }  \cnotes  c1 d }
   % manually:
   \new Staff { \othernotes R1*10/8\fermataMarkup  \othernotes }
   \new Staff { \othernotes \scaleDurations #'(10 . 8) \relative c'' { c2\fermata g4\fermata c }  \othernotes }
 >>
}
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to