LilyPond snippets: Repeats

# Repeats

Repeats

## Ajout du crochet de reprise à d’autres portées

D’ordinaire, le graveur `Volta_engraver` réside dans le contexte `Score` ; les crochets précédant une reprise s’impriment donc seulement au-dessus de la portée du haut. On peut ajuster cela en déplaçant ce graveur vers les contextes de portée (`Staff`) qui doivent comporter ces crochets.

    <<
      \new Staff { \repeat volta 2 { c'1 } \alternative { c' } }
      \new Staff { \repeat volta 2 { c'1 } \alternative { c' } }
      \new Staff \with { \consists "Volta_engraver" } { c'2 g' e' a' }
      \new Staff { \repeat volta 2 { c'1 } \alternative { c' } }
    >>

## Numéros de mesure centrés

Les partitions pour grands ensembles disposent souvent de la numérotation des mesures centrée en dessous du système. L’extrait ci-dessous indique comment le `Measure_counter_engraver` permet de répondre à cette pratique. Le graveur est ici ajouté à un contexte `Dynamics`.

Il s’agit ici de code historique. Dès LilyPond 2.23.3, un simple `\set Score.centerBarNumbers = ##t` suffit.

    \layout {
      \context {
        \Dynamics
        \consists #Measure_counter_engraver
        \override MeasureCounter.direction = #DOWN
        \override MeasureCounter.font-encoding = #'latin1
        \override MeasureCounter.font-shape = #'italic
        % to control the distance of the Dynamics context from the staff:
        \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
      }
      \context {
        \Score
        \remove "Bar_number_engraver"
      }
    }

    pattern = \repeat unfold 7 { c'4 d' e' f' }

    \new StaffGroup <<
      \new Staff {
        \pattern
      }
      \new Staff {
        \pattern
      }
      \new Dynamics {
        \startMeasureCount
        s1*7
        \stopMeasureCount
      }
    >>

## Modification des barres de mesure par défaut

Les barres de mesure par défaut peuvent se modifier grâce à leur redéfinition au sein d’un contexte `Score`.

    % http://lsr.di.unimi.it/LSR/Item?id=964
    %%=> http://lists.gnu.org/archive/html/lilypond-user/2014-03/msg00126.html
    %%=> http://lilypond.1069038.n5.nabble.com/Changing-the-default-end-repeat-bracket-tc169357.html

    \layout {
      \context {
        \Score
        %% Changing the defaults from engraver-init.ly
        measureBarType = #"!"
        startRepeatBarType = #"[|:"
        endRepeatBarType = #":|]"
        doubleRepeatBarType = #":|][|:"
      }
    }

    %% example:
    {
      c'1
      \repeat volta 2 { \repeat unfold 2 c' }
      \repeat volta 2 { \repeat unfold 2 c' }
      \alternative {
        { c' }
        {
          %% v2.18 workaround
          \once\override Score.VoltaBracket.shorten-pair = #'(1 . -1)
          c'
        }
      }
      \bar "|."
    }

## Trémolo et changement de portée

Dans la mesure où `\repeat tremolo` requiert deux arguments musicaux pour un trémolo d’accords, la note ou l’accord de la portée opposée doit être encadré par des accolades et se voir adjoindre la commande `\change Staff`.

    \new PianoStaff <<
      \new Staff = "up" \relative c'' {
        \key a \major
        \time 3/8
        s4.
      }
      \new Staff = "down" \relative c'' {
        \key a \major
        \time 3/8
        \voiceOne
        \repeat tremolo 6 {
          <a e'>32
          {
            \change Staff = "up"
            \voiceTwo
            <cis a' dis>32
          }
        }
      }
    >>

## Impression de trémolo avec ligature flottante

Lorsque la durée totale d’un trémolo est inférieure à la noire, égale une blanche, ou bien entre une blanche et une ronde, il est d’usage que toutes les ligatures soient en contact avec les hampes. Certains styles de gravure font cependant apparaître des ligatures détachées, centrées entre les hampes. Pour ce type de trémolo, le nombre de hampes flottantes se gère au travers de la propriété `gap-count` de l’objet `Beam`, et l’écart entre ligature et hampe se définit par la propriété `gap`.

    \relative c'' {
      \repeat tremolo 8 { a32 f }
      \override Beam.gap-count = #1
      \repeat tremolo 8 { a32 f }
      \override Beam.gap-count = #2
      \repeat tremolo 8 { a32 f }
      \override Beam.gap-count = #3
      \repeat tremolo 8 { a32 f }

      \override Beam.gap-count = #3
      \override Beam.gap = #1.33
      \repeat tremolo 8 { a32 f }
      \override Beam.gap = #1
      \repeat tremolo 8 { a32 f }
      \override Beam.gap = #0.67
      \repeat tremolo 8 { a32 f }
      \override Beam.gap = #0.33
      \repeat tremolo 8 { a32 f }
    }

## Répétition en pourcent isolée

Des symboles de pourcentage isolés peuvent aussi être obtenus au moyen d’un silence multimesure dont on modifie l’aspect :

    makePercent =
    #(define-music-function (note) (ly:music?)
       "Make a percent repeat the same length as NOTE."
       (make-music 'PercentEvent
                   'length (ly:music-length note)))

    \relative c'' {
      \makePercent s1
    }

## Compteur de mesures

Le code ci-dessous permet, de façon détournée, d’afficher un compteur de mesures à l’aide d’une répétition en pourcent rendue transparente.

    <<
      \context Voice = "foo" {
        \clef bass
        c4 r g r
        c4 r g r
        c4 r g r
        c4 r g r
      }
      \context Voice = "foo" {
        \set countPercentRepeats = ##t
        \hide PercentRepeat
        \override PercentRepeatCounter.staff-padding = #1
        \repeat percent 4 { s1 }
      }
    >>

## Numérotation de groupes de mesures

Cet extrait illustre l’utilisation du `Measure_counter_engraver` aux fins de numéroter un groupe de mesures successives. La section à numéroter peut éventuellement comporter des reprises.

Le graveur doit être ajouté au contexte approprié. Il est ici attaché au contexte `Staff`, mais pourrait l’être à un contexte `Dynamics`.

Le compteur est lancé par `\startMeasureCount` et arrêté par `\stopMeasureCount`. La numérotation commence à `1` par défaut, comportement qui peut se modifier à l’aide de la propriété `count-from`.

Lorsqu’une mesure s’étend après un saut de ligne, le numéro y est alors répété, entre parenthèses.

    \layout {
      \context {
        \Staff
        \consists #Measure_counter_engraver
      }
    }

    \new Staff {
      \startMeasureCount
      \repeat unfold 7 {
        c'4 d' e' f'
      }
      \stopMeasureCount
      \bar "||"
      g'4 f' e' d'
      \override Staff.MeasureCounter.count-from = #2
      \startMeasureCount
      \repeat unfold 5 {
        g'4 f' e' d'
      }
      g'4 f'
      \bar ""
      \break
      e'4 d'
      \repeat unfold 7 {
        g'4 f' e' d'
      }
      \stopMeasureCount
    }

## Affichage du numéro de répétition en pourcent

Le numéro de mesure répétée sera imprimé à intervalle régulier si vous déterminez la propriété de contexte `repeatCountVisibility`.

    \relative c'' {
      \set countPercentRepeats = ##t
      \set repeatCountVisibility = #(every-nth-repeat-count-visible 5)
      \repeat percent 10 { c1 } \break
      \set repeatCountVisibility = #(every-nth-repeat-count-visible 2)
      \repeat percent 6 { c1 d1 }
    }

## Compteur de répétition en pourcent

Les répétitions de plus de deux mesures sont surmontées d’un compteur, si l’on active la propriété `countPercentRepeats` comme le montre l’exemple suivant :

    \relative c'' {
      \set countPercentRepeats = ##t
      \repeat percent 4 { c1 }
    }

## Positionnement des segno et coda (avec saut de ligne)

Le code ci-dessous permet d’adjoindre à un signe segno un texte D.S. al Coda, là où se trouverait normalement un bout de portée. La coda entamera une nouvelle ligne. Une variante, indiquée ici même, permet de laisser la coda sur la même ligne.

    {
      \relative c'' {
        c4 c c c c c c c c c c c
        \repeat segno 2 {
          c4 c c c c c c c
          \alternative {
            \volta 1 {
              c4 c c c c c c c c c c c
              % If you don't use \break at Coda, use \noBreak here
              % and after \bar "" below.
              \noBreak
              \section % double bar line
              \cadenzaOn % pause bar count
              \stopStaff % remove staff lines
              % Increasing the unfold counter will expand the staff-free space
              \repeat unfold 6 {
                s1
                \bar ""
              }
              % Place JumpScript where the staff would normally be.
              \once \override Score.JumpScript.outside-staff-priority = ##f
              \once \override Score.JumpScript.Y-offset = 0
              \startStaff % resume bar count
              \cadenzaOff % show staff lines again
            }
          }
        }
        \sectionLabel "Coda"
        % Show Coda on a new line
        \break
        \repeat unfold 8 { c4 c c c }
        \fine
      }
    }

## Succession de reprises et style de barre par défaut

LilyPond dispose de trois différents styles de barre pour indiquer une succession de reprises. Vous devez opter pour un style par défaut, à l’aide de la propriété `doubleRepeatBarType`.

    \relative c'' {
      \repeat volta 2 { c1 }
      \set Score.doubleRepeatBarType = #":..:"
      \repeat volta 2 { c1 }
      \set Score.doubleRepeatBarType = #":|.|:"
      \repeat volta 2 { c1 }
      \set Score.doubleRepeatBarType = #":|.:"
      \repeat volta 2 { c1 }
    }

## Diminution de la taille du crochet d’alternative

Les crochets indiquant les fins alternatives s’étalent tout au long de celles-ci. On peut les raccourcir en jouant sur la propriété `voltaSpannerDuration`. Dans l’exemple suivant, le crochet ne se prolonge que sur une mesure à 3/4.

    \relative c'' {
      \time 3/4
      c4 c c
      \set Score.voltaSpannerDuration = #(ly:make-moment 3/4)
      \repeat volta 5 { d4 d d }
      \alternative {
        {
          e4 e e
          f4 f f
        }
        { g4 g g }
      }
    }

## Crochet de reprise sous les chiffrages d’accord

L’ajout du `Volta_engraver` à la bonne portée permet d’imprimer les crochets de reprise entre les chiffrages et la portée.

    \score {
      <<
        \chords {
          c1
          c1
        }
        \new Staff \with {
          \consists "Volta_engraver"
        }
        {
          \repeat volta 2 { c'1 }
          \alternative { c' }
        }
      >>
      \layout {
        \context {
          \Score
          \remove "Volta_engraver"
        }
      }
    }

## Volta multiportée

L’ajout du `Volta_engraver` à la portée appropriée permet de répéter les indications de reprise qui normalement n’apparaissent que sur la portée supérieure de la partition.

    voltaMusic = \relative c'' {
      \repeat volta 2 {
        c1
      }
      \alternative {
        d1
        e1
      }
    }

    <<
      \new StaffGroup <<
        \new Staff \voltaMusic
        \new Staff \voltaMusic
      >>
      \new StaffGroup <<
        \new Staff \with { \consists "Volta_engraver" }
          \voltaMusic
        \new Staff \voltaMusic
      >>
    >>

## Indication de reprise avec texte grâce à `repeatCommands`

La commande `\repeat volta` permet d’indiquer facilement des reprises. Il est certains cas où l’adjonction d’un texte sous forme de `\markup` nécessite cependant de recourir à la propriété de contexte `repeatCommands`.

Dans la mesure où l’argument de `repeatCommands` est constitué d’une liste, le plus simple est de définir le texte dans une variable qui sera ensuite incorporée dans la liste en respectant la syntaxe Scheme `#(list (list 'volta texteIdentificateur))`. Les commandes de début et de fin de reprise peuvent s’ajouter séparément à la liste des éléments.

    voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } }

    \relative c'' {
      c1
      \set Score.repeatCommands = #(list (list 'volta voltaAdLib) 'start-repeat)
      c4 b d e
      \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat)
      f1
      \set Score.repeatCommands = #'((volta #f))
    }

#### LilyPond — Morceaux choisis v2.24.4 (branche stable).