GNU LilyPond – Manuel de notation: 5.1.6 Définition de nouveaux contextes

### 5.1.6 Définition de nouveaux contextes

Les contextes tels que `Staff` ou `Voice` sont faits de briques de constructions empilées. En combinant divers graveurs, il est possible de créer de nouveaux types de contextes.

Dans l’exemple suivant, on construit, de zéro, un nouveau contexte très semblable à `Voice`, mais qui n’imprime que des têtes de notes en forme de barres obliques au centre de la portée. Un tel contexte, par exemple, peut servir à indiquer un passage improvisé dans un morceau de jazz.

On a rassemblé les réglages dans un bloc `\context`, lui-même dans le bloc `\layout` :

>     \layout {
>       \context {
>         …
>       }
>     }

En lieu et place des points (…), voici les éléments à saisir :

- Tout d’abord, il convient de donner un nom `\name` à notre nouveau contexte :

  >     \name ImproVoice

- Comme il est très semblable à `Voice`, nous souhaitons que toutes les commandes associées au `Voice` déjà existant, restent valables. D’où nécessité de la commande `\alias`, qui va l’associer au contexte `Voice` :

  >     \alias Voice

- Ce contexte doit pouvoir imprimer des notes, et des indications textuelles ; on ajoute donc les graveurs appropriés.

  >     \consists Note_heads_engraver
  >     \consists Text_engraver

- Cependant, on veut que les notes s’affichent toutes au centre de la portée :

  >     \consists Pitch_squash_engraver
  >     squashedPosition = #0

  Le graveur Pitch_squash_engraver intercepte les notes créées par Note_heads_engraver, et les « écrase » pour qu’elles aient toutes la même position verticale, définie par `squashedPosition` : ici il s’agit de la valeur `0`, c’est-à-dire la ligne du milieu.

- On veut que les notes aient la forme d’une barre oblique, sans aucune hampe :

  >     \override NoteHead #'style = #'slash
  >     \override Stem #'transparent = ##t

- Afin que tous ces graveurs puissent travailler de concert, on leur adjoint un sous-programme spécial, introduit par la commande `\type` : il s’agit de `Engraver_group`,

  >     \type "Engraver_group"

Récapitulons – on se retrouve avec le bloc suivant :

>     \context {
>       \name ImproVoice
>       \type "Engraver_group"
>       \consists "Note_heads_engraver"
>       \consists "Text_engraver"
>       \consists Pitch_squash_engraver
>       squashedPosition = #0
>       \override NoteHead #'style = #'slash
>       \override Stem #'transparent = ##t
>       \alias Voice
>     }

Ce n’est pas tout. En effet, on veut intégrer le nouveau contexte `ImproVoice` dans la hiérarchie des contextes. Tout comme le contexte `Voice`, sa place est au sein du contexte `Staff`. Nous allons donc modifier le contexte `Staff`, au moyen de la commande `\accepts` :

>     \context {
>       \Staff
>       \accepts ImproVoice
>     }

Le contraire de `\accepts` est `\denies`, qui est parfois utile lorsque l’on recycle des définitions de contextes déjà existantes.

Enfin, tout cela doit prendre place dans le bloc `\layout`, comme suit :

>     \layout {
>       \context {
>         \name ImproVoice
>         …
>       }
>       \context {
>         \Staff
>         \accepts "ImproVoice"
>       }
>     }

On peut alors saisir la musique, comme dans l’exemple plus haut :

>     \relative c'' {
>       a4 d8 bes8
>       \new ImproVoice {
>         c4^"ad lib" c
>         c4 c^"dévêtez-vous"
>         c c_"tout en jouant :)"
>       }
>       a1
>     }

Autres langues : English, deutsch, español, 日本語.

#### LilyPond — Manuel de notation