Résolution des collisions

Les notes de hauteur identique appartenant à des voix différentes, même si leur hampe sont opposées, verront leur tête automatiquement fusionner. Les notes dont la tête diffère ou bien qui ont la hampe dans la même direction ne seront pas automatiquement fusionnées. Les silences, lorsqu’ils sont dans une autre voix et à l’opposé des hampes seront décalés verticalement. Vous constaterez, dans l’exemple suivant, que la fusion échoue aux premier et troisième temps de la première mesure, ainsi qu’au premier temps de la deuxième mesure.

<<
  \relative {
    c''8 d e d c d c4
    g'2 fis
  } \\
  \relative {
    c''2 c8. b16 c4
    e,2 r
  } \\
  \relative {
    \oneVoice
    s1
    e'8 a b c d2
  }
>>

[image of music]

Cependant, vous pouvez fusionner une tête de blanche avec une tête de croche – jamais avec une noire. Les têtes du premier temps de la première mesure ont bien fusionné :

<<
  \relative {
    \mergeDifferentlyHeadedOn
    c''8 d e d c d c4
    g'2 fis
  } \\
  \relative {
    c''2 c8. b16 c4
    e,2 r
  } \\
  \relative {
    \oneVoice
    s1
    e'8 a b c d2
  }
>>

[image of music]

De même, vous pouvez fusionner les têtes de notes pointées et non pointées comme au troisième temps de la première mesure :

<<
  \relative {
    \mergeDifferentlyHeadedOn
    \mergeDifferentlyDottedOn
    c''8 d e d c d c4
    g'2 fis
  } \\
  \relative {
    c''2 c8. b16 c4
    e,2 r
  } \\
  \relative {
    \oneVoice
    s1
    e'8 a b c d2
  }
>>

[image of music]

Lorsque trois notes ou plus s’agglutinent dans un même empilement, \mergeDifferentlyHeadedOn ne peut mener à bien la fusion des deux notes qui devraient l’être. Pour obtenir une fusion optimale, appliquez un décalage (\shift) à la note qui ne devrait pas fusionner. Ici, on applique un \shiftOn pour décaler le sol de l’empilement ; le rendement de \mergeDifferentlyHeadedOn est alors comme il faut.

<<
  \relative {
    \mergeDifferentlyHeadedOn
    \mergeDifferentlyDottedOn
    c''8 d e d c d c4
    \shiftOn
    g'2 fis
  } \\
  \relative {
    c''2 c8. b16 c4
    e,2 r
  } \\
  \relative {
    \oneVoice
    s1
    e'8 a b c d2
  }
>>

[image of music]

La commande \shiftOn permet, sans pour autant le forcer, un décalage des notes d’une voix en particulier. Une note ou un accord appartenant à cette voix ne seront décalés que si leur hampe menaçait d’entrer en collision avec une hampe appartenant à une autre voix allant dans la même direction. La commande \shiftOff interdit l’apparition de décalage.

Les voix externes – habituellement les voix une et deux – sont affectées de \shiftOff, alors que les voix internes – trois et quatre – sont affectées de \shiftOn. Lorsqu’un décalage intervient, les notes dont les hampes sont ascendantes (voix impaire) iront vers la droite, et les notes à hampe descendante (voix paire) iront vers la gauche.

Voici un exemple qui vous permettra de bien visualiser ce qui se passe en interne.

Note : Lorsqu’il y a trois voix ou plus, prenez garde au fait que l’ordre d’apparition des voix dans votre fichier ne correspond pas à l’ordre vertical des voix tel qu’il apparaîtra sur la portée.

\new Staff \relative {
  %% saisie abrégée
  <<
    { f''2  }  % 1 : extrême haute
    \\
    { g,2 }  % 2 : extrême basse
    \\
    { d'2 }  % 3 : intermédiaire haute
    \\
    { b2  }  % 4 : intermédiaire basse
  >>
  %% expansion en interne de ce qui précède
  <<
    \new Voice = "1" { \voiceOne   \shiftOff f'2 }
    \new Voice = "2" { \voiceTwo   \shiftOff g,2 }
    \new Voice = "3" { \voiceThree \shiftOn  d'2 } % décale à droite
    \new Voice = "4" { \voiceFour  \shiftOn  b2  } % décale à gauche
  >>
}

[image of music]

Les commandes \shiftOnn et \shiftOnnn sont des niveaux supplémentaires de décalage qui peuvent s’adopter temporairement dans certaines situations complexes – voir Exemple concret.

Les têtes de notes ne fusionneront que dans la mesure où leur hampe sont opposées – implicitement parce qu’appartenant aux voix une ou deux, ou bien explicitement.

Commandes prédéfinies

\mergeDifferentlyDottedOn, \mergeDifferentlyDottedOff, \mergeDifferentlyHeadedOn, \mergeDifferentlyHeadedOff.

\shiftOn, \shiftOnn, \shiftOnnn, \shiftOff.

Morceaux choisis

Ajout de voix pour éviter les collisions

Dans certains cas de musique polyphonique complexe, une voix supplémentaire peut permettre d’éviter les risques de collision. Lorsque quatre voix parallèles ne suffisent pas, la fonction Scheme context-spec-music permet d’ajouter encore d’autres voix.

voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)

\relative c'' {
  \time 3/4
  \key d \minor
  \partial 2
  <<
    \new Voice  {
      \voiceOne
      a4. a8
      e'4 e4. e8
      f4 d4. c8
    }
    \new Voice {
      \voiceTwo
      d,2
      d4 cis2
      d4 bes2
    }
    \new Voice {
      \voiceThree
      f'2
      bes4 a2
      a4 s2
    }
    \new Voice {
      \voiceFive
      s2
      g4 g2
      f4 f2
    }
  >>
}

[image of music]

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

[image of music]

Décalage horizontal forcé

Quand LilyPond est dépassé, la propriété force-hshift de l’objet NoteColumn et des silences à hauteur déterminée peuvent s’avérer utiles pour dicter au programme les choix de placement. On travaille ici en espace de portée.

\relative c' <<
  {
    <d g>2 <d g>
  }
  \\
  {
    <b f'>2
    \once \override NoteColumn.force-hshift = 1.7
    <b f'>2
  }
>>

[image of music]

Voir aussi

Glossaire musicologique : polyphonie.

Manuel d’initiation : Exemple concret, Les voix contiennent la musique, Notes simultanées.

Morceaux choisis : Notation simultanée.

Référence des propriétés internes : NoteColumn, NoteCollision, RestCollision.

Problèmes connus et avertissements

Une clause \override NoteColumn.ignore-collision = ##t aura pour effet une fusion incorrecte des têtes de note différentes à partir de voix différentes.

\mergeDifferentlyHeadedOn
<< \relative { c'16 a' b a } \\ \relative { c'2 } >>
\override NoteColumn.ignore-collision = ##t
<< \relative { c'16 a' b a } \\ \relative { c'2 } >>

[image of music]


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