2.4.2 Définition des règles de ligature automatique

Lorsque la fonction de ligature automatique est active, le positionnement des ligatures dépend des trois propriétés beatBase, beatStructure et beamExceptions. Chacune de ces propriétés peut être adaptée, jusqu’à la prochaine commande \time, comme indiqué ci-après, ou bien carrément être modifiées – see Métrique.

Dès lors qu’une règle affectant beamExceptions est applicable, elle prendra le pas sur beatBase et beatStructure.

Ligature basée sur beatBase et beatStructure

beamExceptions dispose par défaut de règles pour les métriques les plus courantes ; il est donc impératif de les invalider pour gérer les ligatures automatiques à l’aide de beatBase et beatStructure. Les règles de beamExceptions se désactivent par un

\set Timing.beamExceptions = #'()

Lorsque beamExceptions est défini à #'(), que ce soit explicitement ou en raison de l’absence de règles par défaut de beamExceptions pour la métrique en vigueur, la terminaison des ligatures est directement liée à la pulsation telle que spécifiée par les propriétés beatBase et beatStructure.

La commande \time réinitialise beatBase, beatStructure et beamExceptions. C’est pour cette raison que les adaptations doivent se placer à la suite de la commande \time, non au préalable.

\relative c'' {
  \time 5/16
  c16^"par défaut" c c c c |
  % beamExceptions n'est probablement pas définie pour 5/16,
  % mais désactivons les par sûreté
  \set Timing.beamExceptions = #'()
  \set Timing.beatStructure = 2,3
  c16^"(2+3)" c c c c |
  \set Timing.beatStructure = 3,2
  c16^"(3+2)" c c c c |
}
[image of music]
\relative {
  \time 4/4
  a'8^"par défaut" a a a a a a a
  % Désactivons beamExceptions parce sûrement
  % définie pour 4/4
  \set Timing.beamExceptions = #'()
  \set Timing.beatBase = #1/4
  \set Timing.beatStructure = 1,1,1,1
  a8^"adapté" a a a a a a a
}
[image of music]

Les effets de règles de ligature peuvent être restreints à un contexte particulier. En l’absence de règle particulière déterminée dans un contexte de niveau inférieur, les règles définies au niveau directement supérieur s’appliqueront.

\new Staff {
  \time 7/8
  % Pas besoin de désactiver beamExceptions
  % car il n'y en a pas de définie en 7/8
  \set Staff.beatStructure = 2,3,2
  <<
    \new Voice = one {
      \relative {
        a'8 a a a a a a
      }
    }
    \new Voice = two {
      \relative {
        \voiceTwo
        \set Voice.beatStructure = 1,3,3
        f'8 f f f f f f
      }
    }
  >>
}
[image of music]

Lorsque plusieurs voix cohabitent sur une même portée et que les règles de ligature doivent s’appliquer sans distinction, il faut spécifier que ces règles affectent le contexte Staff :

\time 7/8
% rythme 3-1-1-2
% Changement appliqué à Voice par défaut -- ne marche pas bien.
% Parce que voix auto-générées, toutes les pulsations seront à
% beatBase #1/8
\set beatStructure = 3,1,1,2
<< \relative {a'8 a a a16 a a a a8 a} \\ \relative {f'4. f8 f f f} >>

% Fonctionne correctement après spécification du contexte Staff
\set Staff.beatStructure = 3,1,1,2
<< \relative {a'8 a a a16 a a a a8 a} \\ \relative {f'4. f8 f f f} >>
[image of music]

Vous pouvez ajuster la valeur de beatBase afin d’obtenir des ligatures selon vos besoin. Notez cependant que la valeur de beatStructure devra être en corrélation avec cette nouvelle valeur de beatBase.

\time 5/8
% Pas besoin de désactiver beamExceptions
% car pas définie pour 5/8
\set Timing.beatBase = #1/16
\set Timing.beatStructure = 7,3
\*10 a'16
[image of music]

Ligature basée sur beamExceptions

Les règles spécifiques autres que celles concernant la terminaison des ligatures sont gérées par la propriété beamExceptions.

La valeur de beamExceptions, structure de données Scheme plutôt complexe, est plus facilement générée par la fonction \beamExceptions. Cette fonction reçoit au moins un schéma de ligature manuelle sur la durée d’une mesure (les mesures doivent être séparées par un test de mesure | puisque cette fonction n’a pas d’autre moyen de déterminer la longueur de la mesure). En voici un simple exemple :

\relative c'' {
  \time 3/16
  \set Timing.beatStructure = 2,1
  \set Timing.beamExceptions =
    \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
  c16 c c |
  \*6 c32 |
}
[image of music]

Note : La propriété beamExceptions doit répertorier absolument toutes les exceptions. Il n’est en effet pas possible d’en ajouter, modifier ou supprimer a posteriori. Cela peut paraître fastidieux, mais toutes les règles de ligature devraient être appréciées avant de les spécifier.

Lorsqu’intervient un changement de métrique, les valeurs par défaut de Timing.beatBase, Timing.beatStructure et Timing.beamExceptions sont réinitialisées. Il suffit donc, pour revenir aux règles de ligature par défaut d’un contexte Timing, de spécifier à nouveau la métrique.

\relative a' {
  \time 6/8
  \*6  a8
  % groupe (4 + 2)
  \set Timing.beatStructure = 4,2
  \*6 a8
  % retour au réglage par défaut
  \time 6/8
  \*6 a8
}
[image of music]

Les règles de ligature automatique par défaut sont répertoriées, par métrique, dans le fichier scm/time-signature-settings.scm. Les manières de déroger à ce comportement sont abordées au chapitre Métrique.

De nombreuses règles de ligature automatique comportent une clé beamExceptions. Par exemple, s’il n’y a que des croches dans une mesure à 4/4, celles-ci seront réparties en deux groupes. Le fait de ne pas réinitialiser beamExceptions lors d’un aménagement de la pulsation – l’élément beatStructure – empêchera l’application de cette dérogation.

\time 4/4
\set Timing.beatBase = #1/8
\set Timing.beatStructure = 3,3,2
% Pas de ligature en (3 3 2) à cause de beamExceptions
\*8 c''8 |
% On ligature en (3 3 2) car beamExceptions vidée
\set Timing.beamExceptions = #'()
\*8  c''8
[image of music]

De la même manière, les croches d’une mesure à 3/4 sont ligaturées sur la mesure par défaut. Ligaturer sur le temps requiert un appel à beamExceptions.

\time 3/4
% Ligaturé en (6) à cause de beamExceptions
\repeat unfold 6 {a'8} |
% On ligature en (1 1 1) grâce à beatBase et beatStructure par défaut
\set Timing.beamExceptions = #'()
\repeat unfold 6 {a'8}
[image of music]

Certaines partitions des périodes romantique ou classique font apparaître des ligatures sur la moitié d’une mesure à 3/4 (ou à 3/8), ce qui va à l’encontre de la règle établie – comme le fait remarquer Gould à la page 153 de son ouvrage – puisque donne l’impression d’une mesure à 6/8. Il en va de même pour une mesure à 3/8. La reproduction d’un tel comportement se contrôle à l’aide de la propriété de contexte beamHalfMeasure, qui d’ailleurs ne sera effective que lorsque le numérateur de la métrique est un 3.

\relative a' {
  \time 3/4
  r4. a8 a a |
  \set Timing.beamHalfMeasure = ##f
  r4. a8 a a |
}
[image of music]

Principes de la ligature automatique

Lorsqu’elle est activée, la gestion automatisée des ligatures est directement liée aux propriétés beatBase, beatStructure et beamExceptions.

Les règles déterminant le positionnement des ligatures automatiques s’appliquent dans l’ordre suivant de priorité :

Le type de ligature correspond à la durée la plus courte dans le groupe.

Les règles de ligature par défaut sont répertoriées dans le fichier scm/time-signature-settings.scm.

Morceaux choisis

Subdivision des ligatures

Les ligatures d’une succession de notes de durée inférieure ou égale à la double 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, un certain nombre de traits de ligature entre deux hampes est supprimé à des intervalles correspondant à la durée de sous-groupe souhaitée.

Les propriétés beamMinimumSubdivision et beamMaximumSubdivision permettent de configurer les limites de la subdivision automatique des ligatures : l’intervalle rythmique minimum auquel subdiviser et le nombre de tronçons supprimés selon cet intervalle. Leur valeur par défaut est respectivement de 0 et +inf.0, ce qui demandera à LilyPond de subdiviser le plus possible.

Certains cas particulier doivent être pris en considération.

Lorsque la propriété respectIncompletBeams est activée, les subdivisions incomplètes à plus de deux hampes sont considérées comme « extension » du sous-groupe précédent, autrement dit, le groupe de subdivision précédente sera étendu pour couvrir aussi la subdivision incomplète. Lorsqu’elle est désactivée, ce qui est le cas par défaut, une nouvelle subdivision est alors entamée.

\relative c'' {
  \time 1/4

  <>^"default"
  c32 c c c c c c c

  <>^"with subdivision"
  \set subdivideBeams = ##t
  c32 c c c c c c c

  <>^"min 1/8"
  \once \set beamMinimumSubdivision = #1/8
  c32 c c c c c c c

  <>^"max 1/16"
  \once \set beamMaximumSubdivision = #1/16
  c32 c c c c c c c

  <>^"max 3/8"
  \once \set beamMaximumSubdivision = #3/8
  \*16 c64

  <>^"min 1/32, max 1/64"
  % Set maximum beam subdivision interval to 1/64 to limit
  % subdivision depth, despite not being metrically correct.
  \once \set beamMinimumSubdivision = #1/32
  \once \set beamMaximumSubdivision = #1/64
  \*32 c128
  \break

  <>^"beams with incomplete subdivisions"
  c32 c c c c c c r32
  c32 c c c c r16.

  <>^\markup { "the same with"
               \typewriter { "respectIncomplete=#t" } }
  \set respectIncompleteBeams = ##t
  % The incomplete subgroup extends the completed subgroup.
  c32 c c c c c c r32
  % No visual change since we have only two stems in the
  % incomplete subgroup.
  c32 c c c c r16.
}
[image of music]

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
}
[image of music]

Signes de direction, signes de sous-groupe

Les regroupement par temps au sein d’une mesure sont contrôlés par des propriétés de contexte : beatStructure liste la longueur de chaque temps, en unités de beatBase. Les valeurs par défaut sont répertoriées dans le fichier scm/time-signature-settings.scm. Ces propriétés sont modifiables grâce à la commande \set.

Par ailleurs, l’instruction \time accepte des règles de pulsation différentes des valeurs par défaut. Dans la mesure où \time s’applique au contexte Timing, elle ne redéfinira pas les valeurs de beatStructure ou beatBase 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. Pour une mesure à 4/4, il faudra explicitement définir beatBase en croches afin que le motif irrégulier de la mesure soit correctement rendu.

\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 |
    \time 3,3,2 4/4
    \set Timing.beatBase = #1/8
    f4 d8 f4 d8 g4
  }
  \layout {
    \context {
      \Staff
      \consists "Measure_grouping_engraver"
    }
  }
}
[image of 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.beatBase = #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
        }
      >>
    }
  >>
}
[image of music]

Voir aussi

Manuel de notation : Métrique.

Fichiers d’initialisation : scm/time-signature-settings.scm.

Morceaux choisis : Rythme.

Référence des propriétés internes : Auto_beam_engraver, Beam, BeamForbidEvent, beam-interface.

Problèmes connus et avertissements

Si une partition se termine alors qu’une ligature automatique est restée inachevée, cette dernière ligature ne sera pas imprimée du tout. C’est également valable dans le cas d’une musique polyphonique saisie avec la syntaxe << … \\ … >>, où une voix se terminerait sans que la dernière ligature ne soit achevée. Le plus simple, en pareil cas, est de spécifier manuellement les dernières ligatures.

Le traducteur Timing est par défaut affecté au contexte Score. Définir la métrique dans une portée aura donc des effets sur les ligatures de toutes les autres. Par voie de conséquence, la définition de la métrique apparaissant dans une autre portée annulera les aménagements précédemment apportés aux règles de ligature. Il est donc préférable, pour éviter tout désagrément, de ne spécifier la métrique que dans une seule portée.

<<
  \new Staff {
    \time 3/4
    \set Timing.beatBase = #1/8
    \set Timing.beatStructure = 1,5
    \set Timing.beamExceptions = #'()
    \repeat unfold 6 { a'8 }
  }
  \new Staff {
    \*6 a'8
  }
>>
[image of music]

Vous pouvez adapter les règles de ligature par défaut pour une métrique particulière de telle sorte que ces règles que vous aurez définies soient toujours prises en compte. La modification des règles de ligature automatiques est abordée au chapitre Métrique.

<<
  \new Staff {
    \overrideTimeSignatureSettings
      3/4               % timeSignature
      #1/8              % beatBase
      1,5               % beatStructure
      #'()              % beamExceptions
    \time 3/4
    \repeat unfold 6 { a'8 }
  }
  \new Staff {
    \time 3/4
    \*6 a'8
  }
>>
[image of music]

GNU LilyPond – Manuel de notation v2.27.4 (development-branch).