5.1.6 Definició de contextos nous

Els contextos específics, com Staff i Voice, estan construïts a partir de blocs senzills. És possible crear nous tipus de contextos amb combinacions diferents de gravadors afegits.

El següent exemple mostra com construir un tipus diferent de context de Voice partint de zero. Serà semblant a Voice, però imprimeix sols caps centrats en forma de barra inclinada. Es pot usar per indicar improvisació en peces de jazz.

[image of music]

Aquests ajustament es defineixen dins d’un bloc \context que al seu cop està dins d’un bloc \layout,

\layout {
  \context {
    …
  }
}

A l’anàlisi següent, l’entrada d’exemple que es mostra ha d’anar en el lloc dels punts suspensius … del fragment anterior.

En primer lloc cal definir un nom per al nou context:

\name ImproVoice

Atès que és semblant al context Voice, volem ordres que funcionin dins dels contextos Voice (existents) perquè segueixi funcionant. Això s’aconsegueix donant al nou context un àlies de Voice,

\alias Voice

El context imprimirà notes i textos explicatius, per això hem d’afegir els gravadors que aporten aquesta funcionalitat, i a més el gravador que agrupa les notes, pliques i silencis que estan en el mateix moment musical en forma de columnes.

\consists Note_heads_engraver
\consists Text_engraver
\consists Rhythmic_column_engraver

Els caps de totes les notes s’han de situar sobre la línia central.

\consists Pitch_squash_engraver
squashedPosition = #0

El gravador Pitch_squash_engraver modifica els caps de nota (creats pel gravador Note_heads_engraver) i estableix les seves posicions verticals al valor squashedPosition, en aquest cas 0, la línia central.

Las notes semblen inclinades i no tenen plica:

\override NoteHead.style = #'slash
\hide Stem

Tots aquests complements o plug-ins s’han de comunicar sota el control del context. Els mecanismes amb els quals es comuniquen els contextos s’estableixen mitjançant la declaració del \type (tipus) del context. Dins d’un bloc \layout, gairebé tots els contextos seran del tipus Engraver_group. Alguns contextos especials i els contextos dels blocs \midi usen altres tipus. La còpia i la modificació d’una definició de context existent també complimenten el tipus. Com que aquest exemple crea una definició partint de zero, ha de ser especificada explícitament.

\type Engraver_group

En ajuntar-ho tot, obtenim

\context {
  \name ImproVoice
  \type Engraver_group
  \consists Note_heads_engraver
  \consists Text_engraver
  \consists Rhythmic_column_engraver
  \consists Pitch_squash_engraver
  squashedPosition = #0
  \override NoteHead.style = #'slash
  \hide Stem
  \alias Voice
}

Els contextos donen lloc a jerarquies. Volem posar el context ImproVoice dins del context Staff, igual que els contextos de veu normals. Per tant, modifiquem la definició de Staff amb l’ordre \accepts (accepta),

\context {
  \Staff
  \accepts ImproVoice
}

Amb freqüència, en reutilitzar una definició de context exitent, el context resultant es pot usar en qualsevol lloc on el context original hagués pogut fer-ho.

\layout {
  …
  \inherit-acceptability to from
}

aconsegueix que tinguem contextos del tipus to acceptats per tots els contextos que també accepten from. Por exemple, si usem

\layout {
  …
  \inherit-acceptability "ImproVoice" "Voice"
}

afegeix un \accepts per a ImproVoice tant a la definició de Staff com a la de RhythmicStaff.

L’oposat a \accepts (acepta) és \denies (denega), el que a vegades cal quan s’esta reutilitzant definicions de context existents.

Si organitzem les peces requerides dins d’un bloc \layout ens deixa amb

\layout {
  \context {
    \name ImproVoice
    …
  }
  \inherit-acceptability "ImproVoice" "Voice"
}

Així doncs, la sortida que apareix al començament d’aquesta subsecció es pot escriure com

\relative {
  a'4 d8 bes8
  \new ImproVoice {
    c4^"ad lib" c
    c4 c^"despulleu-vos"
    c c_"mentre toqueu :)"
  }
  a1
}

Per completar l’exemple, els canvis que afecten a la jerarquia de contextos s’han de repetir dins d’un bloc \midi de manera que la sortida MIDI depengui de les mateixes relacions de context.

Vegeu també

Referència de funcionament intern: Note_heads_engraver, Text_engraver, Rhythmic_column_engraver, Pitch_squash_engraver.


Referència de la notació del GNU LilyPond v2.25.22 (development-branch).