lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Volta endings and using \set Score.repeatCommands


From: Thomas Morley
Subject: Re: Volta endings and using \set Score.repeatCommands
Date: Tue, 11 Apr 2017 11:22:15 +0200

2017-04-10 3:45 GMT+02:00 Stan Mulder <address@hidden>:
> Hi group.
>
> I'm trying to construct a certain volta ending where there is a first and
> second ending, but the first ending does a D.S. to the sign, while the the
> second ending is a multiple repeat for solos. I seem to have made it render
> correctly, but I keep getting this error. Hopefully this is enough code:
>
>
> warning: already have a volta spanner, ending that one prematurely
>
> [64]
>
>
> DSalCoda = {
>   \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
>   \mark \markup "D.S. al Coda"
> }
>
> voltaSolos = \markup { "2, 3, 4 . . ." }
>
>   \alternative {
>     {
>       s1
>       \DSalCoda
>       \bar "||"
>     }
>     {
>       \set Score.repeatCommands = #(list (list 'volta voltaSolos)
> 'start-repeat)
>       s1
>       \bar ":|."
>     }
>   }
>
>
> Stan



Hi Stan,

(1) %%%%%%%%%%%%%%%%%%%

In general, the settings accepted in the argument-list for
repeatCommands may manually create repeats with or without alternative
endings.
Drawback: \unfoldRepeats doesn't work on those manual settings. See
the following example where simple repeats are done (manually and via
\repeat volta ...):

\unfoldRepeats
\relative {
  c''1
  \set Score.repeatCommands = #'(start-repeat)
  d4 e f g
  \set Score.repeatCommands = #'(end-repeat)
  c1
  \repeat volta 2 { d,4 e f g }
}

(2) %%%%%%%%%%%%%%%%%%%

If you don't care about midi you could do the following.
Note that 'start-repeat would be used to begin a (new) repeated
section, but _not_ to start an alternative ending. Don't use it here.

\repeat volta 2 { c'1 }
\alternative {
  {
    d'1
  }
  {
    \set Score.repeatCommands =
      #(list
        'end-repeat ;; print the ending repeat-bar
        '(volta #f) ;; finish first volta
        (list 'volta voltaSolos) ;; set text for second volta
        )
    e'
  }
}

Though, in your example you don't want the closing repeat-bar, but \bar "||".
Hence 'end-repeat should be deleted and to ensure a closing first
VoltaBracket use \allowVoltaHook "||" at top-level.

Full example:

\allowVoltaHook "||"

DSalCoda = {
  \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
  \mark \markup "D.S. al Coda"
}

voltaSolos = \markup { "2, 3, 4 . . ." }

\repeat volta 2 {c4 c c c }
\alternative {
  {
    c4 c c c
    \DSalCoda
    \bar "||"
  }
  {
    \set Score.repeatCommands = #(list '(volta #f) (list 'volta voltaSolos) )
    c4 c c c
    \bar ":|."
  }
}

(3) %%%%%%%%%%%%%%%%%%%

If you need unfoldRepeats, an override may fit better:

\allowVoltaHook "||"

DSalCoda = {
  \once \override Score.RehearsalMark.self-alignment-X = #RIGHT
  \mark \markup "D.S. al Coda"
}

voltaSolos = \markup { "2, 3, 4 . . ." }


voltaTxt =
    \once \override Score.VoltaBracket.before-line-breaking =
    #(lambda (grob) (ly:grob-set-property! grob 'text voltaSolos))

%\unfoldRepeats
\repeat volta 2 {c4 c c c }
\alternative {
  {
    c4 c c c
    \DSalCoda
    \bar "||"
  }
  {
      \voltaTxt
    c4 c c c
    \bar ":|."
  }
}



HTH,
  Harm



reply via email to

[Prev in Thread] Current Thread [Next in Thread]