Estoy en proceso de grabar una partitura de música para piano. Escribí una marca dinámica personalizada, con cuyo aspecto estoy muy contento, pero el comportamiento, no del todo. es lo siguiente:
mff = \tweak DynamicText.self-alignment-X #LEFT
#(make-dynamic-script
(markup
#:dynamic "mf"
#:normal-text #:italic #:teeny "2ème fois"
#:dynamic "f"))
Cuando se usa, se ve como:
Cuando no se usa, se ve así:
Estoy contento con la marca que comienza debajo de la nota a la que está adjunta (en lugar de centrada debajo de esa nota); pero me gustaría que no posponga la próxima nota hasta que la marca esté completamente escrita. Idealmente, afectaría el ancho de la barra solo si la línea que marca el final de la barra corre el riesgo de cortar la marca.
No puedo encontrar lo que estoy buscando en la documentación.
En caso de que sea necesario, aquí está mi código para la música:
%% VERSION
\version "2.20.0"
\paper {
#(include-special-characters)
}
mff = \tweak DynamicText.self-alignment-X #LEFT
#(make-dynamic-script
(markup
#:dynamic "mf"
#:normal-text #:italic #:teeny "2ème fois"
#:dynamic "f"))
%% PIANO UP
pianoUpper = \relative c' {
\override DynamicLineSpanner.staff-padding = #3
\clef "treble"
\key d \minor
\time 4/4
<\tweak font-size #-3 a f'>4 \f <\tweak font-size #-3 c g'> <f a> <d bes'> |
<f a>2 <e g> |
f2. r4 \bar "||"
<f a> \mf \< <f a> <f a> <f a>8 <a c> |
<a c>4. <g bes>8 <f a>4 f \! |
<f a> <f a>8 <e g> <f a>4 <f a>8 <a c> |
<a c>4. \> <g bes>8 <f a>4 r \! |
<f a> \p \< <f a> <f a> <f a>8 <a c> |
<a c>4. <g bes>8 <f a>4 f \! |
<f a> <f a>8 <e g> <f a>4 <f a>8 <a c> |
<a c>4. \> <g bes>8 <f a>4 r \! |
\repeat volta 2 {
c'2\( d8 c bes a |
bes2 c8 bes a g |
a2 bes8 a g f |
g4.\) g8 c,2 \> |
<\tweak font-size #-3 a f'>4 \< <\tweak font-size #-3 c g'> <f a> <d bes'> |
}
\alternative {
{
<f a>2 \> <e g>4 r \! |
}
{
<c a'>2\( <bes g'>\) |
<a f'>2. r4 \bar "|."
}
}
}
%% PIANO LOW
pianoLower = \relative c {
\clef "bass"
\key d \minor
f4 c f bes, |
c2 <c, c'> |
<f f'>4 c' f, r |
f' <a c> f <a c> |
c, <e bes' c> f <a c> |
f <a c> f <a c> |
c, <e bes' c> <f a c> r |
f <a c> f <a c> |
c, <e bes' c> f <a c> |
f <a c> f <a c> |
c, <e bes' c> <f a c> r |
f <a c> d, <fis c'> |
g, <g' bes d> c, <e bes' c> |
f <a c> d, <f bes> |
c <e bes c> c <e g> |
f c f bes, |
c2 c4 c |
c2 <c, c'> |
<f f'>4 c' f, r |
}
%% SCORE
\score {
<<
\new PianoStaff <<
\new Staff = "upper" \pianoUpper
\new Staff = "lower" \pianoLower
>>
>>
}
Puede establecer explícitamente la dimensión de su marcado usando \with-dimensions
(o en este caso, como ya estamos dentro de la definición de una macro de Scheme, #:with-dimensions
. Esta macro toma dos pares de Scheme que definen la izquierda y la derecha, así como los bordes inferior y superior de el marcado. El marcado en sí puede ser más grande que el cuadro que defina con estas medidas, y cuando escriba se usará el límite de este cuadro. (Consulte la documentación para obtener más información).
Debido a que \with-dimensions
solo acepta un argumento, debe envolver adicionalmente su marcado en otra \line
macro. Entonces, podrías, por ejemplo, escribir tu macro así:
mff = \tweak DynamicText.self-alignment-X #LEFT
#(make-dynamic-script
(markup #:with-dimensions '(0 . 5) '(-3 . 3) #:line
(#:dynamic "mf"
#:normal-text #:italic #:teeny "2ème fois"
#:dynamic "f")))
Resultado:
También hay varias otras formas de ajustar las dimensiones y la alineación de la dinámica, algunas de las cuales se explican en este fragmento .
De hecho, acabo de crear una función que me permitiría especificar un texto dinámico y arbitrario:
#(define-markup-command
(staff-expr layout props text)
(markup?)
#:properties ((rel-fontsize 0))
"Creates expression text for a staff.
By default, staff expression text's font is reduced by 0.5
and is italicized."
(interpret-markup layout props
(markup #:line
(#:with-dimensions '(0 . 0) '(0 . 0)
(#:fontsize rel-fontsize (#:italic text))))))
staffExpr =
#(define-scheme-function
(text)
(markup?)
#{
\markup \staff-expr #text
#}
)
dynExpr =
#(define-event-function
(dyn expr)
(ly:event? markup?)
#{
\tweak DynamicText.self-alignment-X #LEFT
#(make-dynamic-script
#{
\markup \concat {
#(ly:music-property dyn 'text)
\pad-x #.75
\normal-text #expr
}
#}
)
#}
)
Probablemente podría haberlo hecho de manera más simple, ya que estoy viendo lo que hizo el OP, pero yo mismo soy bastante nuevo en Lilypond.
En cualquier caso, aquí están los dos primeros compases de Una Mattina de Ludovico Einaudi, donde utilicé las funciones anteriores:
\version "2.22.2"
#(define-markup-command
(staff-expr layout props text)
(markup?)
#:properties ((rel-fontsize 0))
"Creates expression text for a staff.
By default, staff expression text's font is reduced by 0.5
and is italicized."
(interpret-markup layout props
(markup #:line
(#:with-dimensions '(0 . 0) '(0 . 0)
(#:fontsize rel-fontsize (#:italic text))))))
staffExpr =
#(define-scheme-function
(text)
(markup?)
#{
\markup \staff-expr #text
#}
)
dynExpr =
#(define-event-function
(dyn expr)
(ly:event? markup?)
#{
\tweak DynamicText.self-alignment-X #LEFT
#(make-dynamic-script
#{
\markup \concat {
#(ly:music-property dyn 'text)
\pad-x #.75
\normal-text #expr
}
#}
)
#}
)
beamHeight =
#(define-music-function
(startHeight endHeight)
(number? number?)
#{
\override Beam.positions = #(cons startHeight endHeight)
#}
)
Props = {
\numericTimeSignature
\time 4/4
\key c \major
\partial 16
}
RHVoiceOne = {
\change Staff = "LH" a16~ |
\stemUp \once \beamHeight #6.25 #6.25 a16 \stemDown \change Staff = "RH" e' a' \stemUp \change Staff = "LH" a \beamHeight #-6.25 #-6.25 \stemDown \change Staff = "RH" e' a' \stemUp \change Staff = "LH" a \stemDown \change Staff = "RH" e' a' \stemUp \change Staff = "LH" a \stemDown \change Staff = "RH" e' a' \once \beamHeight #6.5 #7.5 \stemUp \change Staff = "LH" a \stemDown \change Staff = "RH" e' b' e' |
\stemUp \change Staff = "LH" \once \beamHeight #6.25 #6.25 a16 \stemDown \change Staff = "RH" e' a' \stemUp \change Staff = "LH" a \beamHeight #-6.25 #-6.25 \stemDown \change Staff = "RH" e' a' \stemUp \change Staff = "LH" a \stemDown \change Staff = "RH" e' \once \beamHeight #-5.75 #-6.25 a'8. \stemUp \change Staff = "LH" b16 \once \beamHeight #7.75 #8.75 c' \stemDown \change Staff = "RH" e' g' b' |
}
Dynamics = {
\override DynamicText.X-offset = #0.59125 \override DynamicText.Y-offset = #1.75
% Note the use of \dynExpr that takes a dynamic marking and some text
s16 | s16 \dynExpr \p \staffExpr legato s16 s8 s4 * 3 | s1 |
}
Sustain = {
s16 \sustainOn |
s1 |
s2 s8 s8\sustainOff s4 |
}
LHVoiceOne = {
s16 | s1 | s1 |
}
\paper {
system-system-spacing = #'((basic-distance . 18))
%annotate-spacing = ##t
first-page-number = 10
evenHeaderMarkup = \markup \null
oddHeaderMarkup = \markup \null
evenFooterMarkup = \markup {
\fill-line {
\center-column {
\on-the-fly \first-page
\fromproperty #'header:copyright
\vspace #1.807
\null
\italic
\on-the-fly \print-page-number-check-first
\fromproperty #'page:page-number-string
}
}
}
oddFooterMarkup = \evenFooterMarkup
}
\score {
\new GrandStaff \with {
} <<
\new PianoStaff \with {
\override StaffGrouper.staff-staff-spacing.basic-distance = #13.65
} <<
\new Staff = "RH" \with {
} <<
\new Voice = "1" {
\Props
\RHVoiceOne
}
>>
\new Dynamics {
\Dynamics
}
\new Staff = "LH" \with {
} {
\clef bass <<
\new Voice = "1" {
\Props
\LHVoiceOne
}
>>
}
\new Dynamics = "Sustain" \with {
pedalSustainStyle = #'mixed
\override PianoPedalBracket.thickness = #1.35
\override SustainPedalLineSpanner.staff-affinity = #UP
\override PianoPedalBracket.Y-offset = #-1.6
\override SustainPedal.X-offset = #-0.75
\override SustainPedal.Y-offset = #-1.75
} {
\Sustain
}
>>
>>
\layout {
}
\midi {
}
}
\whiteout
comando.\whiteout
en este caso, ya que la partitura original se veía de esta manera. Además, si no hubiera ajustado used the line (#:with-dimensions...)
, entonces el texto habría "empujado" la barra de compás, pero nuevamente, algo que específicamente estaba tratando de evitar. Pero sí, si no hubiera querido las barras de compás superpuestas (pero manteniendo las mismas dimensiones de medida), \whiteout
¡habría funcionado!\whiteout
comando para cruzar la línea de compás, porque eso tendría más sentido y sería mucho más fácil de leer (para mí). Sin embargo, definitivamente puedo entender por qué prefiere hacer una copia más fiel.No sé nada de las complejidades de LilyPond. Pero esto normalmente se anota simple y suficientemente como mf-f. ¿Sugerir que lo anote de esa manera se consideraría una solución?
Carlos Witthoft