Expressive marks

Expressive marks


Afegir barres, lligadures d’expressió i d’unió, etc., quan s’usen ritmes amb i sense grups de valoració especial.

La sintaxi del LilyPond pot implicar moltes col·locacions poc comunes per als parèntesis, claus, etc., que a vegades s’han d’intercalar. Per exemple, en introduir una barra manual, la clau esquerra d’apertura s’ha d’escriure després de la nota inicial i de la seva duració, no abans. De forma semblant, la clau dreta de tancament ha de seguir immediatament a la nota que es vol ubicar al final del barrat, fins i tot si aquesta nota resulta estar dins d’un grup de valoració especial. Aquest fragment de codi mostra com combinar el barrat manual, les lligadures d’expressió i d’unió i les lligadures de fraseig, amb seccions de valoració especial (tancades entre claus).

{
  r16[ g16 \tuplet 3/2 { r16 e'8] }
  g16( a \tuplet 3/2 { b d e') }
  g8[( a \tuplet 3/2 { b d') e'] ~ }
  \time 2/4
  \tuplet 5/4 { e'32\( a b d' e' } a'4.\)
}

[image of music]


Envoltar entre parèntesis una marca expressiva o una nota d’un acord

La funció \parenthesize és un ajustament especial que envolta objectes entre parèntesis. EL grob associat és ParenthesesItem.

\relative c' {
  c2-\parenthesize ->
  \override Parentheses.padding = #0.1
  \override Parentheses.font-size = #-4
  <d \parenthesize f a>2
}

[image of music]


Afegir marques de temps a glissandos llargs

Els temps que se salten a glissandos molt llargs s’indiquen a vegades mitjançant marques de temps, que sovint consisteixen en figures sense cap. Aquestes pliques es poden usar també per allotjar indicacions expressives intermèdies.

Si les pliques no queden ben alineades amb el glissando, podria caldre recol·locar-les lleugerament.

glissandoSkipOn = {
  \override NoteColumn.glissando-skip = ##t
  \hide NoteHead
  \override NoteHead.no-ledgers = ##t
}

glissandoSkipOff = {
  \revert NoteColumn.glissando-skip
  \undo \hide NoteHead
  \revert NoteHead.no-ledgers
}

\relative c'' {
  r8 f8\glissando
  \glissandoSkipOn
  f4 g a a8\noBeam
  \glissandoSkipOff
  a8

  r8 f8\glissando
  \glissandoSkipOn
  g4 a8
  \glissandoSkipOff
  a8 |

  r4 f\glissando \<
  \glissandoSkipOn
  a4\f \>
  \glissandoSkipOff
  b8\! r |
}

[image of music]


Ajustar la forma de les caigudes i pujades de to

Pot caldre ajustar la propietat shortest-duration-space per poder ajustar la mida de les caigudes i pujades de to («falls» i «doits»).

\relative c'' {
  \override Score.SpacingSpanner.shortest-duration-space = #4.0
  c2-\bendAfter #5
  c2-\bendAfter #-4.75
  c2-\bendAfter #8.5
  c2-\bendAfter #-6
}

[image of music]


Aligning the ends of hairpins to NoteColumn directions

The ends of hairpins may be aligned to the LEFT, CENTER or RIGHT of NoteColumn grobs by overriding the property endpoint-alignments, which is a pair of numbers representing the left and right ends of the hairpin. endpoint-alignments are expected to be directions (either -1, 0 or 1). Other values will be transformed with a warning. The right end of a hairpin terminating at a rest is not affected, always ending at the left edge of the rest.

{
  c'2\< <c' d'>\! |
  \override Hairpin.endpoint-alignments = #'(1 . -1)
  c'2\< <c' d'>\! |
  \override Hairpin.endpoint-alignments = #`(,LEFT . ,CENTER)
  c'2\< <c' d'>\! |
}

[image of music]


Formes alternatives de la figura breu

Les figures de breu també estan disponibles amb dues línies verticals a les vores del cap en lloc d’una sola línia i la forma en estil barroc.

\relative c'' {
  \time 4/2
  c\breve |
  \override Staff.NoteHead.style = #'altdefault
  b\breve
  \override Staff.NoteHead.style = #'baroque
  b\breve
  \revert Staff.NoteHead.style
  a\breve
}

[image of music]


Lligadures asimètriques

Es pot fer que una lligradura d’expressió sigui asimètrica per adaptar-se millor un patró asimètric de notes.

slurNotes = { d,8( a' d f a f' d, a) }

\relative c' {
  \stemDown
  \slurUp
  \slurNotes
  \once \override Slur.eccentricity = #3.0
  \slurNotes
}

[image of music]


Marques de respiració

Les marques de respiració estan disponibles per diversos gustos: coma (la predeterminada), ratlla curta, v baixa i “vies del tren” (cesura).

\new Staff \relative c'' {
  \key es \major
  \time 3/4
  % this bar contains no \breathe
  << { g4 as g } \\ { es4 bes es } >> |
  % Modern notation:
  % by default, \breathe uses the rcomma, just as if saying:
  % \override BreathingSign.text =
  %   #(make-musicglyph-markup "scripts.rcomma")
  << { g4 as g } \\ { es4 \breathe bes es } >> |

  % rvarcomma and lvarcomma are variations of the default rcomma
  % and lcomma
  % N.B.: must use Staff context here, since we start a Voice below
  \override Staff.BreathingSign.text =
    \markup { \musicglyph "scripts.rvarcomma" }
  << { g4 as g } \\ { es4 \breathe bes es } >> |

  % raltcomma and laltcomma are alternative variations of the
  % default rcomma and lcomma
  \override Staff.BreathingSign.text =
    \markup { \musicglyph "scripts.raltcomma" }
  << { g4 as g } \\ { es4 \breathe bes es } >> |

  % vee
  \override BreathingSign.text =
    \markup { \musicglyph "scripts.upbow" }
  es8[ d es f g] \breathe f |

  % caesura
  \override BreathingSign.text =
    \markup { \musicglyph "scripts.caesura.curved" }
  es8[ d] \breathe es[ f g f] |
  es2 r4 \bar "||"
}

[image of music]


Regulador interromput

Per fer invisibles parts d’un regulador de crescendo, s’usa el mètode de dibuixar un rectangle blanc a sobre de la respectiva del regulador, tapant-la. El rectangle es defineix com codi de postscript dins d’un element de marcatge de text.

L’ordre de marcatge with-dimensions indica al LilyPond que consideri sols l’extrem inferior del rectangle quan realitzi l’espaiat d’aquest rectangle frente al regulador. La propietat staff-padding evita que el rectangle càpiga entre el regulador i el pentagrama.

Assegureu-vos que el regulador està a una capa més baixa que l’element de marcatge de text per traçar el rectangle a sobre del regulador.

\relative c' {
  <<
    {
      \dynamicUp
      r2 r16 c'8.\pp r4
    }
    \\
    {
      \override DynamicLineSpanner.layer = #0
      des,2\mf\< ~
      \override TextScript.layer = #2
      \once\override TextScript.staff-padding = #6
      \once\override TextScript.vertical-skylines = #'()
      des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
                    \with-color #white
                    \filled-box #'(2 . 7) #'(0 . 2) #0
      r8. des4 ~ des16->\sff r8.
    }
  >>
}

[image of music]


Cesura tipus "vies del tren" amb calderó

En ocasions es denota una «cesura» mitjançant una doble marca de respiració semblant a les vies d’un tren, amb un calderó a sobre. Aquest fragment de codi presenta una combinació visualment satisfactòria d’aquestes dues marques.

\relative c'' {
  c2.
  % construct the symbol
  \override BreathingSign.text = \markup {
    \override #'(direction . 1)
    \override #'(baseline-skip . 1.8)
    \dir-column {
      \translate #'(0.155 . 0)
        \center-align \musicglyph "scripts.caesura.curved"
      \center-align \musicglyph "scripts.ufermata"
    }
  }
  \breathe c4
  % set the breathe mark back to normal
  \revert BreathingSign.text
  c2. \breathe c4
  \bar "|."
}

[image of music]


Centrar text a sota d’un regulador

Aquest exemple proporciona una funció per escriure un regulador amb text a sota, com “molto” o “poco”. El text afegit canvia la direcció d’acord amb la del regulador. L’objecte hairpin està alineat amb DynamicText.

L’exemple il·lustra també com modificar la manera en la qual s’imprimeix normalment un object, utilitzat codi de l’Scheme.

\paper { tagline = ##f }

hairpinWithCenteredText =
#(define-music-function (text) (markup?)
  #{
    \once \override Voice.Hairpin.after-line-breaking =
      #(lambda (grob)
        (let* ((stencil (ly:hairpin::print grob))
               (par-y (ly:grob-parent grob Y))
               (dir (ly:grob-property par-y 'direction))
               (staff-line-thickness
                 (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
               (new-stencil (ly:stencil-aligned-to
                 (ly:stencil-combine-at-edge
                   (ly:stencil-aligned-to stencil X CENTER)
                   Y dir
                   (ly:stencil-aligned-to
                     (grob-interpret-markup
                       grob
                       (make-fontsize-markup
                         (magnification->font-size
                           (+ (ly:staff-symbol-staff-space grob)
                              (/ staff-line-thickness 2)))
                           text)) X CENTER))
                 X LEFT))
               (staff-space (ly:output-def-lookup
                 (ly:grob-layout grob) 'staff-space))
               (par-x (ly:grob-parent grob X))
               (dyn-text (grob::has-interface par-x 'dynamic-text-interface))
               (dyn-text-stencil-x-length
                 (if dyn-text
                   (interval-length
                     (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
                   0))
               (x-shift
                 (if dyn-text
                   (-
                     (+ staff-space dyn-text-stencil-x-length)
                     (* 0.5 staff-line-thickness)) 0)))

        (ly:grob-set-property! grob 'Y-offset 0)
        (ly:grob-set-property! grob 'stencil
           (ly:stencil-translate-axis
            new-stencil
            x-shift X))))
  #})

hairpinMolto =
\hairpinWithCenteredText \markup { \italic molto }

hairpinMore =
\hairpinWithCenteredText \markup { \larger moltissimo }

\layout { ragged-right = ##f }

\relative c' {
  \hairpinMolto
  c2\< c\f
  \hairpinMore
  c2\ppppp\< c\f
  \break
  \hairpinMolto
  c2^\< c\f
  \hairpinMore
  c2\ppppp\< c\f
}

[image of music]


Canviar el text i els estils d’objecte d’extensió per a les indicacions dinàmiques textuals

Es pot modificar el text empleat per als crescendos i decrescendos modificant les propietats de context crescendoText i decrescendoText.

L’estil de la línia d’extensió es pot canviar modificant la propietat 'style de DynamicTextSpanner. El valor predeterminat és 'dashed-line (línia discontínua), i entre d’altres valors possibles es troben 'line (línia), 'dotted-line (línia de punts) i 'none (res):

\relative c'' {
  \set crescendoText = \markup { \italic { cresc. poco } }
  \set crescendoSpanner = #'text
  \override DynamicTextSpanner.style = #'dotted-line
  a2\< a
  a2 a
  a2 a
  a2 a\mf
}

[image of music]


Modificar l’aspecte continu d’una lligadura d’expressió a puntejat o intermitent

Es pot canviar l’aspecte de les lligadures d’expressió de contínues a puntejades o intermitents.

\relative c' {
  c4( d e c)
  \slurDotted
  c4( d e c)
  \slurSolid
  c4( d e c)
  \slurDashed
  c4( d e c)
  \slurSolid
  c4( d e c)
}

[image of music]


Canviar el símbol de la marca de respiració

El glif de la marca de respiració es pot ajustar sobreescrivint la propietat de text de l’objecte de presentació BreathingSign, amb qualsevol altre text de marcatge.

\relative c'' {
  c2
  \override BreathingSign.text =
    \markup { \musicglyph "scripts.rvarcomma" }
  \breathe
  d2
}

[image of music]


Modificar el nombre de puntets d’una nota

La quantitat de puntets d’una nota es pot modificar independentment dels puntets que s’escriuen després d’una nota.

\relative c' {
  c4.. a16 r2 |
  \override Dots.dot-count = #4
  c4.. a16 r2 |
  \override Dots.dot-count = #0
  c4.. a16 r2 |
  \revert Dots.dot-count
  c4.. a16 r2 |
}

[image of music]


Combinar indicacions dinàmiques amb marcatges textuals

Certes indicacions dinàmiques poden portar textos (com “più forte” o “piano subito”). Es poden produir usant un bloc \markup.

piuF = \markup { \italic più \dynamic f }

\layout { ragged-right = ##f }

\relative c'' {
  c2\f c-\piuF
}

[image of music]


Glissando contemporani

Es pot gravar un glissando contemporani sense nota final utilitzant una nota oculta i temporització de cadenza.

\relative c'' {
  \time 3/4
  \override Glissando.style = #'zigzag
  c4 c
  \cadenzaOn
  c4\glissando
  \hideNotes
  c,,4
  \unHideNotes
  \cadenzaOff
  \bar "|"
}

[image of music]


Controlar la visibilitat dels objectes d’extensió després d’un salt de línia

La visibilitat dels objectes d’extensió que acaben a la primera nota després d’un salt de línia està controlada per la funció de crida de after-line-breaking ly:spanner::kill-zero-spanned-time.

Per als objectes com els glissandos i els reguladors, el comportament predeterminat és ocultar l’objecte d’extensió després del salt; la inhabilitació de la funció de callblack fa que l’object d’extensió trencat per l’esquerra pot mostrar-se.

De forma inversa, els objectes d’extensió que són visibles normalment, com els objectes d’extensió de text, es poden ocultar habilitant la funció de callback.

\paper { ragged-right = ##t }

\relative c'' {
  \override Hairpin.to-barline = ##f
  \override Glissando.breakable = ##t
  % show hairpin
  \override Hairpin.after-line-breaking = ##t
  % hide text span
  \override TextSpanner.after-line-breaking =
    #ly:spanner::kill-zero-spanned-time
  e2\<\startTextSpan
  % show glissando
  \override Glissando.after-line-breaking = ##t
  f2\glissando
  \break
  f,1\!\stopTextSpan
}

[image of music]


Controlar l’ordenació vertical de les inscripcions

L’orden vertical que ocupen les inscripcions gràfiques està controlat amb la propietat 'script-priority. Quant més baix és aquest número, més a prop de la nota es col·locarà. En aquest exemple, el TextScript (el sostingut) té primer la prioritat més baixa, per la qual cosa se situa en la posició més baixa al primer exemple. En el segon, el semitrí (el Script) és el que la té més baixa, per la qual cosa se situa en la part interior. Quan dos objectes tenen la mateixa prioritat, l’ordre en el qual s’introdueixen determina quin serà el que apareix en primer lloc.

\relative c''' {
  \once \override TextScript.script-priority = #-100
  a2^\prall^\markup { \sharp }

  \once \override Script.script-priority = #-100
  a2^\prall^\markup { \sharp }
}

[image of music]


Crear un grupet d’anticipació

La creació d’un grupet circular d’anticipació entre dues notes, on la nota inferior del grupet utilitza una alteració, requereix diverses sobreescriptures de propietats. La propietat outside-staff-priority es pot establir al valor #f, atès que en aquest cas tindria prioritat sobre la propietat avoid-slur property. Canviant les fraccions 2/3 i 1/3 pot ajustar-se la posició horitzontal.

\relative c'' {
  \after 2*2/3 \turn c2( d4) r |
  \after 4 \turn c4.( d8)
  \after 4
  {
    \once \set suggestAccidentals = ##t
    \once \override AccidentalSuggestion.outside-staff-priority = ##f
    \once \override AccidentalSuggestion.avoid-slur = #'inside
    \once \override AccidentalSuggestion.font-size = -3
    \once \override AccidentalSuggestion.script-priority = -1
    \once \hideNotes
    cis8\turn \noBeam
  }
  d4.( e8)
}

[image of music]


Crear arpegis entre notes de veus diferents

Es pot dibuixar un símbol d’arpegi entre notes de diferents veus que estan sobre el mateix pentagrama si el gravador Span_arpeggio_engraver es trasllada al context de Staff:

\new Staff \with {
  \consists "Span_arpeggio_engraver"
}
\relative c' {
  \set Staff.connectArpeggios = ##t
  <<
    { <e' g>4\arpeggio <d f> <d f>2 }
    \\
    { <d, f>2\arpeggio <g b>2 }
  >>
}

[image of music]


Crear arpegis que es creuen entre pentagrames dins d’un sistema de piano

Dins d’un PianoStaff, és possible fer que un arpegi creuï entre els pentagrames ajustant la propietat PianoStaff.connectArpeggios.

\new PianoStaff \relative c'' <<
  \set PianoStaff.connectArpeggios = ##t
  \new Staff {
    <c e g c>4\arpeggio
    <g c e g>4\arpeggio
    <e g c e>4\arpeggio
    <c e g c>4\arpeggio
  }
  \new Staff {
    \clef bass
    \repeat unfold 4 {
      <c,, e g c>4\arpeggio
    }
  }
>>

[image of music]


Creació d’arpegis que es creuen entre pentagrames dins d’altres contextos

Es poden crear arpegis que es creuen entre pentagrames dins de contextos diferents a GrandStaff, PianoStaff i Span_arpeggio_engraver en el context de Score.

\score {
  \new ChoirStaff {
    \set Score.connectArpeggios = ##t
    <<
      \new Voice \relative c' {
        <c e>2\arpeggio
        <d f>2\arpeggio
        <c e>1\arpeggio
      }
      \new Voice \relative c {
        \clef bass
        <c g'>2\arpeggio
        <b g'>2\arpeggio
        <c g'>1\arpeggio
      }
    >>
  }
  \layout {
    \context {
      \Score
      \consists "Span_arpeggio_engraver"
    }
  }
}

[image of music]


Crear digitacions de dues xifres

És possible crear digitacions amb el nombre més gran de 5.

\relative c' {
  c1-10
  c1-50
  c1-36
  c1-29
}

[image of music]


Crear indicacions dinàmiques "vertaderes" entre parèntesis

Tot i que la manera més fàcil d’afegir parèntesis a una indicació de dinàmica és utilitzar un bloc \markup, aquest mètode té un inconvenient: els objectes que es creen es comportaran com elements de marcatge de text i no com indicacions dinàmiques.

No obstant, és possible crear un objecte utilitzant el codi de l’Scheme equivalent (com s’explica a la Referència de la notació), en combinació amb la funció make-dynamic-script. D’aquesta forma l’element de marcatge es tractarà com una indicació dinàmica, i per tant seguirà sent compatible amb ordre com ara \dynamicUp o \dynamicDown.

paren =
#(define-event-function (dyn) (ly:event?)
   (make-dynamic-script
    #{ \markup \concat {
         \normal-text \italic \fontsize #2 (
	 \pad-x #0.2 #(ly:music-property dyn 'text)
	 \normal-text \italic \fontsize #2 )
       }
    #}))

\relative c'' {
  c4\paren\f c c \dynamicUp c\paren\p
}

[image of music]


Fer lligadures entre veus diferents

En determinades situacions cal crear lligadures d’expressió entre notes que estan a veus diferents.

La solució és afegir notes invisible a una de les veus utilitzant \hideNotes.

Aquest exemple és el compàs 235 de la Chacona de la segona Partita per a violí sol, BMW 1004, de Bach.

\relative c' {
  <<
    {
      d16( a') s a s a[ s a] s a[ s a]
    }
    \\
    {
      \slurUp
      bes,16[ s e](
      \hideNotes a)
      \unHideNotes f[(
      \hideNotes a)
      \unHideNotes fis](
      \hideNotes a)
      \unHideNotes g[(
      \hideNotes a)
      \unHideNotes gis](
      \hideNotes a)
    }
  >>
}

[image of music]


Crear elements de extensió textuals

Les ordres \startTextSpan i \stopTextSpan permeten la creació d’elements d’extensió textuals tan fàcilment com indicacions de pedal o octavacions. Sobreescrivim certes propietats de l’object TextSpanner per modificar la seva sortida.

\paper { ragged-right = ##f }

\relative c'' {
  \override TextSpanner.bound-details.left.text = #"bla"
  \override TextSpanner.bound-details.right.text = #"blu"
  a4 \startTextSpan
  b4 c
  a4 \stopTextSpan

  \override TextSpanner.style = #'line
  \once \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
  a4 \startTextSpan
  b4 c
  a4 \stopTextSpan

  \override TextSpanner.style = #'dashed-line
  \override TextSpanner.bound-details.left.text =
    \markup { \draw-line #'(0 . 1) }
  \override TextSpanner.bound-details.right.text =
    \markup { \draw-line #'(0 . -2) }
  \once \override TextSpanner.bound-details.right.padding = #-2

  a4 \startTextSpan
  b4 c
  a4 \stopTextSpan

  \set Staff.middleCPosition = #-13
  \override TextSpanner.dash-period = #10
  \override TextSpanner.dash-fraction = #0.5
  \override TextSpanner.thickness = #10
  a4 \startTextSpan
  b4 c
  a4 \stopTextSpan
}

[image of music]


Objecte personalitzat d’extensió de text de matisos dinàmics, postfix

Funcions postfix per a la creació d’objectes d’extensió de text personalitzats. Els objectes d’extensió han de començar en la primera nota del compàs. Cal utilitzar -\mycresc, en cas contrari el començament de l’objecte d’extensió s’assignarà a la nota següent.

% Two functions for (de)crescendo spanners where you can explicitly
% give the spanner text.
mycresc =
#(define-music-function (mymarkup) (markup?)
   (make-music 'CrescendoEvent
               'span-direction START
               'span-type 'text
               'span-text mymarkup))
mydecresc =
#(define-music-function (mymarkup) (markup?)
   (make-music 'DecrescendoEvent
               'span-direction START
               'span-type 'text
               'span-text mymarkup))

\relative c' {
  c4-\mycresc "custom cresc" c4 c4 c4 |
  c4 c4 c4 c4 |
  c4-\mydecresc "custom decresc" c4 c4 c4 |
  c4 c4\! c4 c4
}

[image of music]


Objectes extensors de text postfix per a dinàmica

Els objectes d’extensió \cresc, \dim i \decresc ara es poden redefinir com a operadors postfix i produir un sols objecte d’extensió de text. La definició d’extensores personalitzats també és fàcil. Es poden barrejar amb facilitat els crescendi textuals i en forma de reguladors. \< i \> produeixen reguladors gràfics de forma predeterminada, \cresc etc. produeixen elements extensors de text de forma predeterminada.

% Some sample text dynamic spanners, to be used as postfix operators
crpoco =
#(make-music 'CrescendoEvent
             'span-direction START
             'span-type 'text
             'span-text "cresc. poco a poco")

\relative c' {
  c4\cresc d4 e4 f4 |
  g4 a4\! b4\crpoco c4 |
  c4 d4 e4 f4 |
  g4 a4\! b4\< c4 |
  g4\dim a4 b4\decresc c4\!
}

[image of music]


Glissando per sota d’una objecte gràfic

Els objectes gràfics de columna de nota (els grobs NoteColumn) poder ser sobrepassats pels glissandos.

\relative c' {
  a2 \glissando
  \once \override NoteColumn.glissando-skip = ##t
  f''4 d,
}

[image of music]


Reguladors amb diferents estils de línia

Els reguladors poden imprimir-se en qualsevol dels estils de line-interface: discontinu, puntejat, línia, tri o zig-zag.

\relative c' {
  c2\< c\!
  \override Hairpin.style = #'dashed-line
  c2\< c\!
  \override Hairpin.style = #'dotted-line
  c2\< c\!
  \override Hairpin.style = #'line
  c2\< c\!
  \override Hairpin.style = #'trill
  c2\< c\!
  \override Hairpin.style = #'zigzag
  c2\< c\!
  \revert Hairpin.style
  c2\< c\!
}

[image of music]


Ocultar la línia d’extensió de les expressions textuals de dinàmica

Els canvis de dinàmica amb estil de text (com cresc. i dim.) es graven amb una línia intermitent que mostra el seu abast. Aquesta línia es pot suprimir de la manera següent:

\relative c'' {
  \override DynamicTextSpanner.style = #'none
  \crescTextCresc
  c1\< | d | b | c\!
}

[image of music]


Alinear horitzontalment indicacions dinàmiques personalitzades (per exemple "sempre pp""piu f""subito p")

Algunes expressions de matís dinàmic porten text addicional, com "sempre pp". Considerant que els matisos solen anar centrats sota la nota, el \p s’imprimiria molt després de la nota a la qual s’aplica el matís.

Per alinear correctament el "sempre pp" en sentit horitzontal, de manera que s’alineï com si estigués solament el \pp, hi h a diversos enfocaments:

* Senzillament usar \once\override DynamicText.X-offset = #-9.2 abans de la nota que porta el matís, per desplaçar-lo manualment a la posició correcta. Inconvenient: cal fer-ho manualment cada cop que usem aquesta indicació dinàmica.

* Afegir una mica de farciment (#:hspace 7.1) dins de la definició de la nostra indicació dinàmica personalitzada, de forma que després que el LilyPond l’hagi centrat, ja estigui alineada correctament. Inconvenient: el farciment realment ocupa aquest espai i no permet que es gravi cap altre element de marcatge o matís dinàmic en aquesta posició.

* Desplaçar la inscripció dinàmica \once\override ... .X-offset = ... Inconvenient: ¡cal \once\override per a cada una de les invocacions!

* Fixar les dimensions del text addicional a zero (usant #:with-dimensions '(0 . 0) '(0 . 0)). Inconvenient: per al LilyPond "sempre" no té dimensions, per la qual cosa podria gravar altres elements en el seu mateix lloc i produir col·lisions (que no serien advertides pel mecanisme de detecció de col·lisions). Així mateix, aparentment hi ha algun espai, i per tant no és exactament la mateixa alineació que sense el text addicional.

* Afegir un desplaçament explicit directament dins de la funció de l’Scheme que produeix l’element dynamic-script.

* Fixar una alineació explícita dins del dynamic-script. De forma predeterminada, això no tindria cap efecte, a no ser que fixéssim un valor per a X-offset. Inconvenient: hem de donar un valor a DynamicText.X-offset que s’aplicaria a tots els textos de dinàmica. A més a més, s’alinea amb l’extrem dret del text addicional, no amb el centre del pp.

\paper {
  ragged-right = ##f
  indent = 2.5\cm
}

% Solution 1: Using a simple markup with a particular halign value
% Drawback: It's a markup, not a dynamic command, so \dynamicDown
%           etc. will have no effect
semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" }

% Solution 2: Using a dynamic script & shifting with
%             \once \override ...X-offset = ..
% Drawback: \once \override needed for every invocation
semppK =
#(make-dynamic-script
  (markup #:line
          (#:normal-text
           #:italic "sempre"
           #:dynamic "pp")))

% Solution 3: Padding the dynamic script so the center-alignment
%             puts it at the correct position
% Drawback: the padding really reserves the space, nothing else can be there
semppT =
#(make-dynamic-script
  (markup #:line
          (#:normal-text
           #:italic "sempre"
           #:dynamic "pp"
           #:hspace 7.1)))

% Solution 4: Dynamic, setting the dimensions of the additional text to 0
% Drawback: To lilypond "sempre" has no extent, so it might put
%           other stuff there => collisions
% Drawback: Also, there seems to be some spacing, so it's not exactly the
%           same alignment as without the additional text
semppM =
#(make-dynamic-script
  (markup #:line
          (#:with-dimensions '(0 . 0) '(0 . 0)
                             #:right-align
                             #:normal-text
                             #:italic "sempre"
                             #:dynamic "pp")))

% Solution 5: Dynamic with explicit shifting inside the scheme function
semppG =
#(make-dynamic-script
  (markup #:hspace 0
          #:translate '(-18.85 . 0)
          #:line (#:normal-text
                  #:italic "sempre"
                  #:dynamic "pp")))

% Solution 6: Dynamic with explicit alignment. This has only effect
%             if one sets X-offset!
% Drawback: One needs to set DynamicText.X-offset!
% Drawback: Aligned at the right edge of the additional text,
%           not at the center of pp
semppMII =
#(make-dynamic-script
  (markup #:line (#:right-align
                  #:normal-text
                  #:italic "sempre"
                  #:dynamic "pp")))

\new StaffGroup <<
  \new Staff = "s" \with { instrumentName = \markup \column { Normal } }
  <<
    \relative c'' {
      \key es \major
      c4\pp c\p c c | c\ff c c\pp c
    }
  >>
  \new Staff = "sMarkup" \with {
    instrumentName = \markup \column { Normal markup }
  }
  <<
    \relative c'' {
      \key es \major
      c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c
    }
  >>
  \new Staff = "sK" \with {
    instrumentName = \markup \column { Explicit shifting }
  }
  <<
    \relative c'' {
      \key es \major
      \once \override DynamicText.X-offset = #-9.2
      c4\semppK c\p c c
      c4\ff c
      \once \override DynamicText.X-offset = #-9.2
      c4\semppK c
    }
  >>
  \new Staff = "sT" \with {
    instrumentName = \markup \column { Right padding }
  }
  <<
    \relative c'' {
      \key es \major
      c4\semppT c\p c c | c\ff c c\semppT c
    }
  >>
  \new Staff = "sM" \with {
    instrumentName = \markup \column { Set dimension "to zero" }
  }
  <<
    \relative c'' {
      \key es \major
      c4\semppM c\p c c | c\ff c c\semppM c
    }
  >>
  \new Staff = "sG" \with {
    instrumentName = \markup \column { Shift inside dynamics}
  }
  <<
    \relative c'' {
      \key es \major
      c4\semppG c\p c c | c\ff c c\semppG c
    }
  >>
  \new Staff = "sMII" \with {
    instrumentName = \markup \column { Alignment inside dynamics }
  }
  <<
    \relative c'' {
      \key es \major
      % Setting to ##f (false) gives the same result
      \override DynamicText.X-offset = #0
      c4\semppMII c\p c c | c\ff c c\semppMII c
    }
  >>
>>

\layout { \override Staff.InstrumentName.self-alignment-X = #LEFT }

[image of music]


Inserir una cesura

Les marques de cesura es poden crear sobreescrivint la propietat 'text de l’objecte BreathingSign. També està disponible una marca de cesura corba.

\relative c'' {
  \override BreathingSign.text = \markup {
    \musicglyph "scripts.caesura.straight"
  }
  c8 e4. \breathe g8. e16 c4

  \override BreathingSign.text = \markup {
    \musicglyph "scripts.caesura.curved"
  }
  g8 e'4. \breathe g8. e16 c4
}

[image of music]


Lligaduras “Laissez vibrer”

Les lligadures “Laissez vibrer” (deixar vibrar) tenen una mida fixa. Es pot ajustar el seu format usant 'tie-configuration.

\relative c' {
  <c e g>4\laissezVibrer r <c f g>\laissezVibrer r
  <c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8

  <c d e f>4\laissezVibrer r
  \override LaissezVibrerTieColumn.tie-configuration
     = #`((-7 . ,DOWN)
          (-5 . ,DOWN)
          (-3 . ,UP)
          (-1 . ,UP))
  <c d e f>4\laissezVibrer r
}

[image of music]


Puntes de fletxa per a les línies

Es poden aplicar puntes de fletxa als elements d’extensió de text i de línia (com el Glissando).

\relative c'' {
  \override TextSpanner.bound-padding = #1.0
  \override TextSpanner.style = #'line
  \override TextSpanner.bound-details.right.arrow = ##t
  \override TextSpanner.bound-details.left.text = #"fof"
  \override TextSpanner.bound-details.right.text = #"gag"
  \override TextSpanner.bound-details.right.padding = #0.6

  \override TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER
  \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER

  \override Glissando.bound-details.right.arrow = ##t
  \override Glissando.arrow-length = #0.5
  \override Glissando.arrow-width = #0.25

  a8\startTextSpan gis a4 b\glissando b,
  g'4 c\stopTextSpan c2
}

[image of music]


Fer lligadures d’expressió amb estructura complexa de discontinuïtat

Les lligadures d’expressió es poden construir amb patrons de discontinuïtat complexos mitjançant la definició de la propietat dash-definition. dash-definition és una llista de paràmetres que defineixen el comportament de discontinuïtat d’un segment de la lligadura d’expressió.

La lligadura es defineix en termes del paràmetre de bezier t el rang del qual va de 0 a l’esquerra de la lligadura fins a 1 a l’extrem dret de la lligadura. cada element de discontinuïtat és una llista (t-inici t-final fracció-discontinuïtat període-discontinuitat). La regió de la lligadura des de t-inici fins a t-final tindrà una fracció fracció-discontinuitat de cada període-discontinuïtat de color negre. període-discontinuïtat es defineix en termes d’espais de pentagrama. fracció-discontinuïtat s’estableix al valor d’1 per a una lligadura contïnua.

\relative c' {
  \once \override
    Slur.dash-definition = #'((0 0.3 0.1 0.75)
                                (0.3 0.6 1 1)
                                (0.65 1.0 0.4 0.75))
  c4( d e f)
  \once \override
    Slur.dash-definition = #'((0 0.25 1 1)
                                (0.3 0.7 0.4 0.75)
                                (0.75 1.0 1 1))
  c4( d e f)
}

[image of music]


Modificació dels valors predeterminats per a la notació abreviada de les articulacions

Les abreviatures es troben definides dins del fitxer ‘ly/script-init.ly’, on les variablesdashHat, dashPlus, dashDash, dashBar, dashLarger, dashDot i dashUnderscore reben valors predeterminats. Es poden modificar aquests valors predeterminats per a les abreviatures. Per exemple, per associar l’abraviatura -+ (dashPlus) amb el símbol de semitrí en cmptes del símbol predeterminat +, assigneu el valor trill a la variable dashPlus:

\relative c'' { c1-+ }

dashPlus = \trill

\relative c'' { c1-+ }

[image of music]


Desplaçament de les lligadures d’expressió verticalment

Es pot ajustar la posició vertical d’una lligadura d’expressió utilitzant la propietat positions de l’objecte Slur. La propietat de dos paràmetres, on el primer es refereix a l’extrem esquerre de la lligadura i el segon al dret. Els valors dels paràmetres no s’utilitzen per part del LilyPond per produir un desplaçament exacte de la lligadura: més bé selecciona la col·locació que té un aspecte millor, tenint en compte els valors dels paràmetres. Els valors positius desplacen la lligadura cap amunt, i són adequats a notes que tenen les pliques cap avall. Els valors negatius desplacen les lligadures baixes encara més cap avall.

\relative c' {
  \stemDown
  e4( a)
  \override Slur.positions = #'(1 . 1)
  e4( a)
  \override Slur.positions = #'(2 . 2)
  e4( a)
  \override Slur.positions = #'(3 . 3)
  e4( a)
  \override Slur.positions = #'(4 . 4)
  e4( a)
  \override Slur.positions = #'(5 . 5)
  e4( a)
  \override Slur.positions = #'(0 . 5)
  e4( a)
  \override Slur.positions = #'(5 . 0)
  e4( a)
  \stemUp
  \override Slur.positions = #'(-5 . -5)
  e4( a)
  \stemDown
  \revert Slur.positions
  e4( a)
}

[image of music]


Moving the ends of hairpins

The ends of hairpins may be offset by setting the shorten-pair property of the Hairpin object. Positive values move endpoints to the right, negative to the left. Unlike the minimum-length property, this property only affects the appearance of the hairpin; it does not adjust horizontal spacing (including the position of bounding dynamics). This method is thus suitable for fine-tuning a hairpin within its allotted space.

{
  c'1~\<
  c'2~ c'\!
  \once \override Hairpin.shorten-pair = #'(2 . 2)
  c'1~\<
  c'2~ c'\!
  \once \override Hairpin.shorten-pair = #'(-2 . -2)
  c'1~\<
  c'2~ c'\!
  c'1~\p-\tweak shorten-pair #'(2 . 0)\<
  c'2~ c'\ffff
}

[image of music]


Posicionar símbols d’arpegi

Si cal fer més llargs o més curts un símbol d’arpegi, es pot modificar independentment els extrems superior i inferior.

\relative c' {
  <c e g b>1\arpeggio
  \once \override Arpeggio.positions = #'(-5 . 0)
  <c e g b>1\arpeggio
  \once \override Arpeggio.positions = #'(0 . 5)
  <c e g b>1\arpeggio
  \once \override Arpeggio.positions = #'(-5 . 5)
  <c e g b>1\arpeggio
}

[image of music]


Situar els elements de marcatge de text por dins de les lligadures

Els elements de marcatge de text han de tenir la propietat outside-staff-priority establerta al valor fals perquè s’imprimeixin per dins de les lligadures d’expressió.

\relative c'' {
  \override TextScript.avoid-slur = #'inside
  \override TextScript.outside-staff-priority = ##f
  c2(^\markup { \halign #-10 \natural } d4.) c8
}

[image of music]


Impressió de reguladors en diversos estils

Els reguladors es poden crear en una àmplia varietat d’estils.

\relative c'' {
  \override Hairpin.stencil = #flared-hairpin
  a4\< a a a\f
  a4\p\< a a a\ff
  a4\sfz\< a a a\!
  \override Hairpin.stencil = #constante-hairpin
  a4\< a a a\f
  a4\p\< a a a\ff
  a4\sfz\< a a a\!
  \override Hairpin.stencil = #flared-hairpin
  a4\> a a a\f
  a4\p\> a a a\ff
  a4\sfz\> a a a\!
  \override Hairpin.stencil = #constante-hairpin
  a4\> a a a\f
  a4\p\> a a a\ff
  a4\sfz\> a a a\!
}

[image of music]


Impressió de reguladors utilitzant la notació «al niente»

Es poden imprimir reguladores amb un cercle en la punta (notació «al niente») establint la propietat circled-tip de l’objecte Hairpin al valor #t.

\relative c'' {
  \override Hairpin.circled-tip = ##t
  c2\< c\!
  c4\> c\< c2\!
}

[image of music]


Impressió d’indicacions de metrònom i lletres d’assaig a sota del pentagrama

De forma predeterminada, les indicacions de metrònom i les lletres d’assaig s’imprimeixen a sobre del pentagrama. Per col·locar-les a sota del pentagrama, simplement ajustem adequadament la propietat direction de MetronomeMark o de RehearsalMark.

\layout {
  indent = 0
  ragged-right = ##f
}

{
  % Metronome marks below the staff
  \override Score.MetronomeMark.direction = #DOWN
  \tempo 8. = 120
  c''1

  % Rehearsal marks below the staff
  \override Score.RehearsalMark.direction = #DOWN
  \mark \default
  c''1
}

[image of music]


Establir el comportament dels reguladors a les barres de compàs

Si la nota que acaba un regulador cau sobre la primera part d’un compàs, el regulador s’atura en la línia divisòria immediatament precedent. Es pot controlar aquest comportament sobreescrivint la propietat 'to-barline.

\relative c'' {
  e4\< e2.
  e1\!
  \override Hairpin.to-barline = ##f
  e4\< e2.
  e1\!
}

[image of music]


Ajustament de la longitud mínima dels reguladors

Si els reguladors són massa curts, es poden allargar modificant la propietat minimum-length de l’objecte Hairpin.

<<
  {
    \after 4 \< \after 2 \> \after 2. \! f'1
    \override Hairpin.minimum-length = #8
    \after 4 \< \after 2 \> \after 2. \! f'1
  }
  {
    \repeat unfold 8 c'4
  }
>>

[image of music]


Impressió de la mateixa articulació a sobre i a sota de la mateixa nota o acord

De forma predeterminada, el LilyPond no permet posar la mateixa articulació (per exemple un accent, un calderó, un cercle d’harmònic, etc.) a sobre i a sota de la nota. Per exemple, c4_\fermata^\fermata imprimeix sols el calderó inferior. El calderó superior senzillament s’ignora. No obstant, es poden adjuntar inscripcions (de igual forma que les digitacions) dins d’un acord, soca que significa que és possible tenir tantes articulacions com es vulgui. Aquest enfocament té l’avantatge que ignora la plica i posiciona l’articulació de forma relativa al cap de la nota. Pot veure’s això en el cas dels flageolets (indicacions d’harmònic)) que apareixen en el fragment de codi. Per recrear el comportament de les inscripcions fora de l’acord, es requereix ’add-stem-support. D’aquesta manera la solució consisteix en escriure la nota com un acord i afegir les articulacions dins dels parèntesis en angle <...>. La direcció sempre serà cap a dalt, però podem retocar això per mitjà d’una ordre \tweak: <c-\tweak direcció #DOWN-\fermata^\fermata>

\relative c' {
  <>^"Wrong"
  c2_\fermata^\fermata % The second fermata is ignored!
  <e d'>2^\flageolet_\flageolet

  \stopStaff s1 \startStaff

  <>^"Works if written inside a chord"
  <e_\flageolet d'^\flageolet>2
  <e_\flageolet d'^\flageolet>2
  <e_\flageolet^\flageolet>2
  <e_\fermata^\fermata>2
}

[image of music]


Pizzicato “snap” o pizzicato de Bartók

El “snap-pizzicato” (pizzicato de pessigada, conegut també com “pizzicato de Bartók”) és un “pizzicato fort en el qual la corda es polsa verticalment pessigant-la i fent que reboti contra el diapasó de l’instrument” (Wikipedia). Es doneta mitjançant un cercle com una línia vertical que surt del centre del cercla cap amunt.

\relative c' {
  c4\snappizzicato
  <c' e g>4\snappizzicato
  <c' e g>4^\snappizzicato
  <c, e g>4_\snappizzicato
}

[image of music]


Usar una ratlla curta com a símbol de respiració

La música vocal i de vent usa amb freqüència una ratlla curta com a signe de respiració. Això indica una respiració que treu una mica de temps a la nota anterior enlloc de produir una pausa curta, cosa que s’indica amb la marca de respiració en forma de coma. La marca es pot moure lleugerament cap a dalt per allunyar-la del pentagrama.

\relative c'' {
  c2
  \breathe
  d2
  \override BreathingSign.Y-offset = #2.6
  \override BreathingSign.text =
    \markup { \musicglyph "scripts.tickmark" }
  c2
  \breathe
  d2
}

[image of music]


Ús de arpeggioBracket per fer més visible un divisi

El corxet d’arpegis arpeggioBracket es pot usar per indicar la divisió de veus quan no hi ha pliques que puguin oferir aquesta informació. Se sol trobar a la múśica coral.

\include "english.ly"

\score {
  \relative c'' {
    \key a \major
    \time 2/2
    <<
      \new Voice = "upper"
      <<
        { \voiceOne \arpeggioBracket
          a2( b2
          <b d>1\arpeggio)
          <cs e>\arpeggio ~
          <cs e>4
        }
        \addlyrics { \lyricmode { A -- men. } }
      >>
      \new Voice = "lower"
      { \voiceTwo
        a1 ~
        a
        a ~
        a4 \bar "|."
      }
    >>
  }
  \layout { ragged-right = ##t }
}

[image of music]


Utilitzar lligadures dobles per acords legato

Alguns compositors escriuen dues lligadures quan volen acords legato. Això es pot aconseguir establint doubleSlurs.

\relative c' {
  \set doubleSlurs = ##t
  <c e>4( <d f> <c e> <d f>)
}

[image of music]


Ús de la propietat whiteout

Es pot imprimir qualsevol objecte gràfic sobre un fons blanc per ocultar part dels objectes que estan a sota. Això pot ser útil per millorar l’aspecte de les col·lisions en situaciones complexes quan no es pràctic tornar a col·locar els objectes. Cal establir explícitament la propietat de capa (layer) per controlar quins objectes resulten ocultats pel fons blanc.

En aquest exemple, la col·lisió de la lligadura d’unió amb la indicació de compàs resulta millorada ocultant la part de la lligadura que creua la indicació de compàs mitjançant l’establiment de la propietat whiteout de TimeSignature. per fer això, es mou TimeSignature a una capa per sobre de Tie, que es deixa a la capa predeterminada d’1, i StaffSymbol es mou a una capa per sobre de TimeSignature de manera que no resulti ocultada.

{
  \override Score.StaffSymbol.layer = #4
  \override Staff.TimeSignature.layer = #3
  b'2 b'~
  \once \override Staff.TimeSignature.whiteout = ##t
  \time 3/4
  b' r4
}

[image of music]


Línia vertical com una articulació barroca

Aquesta línia curta vertical a sobre de la nota és d’ús comú en la música barroca. El seu significat varia, però en general indica notes que s’han de tocar amb més “pes”. L’exemple següent mostra com aconseguir aquesta notació.

upline =
\tweak stencil
  #(lambda (grob)
    (grob-interpret-markup grob #{ \markup \draw-line #'(0 . 1) #}))
  \stopped

\relative c' {
  a'4^\upline a( c d')_\upline
}

[image of music]


Alinear verticalment expressions dinàmiques que abasten diverses notes

Les expressions dinàmiques que es comencen, acaben o es produeixen a la mateixa nota, s’alineen verticalment. Per assegurar que les expressions dinàmiques s’alineen quan no es produeixen sobre la mateixa nota, incrementeu la propietat staff-padding de l’objecte DynamicLineSpanner.

\relative c' {
  \override DynamicLineSpanner.staff-padding = #4
  c2\p f\mf
  g2\< b4\> c\!
}

[image of music]


LilyPond — Fragments v2.23.82 (branca de desenvolupament).