Referencia de la notación de GNU LilyPond: 5.1.6 Definir contextos nuevos

### 5.1.6 Definir contextos nuevos

Los contextos específicos, como `Staff` y `Voice`, están construidos a base de bloques sencillos. Es posible crear nuevos tipos de contextos con combinaciones distintas de añadidos grabadores.

El siguiente ejemplo muestra cómo construir un tipo diferente de contexto de `Voice` partiendo de cero. Será parecido a `Voice`, pero imprime solamente cabezas centradas en forma de barra inclinada. Se puede usar para indicar improvisación en piezas de jazz,

Estos ajustes se definen dentro de un bloque `\context` que a su vez está dentro de un bloque `\layout`,

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

En el siguiente análisis, la entrada de ejemplo que se muestra debe ir en el lugar de los puntos suspensivos … del fragmento anterior.

En primer lugar es necesario definir un nombre para el nuevo contexto:

>     \name ImproVoice

Debido a que es parecido al contexto `Voice`, queremos órdenes que funcionen sobre contextos de `Voice` (existentes) para que siga funcionando. Esto se consigue dando al contexto nuevo un alias `Voice`,

>     \alias Voice

El contexto imprimirá notas y textos explicativos, por ello tenemos que añadir los grabadores que aportan esta funcionalidad:

>     \consists Note_heads_engraver
>     \consists Text_engraver

pero sólo necesitamos esto en la línea central:

>     \consists Pitch_squash_engraver
>     squashedPosition = #0

El grabador Pitch_squash_engraver modifica las cabezas de nota (creadas por el grabador Note_heads_engraver) y establece sus posiciones verticales al valor de `squashedPosition`, en este caso `0`, la línea central.

Las notas parecen barras inclinadas y no tienen plica:

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

Todos estos añadidos tienen que cooperar, y esto se consigue con un añadido especial, que se debe marcar con la palabra clave `\type`. Este será siempre `Engraver_group`,

>     \type "Engraver_group"

Al juntarlo todo, obtenemos

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

Los contextos dan lugar a jerarquías. Queremos colgar el contexto `ImproVoice` bajo el contexto `Staff`, como simples `Voice`s normales. Por tanto, modificamos la definición de `Staff` con la instrucción `\accepts` (acepta),

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

Lo opuesto a `\accepts` (acepta) es `\denies` (deniega), lo que a veces se necesita cuando se están reutilizando definiciones de contexto existentes.

Ponemos ambos dentro de un bloque `\layout`, como

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

Así pues, la salida que aparece al comienzo de esta sub-sección se puede escribir como

>     \relative c'' {
>       a4 d8 bes8
>       \new ImproVoice {
>         c4^"ad lib" c
>         c4 c^"desvístete"
>         c c_"mientras tocas :)"
>       }
>       a1
>     }

Otros idiomas: English, deutsch, français, 日本語.

#### LilyPond — Referencia de la notación