Expressive marks

Expressive marks


Añadir barras, ligaduras de expresión y de unión, etc. cuando se usan ritmos con y sin grupos de valoración especial.

La sintaxis de LilyPond puede implicar muchas colocaciones poco comunes para los paréntesis, corchetes, etc, que a veces se tienen que intercalar. Por ejemplo, al introducir una barra manual, el corchete izquierdo de apertura se debe escribir después de la nota inicial y de su duración, no antes. De forma similar, el corchete derecho de cierre debe seguir inmediatamente a la nota que se quiere situar al final del barrado, incluso si esta nota resulta estar dentro de un grupo de valoración especial. Este fragmento de código muestra cómo combinar el barrado manual, las ligaduras de expresión y de unión y las ligaduras de fraseo, con secciones de valoración especial (encerradas entre llaves).

{
  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]


Encerrar entre paréntesis una marca expresiva o una nota de un acorde

La función \parenthesize es un truco especial que encierra objetos entre paréntesis. El grob asociado es Parentheses.

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

[image of music]


Añadir marcas de tiempo a glissandos largos

Los pulsos que se saltan en glissandos muy largos se indican a veces mediante marcas de tiempo, que a menudo consisten en figuras sin cabeza. Estas plicas se pueden usar también para albergar indicaciones expresivas intermedias.

Si las plicas no quedan bien alineadas con el glissando, podría ser necesario recolocarlas ligeramente.

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 las subidas y caídas de tono

Puede ser necesario trucar la propiedad shortest-duration-space para poder ajustar el tamaño de las caídas y subidas de tono («falls» y «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]


Formas alternativas de la figura breve

Las figuras de breve también están disponibles con dos líneas verticales a los lados de la cabeza en lugar de una sola línea y la forma en estilo barroco.

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


Ligaduras asimétricas

Se puede hacer que una ligadura de expresión sea asimétrica para adaptarse mejor a un patrón asimétrico de notas.

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]


Marcas de respiración

Las marcas de respiración están disponibles para varios gustos: coma (la predeterminada), raya corta, uve y “vías 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 interrumpido

Para hacer invisibles partes de un regulador de crescendo, se usa el método de dibujar un rectángulo blanco encima de la parte respectiva del regulador, tapándola. El rectángulo se define como código de postscript dentro de un elemento de marcado de texto.

La instrucción de marcado with-dimensions indica a LilyPond que considere solamente el extremo inferior del rectángulo cuando realice el espaciado de éste frente al regulador. La propiedad staff-padding evita que el rectángulo quepa entre el regulador y el pentagrama.

Asegúrse de que el regulador está en una capa más baja que el elemento de marcado de texto para trazar el rectángulo encima 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 tipo "vías del tren"con calderón

A veces se denota una «cesura» mediante una doble marca de respiración parecida a las vías del tren, con un calderón encima. Este fragmento de código presenta una combinación visualmente satisfactoria de estas dos marcas.

\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 texto debajo de un regulador

Este ejemplo proporciona una función para tipografiar un regulador con texto por debajo, como “molto” o “poco”. El texto añadido cambia la dirección de acuerdo con la del regulador. El objeto Hairpin está alineado con DynamicText.

El ejemplo ilustra también cómo modificar la manera en que se imprime normalmente un objeto, utilizando código de 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]


Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales

Se puede modificar el texto empleado para los crescendos y decrescendos modificando las propiedades de contexto crescendoText y decrescendoText.

El estilo de la línea de extensión se puede cambiar modificando la propiedad 'style de DynamicTextSpanner. El valor predeterminado es 'dashed-line (línea discontinua), y entre otros valores posibles se encuentran 'line (línea), 'dotted-line (línea de puntos) y 'none (nada):

\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 el aspecto continuo de una ligadura de expresión a punteado o intermitente

Se puede cambiar el aspecto de las ligaduras de expresión de continuas a punteadas o intermitentes.

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


Cambiar el símbolo de la marca de respiración

El glifo de la marca de respiración se puede ajustar sobreescribiendo la propiedad de texto del objeto de presentación BreathingSign, con cualquier otro texto de marcado.

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

[image of music]


Modificar el número de puntillos de una nota

La cantidad de puntillos de una nota se puede modificar independientemente de los puntillos que se escriben después de la 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 indicaciones dinámicas con marcados textuales

Ciertas indicaciones dinámicas pueden llevar textos (como “più forte” o “piano subito”). Se pueden producir usando un bloque \markup.

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

\layout { ragged-right = ##f }

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

[image of music]


Glissando contemporáneo

Se puede tipografiar un gissando contemporáneo sin nota final utilizando una nota oculta y temporalización 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 visibilidad de los objetos de

extensión después de un salto de línea

La visibilidad de los objetos de extensión que acaban en la primera nota después de un salto de línea está controlada por la función de callback de after-line-breaking ly:spanner::kill-zero-spanned-time.

Para los objetos como los glissandos y los reguladores, el comportamiento predeterminado es ocultar el objeto de extensión después del salto; la inhabilitación de la función de callback hace que el objeto de extensión roto por la izquierda pueda mostrarse.

De forma inversa, los objetos de extensión que son visibles normalmente, como los objetos de extensión de texto, se pueden ocultar habilitando la función 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 la ordenación vertical de las inscripciones

El orden vertical que ocupan las inscripciones gráficas está controlado con la propiedad 'script-priority. Cuanto más bajo es este número, más cerca de la nota se colocará. En este ejemplo, el TextScript (el sostenido) tiene primero la prioridad más baja, por lo que se sitúa en la posición más baja en el primer ejemplo. En el segundo, el Script (el semitrino) es el que la tiene más baja, por lo que se sitúa en la parte interior. Cuando dos objetos tienen la misma prioridad, el orden en que se introducen determina cuál será el que aparece en primer lugar.

\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 grupeto de anticipación

La creación de un grupeto circular de anticipación entre dos notas, donde la nota inferior del grupeto utiliza una alteración, requiere varias sobreescrituras de propiedades. La propiedad outside-staff-priority se debe establecer al valor #f, pues en caso contrario tendría prioridad sobre la propiedad avoid-slur property. Cambiando las fracciones 2/3 y 1/3 puede ajustarse la posición horizontal.

\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 arpegios entre notas de voces distintas

Se puede trazar un símbolo de arpegio entre notas de distintas voces que están sobre el mismo pentagrama si el grabador Span_arpeggio_engraver se traslada al contexto 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 arpegios que se cruzan entre pentagramas dentro de un sistema de piano

Dentro de un PianoStaff, es posible hacer que un arpegio cruce entre los pentagramas ajustando la propiedad 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ón de arpegios que se cruzan entre pentagramas dentro de otros contextos

Se pueden crear arpegios que se cruzan entre pentagramas dentro de contextos distintos a GrandStaff, PianoStaff y StaffGroup si se incluye el grabador Span_arpeggio_engraver en el contexto 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 digitaciones de dos cifras

Es posible crear digitaciones con un número mayor de 5.

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

[image of music]


Crear indicaciones dinámicas "verdaderas"entre paréntesis

Aunque la manera más fácil de añadir paréntesis a una indicación de dinámica es utilizar un bloque \markup, este método tiene un inconveniente: los objetos que se crean se comportarán como elementos de marcado de texto y no como indicaciones dinámicas.

Sin embargo, es posible crear un objeto similar utilizando el código de Scheme equivalente (como se explica en la Referencia de la notación), en combinación con la función make-dynamic-script. De esta forma, el elemento de marcado se tratará como una indicación dinámica, y por tanto seguirá siendo compatible con instrucciones como \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]


Hacer ligaduras entre voces distintas

En determinadas situaciones es necesario crear ligaduras de expresión entre notas que están en voces distintas.

La solución es añadir notas invisibles a una de las voces utilizando \hideNotes.

Este ejemplo es el compás 235 de la Chacona de la segunda Partita para violín solo, BWV 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 elementos de extensión textuales

Las instrucciones \startTextSpan y \stopTextSpan permiten la creación de elementos de extensión textuales tan fácilmente como indicaciones de pedal u octavaciones. Sobreescribimos ciertas propiedades del objeto TextSpanner para modificar su salida.

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


Objeto personalizado de extensión de texto de matices dinámicos, postfijo

Funciones postfijas para la creación de objetos de extensión de texto personalizados. Los objetos de extensión deben comenzar en la primera nota del compás. Hay que utilizar -\mycresc, en caso contrario el comienzo del eobjeto de extensión se asignará a la nota siguiente.

% 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]


Objetos extensores de texto postfijos para dinámica

Los objetos de extensión \cresc, \dim y \decresc ahora se pueden redefinir como operadores postfijos y producir un solo objeto de extensión de texto. La definición de extensores personalizados también es fácil. Se pueden mezclar con facilidad los crescendi textuales y en forma de reguladores. \< y \> producen reguladores gráficos de forma predeterminada, \cresc etc. producen elementos extensores de texto 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 por debajo de un objeto gráfico

Los objetos gráficos de columna de nota (los grobs NoteColumn) pueden ser sobrepasados por los glissandos.

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

[image of music]


Reguladores con distintos estilos de línea

Los reguladores pueden imprimirse en uno cualquiera de los estilos de line-interface: discontinuo, punteado, línea, trino 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ínea de extensión de las expresiones textuales de dinámica

Los cambios de dinámica con estilo de texto (como cresc. y dim.) se imprimen con una línea intermitente que muestra su alcance. Esta línea se puede suprimir de la siguiente manera:

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

[image of music]


Alinear horizontalmente indicaciones dinámicas personalizadas (p.ej. "sempre pp""piu f""subito p")

Algunas expresiones de matiz dinámico llevan texto adicional, como "sempre pp". Dado que los matices suelen ir centrados bajo la nota, el \pp se imprimiría mucho después de la nota a la que se aplica el matiz.

Para alinear correctamente el "sempre pp" en sentido horizontal, de manera que se alinee como si estuviese solamente el \pp, hay varios enfoques:

* Sencillamente usar \once\override DynamicText.X-offset = #-9.2 antes de la nota que lleva el matiz, para desplazarlo manualmente a la posicion correcta. Inconveniente: hay que hacerlo manualmente cada vez que usamos esa indicación dinámica.

* Añadir algo de relleno (#:hspace 7.1) dentro de la definición de nuestra indicación dinámica personalizada, de forma que despues de que lilypond la ha centrado, ya esté alineada correctamente. Inconveniente: el relleno realmente ocupa ese espacio y no permite que se imprima ningún otro elemento de marcado o matiz dinámico en esa posición.

* Desplazar la inscripción dinámica \once\override ... .X-offset = ... Inconveniente: ¡se necesita \once\override para cada una de las invocaciones!

* Fijar las dimensiones del texto adicional a cero (usando #:with-dimensions '(0 . 0) '(0 . 0)). Inconveniente: para LilyPond "sempre" no tiene dimensiones, por lo que podría imprimir otros elementos en su mismo lugar y producir colisiones (que no serían advertidas por el mecanismo de detección de colisiones). Asimismo, aparentemente hay algún espacio, y por tanto no es exactamente la misma alineación que sin el texto adicional.

* Añadir un desplazamiento explícito directamente dentro de la función de Scheme que produce el elemento dynamic-script.

* Fijar una alineación explícita dentro del dynamic-script. De forma predeterminada, esto no tendría ningún efecto, a no ser que fijásemos un valor para X-offset. Inconveniente: tenemos que dar un valor a DynamicText.X-offset ¡que se aplicaría a todos los textos de dinámica!. Asimismo, se alinea con el extremo derecho del texto adicional, no con el centro 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]


Insertar una cesura

Las marcas de cesura se pueden crear sobreescribiendo la propiedad 'text del objeto BreathingSign. También está disponible una marca de cesura curva.

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


Ligaduras “Laissez vibrer”

Las ligaduras “Laissez vibrer” (dejar vibrar) tienen un tamaño fijo. Se puede ajustar su formato usando '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]


Puntas de flecha para las líneas

Se pueden aplicar puntas de flecha a los elementos de extensión de texto y de línea (como 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]


Hacer ligaduras de expresión con estructura compleja de discontinuidad

Las ligaduras de expresión se pueden construir con patrones de discontinuidad complejos mediante la definición de la propiedad dash-definition. dash-definition es una lista de elementos de discontinuidad. Un elemento de discontinuidad es una lista de parámetros que definen el comportamiento de discontinuidad de un segmento de la ligadura de expresión.

La ligadura se define en términos del parámetro de bezier t cuyo rango va de 0 a la izquierda de la ligadura hasta 1 en el extremo derecho de la ligadura. Cada elemento de discontinuidad es una lista (t-inicio t-final fracción-discontinuidad período-discontinuidad). La región de la ligadura desde t-inicio hasta t-final tendrá una fracción fracción-discontinuidad de cada período-discontinuidad de color negro. período-discontinuidad se define en términos de espacios de pentagrama. fracción-discontinuidad se establece al valor de 1 para una ligadura continua.

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


Modificar los valores predeterminados para la notación abreviada de las articulaciones

Las abreviaturas se encuentran definidas dentro del archivo ‘ly/script-init.ly’, donde las variables dashHat, dashPlus, dashDash, dashBang, dashLarger, dashDot y dashUnderscore reciben valores predeterminados. Se pueden modificar estos valores predeterminados para las abreviaturas. Por ejemplo, para asociar la abreviatura -+ (dashPlus) con el símbolo del semitrino en lugar del símbolo predeterminado +, asigne el valor trill a la variable dashPlus:

\relative c'' { c1-+ }

dashPlus = \trill

\relative c'' { c1-+ }

[image of music]


Desplazar ligaduras de expresión verticalmente

Se puede ajustar la posición vertical de una ligadura de expresión utilizando la propiedad positions del objeto Slur. La propiedad tiene dos parámetros, refiriéndose el primero al extremo izquierdo de la ligadura y el segundo al derecho. Los valores de los parámetros no se utilizan por parte de LilyPond para producir un desplazamiento exacto de la ligadura: más bien selecciona la colocación que mejor aspecto tiene, teniendo en cuenta los valores de los parámetros. Los valores positivos desplazan la ligadura hacia arriba, y son adecuados a notas que tienen las plicas hacia abajo. Los valores negativos desplazan las ligaduras bajas aún más hacia abajo.

\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ímbolos de arpegio

Si necesitamos alargar o acortar un símbolo de arpegio, podemos modificar independientemente los extremos superior e 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 los elementos de marcado de texto por dentro de las ligaduras

Los elementos de marcado de texto deben tener la propiedad outside-staff-priority establecida al valor falso para que se impriman por dentro de las ligaduras de expresión.

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

[image of music]


Imprimir reguladores en diversos estilos

Los reguladores se pueden crear en una amplia variedad de estilos.

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


Impresión de reguladores utilizando la notación «al niente»

Se pueden imprimir reguladores con un círculo en la punta (notación «al niente») estableciendo la propiedad circled-tip del objeto Hairpin al valor #t.

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

[image of music]


Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama

De forma predeterminada, las indicaciones metronómicas y las letras de ensayo se imprimen encima del pentagrama. Para colocarlas debajo del pentagrama, simplemente ajustamos adecuadamente la propiedad 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]


Establecer el comportamiento de los reguladores en las barras de compás

Si la nota que da fin a un regulador cae sobre la primera parte de un compás, el regulador se detiene en la línea divisoria inmediatamente precedente. Se puede controlar este comportamiento sobreescribiendo la propiedad 'to-barline.

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

[image of music]


Ajustar la longitud mínima de los reguladores

Si los reguladores son demasiado cortos, se pueden alargar modificando la propiedad minimum-length del objeto 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]


Imprimir la misma articulación encima y debajo de la misma nota o acorde

De forma predeterminada, LilyPond no permite poner la misma articulación (p.ej., un acento, un calderón, un círculo de armónico, etc.) encima y debajo de la nota. Por ejemplo, c4_\fermata^\fermata imprime solamente el calderón inferior. El calderón superior sencillamente se ignora. Sin embargo, se pueden adosar inscripciones (de igual forma que las digitaciones) dentro de un acorde, lo que significa que es posible tener tantas articulaciones como se desee. Este enfoque tiene la ventaja de que ignora la plica y posiciona la articulación de forma relativa a la cabeza de la nota. Puede verse esto en el caso de los flageolets (indicaciones de armónico) que aparecen en el fragmento de código. Para recrear el comportamiento de las inscripciones fuera del acorde, se requiere ’add-stem-support. Así, la solución consiste en escribir la nota como un acorde y añadir las articulaciones dentro de los paréntesis en ángulo <...>. La dirección siempre será hacia arriba, pero podemos retocar esto por medio de una instrucción \tweak: <c-\tweak dirección #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 pellizco, conocido también como “pizzicato de Bartók”) es un “pizzicato fuerte en el que la cuerda se pulsa verticalmente pellizcándola y rebota contra el diapasón del instrumento” (Wikipedia). Se denota mediante un círculo con una línea vertical que parte del centro del círculo hacia arriba.

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

[image of music]


Usar una raya corta como símbolo de respiración

La música vocal y de viento usa con frecuencia una raya corta como signo de respiración. Esto indica una repiración que quita un poco de tiempo a la nota anterior en lugar de producir una corta pausa, lo que se indica con la marca de respiración en forma de coma. La marca se puede mover ligeramente hacia arriba para alejarla 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]


Uso de arpeggioBracket para hacer más visible un divisi

El corchete de arpegios arpeggioBracket se puede usar para indicar la división de voces cuando no hay plicas que puedan ofrecer esta información. Se suele encontrar en la música 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]


Utilizar ligaduras dobles para acordes legato

Algunos compositores escriben dos ligaduras cuando quieren acordes legato. Esto se puede conseguir estableciendo doubleSlurs.

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

[image of music]


Uso de la propiedad whiteout

Se puede imprimir cualquier objeto gráfico sobre un fondo blanco para enmascarar parte de los objetos que están por debajo. Esto puede ser útil para mejorar el aspecto de las colisiones en situaciones complejas cuando no es práctico reposicionar los objetos. Es necesario establecer explícitamente la propiedad de capa (layer) para controlar qué objetos resultan enmascarados por el fondo blanco.

En este ejemplo, la colisión de la ligadura de unión con la indicación de compás resulta mejorada enmascarando la parte de la ligadura que cruza a la indicación de compás mediante el establecimiento de la propiedad whiteout de TimeSignature. Para hacer esto, se mueve TimeSignature a una capa por encima de Tie, que se deja en la capa predeterminada de 1, y StaffSymbol se mueve a una capa por encima de TimeSignature de manera que no resulte enmascarada.

{
  \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ínea vertical como una articulación barroca

Esta línea corta vertical situada encima de la nota es de uso común en música barroca. Su significado varía, pero en general indica notas que se deben tocar con más “peso”. El ejemplo siguiente muestra cómo conseguir dicha notación.

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 verticalmente expresiones dinámicas que abarcan varias notas

Las expresiones dinámicas que se comienzan, terminan o se producen en la misma nota se alinean verticalmente. Para asegurar que las expresiones dinámicas se alinean cuando no se producen sobre la misma nota, incremente la propiedad staff-padding del objeto DynamicLineSpanner.

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

[image of music]


LilyPond — Snippets v2.23.82 (rama de desarrollo).