LilyPond snippets: Simultaneous notes

# Simultaneous notes

Simultaneous notes

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

## Modification de la taille d’une note particulière d’un accord

La commande `\tweak` permet de modifier la propriété `font-size` d’une note particulière d’un accord.

Il s’agit de placer, à l’intérieur même de l’accord (dans la construction `< >`) et avant la note considérée, l’instruction `\tweak` suivie de `font-size` et de définir la taille voulue – comme `#-2` pour une petite tête.

    \relative c' {
      <\tweak font-size #+2 c e g c
       \tweak font-size #-2 e>1
       ^\markup { A tiny e }_\markup { A big c }
    }

## Modification des indications de parties combinées

Lorsque vous regroupez automatiquement des parties, vous pouvez modifier le texte qui sera affiché pour les solos et pour les parties à l’unisson :

    \new Staff <<
      \set Staff.soloText = #"girl"
      \set Staff.soloIIText = #"boy"
      \set Staff.aDueText = #"together"
      \partCombine
        \relative c'' {
          g4 g r r
          a2 g
        }
        \relative c'' {
          r4 r a( b)
          a2 g
        }
    >>

## Clusters

Un cluster indique à l’instrumentiste qu’il doit jouer toute une suite de sons.

    fragment = \relative c' {
      c4 f <e d'>4
      <g a>8 <e a> a4 c2 <d b>4
      e2 c
    }

    <<
      \new Staff \fragment
      \new Staff \makeClusters \fragment
    >>

## Combinaison de deux parties sur une même portée

L’outil de combinaison de parties (la commande `\partCombine`) permet d’avoir deux parties différentes sur une même portée. LilyPond ajoute automatiquement des indications textuelles, telles que « solo » ou « a2 ». Si votre intention n’est que de fusionner les parties, sans ajouter de texte, assignez faux à la propriété `printPartCombineTexts`. Dans le cas de partitions vocales, et plus particulièrement d’hymnes, ces « solo/a2 » ne sont d’aucune utilité, aussi vaut-il mieux les désactiver. Dans le cas où il y aurait alternance entre solo et tutti, il vaut mieux faire appel à de la musique polyphonique standard.

Voici trois moyens d’imprimer deux parties sur une même portée : en polyphonie normale, avec `\partCombine` sans indication supplémentaire, et avec `\partCombine` commentée.

    %% Combining pedal notes with clef changes

    musicUp = \relative c'' {
      \time 4/4
      a4 c4.( g8) a4 |
      g4 e' g,( a8 b) |
      c b a2.
    }

    musicDown = \relative c'' {
      g4 e4.( d8) c4 |
      r2 g'4( f8 e) |
      d2 \stemDown a
    }

    \score {
        <<
        \new Staff \with { instrumentName = "Standard polyphony" }

          << \musicUp \\ \musicDown >>

        \new Staff \with {
          instrumentName = "PartCombine without text"
          printPartCombineTexts = ##f
        }

        \partCombine \musicUp \musicDown

        \new Staff \with { instrumentName = "PartCombine with text" }
          \partCombine \musicUp \musicDown
        >>
      \layout {
        indent = 6.0\cm
        \context {
          \Score
          \override SystemStartBar.collapse-height = #30
        }
      }
    }

## Impression d’accords complexes

Voici comment obtenir l’impression d’un accord au sein duquel une même note est jouée deux fois avec des altérations différentes.

    fixA = {
      \once \override Stem.length = #11
    }

    fixB = {
      \once \override NoteHead.X-offset = #1.7
      \once \override Stem.length = #7
      \once \override Stem.rotation = #'(45 0 0)
      \once \override Stem.extra-offset = #'(-0.1 . -0.2)
      \once \override Flag.style = #'no-flag
      \once \override Accidental.extra-offset = #'(4 . -.1)
    }

    \relative c' {
      << { \fixA <b d!>8 } \\ { \voiceThree \fixB dis } >> s
    }

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

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

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

## Suppression des avertissements de chevauchement

If notes from two voices with stems in the same direction are placed at the same position, and both voices have no shift or the same shift specified, the error message ‘`warning: ignoring too many clashing note columns`’ will appear when compiling the LilyPond file. This message can be suppressed by setting the `'ignore-collision` property of the `NoteColumn` object to `#t`. Please note that this does not just suppress warnings but stops LilyPond trying to resolve collisions at all and so may have unintended results unless used with care.

    ignore = \override NoteColumn.ignore-collision = ##t

    \relative c' {
      \new Staff <<
        \new Voice { \ignore \stemDown f2 g }
        \new Voice { c2 \stemDown c, }
      >>
    }

## Deux `\partCombine` sur une même portée

La fonction `\partCombine` prend deux expressions musicales contenant chacune une partie et les distribue dans quatre contextes `Voice` nommés « two », « one », « solo » et « chords » selon le moment et la manière dont ces parties fusionnent en une voix commune. Les voix issues de `\partCombine` peuvent disposer de leurs propres propriétés de mise en forme définies de manière habituelle. Sont ici définies des extensions à `\partCombine` de sorte à faciliter le placement de quatre voix sur une seule portée.

    soprano = { d'4 | cis'  b  e'  d'8 cis' | cis'2 b }
    alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 }
    tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 }
    bass = { fis8 gis | a4 gis g fis | eis fis b,2 }

    \new Staff <<
      \key b\minor
      \clef alto
      \partial 4
      \transpose b b'
      \partCombineUp \soprano \alto
      \partCombineDown \tenor \bass
    >>

    \layout {
      \context {
        \Staff
        \accepts "VoiceBox"
      }
      \context {
        \name "VoiceBox"
        \type "Engraver_group"
        \defaultchild "Voice"
        \accepts "Voice"
        \accepts "NullVoice"
      }
    }

    customPartCombineUp =
    #(define-music-function (partOne partTwo)
      (ly:music? ly:music?)
    "Take the music in @var{partOne} and @var{partTwo} and return
    a @code{VoiceBox} named @q{Up} containing @code{Voice}s
    that contain @var{partOne} and @var{partTwo} merged into one
    voice where feasible.  This variant sets the default voicing
    in the output to use upward stems."
    #{
      \new VoiceBox = "Up" <<
        \context Voice = "one" { \voiceOne }
        \context Voice = "two" { \voiceThree }
        \context Voice = "shared" { \voiceOne }
        \context Voice = "solo" { \voiceOne }
        \context NullVoice = "null" {}
        \partCombine #partOne #partTwo
      >>
    #})

    customPartCombineDown = #
    (define-music-function (partOne partTwo)
      (ly:music? ly:music?)
    "Take the music in @var{partOne} and @var{partTwo} and return
    a @code{VoiceBox} named @q{Down} containing @code{Voice}s
    that contain @var{partOne} and @var{partTwo} merged into one
    voice where feasible.  This variant sets the default voicing
    in the output to use downward stems."
    #{
      \new VoiceBox = "Down" <<
        \set VoiceBox.soloText = #"Solo III"
        \set VoiceBox.soloIIText = #"Solo IV"
        \context Voice ="one" { \voiceFour }
        \context Voice ="two" { \voiceTwo }
        \context Voice ="shared" { \voiceFour }
        \context Voice ="solo" { \voiceFour }
        \context NullVoice = "null" {}
        \partCombine #partOne #partTwo
      >>
    #})

    soprano = { d'4 | cis'  b  e'  d'8 cis' | cis'2 b }
    alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 }
    tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 }
    bass = { fis8 gis | a4 gis g fis | eis fis b,2 }

    \new Staff <<
      \key b\minor
      \clef alto
      \partial 4
      \transpose b b'
      \customPartCombineUp \soprano \alto
      \customPartCombineDown \tenor \bass
    >>

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