| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Further tweaking
| 4.7.1 Otras aplicaciones de los trucos | ||
| 4.7.2 Uso de variables para los ajustes de disposición | ||
| 4.7.3 Hojas de estilo | ||
| 4.7.4 Otras fuentes de información | ||
| 4.7.5 Trucos avanzados con Scheme |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Other uses for tweaks
| Unir notas entre voces distintas | ||
| Simulación de un calderón en el MIDI |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Tying notes across voices
El ejemplo siguiente muestra cómo conectar notas que están en distintas voces utilizando ligaduras de unión. Normalmente sólo se pueden conectar mediante ligaduras de unión notas que estén en la misma voz. Usando dos voces, con las notas ligadas en una de ellas:
y borrando la primera plica (con su corchete) hacia arriba en esa voz, da la impresión de que la ligadura se cruza entre las voces:
<< { \once \omit Stem \once \omit Flag b'8~ 8\noBeam } \\ { b'8[ g'] } >>
Manual de aprendizaje
El prefijo \once,
La propiedad stencil (sello).
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Simulating a fermata in MIDI
Para los objetos fuera-del-pentagrama, normalmente es mejor
sobreescribir la propiedad stencil («sello») del objeto que
su propiedad transparent cuando desee quitarlos de la
salida impresa. Mediante el establecimiento de la propiedad
stencil de un objeto al valor #f podemos quitar el
objeto por completo de la salida impresa. Esto significa que no
tiene efecto sobre la colocación de otros objetos que pudieran
colocarse en relación a él.
Por ejemplo, si quisiéramos cambiar la indicación metronómica con
el propósito de simular un calderón en la salida MIDI, seguramente
no querríamos que la indicación metronómica apareciese en la
salida impresa, y no querríamos influir sobre la separación entre
los dos sistemas ni sobre la colocación de las anotaciones
adyacentes sobre el pentagrama. Por lo tanto, establecer su
propiedad stencil al valor #f sería la mejor manera.
Mostramos aquí el efecto de los dos métodos:
\score { \relative { % Visible tempo marking \tempo 4=120 a'4 a a \once \hide Score.MetronomeMark % Invisible tempo marking to lengthen fermata in MIDI \tempo 4=80 a4\fermata | % New tempo for next section \tempo 4=100 a4 a a a | } \layout { } \midi { } }
\score { \relative { % Visible tempo marking \tempo 4=120 a'4 a a \once \omit Score.MetronomeMark % Invisible tempo marking to lengthen fermata in MIDI \tempo 4=80 a4\fermata | % New tempo for next section \tempo 4=100 a4 a a a | } \layout { } \midi { } }
Ambos métodos quitan de la salida impresa la indicación metronómica que alarga el calderón, y los dos afectan al tempo del MIDI tal y como queríamos, pero la indicación metronómica transparente de la primera línea fuerza una colocación muy alta de la indicación de tempo que sigue, mientras que la segunda (con el sello suprimido) no lo hace.
Glosario musical: (music-glossary)system sección ‘system’ en Glosario Musical.
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Using variables for layout adjustments
Las instrucciones de sobreescritura son con frecuencia largas y tediosas de escribir, y se tienen que escribir de forma absolutamente correcta. Si las mismas sobreescrituras se van a utilizar muchas veces, podría merecer la pena definir variables para guardarlas.
Supongamos que queremos realzar ciertas palabras de la letra de
una canción imprimiéndolas en cursiva y negrita. Las
instrucciones \italic y \bold sólo funcionan dentro
de la letra de las canciones si están incluidas, junto con la
palabra o palabras que se pretenden modificar, dentro de un
\markup, lo que las hace tediosas de escribir. La necesidad
de incluir las propias palabras impide que se puedan usar en
variables simples. ¿Podríamos, como alternativa, utilizar las
instrucciones \override y \revert?
\override Lyrics.LyricText.font-shape = #'italic \override Lyrics.LyricText.font-series = #'bold \revert Lyrics.LyricText.font-shape \revert Lyrics.LyricText.font-series |
Estas instrucciones también serían extremadamente tediosas de
escribir si hubiera muchas palabras que quisiéramos subrayar.
Pero sí podemos definirlas como dos variables y usarlas
para delimitar las palabras que destacar. Otra ventaja de la
utilización de variables para estas sobreescrituras es que ya no
son necesarios los espacios que rodean al punto, puesto que no se
interpretan directamente en el modo \lyricmode. He aquí un
ejemplo de esto, aunque en la práctica quizá elegiríamos unos
nombres de variable más cortos para que fueran más rápidos de
teclear:
emphasize = { \override Lyrics.LyricText.font-shape = #'italic \override Lyrics.LyricText.font-series = #'bold } normal = { \revert Lyrics.LyricText.font-shape \revert Lyrics.LyricText.font-series } global = { \key c \major \time 4/4 \partial 4 } SopranoMusic = \relative { c'4 | e4. e8 g4 g | a4 a g } AltoMusic = \relative { c'4 | c4. c8 e4 e | f4 f e } TenorMusic = \relative { e4 | g4. g8 c4. b8 | a8 b c d e4 } BassMusic = \relative { c4 | c4. c8 c4 c | f8 g a b c4 } VerseOne = \lyricmode { E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save, } VerseTwo = \lyricmode { O | \once \emphasize Christ, whose voice the | wa -- ters heard, } VerseThree = \lyricmode { O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood } VerseFour = \lyricmode { O | \emphasize Tri -- ni -- ty \normal of | love and pow'r } \score { \new ChoirStaff << \new Staff << \clef "treble" \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } \new Voice = "Alto" { \voiceTwo \AltoMusic } \new Lyrics \lyricsto "Soprano" { \VerseOne } \new Lyrics \lyricsto "Soprano" { \VerseTwo } \new Lyrics \lyricsto "Soprano" { \VerseThree } \new Lyrics \lyricsto "Soprano" { \VerseFour } >> \new Staff << \clef "bass" \new Voice = "Tenor" { \voiceOne \TenorMusic } \new Voice = "Bass" { \voiceTwo \BassMusic } >> >> }
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Style sheets
La salida que produce LilyPond se puede modificar profundamente; consulte Trucar la salida para leer detalles sobre este asunto. Pero ¿qué ocurre si tiene muchos archivos a los que les quiere aplicar sus propios trucos? O ¿qué ocurre si, sencillamente, quiere separar los trucos de la propia música? Todo esto es bastante fácil de conseguir.
Veamos un ejemplo. No se preocupe si no entiende las partes que
tienen todos los #(). Esto se explicará en Trucos avanzados con Scheme.
mpdolce = \tweak self-alignment-X #-0.6 #(make-dynamic-script #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) inst = #(define-music-function (string) (string?) #{ <>^\markup \bold \box #string #}) \relative { \tempo 4=50 a'4.\mpdolce d8 cis4--\glissando a | b4 bes a2 | \inst "Clarinet" cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 | }
Hagamos algo respecto a las definiciones mpdolce e
inst. Éstas producen la salida que deseamos, pero quizá
las querríamos utilizar en otra pieza. Podríamos simplemente
copiarlas y pegarlas al principio de cada archivo, pero sería
bastante molesto. También hace que se queden las definiciones a
la vista dentro de nuestros archivos de música, y yo personalmente
encuentro todos los #() bastante poco estéticos. Los vamos
a esconder dentro de otro archivo:
%%% guardar esto en un archivo con el nombre "definiciones.ily"
mpdolce =
\tweak self-alignment-X #-0.6
#(make-dynamic-script
#{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
(string)
(string?)
#{ <>^\markup \bold \box #string #})
|
Haremos referencia a este archivo utilizando la instrucción
\include al principio del archivo de música (la extensión
.ily se utiliza para distinguir este archivo de inclusión
–que se supone que no debe ser procesado de forma independiente–
del archivo principal). Ahora modificaremos la música (guardemos
este archivo como ‘musica.ly’).
\include "definiciones.ily"
\relative {
\tempo 4=50
a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinete"
cis4.\< d8 e4 fis |
g8(\! fis)-. e( d)-. cis2 |
}
|
Eso tiene mejor aspecto, pero haremos algunos cambios más. El glissando es difícil de ver, así que lo haremos más grueso y lo acercaremos a las cabezas de las notas. Pondremos la indicación metronómica encima de la clave, en lugar de ir encima de la primera nota. Y por último, mi profesor de composición odia las indicaciones de compás ‘C’, así que la convertiremos en ‘4/4’.
Sin embargo, no debemos cambiar el archivo ‘musica.ly’. Sustituyamos nuestro archivo ‘definiciones.ily’ con éste:
%%% definiciones.ily
mpdolce =
\tweak self-alignment-X #-0.6
#(make-dynamic-script
#{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
(string)
(string?)
#{ <>^\markup \bold \box #string #})
\layout{
\context {
\Score
\override MetronomeMark.extra-offset = #'(-5 . 0)
\override MetronomeMark.padding = #'3
}
\context {
\Staff
\override TimeSignature.style = #'numbered
}
\context {
\Voice
\override Glissando.thickness = #3
\override Glissando.gap = #0.1
}
}
|
¡Eso tiene un aspecto mucho mejor! Ahora suponga que quiere publicar esta pieza. A mi profesor de composición no le gustan las indicaciones de compás ‘C’, pero yo les tengo cierto cariño. Copiaremos el archivo actual ‘definiciones.ily’ a ‘publicar-web.ily’ y modificaremos éste. Como el propósito de esta música es producir un PDF que va a mostrarse en la pantalla, también vamos a aumentar el tamaño general de la salida.
%%% publicar-web.ily
mpdolce =
\tweak self-alignment-X #-0.6
#(make-dynamic-script
#{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
(string)
(string?)
#{ <>^\markup \bold \box #string #})
#(set-global-staff-size 23)
\layout{
\context {
\Score
\override MetronomeMark.extra-offset = #'(-5 . 0)
\override MetronomeMark.padding = #'3
}
\context {
\Staff
}
\context {
\Voice
\override Glissando.thickness = #3
\override Glissando.gap = #0.1
}
}
|
Ahora, en la música, simplemente sustituyo \include
"definiciones.ily" por \include "publicar-web.ily". Por
supuesto, podríamos hacer esto aún más práctico. Podríamos hacer
un archivo ‘definiciones.ily’ que contuviera solamente las
definiciones de mpdolce y de inst, un archivo
‘publicar-web.ily’ que contuviera solamente la sección
\layout que se mostró en el ejemplo, y un archivo
‘universidad.ily’ que contendría solamente los trucos para
producir la salida que le gusta a mi profesor. El comienzo de
‘musica.ly’ tendría entonces este aspecto:
\include "definiciones.ily" %%% ¡Quitar el comentario de una sola de estas líneas! \include "publicar-web.ily" %\include "universidad.ily" |
Este enfoque puede ser útil incluso si va a producir sólo un
conjunto de particellas. Yo utilizo media docena de archivos de
‘hojas de estilo’ para mis proyectos. Comienzo todos los
archivos de música con \include "../global.ily", que
contiene
%%% global.ily \version "2.21.3" #(ly:set-option 'point-and-click #f) \include "../iniciar/iniciar-definiciones.ily" \include "../iniciar/iniciar-disposicion.ily" \include "../iniciar/iniciar-cabeceras.ily" \include "../iniciar/iniciar-papel.ily" |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Other sources of information
La documentación del manual de Referencia de Funcionamiento Interno contiene montañas de información sobre LilyPond, pero se puede obtener más información aún leyendo los archivos internos de LilyPond. Para echarles un vistazo, en primer lugar debe buscar la carpeta correspondiente a su sistema. La ubicación de esta carpeta depende (a) de si consiguió el programa LilyPond descargando un binario precompilado desde el sitio web lilypond.org o si lo instaló mediante un gestor de paquetes (es decir, distribuido con GNU/Linux, o instalado bajo fink o cygwin) o fue compilado a partir de la fuente, y (b) de qué sistema operativo está utilizando:
Diríjase a
‘CARPETA_DE_INSTALACIÓN/lilypond/usr/share/lilypond/current/’ |
Diríjase a
‘CARPETA_DE_INSTALACIÓN/LilyPond.app/Contents/Resources/share/lilypond/current/’ |
bien haciendo cd hacia este directorio desde el Terminal, o
bien manteniendo pulsada la tecla de Control y haciendo click
sobre la aplicación de LilyPond, y allí eligiendo ‘Mostrar el
contenido del paquete’.
Mediante el Explorador de Windows, diríjase a
‘CARPETA_DE_INSTALACIÓN/LilyPond/usr/share/lilypond/current/’ |
Diríjase a ‘PREFIJO/share/lilypond/X.Y.Z/’, donde
PREFIJO se encuentra determinado por su administrador de
paquetes o guión configure, y X.Y.Z es el número de
la versión de LilyPond.
Dentro de esta carpeta, las dos subcarpetas interesantes son
Vamos a comenzar observando algunos archivos que están en
‘ly/’. Abra ‘ly/property-init.ly’ con un editor de
textos. El mismo que usaría normalmente para los archivos
‘.ly’ servirá perfectamente. Este archivo contiene las
definiciones de todas las instrucciones estándar predefinidas de
LilyPond, como por ejemplo \tieUp y \slurDotted.
Podrá ver que no son nada más que definiciones de variables que
contienen una o varias instrucciones \override. Por
ejemplo, \tieDotted está definido de tal forma que su valor
es:
tieDotted = {
\override Tie.dash-period = #0.75
\override Tie.dash-fraction = #0.1
}
|
Si no le gustan los valores predeterminados, estas instrucciones predefinidas se pueden redefinir con facilidad como cualquier otra variable, al principio de su archivo de código de entrada.
Los siguientes son los archivos más útiles que se encuentran en ‘ly/’:
| Archivo | Contenido |
|---|---|
| ‘ly/engraver-init.ly’ | Definiciones de Contextos de grabadores |
| ‘ly/paper-defaults-init.ly’ | especificaciones de valores predeterminados relacionados con el papel |
| ‘ly/performer-init.ly’ | Definiciones de Contextos de interpretación |
| ‘ly/property-init.ly’ | Definiciones de todas las instrucciones predefinidas que son comunes |
| ‘ly/spanner-init.ly’ | Definiciones de las instrucciones predefinidas relacionadas con los objetos de extensión |
Otros ajustes (como las definiciones de las instrucciones de marcado) se almacenan como archivos ‘.scm’ (de Scheme). El lenguaje de programación Scheme se utiliza para proporcionar un interfaz programable en el funcionamiento interno de LilyPond. Cualquier explicación adicional sobre estos archivos se encuentra por el momento fuera del ámbito de este manual, porque se requieren conocimientos del lenguaje Scheme. Se advierte a los usuarios que se necesita una importante cantidad de conocimientos técnicos o de tiempo para comprender el lenguaje Scheme y estos archivos (véase (extending)Tutorial de Scheme sección ‘Tutorial de Scheme’ en Extender).
Si ya tiene estos conocimientos, los archivos de Scheme que pueden interesarle son:
| Archivo | Contenido |
|---|---|
| ‘scm/auto-beam.scm’ | Valores predeterminados de sub-barrado |
| ‘scm/define-grobs.scm’ | valores predeterminados de las propiedades de grobs |
| ‘scm/define-markup-commands.scm’ | Especificar todas las instrucciones de marcado |
| ‘scm/midi.scm’ | Ajustes predeterminados para la salida MIDI |
| ‘scm/output-lib.scm’ | Ajustes que afectan al aspecto de los trastes, colores, alteraciones, lineas divisorias, etc. |
| ‘scm/parser-clef.scm’ | Definiciones de las claves contempladas |
| ‘scm/script.scm’ | Ajustes predeterminados para las articulaciones |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Advanced tweaks with Scheme
Aunque es posible hacer muchas cosas con las instrucciones
\override y \tweak , tenemos una forma incluso más
poderosa de modificar el funcionamiento de LilyPond, a través de
un interface programable hacia las operaciones internas de
LilyPond. Se puede incorporar código escrito en el lenguaje de
programación Scheme, directamente en el mecanismo de
funcionamiento de LilyPond. Por supuesto, para hacer esto se
necesitan al menos unos conocimientos básicos de programación en
Scheme, y damos una introducción en el
Scheme
(extending)Tutorial de Scheme sección ‘Tutorial de Scheme’ en Extender.
Como ejemplo que ilustra una de las muchas posibilidades, en lugar de dar a una propiedad un valor constante, se puede establecer al resultado de un procedimiento de Scheme que se invoca cada vez que LilyPond accede a esta propiedad. La propiedad se puede establecer dinámicamente a un valor determinado por el procedimiento en el momento en que se invoca. En este ejemplo damos a las cabezas de las notas un color que depende de su posición dentro del pentagrama.
#(define (color-notehead grob) "Color the notehead according to its position on the staff." (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7))) (case mod-position ;; Return rainbow colors ((1) (x11-color 'red )) ; for C ((2) (x11-color 'orange )) ; for D ((3) (x11-color 'yellow )) ; for E ((4) (x11-color 'green )) ; for F ((5) (x11-color 'blue )) ; for G ((6) (x11-color 'purple )) ; for A ((0) (x11-color 'violet )) ; for B ))) \relative { % Arrange to obtain color from color-notehead procedure \override NoteHead.color = #color-notehead a2 b | c2 d | e2 f | g2 a | }
Se pueden encontrar ejemplos adicionales que muestran la utilización de estos interfaces programables, en (extending)Callback functions sección ‘Funciones de callback’ en Extender.
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] |
Este documento ha sido generado por gub el el 13 julio 2020 utilizando texi2html 1.82.
Otros idiomas: English, català, česky, deutsch, français, italiano, 日本語, nederlands.
Acerca de la selección automática del idioma.