LilyPond snippets: Rhythms

# Rhythms

Rhythms

## Coexistence de ligatures et liaisons avec des rythmes comprenant des n-olets

La syntaxe de LilyPond demande parfois un positionnement inhabituel des parenthèses, crochets, etc. qui peuvent s’entrelacer.

Par exemple, le crochet ouvrant une ligature manuelle se place à la suite de la note de départ et sa durée, non pas avant. De même, le crochet fermant se place à la fin de la ligature, y compris lorsque la dernière note se trouve incluse dans un n-olet.

Cet extrait illustre la manière de combiner ligatures manuelles, liaisons d’articulation, de prolongation ou de phrasé, avec des n-olets bornées par des accolades.

    {
      r16[ g16 \tuplet 3/2 { r16 e'8] }
      g16( a \tuplet 3/2 { b d e') }
      g8[( a \tuplet 3/2 { b d') e'] ~ }
      \time 2/4
      \tuplet 5/4 { e'32\( a b d' e' } a'4.\)
    }

## Ajout de parties de batterie

Grâce à la puissance des outils préconfigurés tels que la fonction `\drummode` et le contexte `DrumStaff`, la saisie de parties pour percussions est extrêmement simplifiée : chaque composant d’une batterie trouve sa place sur une portée dédiée (avec une clef particulière) et les têtes de note sont spécifiques à chaque élément. Il est également possible d’affecter un symbole particulier à chaque élément, tout comme de restreindre le nombre de lignes de la portée.

    drh = \drummode {
            cymc4.^"crash" hhc16^"h.h." hh hhc8 hho hhc8 hh16 hh
            hhc4 r4 r2
          }
    drl = \drummode {
            bd4 sn8 bd bd4 << bd ss >>
            bd8 tommh tommh bd toml toml bd tomfh16 tomfh
          }
    timb = \drummode {
             timh4 ssh timl8 ssh r timh r4
             ssh8 timl r4 cb8 cb
           }

    \score {
      <<
        \new DrumStaff \with {
          instrumentName = "timbales"
          drumStyleTable = #timbales-style
          \override StaffSymbol.line-count = #2
          \override BarLine.bar-extent = #'(-1 . 1)
        }
        <<
          \timb
        >>
        \new DrumStaff \with { instrumentName = "drums" }
        <<
          \new DrumVoice { \stemUp \drh }
          \new DrumVoice { \stemDown \drl }
        >>
      >>
      \layout { }
      \midi { \tempo 4 = 120 }
    }

## Ajustement de l’espacement des notes d’ornement

La propriété `spacing-increment` de `Score.GraceSpacing` permet d’ajuster l’espacement d’un groupe de notes d’ornement.

    graceNotes = {
      \grace { c4 c8 c16 c32 }
      c8
    }

    \relative c'' {
      c8
      \graceNotes
      \override Score.GraceSpacing.spacing-increment = #2.0
      \graceNotes
      \revert Score.GraceSpacing.spacing-increment
      \graceNotes
    }

## Alignement des numéros de mesure

Les numéros de mesure s’alignent en principe sur la droite de l’objet dont ils dépendent. C’est normalement le coin gauche de la portée ou, en cours de ligne, à gauche de la barre. Vous pouvez toutefois les centrer par rapport à la barre ou les afficher à droite de la barre.

    \relative c' {
      \set Score.currentBarNumber = #111
      \override Score.BarNumber.break-visibility = #all-visible
      % Increase the size of the bar number by 2
      \override Score.BarNumber.font-size = #2
      % Print a bar number every second measure
      \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2)
      c1 | c1
      % Center-align bar numbers
      \override Score.BarNumber.self-alignment-X = #CENTER
      c1 | c1
      % Left-align bar numbers
      \override Score.BarNumber.self-alignment-X = #LEFT
      c1 | c1
    }

## Brève alternative, avec deux barres verticales

Voici comment obtenir une brève – aussi appelée note carée – flanquée de deux barres verticales, au lieu d’une comme habituellement.

    \relative c'' {
      \time 4/2
      c\breve |
      \override Staff.NoteHead.style = #'altdefault
      b\breve
      \override Staff.NoteHead.style = #'baroque
      b\breve
      \revert Staff.NoteHead.style
      a\breve
    }

## Appoggiature avant une barre de mesure

Par défaut, appogiatures et autres notes d’ornement sur le premier temps d’une mesure s’impriment après la barre. Elles peuvent toutefois précéder la barre grâce à l’insertion d’une barre invisible puis d’une visible, comme indiqué ici.

    {
      R1
      %% default
      \appoggiatura d''8 c''4 r2.
      %% cheated
      \appoggiatura { \bar "" d''8 \bar "|" } c''4 r2.
    }

## Subdivision de ligatures automatiques

Dès lors que la propriété `subdivideBeams` aura été activée, une ligature sera subdivisée selon les préceptes de `beatLength`.

    \new Staff {
      \relative c'' {
        <<
          {
            \voiceOne
            \set subdivideBeams = ##t
            b32[ a g f c' b a g
            b32^"subdivide beams" a g f c' b a g]
          }
          \new Voice {
            \voiceTwo
            b32_"default"[ a g f c' b a g
            b32 a g f c' b a g]
          }
        >>
        \oneVoice
        \set baseMoment = #(ly:make-moment 1/8)
        \set beatStructure = 2,2,2,2
        b32^"baseMoment 1 8"[ a g f c' b a g]
        \set baseMoment = #(ly:make-moment 1/16)
        \set beatStructure = 4,4,4,4
        b32^"baseMoment 1 16"[ a g f c' b a g]
      }
    }

## Changement automatique des durées

`shiftDurations` permet de modifier la longueur des notes d’un morceau.

Cette instruction prend deux arguments : un coefficient d’échelonnement (une puissance de deux) et un nombre de points d’augmentation (entier positif).

    \paper { indent = 0 }

    music = \relative c'' { a1 b2 c4 d8 r }

    \score {
      \new Voice {
        \time 4/2
        \music
        \time 4/4
        \shiftDurations #1 #0 { \music }
        \time 2/4
        \shiftDurations #2 #0 { \music }
        \time 4/1
        \shiftDurations #-1 #0 { \music }
        \time 8/1
        \shiftDurations #-2 #0 { \music }
        \time 6/2
        \shiftDurations #0 #1 { \music }
        \time 7/2
        \shiftDurations #0 #2 { \music }
      }
    }

## Définition de règles de ligature pour la partition

Les règles de ligature définies au niveau du contexte `Score` s’appliqueront à toutes les portées. Il est toutefois possible de moduler au niveau `Staff` ou `Voice` :

    \relative c'' {
      \time 5/4
      % Set default beaming for all staves
      \set Score.baseMoment = #(ly:make-moment 1/8)
      \set Score.beatStructure = 3,4,3
      <<
        \new Staff {
          c8 c c c c c c c c c
        }
        \new Staff {
          % Modify beaming for just this staff
          \set Staff.beatStructure = 6,4
          c8 c c c c c c c c c
        }
        \new Staff {
          % Inherit beaming from Score context
          <<
            {
              \voiceOne
              c8 c c c c c c c c c
            }
            % Modify beaming for this voice only
            \new Voice {
              \voiceTwo
              \set Voice.beatStructure = 6,4
              a8 a a a a a a a a a
            }
          >>
        }
      >>
    }

## Ligature au moment d’un saut de ligne

Il est normalement impensable qu’un saut de ligne tombe au milieu d’une ligature. LilyPond permet néanmoins de l’obtenir.

    \relative c'' {
      \override Beam.breakable = ##t
      c8 c[ c] c[ c] c[ c] c[ \break
      c8] c[ c] c[ c] c[ c] c
    }

## Ligature et directions de hampe inversées

LilyPond insère automatiquement des ligatures coudées – certaines hampes vers le haut, d’autres vers le bas – lorsqu’il détecte un intervalle important entre des têtes de notes. Ce comportement peut être changé par l’intermédiaire de l’objet `auto-knee-gap` – défini par défaut à 5,5 espaces, plus la largeur et la pente de la ligature en question.

    {
      f8 f''8 f8 f''8
      \override Beam.auto-knee-gap = #6
      f8 f''8 f8 f''8
    }

## Modifier l’apparence d’un silence multimesure

Dans le cas où ce silence dure moins de dix mesures, LilyPond imprime sur la portée des « silences d’église » – Kirchenpause en allemand – et qui sont une simple suite de rectangles. La propriété `expand-limit` permet d’obtenir un silence unique :

    \relative c'' {
      \compressMMRests {
        R1*2 | R1*5 | R1*9
        \override MultiMeasureRest.expand-limit = #3
        R1*2 | R1*5 | R1*9
      }
    }

## Spécification du nombre de points d’augmentation d’une note

Le nombre de points d’augmentation affectés à une note en particulier peut se modifier indépendamment des points placés après la note.

    \relative c' {
      c4.. a16 r2 |
      \override Dots.dot-count = #4
      c4.. a16 r2 |
      \override Dots.dot-count = #0
      c4.. a16 r2 |
      \revert Dots.dot-count
      c4.. a16 r2 |
    }

## Changement de tempo sans indication sur la partition

Vous pouvez indiquer un changement de tempo pour le fichier MIDI sans pour autant l’imprimer. Il suffit alors de le rendre invisible aux musiciens.

    \score {
      \new Staff \relative c' {
        \tempo 4 = 160
        c4 e g b
        c4 b d c
        \set Score.tempoHideNote = ##t
        \tempo 4 = 96
        d,4 fis a cis
        d4 cis e d
      }
      \layout { }
      \midi { }
    }

## Modifier l’apparence du chiffre de n-olet

LilyPond imprime par défaut le numérateur de la fraction fournie en argument à la commande `\tuplet` du côté du crochet de n-olet.

Il est toutefois possible d’imprimer la fraction entière num:den, voire de ne rien imprimer du tout.

    \relative c'' {
      \tuplet 3/2 { c8 c c }
      \tuplet 3/2 { c8 c c }
      \override TupletNumber.text = #tuplet-number::calc-fraction-text
      \tuplet 3/2 { c8 c c }
      \omit TupletNumber
      \tuplet 3/2 { c8 c c }
    }

## Modification de la métrique au sein d’un fragment polymétrique à l’aide de `\scaleDurations`

La propriété `measureLength`, conjointement avec `measurePosition`, détermine l’endroit où une barre de mesure est requise. L’utilisation d’un `\scaleDurations` a l’inconvénient que l’échelonnement des durées rend compliqués les changements de métrique. Il est nécessaire en pareil cas de définir manuellement `measureLength`, avec un appel à `ly:make-moment`. Le second argument devra être identique au deuxième argument de `\scaleDurations`.

    \layout {
      \context {
        \Score
        \remove "Timing_translator"
      }
      \context {
        \Staff
        \consists "Timing_translator"
      }
    }

    <<
      \new Staff {
        \scaleDurations 8/5 {
          \time 6/8
          \set Timing.measureLength = #(ly:make-moment 6/5)
          b8 b b b b b
          \time 2/4
          \set Timing.measureLength = #(ly:make-moment 4/5)
          b4 b
        }
      }
      \new Staff {
        \clef bass
        \time 2/4
        c2 d e f
      }
    >>

## Notation pour psalmodie

Ce style de notation permet d’indiquer la mélodie d’une psalmodie lorsque les strophes sont de longueur inégale.

    stemOff = \hide Staff.Stem
    stemOn  = \undo \stemOff

    \score {
      \new Staff \with { \remove "Time_signature_engraver" }
      {
        \key g \minor
        \cadenzaOn
        \stemOff a'\breve bes'4 g'4
        \stemOn a'2 \section
        \stemOff a'\breve g'4 a'4
        \stemOn f'2 \section
        \stemOff a'\breve^\markup { \italic flexe }
        \stemOn g'2 \fine
      }
    }

## Métrique décomposée

Des métriques telles que « 5/8 » peuvent s’interpréter sous une forme décomposée – « 3/8 + 2/8 » par exemple – qui combine plusieurs métriques.

LilyPond est capable de rendre ce type de notation, plus facile à lire et à interpréter, en imprimant cette métrique composite et en adaptant les règles de ligature automatique en conséquence.

    \relative c' {
      \compoundMeter #'((2 8) (3 8))
      c8 d e fis gis
      c8 fis, gis e d
      c8 d e4 gis8
    }

## Signes de direction, signes de sous-groupe

Les règles de ligature par mesure sont gérées par la propriété de contexte `beatStructure`. Ses valeurs par défaut sont répertoriées, par métrique, dans le fichier `scm/time-signature-settings.scm`. Elles sont modifiables grâce à la commande `\set`.

La fonction Scheme `set-time-signature` permet quant à elle de définir à la fois la métrique et la pulsation. Celle-ci prend trois arguments : le nombre de pulsations, la durée de la pulsation et le regroupement des pulsations dans la mesure. `\time` et `set-time-signature` s’appliquent tous deux au contexte `Timing` ; ils ne redéfiniront donc pas les valeurs de `beatStructure` ou `baseMoment` lorsqu’elles sont modifiées dans un contexte de niveau inférieur comme `Voice` par exemple.

Si l’on fait appel au `Measure_grouping_engraver`, la fonction `set-time-signature` créera aussi des symboles `MeasureGrouping`. Ces symboles aident à la lecture des œuvres modernes à la rythmique complexe. Dans l’exemple qui suit, la mesure à 9/8 est divisée en 2, 2, 2 et 3, alors que la mesure à 5/8 répond aux règles par défaut contenues dans le fichier ‘`scm/time-signature-settings.scm`’.

    \score {
      \new Voice \relative c'' {
        \time 9/8
        g8 g d d g g a( bes g) |
        \set Timing.beatStructure = 2,2,2,3
        g8 g d d g g a( bes g) |
        \time 4,5 9/8
        g8 g d d g g a( bes g) |
        \time 5/8
        a4. g4 |
      }
      \layout {
        \context {
          \Staff
          \consists "Measure_grouping_engraver"
        }
      }
    }

## Adaptation de l’alignement des numéros de mesure

L’alignement des numéros de mesure par la gauche peut générer des problèmes de chevauchement, notamment avec les crochets de regroupement de portées.

L’exemple ci-dessous offre une solution en alignant par la droite le numéro de la mesure suivant un saut de ligne.

    consistentlyLeftAlignedBarNumbers = {
      \override Score.BarNumber.break-visibility = #end-of-line-invisible
      \override Score.BarNumber.self-alignment-X =
        #(lambda (grob)
           (let ((break-dir (ly:item-break-dir grob)))
             (if (= break-dir RIGHT) RIGHT LEFT)))
    }

    \new ChoirStaff <<
      \new Staff {
        \relative c' {
          \set Score.barNumberVisibility = #(every-nth-bar-number-visible 3)
          \bar ""
          \consistentlyLeftAlignedBarNumbers

          \set Score.currentBarNumber = #112
          \repeat unfold 8 { R1 }
          \break
          \repeat unfold 9 { R1 }
          \break
          \repeat unfold 7 { R1 }
        }
      }
      \new Staff {
        \relative c' {
          \repeat unfold 24 { R1 }
        }
      }
    >>

    \layout {
      indent = #0
      ragged-right = ##t
      ragged-last = ##t
    }

## Contrôle de l’impression des crochets de n-olet

Selon la tradition, les crochets indicateurs de n-olet sont toujours imprimés, sauf dans le cas où ils seraient de la même longueur qu’une ligature.

LilyPond permet, au travers de la propriété `bracket-visibility`, de contôler précisément leur affichage : déterminée à `#t`, ils seront toujours imprimés ; `#f` permet de ne jamais les imprimer – donc omettre l’objet `TupletBracket` –, et `#'if-no-beam` les imprimera en l’absence de ligature (comportement par défaut).

    music = \relative c'' {
      \tuplet 3/2 { c16[ d e } f8]
      \tuplet 3/2 { c8 d e }
      \tuplet 3/2 { c4 d e }
    }

    \new Voice {
      \relative c' {
        \override Score.TextMark.non-musical = ##f
        \textMark "default" \music
        \override TupletBracket.bracket-visibility = #'if-no-beam
        \textMark \markup \typewriter "'if-no-beam" \music
        \override TupletBracket.bracket-visibility = ##t
        \textMark \markup \typewriter "#t" \music
        \override TupletBracket.bracket-visibility = ##f
        \textMark \markup \typewriter "#f" \music
        \omit TupletBracket
        \textMark \markup \typewriter "omit" \music
      }
    }

## Cow and ride bell example

Two different bells, entered with ’cb’ (cowbell) and ’rb’ (ridebell).

    \paper { tagline = ##f }

    #(define mydrums '((ridebell default #f  3)
                       (cowbell  default #f -2)))

    \new DrumStaff \with { instrumentName = #"Different Bells" }

    \drummode {
      \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
      \set DrumStaff.clefPosition = 0.5
      \override DrumStaff.StaffSymbol.line-positions = #'(-2 3)
      \override Staff.BarLine.bar-extent = #'(-1.0 . 1.5)

      \time 2/4
      rb8 8 cb8 16 rb16-> ~ |
      16 8 16 cb8 8 |
    }

## Création d’une indication métronomique sous forme d’étiquette

Vous pouvez créer des indications de tempo sous la forme d’étiquettes textuelles – des objets markup –, notamment des équivalences. Cependant, elles n’apparaîtront pas dans le fichier MIDI.

    \relative c' {
      \tempo \markup {
        \concat {
          (
          \smaller \general-align #Y #DOWN \note {16.} #1
          " = "
          \smaller \general-align #Y #DOWN \note {8} #1
          )
        }
      }
      c1
      c4 c' c,2
    }

## Dessin à main levée de liaisons de tenue

Il est possible de graver manuellement les liaisons de tenue, en modifiant la propriété `tie-configuration`. Pour chaque paire, le premier nombre indique la distance à la portée, en espaces de portée, et le second la direction (1 pour haut, -1 pour bas).

Notez bien que LilyPond fait la distinction, au niveau du premier nombre, entre valeur exacte et valeur inexacte. Dans le cas d’une valeur exacte – autrement dit un entier ou une fraction comme `(/ 4 5)` – celle-ci servira de position verticale brute, ensuite afinée par LilyPond de sorte à éviter les lignes de la portée. Dans le cas d’une valeur inexacte, tel un nombre à virgule flottante, c’est elle qui servira à positionner verticalement, sans ajustement.

    \relative c' {
      <c e g>2~ <c e g>
      \override TieColumn.tie-configuration =
        #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1))
      <c e g>2~ <c e g>
      \override TieColumn.tie-configuration =
        #'((0 . 1) (-2 . 1) (-4 . 1))
      <c e g>2~ <c e g>
    }

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

## Plusieurs triolets avec une seule commande `\tuplet`

La propriété `tupletSpannerDuration` spécifie la longueur voulue de chaque crochet. Avec elle, vous pouvez faire plusieurs n-olets en ne tapant `\tuplet` qu’une fois, ce qui évite une longue saisie.

Il existe différents moyens de définir `tupletSpannerDuration`. La commande `\tupletSpan` lui affecte une durée arbitraire qui sera réinitialisée dès l’intervention d’une durée à `\default`. Vous pouvez aussi opter pour fournir un argument supplémentaire à la commande `\tuplet`.

    \relative c' {
      \time 2/4
      \tupletSpan 4
      \tuplet 3/2 { c8^"\\tupletSpan 4" c c c c c }
      \tupletSpan \default
      \tuplet 3/2 { c8^"\\tupletSpan \\default" c c c c c }
      \tuplet 3/2 4 { c8^"\\tuplet 3/2 4 {...}" c c c c c }
    }

## Crochet rectiligne et débordement de ligature

En combinant `stemLeftBeamCount`, `stemRightBeamCount` et des paires de `[]`, vous pourrez obtenir des crochets rectilignes et des ligatures qui débordent à leurs extrémités.

Pour des crochets rectilignes à droite sur des notes isolées, il suffit d’ajouter une paire d’indicateurs de ligature `[]` et de déterminer `stemLeftBeamCount` à zéro, comme dans l’exemple 1.

Pour des crochets rectiligne à gauche, c’est `stemRightBeamCount` qu’il faudra déterminer (exemple 2).

Pour que les barres de ligature débordent sur la droite, `stemRightBeamCount` doit avoir une valeur positive ; pour un débordement à gauche, c’est sur `stemLeftBeamCount` qu’il faut jouer. Tout ceci est illustré par l’exemple 3.

Il est parfois judicieux, lorsqu’une note est encadrée de silences, de l’affubler de crochets rectilignes de part et d’autre. L’exemple 4 montre qu’il suffit d’adjoindre à cette note un `[]`.

(Notez bien que `\set stemLeftBeamCount` sera toujours synonyme de `\once \set`. Autrement dit, la détermination des ligatures n’est pas « permanente » ; c’est la raison pour laquelle les crochets du `c'16[]` isolé du dernier exemple n’ont rien à voir avec le `\set` indiqué deux notes auparavant.)

    \score {
      <<
        % Example 1
        \new RhythmicStaff {
          \set stemLeftBeamCount = #0
          c16[]
          r8.
        }
        % Example 2
        \new RhythmicStaff {
          r8.
          \set stemRightBeamCount = #0
          16[]
        }
        % Example 3
        \new RhythmicStaff {
          16 16
          \set stemRightBeamCount = #2
          16 r r
          \set stemLeftBeamCount = #2
          16 16 16
        }
        % Example 4
        \new RhythmicStaff {
          16 16
          \set stemRightBeamCount = #2
          16 r16
          16[]
          r16
          \set stemLeftBeamCount = #2
          16 16
        }
      >>
    }

## Fixation arbitraire du numéro de repère de départ

Voici comment initialiser arbitrairement une indication automatique de repère, qu’elle soit alphabétique ou numérique :

    \relative c'' {
      c1 \mark \default
      c1 \mark \default
      c1 \mark \default
      c1 \mark #14
      c1 \mark \default
      c1 \mark \default
      c1 \mark \default
      c1
    }

## Génération de crochets personnalisés

Une fonction Scheme personnalisée permet de redéfinir la propriété `stencil` de l’objet `Flag`, de sorte à modifier le glyphe utilisé pour les crochets de croche.

    #(define-public (weight-flag grob)
       (let* ((stem-grob (ly:grob-parent grob X))
              (log (- (ly:grob-property stem-grob 'duration-log) 2))
              (is-up? (eqv? (ly:grob-property stem-grob 'direction) UP))
              (yext (if is-up? (cons (* log -0.8) 0) (cons 0 (* log 0.8))))
              (flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext))
              (stroke-style (ly:grob-property grob 'stroke-style))
              (stroke-stencil (if (equal? stroke-style "grace")
                                  (make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4)
                                  empty-stencil)))
         (ly:stencil-add flag-stencil stroke-stencil)))

    % Create a flag stencil by looking up the glyph from the font
    #(define (inverted-flag grob)
       (let* ((stem-grob (ly:grob-parent grob X))
              (dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u"))
              (flag (retrieve-glyph-flag "" dir "" grob))
              (line-thickness (ly:staff-symbol-line-thickness grob))
              (stem-thickness (ly:grob-property stem-grob 'thickness))
              (stem-width (* line-thickness stem-thickness))
              (stroke-style (ly:grob-property grob 'stroke-style))
              (stencil (if (null? stroke-style)
                           flag
                           (add-stroke-glyph flag stem-grob dir stroke-style "")))
              (rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0)))
         (ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0))))

    snippetexamplenotes =
    {
      \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64
    }

    {
      \time 1/4
      \textMark "Normal flags"
      \snippetexamplenotes

      \textMark "Custom flag: inverted"
      \override Flag.stencil = #inverted-flag
      \snippetexamplenotes

      \textMark "Custom flag: weight"
      \override Flag.stencil = #weight-flag
      \snippetexamplenotes

      \textMark "Revert to normal"
      \revert Flag.stencil
      \snippetexamplenotes
    }

## Rythmique et guitare

En matière de notation pour guitare, il arrive que soient indiqués les « coups de gratte » en plus de la mélodie, grilles d’accords et diagrammes de tablature.

    \include "predefined-guitar-fretboards.ly"
    <<
      \new ChordNames {
        \chordmode {
          c1 | f | g | c
        }
      }
      \new FretBoards {
        \chordmode {
          c1 | f | g | c
        }
      }
      \new Voice \with {
        \consists "Pitch_squash_engraver"
      } {
        \relative c'' {
          \improvisationOn
          c4 c8 c c4 c8 c
          f4 f8 f f4 f8 f
          g4 g8 g g4 g8 g
          c4 c8 c c4 c8 c
        }
      }
      \new Voice = "melody" {
        \relative c'' {
          c2 e4 e4
          f2. r4
          g2. a4
          e4 c2.
        }
      }
      \new Lyrics {
        \lyricsto "melody" {
          This is my song.
          I like to sing.
        }
      }
    >>

## Indication personnalisée d’une polymétrie complexe

Bien que la métrique complexe ne soit pas l’élément primordial de cet exemple, elle permet d’indiquer la pulsation de cette pièce qui, par ailleurs, constitue le canevas d’une chanson traditionnelle des Balkans.

    melody = \relative c'' {
      \key g \major
      \compoundMeter #'((3 8) (2 8) (2 8) (3 8) (2 8) (2 8)
                        (2 8) (2 8) (3 8) (2 8) (2 8))
      c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break
      c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4
      c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
      c4. d4 c4 d4. c4 d c2 d4. e4-^ d4
      c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
    }

    drum = \new DrumStaff \drummode {
      \repeat volta 2 {
        bd4.^\markup { Drums } sn4 bd \bar ";"
        sn4. bd4 sn \bar ";"
        bd sn bd4. sn4 bd
      }
    }

    \new Staff \with {
      instrumentName = \markup { \concat { "B" \flat " Sop." } }
    }

    {
      \melody
      \drum
    }

## High and Low woodblock example

Two Woodblocks, entered with ’wbh’ (high woodblock) and ’wbl’ (low woodblock). The length of the barline has been altered with an \override command otherwise it would be too short. The positions of the two stafflines also have to be explicitly defined.

    \paper { tagline = ##f }

    % These lines define the position of the woodblocks in the stave;
    % if you like, you can change it or you can use special note heads
    % for the woodblocks.
    #(define mydrums '((hiwoodblock default #f  3)
                       (lowoodblock default #f -2)))

    woodstaff = {
      % This defines a staff with only two lines.
      % It also defines the positions of the two lines.
      \override Staff.StaffSymbol.line-positions = #'(-2 3)

      % This is necessary; if not entered,
      % the barline would be too short!
      \override Staff.BarLine.bar-extent = #'(-1.0 . 1.5)
      % small correction for the clef:
      \set DrumStaff.clefPosition = 0.5
    }

    \new DrumStaff {
      % with this you load your new drum style table
      \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)

      \woodstaff

      \drummode {
        \time 2/4
        wbl8 16 16 8-> 8 |
        wbl8 16 16-> ~ 16 16 r8 |
      }
    }

## Recours à la propriété `transparent` pour rendre des objets invisibles

Une modification de la propriété `transparent` permet d’imprimer un objet « à l’encre sympathique » : l’objet n’est pas affiché bien que tous ses attributs soient préservés. L’objet en question occupe donc sa place, est pris en compte lors de collisions, et peut se voir attaché liaisons ou ligatures.

Cet exemple illustre la manière de connecter deux voix par une liaison de prolongation. Les liaisons de prolongation ne peuvent normalement intervenir que dans la même voix. Dès lors que la liaison est entamée dans une autre voix et que la première hampe ascendante est rendue transparente dans cette même voix, la liaison semble passer d’une voix à l’autre.

    \relative {
      \time 2/4
      <<
        {
          \once \hide Stem
          \once \override Stem.length = #8
          b'8 ~ 8\noBeam
          \once \hide Stem
          \once \override Stem.length = #8
          g8 ~ 8\noBeam
        }
        \\
        {
          b8 g g e
        }
      >>
    }

## Dessin d’une liaison d’articulation au trait discontinu

Grâce à la propriété `dash-definition`, une liaison d’articulation peut être formée de traits discontinus variables. `dash-definition` se compose d’une liste de `segments-discontinus` (dash-elements). Chaque `segment-discontinu` contient une liste de paramètres qui déterminent le comportement du trait pour une section de la liaison.

Cette liaison se définit selon le paramètre de Bézier `t` qui est compris entre 0 (l’extrémité gauche de la liaison) et 1 (l’extrémité droite de la liaison). Chaque `segment-discontinu` se composera selon la liste `(t-début t-fin segment-style segment-taille)`. La portion de liaison allant de `t-début` à `t-fin` aura un trait `segment-style` de longueur `segment-taille`. `segment-taille` est exprimé en espace de portée ; un `segment-style` à 1 donnera un trait plein.

    \relative c' {
      \once \override
        Slur.dash-definition = #'((0 0.3 0.1 0.75)
                                    (0.3 0.6 1 1)
                                    (0.65 1.0 0.4 0.75))
      c4( d e f)
      \once \override
        Slur.dash-definition = #'((0 0.25 1 1)
                                    (0.3 0.7 0.4 0.75)
                                    (0.75 1.0 1 1))
      c4( d e f)
    }

## Contrôle manuel du positionnement des ligatures

Le positionnement et la pente des ligatures peuvent être contrôlés manuellement à l’aide d’une adaptation de la propriété `positions` de l’objet `Beam`.

    \relative c' {
      \time 2/4
      % from upper staff-line (position 2) to center (position 0)
      \override Beam.positions = #'(2 . 0)
      c8 c
      % from center to one above center (position 1)
      \override Beam.positions = #'(0 . 1)
      c8 c
    }

## Fusion de silences multimesures dans une partie polyphonique

Dans le cadre d’un portée polyphonique, les silences multimesures sont positionnés différemment selon la voix à laquelle ils appartiennent. Le réglage suivant permet néanmoins de les imprimer sur une même ligne.

    normalPos = \revert MultiMeasureRest.direction

    {
      <<
        {
          c''1
          R1
          c''1
          \normalPos
          R1
        }
        \\
        {
          c'1
          R1
          c'1
          \normalPos
          R1
        }
      >>
    }

## Modification de la longueur d’un crochet de n-olet

Les crochets indiquant un n-olet peuvent être prolongés jusqu’à un élément de rupture ou jusqu’à la note suivante. LilyPond termine un crochet de n-olet sur la droite de sa dernière tête de note par défaut ; un crochet de pleine longueur s’étendra plus avant, soit jusqu’à la note suivante et en traversant tous les éléments non rythmiques, soit sur tout l’espace précédant le prochain élément de notation, que ce soit une clef, une métrique, une armure ou une autre note. L’exemple suivant illustre la manière d’activer ces deux fonctionnalités.

    \new RhythmicStaff {
      % Set tuplets to be extendable...
      \set tupletFullLength = ##t
      % ...to cover all items up to the next note
      \set tupletFullLengthNote = ##t
      \time 2/4
      \tuplet 3/2 { c4 4 4 }
      % ...or to cover just whitespace
      \set tupletFullLengthNote = ##f
      \time 4/4
      \tuplet 5/4 { 4 1 }
      \time 3/4
      2.
    }

## Déplacement des notes pointées dans une polyphonie

Une note pointée appartenant à la voix supérieure d’une portée polyphonique sera par défaut décalée vers la droite afin d’éviter les collisions avec les autres voix. Ce comportement peut être outrepassé à l’aide de la propriété `prefer-dotted-right` de `NoteCollision`.

    \new Staff \relative c' <<
      {
        f2. f4
        \override Staff.NoteCollision.prefer-dotted-right = ##f
        f2. f4
        \override Staff.NoteCollision.prefer-dotted-right = ##t
        f2. f4
      }
      \\
      { e4 e e e e e e e e e e e }
    >>

## Contrôle de la taille d’un silence multimesure

Les silences multimesure ont une largeur relative à leur durée totale, contrôlée par `MultiMeasureRest.space-increment`. Sa valeur par défaut est fixée à `2.0`.

    \relative c' {
      \compressEmptyMeasures
      R1*2 R1*4 R1*64 R1*16
      \override Staff.MultiMeasureRest.space-increment = 2.5
      R1*2 R1*4 R1*64 R1*16
    }

## Ajout de texte à un silence multimesure

Lorsque du texte est attaché à un silence multimesure, il sera centré dans la mesure, au-dessus ou en dessous de la portée. Afin d’étirer la mesure dans le cas où ce texte est relativement long, il suffit d’insérer un accord vide auquel on attache le texte en question, avant le silence multimesure. Le texte attaché à un silence invisible sera aligné sur la gauche de là où serait positionnée la note dans la mesure. Cependant, si la taille de la mesure est déterminée par la longueur du texte, il apparaîtra comme centré.

    \relative c' {
      \compressMMRests {
        \textLengthOn
        <>^\markup { [MAJOR GENERAL] }
        R1*19
        <>_\markup { \italic { Cue: ... it is yours } }
        <>^\markup { A }
        R1*30^\markup { [MABEL] }
        \textLengthOff
        c4^\markup { CHORUS } d f c
      }
    }

## N-olets au chiffrage inhabituel

LilyPond sait aussi gérer des n-olets dont le chiffrage imprimé ne correspond pas exactement à la fraction de mesure à laquelle ils se réfèrent, tout comme ceux auxquels une valeur de note vient en complément du chiffre.

    \relative c'' {
      \once \override TupletNumber.text =
        #(tuplet-number::non-default-tuplet-denominator-text 7)
      \tuplet 3/2  { c4. c4. c4. c4. }
      \once \override TupletNumber.text =
        #(tuplet-number::non-default-tuplet-fraction-text 12 7)
      \tuplet 3/2  { c4. c4. c4. c4. }
      \once \override TupletNumber.text =
        #(tuplet-number::append-note-wrapper
          (tuplet-number::non-default-tuplet-fraction-text 12 7)
          (ly:make-duration 3 0))
      \tuplet 3/2  { c4. c4. c4. c4. }
      \once \override TupletNumber.text =
        #(tuplet-number::append-note-wrapper
          tuplet-number::calc-denominator-text
          (ly:make-duration 2 0))
      \tuplet 3/2  { c8 c8 c8 c8 c8 c8 }
      \once \override TupletNumber.text =
        #(tuplet-number::append-note-wrapper
          tuplet-number::calc-fraction-text
          (ly:make-duration 2 0))
      \tuplet 3/2  { c8 c8 c8 c8 c8 c8 }
      \once \override TupletNumber.text =
        #(tuplet-number::fraction-with-notes
          (ly:make-duration 2 1) (ly:make-duration 3 0))
      \tuplet 3/2  { c4. c4. c4. c4. }
      \once \override TupletNumber.text =
        #(tuplet-number::non-default-fraction-with-notes 12
          (ly:make-duration 3 0) 4 (ly:make-duration 2 0))
      \tuplet 3/2  { c4. c4. c4. c4. }
    }

## Dénombrer une unique mesure de silence

Les silences multimesures affichent leur longueur sauf s’il n’y a qu’une seule mesure. Ceci peut se modifier en réglant `restNumberThreshold`.

    {
      \compressEmptyMeasures
      R1 R1*10 R1*11 \bar "||"
      \set restNumberThreshold = 0
      R1 R1*10 R1*11 \bar "||"
      \set restNumberThreshold = 10
      R1 R1*10 R1*11
    }

## PartCombine et autoBeamOff

La fonction `\autoBeamOff` dans le cadre d’un `\partCombine` agit de façon bien particulière ; c’est pourquoi il vaut mieux tout d’abord recourir à

>     \set Staff.autobeaming = ##f

pour désactiver les ligatures automatiques pour l’ensemble de la portée concernée.

L’instruction `\partCombine` fonctionne apparemment sur la base de trois voix : solo hampes montantes, solo hampes descendantes et ensemble hampes montantes.

Lorsque `\autoBeamOff` apparaît dans le premier argument de la combinaison, il s’applique à la voix active à ce moment précis, qu’il s’agisse du solo hampes montantes ou du combiné hampes montantes. Lorsqu’elle est introduite dans le second argument, la commande `\autoBeamOff` s’appliquera au solo hampes descendantes.

Vous devrez donc, afin que `\autoBeamOff` soit pleinement opérationnel dans le cadre d’un `\partCombine`, l’introduire aux trois niveaux.

    {
      %\set Staff.autoBeaming = ##f % turns off all autobeaming
      \partCombine
      {
        \autoBeamOff % applies to split up stems
        \repeat unfold 4 a'16
        %\autoBeamOff % applies to combined up stems
        \repeat unfold 4 a'8
        \repeat unfold 4 a'16
      }
      {
        \autoBeamOff % applies to down stems
        \repeat unfold 4 f'8
        \repeat unfold 8 f'16 |
      }
    }

## Exemple pour percussions

Ce court exemple est tiré de « L’histoire du Soldat » de Stravinsky.

    #(define mydrums '((bassdrum   default #f  4)
                       (snare      default #f -4)
                       (tambourine default #f  0)))

    global = {
      \time 3/8 s4.
      \time 2/4 s2*2
      \time 3/8 s4.
      \time 2/4 s2
    }

    drumsA = {
      \context DrumVoice <<
        { \global }
        { \drummode {
            \autoBeamOff
            \stemDown sn8 \stemUp tamb s8 |
            sn4 \stemDown sn4 |
            \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 |
            \stemDown sn8 \stemUp tamb s8 |
            \stemUp sn4 s8 \stemUp tamb
          }
        }
      >>
    }

    drumsB = {
      \drummode {
        s4 bd8 s2*2 s4 bd8 s4 bd8 s8
      }
    }

    \layout {
      indent = 40
      \context {
        \DrumStaff
        drumStyleTable = #(alist->hash-table mydrums)
      }
    }

    \score {
      \new StaffGroup <<
        \new DrumStaff \with {
          instrumentName = \markup \center-column {
            "Tambourine"
            "et"
            "caisse claire s. timbre"
            }
      }
      \drumsA
      \new DrumStaff \with {
        instrumentName = "Grosse Caisse"
      }
      \drumsB
      >>
    }

## Saut de ligne au milieu d’un n-olet avec ligature

Cet exemple peu académique démontre comment il est possible d’insérer un saut de ligne dans un n-olet portant une ligature. Ces ligatures doivent toutefois être explicites.

    \layout {
      \context {
        \Voice
        % Permit line breaks within tuplets
        \remove "Forbid_line_break_engraver"
        % Allow beams to be broken at line breaks
        \override Beam.breakable = ##t
      }
    }
    \relative c'' {
      a8
      \repeat unfold 5 { \tuplet 3/2 { c[ b a] } }
      % Insert a manual line break within a tuplet
      \tuplet 3/2 { c[ b \bar "" \break a] }
      \repeat unfold 5 { \tuplet 3/2 { c[ b a] } }
      c8
    }

## Positionnement des ligatures de notes d’ornement à la hauteur de celles des notes normales

La ligature de notes se trouvant sur des lignes supplémentaires est généralement centrée sur la portée. Les notes d’ornement ayant une hampe raccourcie, leur ligature peut se retrouver en dehors de la portée lorsqu’elles sont sur des lignes supplémentaires. LilyPond permet de rallonger les hampes en pareil cas.

    \relative c {
      f8[ e]
      \grace {
        f8[ e]
        \override Stem.no-stem-extend = ##f
        f8[ e]
        \revert Stem.no-stem-extend
      }
      f8[ e]
    }

## Positionnement des notes d’ornement avec espace flottant

Lorsqu’est activée la propriété `strict-grace-spacing`, l’espacement des notes d’ornement se fera de manière « élastique ». Autrement dit, elles seront décollées de leur note de rattachement : LilyPond commence par espacer les notes normales, puis les ornements sont placés à la gauche de leur note de rattachement.

    \relative c'' {
      <<
        \override Score.SpacingSpanner.strict-grace-spacing = ##t
        \new Staff \new Voice {
          \afterGrace c4 { c16[ c8 c16] }
          c8[ \grace { b16 d } c8]
          c4 r
        }
        \new Staff {
          c16 c c c c c c c c4 r
        }
      >>
    }

## Positionnement des silences multimesures

Si l’on peut positionner verticalement un silence simple en le rattachant à une note, il n’en va pas de même pour un silence multimesure. Néanmoins, et uniquement dans le cadre de musique polyphonique, les silences multimesures sont positionnés différemment selon qu’ils appartiennent à une voix au numéro pair ou impair.

Le positionnement des silences multimesures peut se contrôler ainsi :

    \relative c'' {
      % Multi-measure rests by default are set under the fourth line
      R1
      % They can be moved using an override
      \override MultiMeasureRest.staff-position = #-2
      R1
      \override MultiMeasureRest.staff-position = #0
      R1
      \override MultiMeasureRest.staff-position = #2
      R1
      \override MultiMeasureRest.staff-position = #3
      R1
      \override MultiMeasureRest.staff-position = #6
      R1
      \revert MultiMeasureRest.staff-position
      \break

      % In two Voices, odd-numbered voices are under the top line
      << { R1 } \\ { a1 } >>
      % Even-numbered voices are under the bottom line
      << { a1 } \\ { R1 } >>
      % Multi-measure rests in both voices remain separate
      << { R1 } \\ { R1 } >>

      % Separating multi-measure rests in more than two voices
      % requires an override
      << { R1 } \\ { R1 } \\
         \once \override MultiMeasureRest.staff-position = #0
         { R1 }
      >>

      % Using compressed bars in multiple voices requires another override
      % in all voices to avoid multiple instances being printed
      \compressMMRests
      <<
       \revert MultiMeasureRest.direction
        { R1*3 }
        \\
       \revert MultiMeasureRest.direction
        { R1*3 }
      >>
    }

## Positionnement de points d’orgue en opposition sur une barre de mesure

Dans l’extrait suivant est construite une commande qui permet d’imprimer un point d’orgue à la fois en surplomb et en dessous d’une barre de mesure. Dans le cas où il n’y aurait normalement pas de barre à cet endroit, sera ajoutée une double barre. Sémantiquement, cette commande constuit une césure plus longue que la normale, ce qui pourrait être considéré comme un usage abusif selon le cas.

    twoWayFermata = {
      \once \set Staff.caesuraType = #'((underlying-bar-line . "||"))
      \once \set Staff.caesuraTypeTransform = ##f
      \caesura ^\fermata _\fermata
    }

    music = {
      f'1 \twoWayFermata
      R1
      f'2 \twoWayFermata f'2
      R1
      b'1 \twoWayFermata \fine
    }

    \new GrandStaff <<
      \new Staff \music
      \new Staff \music
    >>

## Préservation de l’indication de n-olet lors d’un repère final

L’ajout d’une marque-repère en fin de pièce peut entraîner la perte de la dernière indication de n-olet. La désactivation de `TupletBracket.full-length-to-extent` pallie ce problème.

    % due to issue 2362 a long mark such as
    %   \textEndMark "Composed Feb 2007 - Feb 2008"
    % cannot be used here.

    \new Staff {
       \set tupletFullLength = ##t
       \time 1/8
       \tuplet 3/2 8 { c'16 c' c' c' c' c' c' c' c' }
       \tweak direction #DOWN \textEndMark "1234"
    }

    \new Staff {
      \set tupletFullLength = ##t
      \override TupletBracket.full-length-to-extent = ##f

      \time 1/8
       \tuplet 3/2 8 { c'16 c' c' c' c' c' c' c' c' }
       \tweak direction #DOWN \textEndMark "1234"
    }

## Imprimer les numéros de mesure à intervalle régulier

Vous pouvez imprimer un numéro de mesure à intervalle régulier plutôt qu’en tête de chaque ligne seulement, en recourant à la propriété `barNumberVisibility`. Voici comment afficher le numéro toutes les deux mesures sauf en fin de ligne.

    \relative c' {
      \override Score.BarNumber.break-visibility = #end-of-line-invisible
      \set Score.currentBarNumber = #11
      % Print a bar number every second measure
      \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2)
      c1 | c | c | c | c
      \break
      c1 | c | c | c | c
    }

## Impression du numéro des mesures tronquées

L’objet `BarNumber` (numéro de mesure) n’est pas répété en début de ligne pour une mesure tronquée. Il apparaîtra, entre parenthèses, dès lors que la propriété `barNumberVisibility` sera affublée de `first-bar-number-invisible-save-broken-bars`.

    \layout {
      \context {
        \Score
        barNumberVisibility = #first-bar-number-invisible-save-broken-bars
        \override BarNumber.break-visibility = ##(#f #t #t)
      }
    }

    \relative c' {
      c1 | d | e | f2 \bar "" \break
      fis | g1 | e2 \bar "" \break
      <>^"reenabled default"
      % back to default -
      % \unset Score.barNumberVisibility would do so as well
      \set Score.barNumberVisibility =
        #first-bar-number-invisible-and-no-parenthesized-bar-numbers
      es | d1 | c
    }

## Inscrire le numéro de mesure dans un cadre ou un cercle

Les numéros de mesure peuvent être encadrés ou entourés d’un cercle.

    \relative c' {
      % Prevent bar numbers at the end of a line and permit them elsewhere
      \override Score.BarNumber.break-visibility = #end-of-line-invisible
      \set Score.barNumberVisibility = #(every-nth-bar-number-visible 4)

      % Increase the size of the bar number by 2
      \override Score.BarNumber.font-size = #2

      % Draw a box round the following bar number(s)
      \override Score.BarNumber.stencil
        = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print)
      \repeat unfold 5 { c1 }

      % Draw a circle round the following bar number(s)
      \override Score.BarNumber.stencil
        = #(make-stencil-circler 0.1 0.25 ly:text-interface::print)
      \repeat unfold 4 { c1 } \bar "|."
    }

## Impression du numéro de mesure selon `modulo-bar-number-visible`

Lorsque le reste de la division du numéro de la mesure courante par le premier argument de `modulo-bar-number-visible` égale le deuxième argument, LilyPond imprime le `BarNumber`.

Ceci permet d’imprimer le numéro de mesure à un intervalle donné, par exemple :

- `(modulo-bar-number-visible 3 2)` -> affichage à 2, 5, 8…
- `(modulo-bar-number-visible 4 2)` -> affichage à 2, 6, 10…
- `(modulo-bar-number-visible 3 1)` -> affichage à 3, 5, 7…
- `(modulo-bar-number-visible 5 2)` -> affichage à 2, 7, 12…

    \layout {
      \context {
        \Score
        \override BarNumber.break-visibility = ##(#f #t #t)
        barNumberVisibility = #(modulo-bar-number-visible 3 2)
      }
    }

    \relative c' {
      c1 | d | e | f \break
      g1 | e | d | c
    }

## Changement de la fréquence d’impression du numéro de mesure

La fonction de contexte `set-bar-number-visibility` permet de modifier la fréquence à laquelle les numéros de mesures s’impriment.

    \relative c' {
      \override Score.BarNumber.break-visibility = #end-of-line-invisible
      \context Score \applyContext #(set-bar-number-visibility 4)
      \repeat unfold 10 c'1
      \context Score \applyContext #(set-bar-number-visibility 2)
      \repeat unfold 10 c
    }

## Impression du métronome et des repères sous la portée

Les indications de tempo et les marques de repère s’impriment par défaut au-dessus de la portée. Le fait de régler en conséquence la propriété `direction` des objets `MetronomeMark` et `RehearsalMark` les placera au-dessous de la portée.

    \layout {
      indent = 0
      ragged-right = ##f
    }

    {
      % Metronome marks below the staff
      \override Score.MetronomeMark.direction = #DOWN
      \tempo 8. = 120
      c''1

      % Rehearsal marks below the staff
      \override Score.RehearsalMark.direction = #DOWN
      \mark \default
      c''1
    }

## Impression de musique aux métriques différentes

Bien qu’ayant des métriques bien différentes, les deux parties ci-dessous présentées restent synchrones.

Les barres de mesure ne peuvent plus être gérées au niveau du contexte `Score` ; le `Timing_translator` doit être déplacé du contexte `Score` au contexte `Staff` afin de permettre des barres de mesure individualisées.

Le `Bar_number_engraver` devra lui aussi être déplacé, puisqu’il dépend de propriétés attachées au `Timing_translator`, afin de numéroter les mesures. L’utilisation d’un bloc `\with` dans la portée concernée permettra un affichage des numéros de mesure.

    \paper {
      indent = #0
      ragged-right = ##t
    }

    global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } }

    \layout {
      \context {
        \Score
        \remove "Timing_translator"
        \remove "Bar_number_engraver"
        \override SpacingSpanner.uniform-stretching = ##t
        \override SpacingSpanner.strict-note-spacing = ##t
        proportionalNotationDuration = #(ly:make-moment 1/64)
      }
      \context {
        \Staff
        \consists "Timing_translator"
      }
      \context {
        \Voice
        \remove "Forbid_line_break_engraver"
        tupletFullLength = ##t
      }
    }

    Bassklarinette = \new Staff \with {
      \consists "Bar_number_engraver"
      barNumberVisibility = #(every-nth-bar-number-visible 2)
      \override BarNumber.break-visibility = #end-of-line-invisible
    } <<
      \global {
        \bar "|"
        \clef treble
        \time 3/8
        d''4.

        \bar "|"
        \time 3/4
        r8 des''2( c''8)

        \bar "|"
        \time 7/8
        r4. ees''2 ~

        \bar "|"
        \time 2/4
        \tupletUp
        \tuplet 3/2 { ees''4 r4 d''4 ~ }

        \bar "|"
        \time 3/8
        \tupletUp
        \tuplet 4/3 { d''4 r4 }

        \bar "|"
        \time 2/4
        e''2

        \bar "|"
        \time 3/8
        es''4.

        \bar "|"
        \time 3/4
        r8 d''2 r8
        \bar "|"
      }
    >>

    Perkussion = \new StaffGroup <<
      \new Staff <<
        \global {
          \bar "|"
          \clef percussion
          \time 3/4
          r4 c'2 ~

          \bar "|"
          c'2.

          \bar "|"
          R2.

          \bar "|"
          r2 g'4 ~

          \bar "|"
          g'2. ~

          \bar "|"
          g'2.
        }
      >>
      \new Staff <<
        \global {
          \bar "|"
          \clef percussion
          \time 3/4
          R2.

          \bar "|"
          g'2. ~

          \bar "|"
          g'2.

          \bar "|"
          r4 g'2 ~

          \bar "|"
          g'2 r4

          \bar "|"
          g'2.
        }
      >>
    >>

    \score {
      <<
        \Bassklarinette
        \Perkussion
      >>
    }

## Afficher le numéro de la première mesure

Par défaut, LilyPond n’affiche pas le premier numéro de mesure s’il est inférieur à 2. Le fait de définir `barNumberVisibility` à `all-bar-numbers-visible` vous permettra d’imprimer n’importe quel numéro pour la première mesure.

    \layout {
      indent = 0
      ragged-right = ##t
    }

    \relative c' {
      \set Score.barNumberVisibility = #all-bar-numbers-visible
      c1 | d | e | f \break
      g1 | e | d | c
    }

## Affichage du crochet de n-olet du côté des têtes de note

Quelle que soit l’option choisie pour contrôler la visibilité d’une indication de n-olet, elle s’affichera ou sera masquée indépendamment de son positionnement (côté hampe ou tête de note). Toutefois, lorsqu’elle se place du côté des têtes de note, certains auteurs recommandent de toujours afficher un crochet. L’option `visible-over-note-heads` permet d’y parvenir.

    music = \relative c'' {
      \tupletNeutral \tuplet 3/2 { c16[ d e } f8]
      \tupletUp \tuplet 3/2 { c8 d e }
    }

    \new Voice {
      \relative c' {
        \time 2/4
        \override TupletBracket.visible-over-note-heads = ##t
        \override Score.TextMark.non-musical = ##f
        { \textMark \markup "default" \music }
        \override TupletBracket.bracket-visibility = #'if-no-beam
        { \textMark \markup \typewriter "'if-no-beam" \music }
      }
    }

## Redéfinition des réglages de mise en forme par défaut des notes d’ornement

Les réglages par défaut des notes d’ornement sont stockés dans les variables suivantes :

    startGraceMusic
    stopGraceMusic
    startAcciaccaturaMusic
    stopAcciaccaturaMusic
    startAppoggiaturaMusic
    stopAppoggiaturaMusic

Ces variables sont définies dans le fichier ‘`ly/grace-init.ly`’. Amender leur définition permet d’en varier les effets.

    startAcciaccaturaMusic = {
      <>(
      \override Flag.stroke-style = #"grace"
      \slurDashed
    }

    stopAcciaccaturaMusic = {
      \revert Flag.stroke-style
      \slurSolid
      <>)
    }

    \relative c'' {
      \acciaccatura d8 c1
    }

## Suppression des numéros de mesure d’une partition

Désactiver le graveur concerné – `Bar_number_engraver` – donnera une partition – contexte `Score` – sans numéros de mesure.

    \layout {
      \context {
        \Score
        \omit BarNumber
        % or:
        %\remove "Bar_number_engraver"
      }
    }

    \relative c'' {
      c4 c c c \break
      c4 c c c
    }

## Suppression de la partie interportée des barres de mesure d’un regroupement autre que `ChoirStaff`

Les barres de mesure des regroupements `StaffGroup`, `PianoStaff` et `GrandStaff` sont par défaut d’un seul tenant. La portion entre les portées – l’objet `SpanBar` – peut néanmoins être supprimée, portée par portée.

    \relative c' {
      \new StaffGroup <<
        \new Staff {
          e1 | e
          \once \override Staff.BarLine.allow-span-bar = ##f
          e1 | e | e
        }
        \new Staff {
          c1 | c | c
          \once \override Staff.BarLine.allow-span-bar = ##f
          c1 | c
        }
        \new Staff {
          a1 | a | a | a | a
        }
      >>
    }

## Styles de silences

Les silences peuvent être gravés selon différents styles.

    \new Staff \relative c {
      \omit Score.TimeSignature
      \cadenzaOn

      \override Staff.Rest.style = #'mensural
      r\maxima^\markup \typewriter { mensural }
      r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
      \bar ""
      \break

      \override Staff.Rest.style = #'neomensural
      r\maxima^\markup \typewriter { neomensural }
      r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
      \bar ""
      \break

      \override Staff.Rest.style = #'classical
      r\maxima^\markup \typewriter { classical }
      r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
      \bar ""
      \break

      \override Staff.Rest.style = #'z
      r\maxima^\markup \typewriter { z-style }
      r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
      \bar ""
      \break

      \override Staff.Rest.style = #'default
      r\maxima^\markup \typewriter { default }
      r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
    }

## Annulation des règles de ligature par défaut

Pour obtenir des ligatures en groupes de `3-4-3-2` croches, dans une mesure à 12/8, il faudra préalablement annuler les réglages par défaut relatifs à 12/8, puis ajouter les règles adaptées :

    \relative c'' {
      \time 12/8

      % Default beaming
      a8 a a a a a a a a a a a

      % Set new values for beam endings
      \set Score.beatStructure = 3,4,3,2
      a8 a a a a a a a a a a a
    }

## Barres rythmiques

Il arrive, dans une feuille de chant « simple », que les notes soient remplacées par une « pulsation » et que la structure de la chanson soit indiquée par les accords au-dessus des mesures. Ceci peut être utile lorsque l’on crée ou retranscrit la structure d’une chanson, ainsi que pour donner au guitariste et musiciens de jazz une pseudo partition.

Le fonctionnement standard d’un `\repeat percent` n’est pas ici applicable puisque le premier temps doit être une note ou un silence.

Le code ci-dessous propose deux alternatives à ce problème en redéfinissant l’aspect d’un silence. Si la durée d’un temps ne correspond pas à la noire, le `r4` inclus dans la définition devra être remplacé par un silence de durée appropriée.

    % Macro to print single slash
    rs = {
      \once \override Rest.stencil = #ly:percent-repeat-interface::beat-slash
      \once \override Rest.thickness = #0.48
      \once \override Rest.slope = #1.7
      r4
    }

    % Function to print a specified number of slashes
    comp = #(define-music-function (count) (integer?)
      #{
        \override Rest.stencil = #ly:percent-repeat-interface::beat-slash
        \override Rest.thickness = #0.48
        \override Rest.slope = #1.7
        \repeat unfold $count { r4 }
        \revert Rest.stencil
      #}
    )

    \score {
      \relative c' {
        c4 d e f |
        \rs \rs \rs \rs |
        \comp #4 |
      }
    }

## Sauts de notes en mode paroles

La syntaxe `s` qui permet de « faire un saut dans le temps » n’est disponible qu’en mode notes et en mode accords. Dans les autres situations, comme en mode paroles par exemple, la commande `\skip` produit les mêmes effets.

    <<
      \relative c'' { a1 | a }
      \new Lyrics \lyricmode { \skip 1 bla1 }
    >>

## Sauts de notes en mode paroles (2)

Sachant qu’un `s` au sein d’un bloc `\lyricmode` est interprété non comme de l’espace mais comme une syllabe, l’utilisation de paires de guillemets informatiques (`""`) ou un caractère souligné simple (`_`) permet de « sauter » une note.

    <<
      \relative c'' { a4 b c d }
      \new Lyrics \lyricmode { a4 "" _ gap }
    >>

## Moignons de hampe

Certaines conventions en matière de notation autorisent les ligatures à enjamber des silences. Dans certains cas, des moignons de hampe accrochés à la ligature offrent une meilleure visibilité du rythme ; certaines éditions modernes vont même alors jusqu’à omettre le silence.

Cet exemple illustre la progression : notation traditionnelle, ligature enjambant le silence, silence surplombé d’un moignon et enfin seule une hampe tronquée. Les moignons s’obtiennent par amendement de la propriété `stemlet-length` de l’objet `Stem`, alors que les silences sont masqués par activation de la propriété de transparence.

Les markups ajoutés au code ci-dessous mettent en exergue les différentes notations.

    \paper { ragged-right = ##f }

    {
      c'16^\markup { traditional } d' r f'
      g'16[^\markup { beams over rests } f' r d']

      % N.B. use Score.Stem to set for the whole score.
      \override Staff.Stem.stemlet-length = #0.75

      c'16[^\markup { stemlets over rests } d' r f']
      g'16[^\markup { stemlets and no rests } f'
      \once \hide Rest
      r16 d']
    }

## Ligature à la pulsation

Une sous-ligature tronquée peut pointer en direction de la pulsation à laquelle elle se rattache. Dans l’exemple suivant, la première ligature évite toute troncature (comportement par défaut), alors que la deuxième respecte rigoureusement la pulsation.

    \relative c'' {
      \time 6/8
      a8. a16 a a
      \set strictBeatBeaming = ##t
      a8. a16 a a
    }

## Subdivision des ligatures

Les ligatures d’une succession de notes de durée inférieure à la croche ne sont pas subdivisées par défaut. Autrement dit, tous les traits de ligature (deux ou plus) seront continus. Ce comportement peut être modifié afin de diviser la ligature en sous-groupes grâce à la propriété `subdivideBeams`. Lorsqu’elle est activée, les ligatures seront subdivisées selon un intervalle défini par `baseMoment` ; il n’y aura alors plus que le nombre de traits de ligature déterminé entre chaque sous-groupe. Si le groupe qui suit la division est plus court que la valeur pour la métrique en cours – généralement lorsque la ligature est incomplète –, le nombre de traits de ligature correspond au regroupement de la bubdivision la plus longue. Cette restriction ne sera toutefois pas appliquée dans le cas où ne reste qu’une note après la division. Par défaut, `baseMoment` fixe la valeur de référence par rapport à la métrique en vigueur. Il faudra donc lui fournir, à l’aide de la fonction `ly:make-moment`, une fraction correspondant à la durée du sous-groupe désiré comme dans l’exemple ci-dessous. Gardez à l’esprit que, si vous venez à modifier `baseMoment`, vous devrez probablement adapter `beatStrusture` afin qu’il reste en adéquation avec les nouvelles valeurs de `baseMoment`.

    \relative c'' {
      c32[ c c c c c c c]
      \set subdivideBeams = ##t
      c32[ c c c c c c c]

      % Set beam sub-group length to an eighth note
      \set baseMoment = #(ly:make-moment 1/8)
      \set beatStructure = 2,2,2,2
      c32[ c c c c c c c]

      % Set beam sub-group length to a sixteenth note
      \set baseMoment = #(ly:make-moment 1/16)
      \set beatStructure = 4,4,4,4
      c32[ c c c c c c c]

      % Shorten beam by 1/32
      \set baseMoment = #(ly:make-moment 1/8)
      \set beatStructure = 2,2,2,2
      c32[ c c c c c c] r32

      % Shorten beam by 3/32
      \set baseMoment = #(ly:make-moment 1/8)
      \set beatStructure = 2,2,2,2
      c32[ c c c c] r16.
      r2
    }

## Exemple pour tam-tam

Un simple exemple pour tam-tam, saisi « tt ».

    #(define mydrums '((tamtam default #f 0)))

    \new DrumStaff \with { instrumentName = #"Tamtam" }

    \drummode {
      \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
      \override Staff.StaffSymbol.line-positions = #'( 0 )
      \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)

      tt 1 \pp \laissezVibrer
    }

## Tambourine example

A tambourine example, entered ’tamb’

    \paper { tagline = ##f }

    #(define mydrums '((tambourine default #f 0)))

    \new DrumStaff \with { instrumentName = #"Tambourine" }

    \drummode {
      \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
      \override Staff.StaffSymbol.line-positions = #'( 0 )
      \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)

      \time 6/8
      tamb8. 16 8 8 8 8 |
      tamb4. 8 8 8 |
      % the trick with the scaled duration and the shorter rest
      % is neccessary for the correct ending of the trill-span!
      tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan |
    }

## Encadrement sur trois côtés

Voici comment construire une commande de markup chargée d’agrémenter du texte ou autre annotation, d’une bordure sur trois côtés.

    % New command to add a three sided box, with sides north, west and south
    % Based on the box-stencil command defined in scm/stencil.scm
    % Note that ";;" is used to comment a line in Scheme
    #(define-public (NWS-box-stencil stencil thickness padding)
       "Add a box around STENCIL, producing a new stencil."
       (let* ((x-ext (interval-widen (ly:stencil-extent stencil X) padding))
              (y-ext (interval-widen (ly:stencil-extent stencil Y) padding))
              (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext))
              (x-rule (make-filled-box-stencil
                       (interval-widen x-ext thickness) (cons 0 thickness))))
         ;; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding))
         (set! stencil (ly:stencil-combine-at-edge stencil X LEFT y-rule padding))
         (set! stencil (ly:stencil-combine-at-edge stencil Y UP x-rule 0.0))
         (set! stencil (ly:stencil-combine-at-edge stencil Y DOWN x-rule 0.0))
         stencil))

    % The corresponding markup command, based on the \box command defined
    % in scm/define-markup-commands.scm
    #(define-markup-command (NWS-box layout props arg) (markup?)
       #:properties ((thickness 0.1) (font-size 0) (box-padding 0.2))
       "Draw a box round @var{arg}.  Looks at @code{thickness},
    @code{box-padding} and @code{font-size} properties to determine line
    thickness and padding around the markup."
       (let ((pad (* (magstep font-size) box-padding))
             (m (interpret-markup layout props arg)))
         (NWS-box-stencil m thickness pad)))

    % Test it:

    \relative c' {
      c1^\markup { \NWS-box ABCD }
      c1^\markup { \NWS-box \note {4} #1.0 }
    }

## Métrique entre parenthèses

Une métrique peut être mise entre parenthèses.

    \relative c'' {
      \override Staff.TimeSignature.stencil = #(lambda (grob)
        (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
      \time 2/4
      a4 b8 c
    }

## Métrique entre parenthèses – méthode 3

Autre manière de mettre la métrique entre parenthèses.

    \relative c'' {
      \override Staff.TimeSignature.stencil = #(lambda (grob)
        (parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1 ))
      \time 2/4
      a4 b8 c
    }

## Affichage seulement du numérateur d’une métrique (au lieu d’une fraction)

La métrique est parfois indiquée non pas par une fraction (par ex. 7/4) mais simplement par son numérateur (le chiffre 7 dans ce cas). L’instruction `\override Staff.TimeSignature.style = #'single-digit` permet de déroger au style par défaut de manière permanente – un `\revert Staff.TimeSignature.style` annulera ces modifications. Lorsque cette métrique sous la forme d’un seul chiffre ne se présente qu’une seule fois, il suffit de faire précéder l’instruction `\override` d’un simple `\once`.

    \relative c'' {
      \time 3/4
      c4 c c
      % Change the style permanently
      \override Staff.TimeSignature.style = #'single-digit
      \time 2/4
      c4 c
      \time 3/4
      c4 c c
      % Revert to default style:
      \revert Staff.TimeSignature.style
      \time 2/4
      c4 c
      % single-digit style only for the next time signature
      \once \override Staff.TimeSignature.style = #'single-digit
      \time 5/4
      c4 c c c c
      \time 2/4
      c4 c
    }

## Mise en forme des notes d’ornement

Il est possible de changer globalement la mise en forme des notes d’ornement dans un morceau, au moyen des fonctions `add-grace-property` et `remove-grace-property`.

Ici, par exemple, on ôte la définition de l’orientation des objets `Stem` pour toutes les petites notes, afin que les hampes ne soient pas toujours orientées vers le haut, et on leur préfère des têtes en forme de croix.

    \relative c'' {
      \new Staff {
        $(remove-grace-property 'Voice 'Stem 'direction)
        $(add-grace-property 'Voice 'NoteHead 'style 'cross)
        \new Voice {
           \acciaccatura { f16 } g4
           \grace { d16 e } f4
           \appoggiatura { f,32 g a } e2
        }
      }
    }

## Personnalisation de la métrique

Il est possible de définir de nouveaux styles de métrique. La métrique de la deuxième mesure devrait être sens dessus dessous sur les deux portées.

    #(add-simple-time-signature-style 'topsy-turvy
       (lambda (fraction)
         (make-rotate-markup 180 (make-compound-meter-markup fraction))))

    <<
      \new Staff {
        \time 3/4 f'2.
        \override Score.TimeSignature.style = #'topsy-turvy
        \time 3/4 R2. \bar "|."
      }
      \new Staff {
        R2. e''
      }
    >>

## Crochets de style alternatif

Une dérogation à la propriété `stencil` de l’objet `Flag` permet aux croches et notes de durée inférieure d’adopter une autre forme de crochet. Sont disponibles les variantes `modern-straight-flag`, `old-straight-flag` et `flat-flag`.

    testnotes = {
      \autoBeamOff
      c8 d16 c32 d64 \acciaccatura { c8 } d64 r4
    }

    \score {
      \relative c' {
        \time 2/4
        \testnotes

        \override Flag.stencil = #modern-straight-flag
        \testnotes

        \override Flag.stencil = #old-straight-flag
        \testnotes

        \override Flag.stencil = #flat-flag
        \testnotes

        \revert Flag.stencil
        \testnotes
      }
      \layout {
        indent = 0
        \context {
          \Score
          \override NonMusicalPaperColumn.line-break-permission = ##f
        }
      }
    }

## Utilisation de hampe barrée pour une note normale

Le trait que l’on trouve sur les hampes des acciaccatures peut être appliqué dans d’autres situations.

    \relative c'' {
      \override Flag.stroke-style = #"grace"
      c8( d2) e8( f4)
    }

## Liaison de tenue et arpège

Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans ce cas, les notes liées ne sont pas toutes consécutives. Il faut alors assigner à la propriété `tieWaitForNote` la valeur `#t` (true pour « vrai »). Cette même méthode peut servir, par exemple, à lier un trémolo à un accord.

    \relative c' {
      \set tieWaitForNote = ##t
      \grace { c16[ ~ e ~ g] ~ } <c, e g>2
      \repeat tremolo 8 { c32 ~ c' ~ } <c c,>1
      e8 ~ c ~ a ~ f ~ <e' c a f>2
      \tieUp
      c8 ~ a
      \tieDown
      \tieDotted
      g8 ~ c g2
    }

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