LilyPond — Snippets
|
TRANSLATEME
This document shows a selected set of LilyPond snippets from the
LilyPond Snippet Repository
(LSR). It is in the public domain.
We would like to address many thanks to Sebastiano Vigna for maintaining
LSR web site and database, and the University of Milano for hosting LSR.
Please note that this document is not an exact subset of LSR: some
snippets come from ‘input/new’ LilyPond sources directory, and
snippets from LSR are converted through convert-ly, as LSR is
based on a stable LilyPond version, and this document is for
version 2.21.5.
Snippets are grouped by tags; tags listed in the table of contents match
a section of LilyPond notation manual. Snippets may have several tags,
and not all LSR tags may appear in this document.
In the HTML version of this document, you can click on the file name
or figure for each example to see the corresponding input file.
|
|
Para mayor información sobre la forma en que este manual se relaciona
con el resto de la documentación, o para leer este manual en otros
formatos, consulte
Manuales.
Si le falta algún manual, encontrará toda la documentación en
http://lilypond.org/.
|
Pitches
Pitches
Añadir un ámbito por voz
Se puede añadir un ámbito por cada voz. En este caso, el ámbito se
debe desplazar manualmente para evitar colisiones.
| | \new Staff <<
\new Voice \with {
\consists "Ambitus_engraver"
} \relative c'' {
\override Ambitus.X-offset = #2.0
\voiceOne
c4 a d e
f1
}
\new Voice \with {
\consists "Ambitus_engraver"
} \relative c' {
\voiceTwo
es4 f g as
b1
}
>>
|
Añadir una indicación de octava alta a una sola voz
Si tiene más de una voz en el mismo pentagrama, el cambio de
octavación de una voz transportará la posición de las notas en todas
las voces mientras dure el corchete de octava. Si la octavación se
quiere aplicar a una voz solamente, se deben ajustar explícitamente la
middleCPosition y el corchete de octava. En este fragmento de código,
el valor de middleCPosition para la clave de Fa es normalmente 6, seis
posiciones por encima de la línea del Do central, de manera que en la
porción de 8va el valor de middleCPosition es aún 7 posiciones (una
octava) más alta.
| | {
\clef bass
<< { <g d'>1~ q2 <c' e'> }
\\
{
r2.
\set Staff.ottavation = #"8vb"
\once \override Staff.OttavaBracket.direction = #DOWN
\set Voice.middleCPosition = #(+ 6 7)
<b,,, b,,>4 ~ |
q2
\unset Staff.ottavation
\unset Voice.middleCPosition
<c e>2
}
>>
}
|
Aiken head thin variant noteheads
Aiken head white notes get harder to read at smaller staff sizes,
especially with ledger lines. Losing interior white space makes them
appear as quarter notes.
| | \score {
{
\aikenHeads
c''2 a' c' a
% Switch to thin-variant noteheads
\set shapeNoteStyles = ##(doThin reThin miThin faThin sol laThin tiThin)
c'' a' c' a
}
}
% END EXAMPLE
|
Alterar la longitud de las plicas unidas por una barra
Se puede variar la longitud de las plicas de las figuras unidas por
una barra mediante la sobreescritura de la propiedad
beamed-lengths de los detalles (details) del objeto
Stem. Si se utiliza un solo valor como argumento, la longitud
se aplica a todas las plicas. Si se usan varios argumentos, el
primero se aplica a las corcheas, el sgundo a las semicorcheas y así
sucesivamente. El último argumento también se aplica a todas las
figuras que son mmás cortas que la longitud de la figura del último
argumento. También se pueden usar argumentos no enteros.
| | \relative c'' {
\override Stem.details.beamed-lengths = #'(2)
a8[ a] a16[ a] a32[ a]
\override Stem.details.beamed-lengths = #'(8 10 12)
a8[ a] a16[ a] a32[ a] r8
\override Stem.details.beamed-lengths = #'(8)
a8[ a]
\override Stem.details.beamed-lengths = #'(8.5)
a8[ a]
\revert Stem.details
a8[ a] a16[ a] a32[ a] r16
}
|
Ámbitos con varias voces
La adición del grabador Ambitus_engraver al contexto de
Staff crea un solo ámbito por pentagrama, incluso en el caso de
pentagramas con varias voces.
| | \new Staff \with {
\consists "Ambitus_engraver"
}
<<
\new Voice \relative c'' {
\voiceOne
c4 a d e
f1
}
\new Voice \relative c' {
\voiceTwo
es4 f g as
b1
}
>>
|
Indicaciones de tesitura
Las indicaciones de ámbito o tesitura indican rangos de alturas para
las voces.
Las alteraciones accidentales sólo se muestran si no forman parte de
la armadura de tonalidad. Los objetos gráficos AmbitusNoteHead
también tienen líneas adicionales.
| | \layout {
\context {
\Voice
\consists "Ambitus_engraver"
}
}
<<
\new Staff {
\relative c' {
\time 2/4
c4 f'
}
}
\new Staff {
\relative c' {
\time 2/4
\key d \major
cis4 as'
}
}
>>
|
Aplicar estilos de cabeza según la nota de la escala
La propiedad shapeNoteStyles se puede usar para definir varios
estilos de cabezas de nota para cada grado de la escala (según esté
establecido por la armadura o por la propiedad tonic). Esta
propiedad requiere un conjunto de símbolos, que pueden ser puramente
arbitrarios (se permiten expresiones geométricas como triangle,
triángulo, cross, aspas, y xcircle, círculo con aspas) o
basados en una antigua tradición americana de grabado (ciertos nombres
de nota latinos trambién se permiten).
Dicho esto, para imitar antiguos cancioneros americanos, existen varios
estilos predefinidos de cabezas de nota disponibles a través de
instrucciones de abreviatura como \aikenHeads o
\sacredHarpHeads.
Este ejemplo muestra distintas formas de obtener cabezas de notas con forma,
y muestra la capacidad de transportar una melodía sin perder la
correspondencia entre las funciones armónicas y los estilos de cabezas de
nota.
| | fragment = {
\key c \major
c2 d
e2 f
g2 a
b2 c
}
\new Staff {
\transpose c d
\relative c' {
\set shapeNoteStyles = ##(do re mi fa
#f la ti)
\fragment
}
\break
\relative c' {
\set shapeNoteStyles = ##(cross triangle fa #f
mensural xcircle diamond)
\fragment
}
}
|
Cambiar la dirección de la plica de las notas de la tercera línea automáticamente, basado en la melodía
LilyPond puede alterar la dirección de la plica de las notas que van
en la tercera línea de un pentagrama de forma que siga la melodía,
mediante la adición del grabador Melody_engraver al contexto
Voice y sobreescribiendo el valor de neutral-direction para el
objeto Stem (plica).
| | \relative c'' {
\time 3/4
a8 b g f b g |
c b d c b c |
}
\layout {
\context {
\Voice
\consists "Melody_engraver"
\autoBeamOff
\override Stem.neutral-direction = #'()
}
}
|
Changing ottava text
Internally, \ottava sets the properties ottavation (for
example, to 8va or 8vb) and middleCPosition. To
override the text of the bracket, set ottavation after invoking
\ottava.
Short text is especially useful when a brief ottava is used.
| | {
c'2
\ottava #1
\set Staff.ottavation = #"8"
c''2
\ottava #0
c'1
\ottava #1
\set Staff.ottavation = #"Text"
c''1
}
|
Modificación de la separación en las indicaciones de tesitura
Es posible ajustar la separación predeterminada entre
las notas de la indicación de tesitura y la línea que las une.
| | \layout {
\context {
\Voice
\consists "Ambitus_engraver"
}
}
\new Staff {
\time 2/4
% Default setting
c'4 g''
}
\new Staff {
\time 2/4
\override AmbitusLine.gap = #0
c'4 g''
}
\new Staff {
\time 2/4
\override AmbitusLine.gap = #1
c'4 g''
}
\new Staff {
\time 2/4
\override AmbitusLine.gap = #1.5
c'4 g''
}
|
Cambiar el intervalo de las líneas de la pauta
Se usa staffLineLayoutFunction para cambiar la posición de las
notas. Este fragmento de código muestra cómo ajustar su valor al de
ly:pitch-semitones para producir una escala cromática con la
distancia entre cada espacio y línea del pentagrama igual a un
semitono.
| | scale = \relative c' {
a4 ais b c
cis4 d dis e
f4 fis g gis
a1
}
\new Staff \with {
\remove "Accidental_engraver"
staffLineLayoutFunction = #ly:pitch-semitones
}
{
<<
\scale
\context NoteNames {
\set printOctaveNames = ##f
\scale
}
>>
}
|
Las claves se pueden transponer en intervalos arbitrarios
Se pueden transponer las claves en intervalos arbitrarios, no solo
octavas.
| | \relative c' {
\clef treble
c4 c c c
\clef "treble_8"
c4 c c c
\clef "treble_5"
c4 c c c
\clef "treble^3"
c4 c c c
}
|
Colorear las notas según su altura
Es posible colorear la cabeza de las notas dependiendo de su altura
y/o de su nombre: la función que se usa en este ejemplo hace posible
incluso distinguir los armónicos.
| | %Association list of pitches to colors.
#(define color-mapping
(list
(cons (ly:make-pitch 0 0 NATURAL) (x11-color 'red))
(cons (ly:make-pitch 0 0 SHARP) (x11-color 'green))
(cons (ly:make-pitch 0 1 FLAT) (x11-color 'green))
(cons (ly:make-pitch 0 2 NATURAL) (x11-color 'red))
(cons (ly:make-pitch 0 2 SHARP) (x11-color 'green))
(cons (ly:make-pitch 0 3 FLAT) (x11-color 'red))
(cons (ly:make-pitch 0 3 NATURAL) (x11-color 'green))
(cons (ly:make-pitch 0 4 SHARP) (x11-color 'red))
(cons (ly:make-pitch 0 5 NATURAL) (x11-color 'green))
(cons (ly:make-pitch 0 5 FLAT) (x11-color 'red))
(cons (ly:make-pitch 0 6 SHARP) (x11-color 'red))
(cons (ly:make-pitch 0 1 NATURAL) (x11-color 'blue))
(cons (ly:make-pitch 0 3 SHARP) (x11-color 'blue))
(cons (ly:make-pitch 0 4 FLAT) (x11-color 'blue))
(cons (ly:make-pitch 0 5 SHARP) (x11-color 'blue))
(cons (ly:make-pitch 0 6 FLAT) (x11-color 'blue))))
%Compare pitch and alteration (not octave).
#(define (pitch-equals? p1 p2)
(and
(= (ly:pitch-alteration p1) (ly:pitch-alteration p2))
(= (ly:pitch-notename p1) (ly:pitch-notename p2))))
#(define (pitch-to-color pitch)
(let ((color (assoc pitch color-mapping pitch-equals?)))
(if color
(cdr color))))
#(define (color-notehead grob)
(pitch-to-color
(ly:event-property (event-cause grob) 'pitch)))
\score {
\new Staff \relative c' {
\override NoteHead.color = #color-notehead
c8 b d dis ees f g aes
}
}
|
Crear una secuencia de notas a distintas alturas
En una música que tenga muchas apariciones de la
misma secuencia de notas a distintas alturas, podría ser de
utilidad la siguiente función musical. Admite una nota, de la que
sólo se utiliza su altura. Las funciones de apoyo en Scheme se
han tomado prestadas del documento de "Consejos y trucos"de la
versión 2.10 del manual. Este ejemplo crea las duraciones
rítmicas que se usan a todo lo largo de «Marte», de «Los Planetas»
de Gustav Holst.
| | rhythm =
#(define-music-function (p) (ly:pitch?)
"Make the rhythm in Mars (the Planets) at the given pitch"
#{ \tuplet 3/2 { $p 8 8 8 } 4 4 8 8 4 #})
\new Staff {
\time 5/4
\rhythm c'
\rhythm c''
\rhythm g
}
|
Creating custom key signatures
LilyPond supports custom key signatures. In this example, print for D
minor with an extended range of printed flats.
| | \new Staff \with {
\override StaffSymbol.line-count = #8
\override KeySignature.flat-positions = #'((-7 . 6))
\override KeyCancellation.flat-positions = #'((-7 . 6))
% presumably sharps are also printed in both octaves
\override KeySignature.sharp-positions = #'((-6 . 7))
\override KeyCancellation.sharp-positions = #'((-6 . 7))
\override Clef.stencil = #
(lambda (grob)(grob-interpret-markup grob
#{ \markup\combine
\musicglyph "clefs.C"
\translate #'(-3 . -2)
\musicglyph "clefs.F"
#}))
clefPosition = #3
middleCPosition = #3
middleCClefPosition = #3
}
{
\key d\minor
f bes, f bes,
}
|
Force a cancellation natural before accidentals
The following example shows how to force a natural sign before an
accidental.
| | \relative c' {
\key es \major
bes c des
\tweak Accidental.restore-first ##t
eis
}
|
Forzar la impresión de la clave
Cuando ya se ha impreso la clave y aún no se ha cambiado a una
distinta, LilyPond ignorará la repetición de la instrucción
\clef, pues no constituye un cambio de clave. Es posible
forzar la reimpresión de la clave usando la instrucción \set
Staff.forceClef = ##t.
| | \relative c' {
\clef treble
c1
\clef treble
c1
\set Staff.forceClef = ##t
c1
\clef treble
c1
}
|
Generación de notas aleatorias
Este fragmento de código basado en Scheme genera
24 notas aleatorias (o tantas como se necesiten), basándose en la
hora actual (o en cualquier número pseudo-aleatorio que se
especifique en su lugar, para obtener las mismas notas aleatorias
cada vez): es decir, para obtener distintos patrones de notas,
sólo tiene que modificar este número.
| | \score {
{
$(let ((random-state (seed->random-state (current-time))))
(make-sequential-music
(map (lambda (x)
(let ((idx (random 12 random-state)))
(make-event-chord
(list
(make-music 'NoteEvent
'duration (ly:make-duration 2 0 1/1)
'pitch (ly:make-pitch
(quotient idx 7)
(remainder idx 7)
0))))))
(make-list 24))))
}
}
|
Ocultar las alteraciones sobre notas ligadas al principio de un sistema nuevo
Aquí se muestra la manera de ocultar las alteraciones de las notas
ligadas al comienzo de un sistema nuevo.
| | \relative c'' {
\override Accidental.hide-tied-accidental-after-break = ##t
cis1~ cis~
\break
cis
}
|
Mantener el tamaño del símbolo en los cambios de clave
Cuando se produce un cambio de clave, el símbolo de clave se imprime a
un tamaño menor que la clave inicial. Esto se puede ajustar con
full-size-change.
| | \relative c' {
\clef "treble"
c1
\clef "bass"
c1
\clef "treble"
c1
\override Staff.Clef.full-size-change = ##t
\clef "bass"
c1
\clef "treble"
c1
\revert Staff.Clef.full-size-change
\clef "bass"
c1
\clef "treble"
c1
}
|
Ejemplo de «Makam»
El «Makam» es un tipo de melodía de Turquía que
utiliza alteraciones microtonales de 1/9 de tono. Consulte el
archivo de inicio ‘makam.ly’ (véase el ’Manual de
aprendizaje 2.21.5, 4.6.3 Otras fuentes de información’ para
averiguar la situación de este archivo) para ver detalles de los
nombres de las notas y las alteraciones.
| | % Initialize makam settings
\include "makam.ly"
\relative c' {
\set Staff.keyAlterations = #`((6 . ,(- KOMA)) (3 . ,BAKIYE))
c4 cc db fk
gbm4 gfc gfb efk
fk4 db cc c
}
|
Modifying the Ottava spanner slope
It is possible to change the slope of the Ottava spanner.
| | \relative c'' {
\override Staff.OttavaBracket.stencil = #ly:line-spanner::print
\override Staff.OttavaBracket.bound-details =
#`((left . ((Y . 0) ; Change the integer here
(attach-dir . ,LEFT)
(padding . 0)
(stencil-align-dir-y . ,CENTER)))
(right . ((Y . 5) ; Change the integer here
(padding . 0)
(attach-dir . ,RIGHT)
(text . ,(make-draw-dashed-line-markup (cons 0 -1.2))))))
\override Staff.OttavaBracket.left-bound-info =
#ly:line-spanner::calc-left-bound-info-and-text
\override Staff.OttavaBracket.right-bound-info =
#ly:line-spanner::calc-right-bound-info
\ottava #1
c1
c'''1
}
|
Armaduras de tonalidad no tradicionales
La muy utilizada instrucción \key establece la propiedad
keyAlterations dentro del contexto Staff. Para crear
armaduras de tonalidad no estándar, ajuste esta propiedad
directamente.
El formato de esta instrucción es una lista:
\set Staff.keyAlterations = #`(((octava . paso) . alteración)
((octava . paso) . alteración) ...)
donde, para cada elemento dentro de la lista, octava especifica
la octava (siendo cero la octava desde el Do central hasta
el Si por encima), paso especifica la nota dentro de la octava
(cero significa Do y 6 significa Si), y
alteración es ,SHARP ,FLAT ,DOUBLE-SHARP etc.
De forma alternativa, el uso del formato más conciso (paso
. alteración) para cada elemento de la lista especifica que la misma
alteración debe estar en todas las octavas. Para escalas microtonales
en las que un “sostenido” no son 100 cents, alteración se
refiere a la proporción de un tono entero de 200 cents.
| | \include "arabic.ly"
\relative do' {
\set Staff.keyAlterations = #`((0 . ,SEMI-FLAT)
(1 . ,SEMI-FLAT)
(2 . ,FLAT)
(5 . ,FLAT)
(6 . ,SEMI-FLAT))
%\set Staff.extraNatural = ##f
re reb \dwn reb resd
dod dob dosd \dwn dob |
dobsb dodsd do do |
}
|
Números como notas de notación fácil
Las cabezas de nota de notación fácil utilizan la propiedad
note-names del objeto NoteHead para determinar lo que
aparece dentro de la cabeza. Mediante la sobreescritura de esta
propiedad, es posible imprimir números que representen el grado de la
escala.
Se puede crear un grabador simple que haga esto para la cabeza de cada
nota que ve.
| | #(define Ez_numbers_engraver
(make-engraver
(acknowledgers
((note-head-interface engraver grob source-engraver)
(let* ((context (ly:translator-context engraver))
(tonic-pitch (ly:context-property context 'tonic))
(tonic-name (ly:pitch-notename tonic-pitch))
(grob-pitch
(ly:event-property (event-cause grob) 'pitch))
(grob-name (ly:pitch-notename grob-pitch))
(delta (modulo (- grob-name tonic-name) 7))
(note-names
(make-vector 7 (number->string (1+ delta)))))
(ly:grob-set-property! grob 'note-names note-names))))))
#(set-global-staff-size 26)
\layout {
ragged-right = ##t
\context {
\Voice
\consists \Ez_numbers_engraver
}
}
\relative c' {
\easyHeadsOn
c4 d e f
g4 a b c \break
\key a \major
a,4 b cis d
e4 fis gis a \break
\key d \dorian
d,4 e f g
a4 b c d
}
|
Plantilla de orquesta con coro y piano
Esta plantilla muestra el uso de contextos StaffGroup y
GrandStaff anidados para sub-agrupar instrumentos del mismo
tipo, y una forma de usar \transpose de manera que unas
variables contengan la música para instrumentos transpositores en
afinación de concierto.
| | #(set-global-staff-size 17)
\paper {
indent = 3.0\cm % add space for instrumentName
short-indent = 1.5\cm % add less space for shortInstrumentName
}
fluteMusic = \relative c' { \key g \major g'1 b }
% Pitches as written on a manuscript for Clarinet in A
% are transposed to concert pitch.
clarinetMusic = \transpose c' a
\relative c'' { \key bes \major bes1 d }
trumpetMusic = \relative c { \key g \major g''1 b }
% Key signature is often omitted for horns
hornMusic = \transpose c' f
\relative c { d'1 fis }
percussionMusic = \relative c { \key g \major g1 b }
sopranoMusic = \relative c'' { \key g \major g'1 b }
sopranoLyrics = \lyricmode { Lyr -- ics }
altoIMusic = \relative c' { \key g \major g'1 b }
altoIIMusic = \relative c' { \key g \major g'1 b }
altoILyrics = \sopranoLyrics
altoIILyrics = \lyricmode { Ah -- ah }
tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b }
tenorLyrics = \sopranoLyrics
pianoRHMusic = \relative c { \key g \major g''1 b }
pianoLHMusic = \relative c { \clef bass \key g \major g1 b }
violinIMusic = \relative c' { \key g \major g'1 b }
violinIIMusic = \relative c' { \key g \major g'1 b }
violaMusic = \relative c { \clef alto \key g \major g'1 b }
celloMusic = \relative c { \clef bass \key g \major g1 b }
bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b }
\score {
<<
\new StaffGroup = "StaffGroup_woodwinds" <<
\new Staff = "Staff_flute" \with { instrumentName = "Flute" }
\fluteMusic
\new Staff = "Staff_clarinet" \with {
instrumentName = \markup { \concat { "Clarinet in B" \flat } }
}
% Declare that written Middle C in the music
% to follow sounds a concert B flat, for
% output using sounded pitches such as MIDI.
%\transposition bes
% Print music for a B-flat clarinet
\transpose bes c' \clarinetMusic
>>
\new StaffGroup = "StaffGroup_brass" <<
\new Staff = "Staff_hornI" \with { instrumentName = "Horn in F" }
% \transposition f
\transpose f c' \hornMusic
\new Staff = "Staff_trumpet" \with { instrumentName = "Trumpet in C" }
\trumpetMusic
>>
\new RhythmicStaff = "RhythmicStaff_percussion"
\with { instrumentName = "Percussion" }
<<
\percussionMusic
>>
\new PianoStaff \with { instrumentName = "Piano" }
<<
\new Staff { \pianoRHMusic }
\new Staff { \pianoLHMusic }
>>
\new ChoirStaff = "ChoirStaff_choir" <<
\new Staff = "Staff_soprano" \with { instrumentName = "Soprano" }
\new Voice = "soprano"
\sopranoMusic
\new Lyrics \lyricsto "soprano" { \sopranoLyrics }
\new GrandStaff = "GrandStaff_altos"
\with { \accepts Lyrics } <<
\new Staff = "Staff_altoI" \with { instrumentName = "Alto I" }
\new Voice = "altoI"
\altoIMusic
\new Lyrics \lyricsto "altoI" { \altoILyrics }
\new Staff = "Staff_altoII" \with { instrumentName = "Alto II" }
\new Voice = "altoII"
\altoIIMusic
\new Lyrics \lyricsto "altoII" { \altoIILyrics }
>>
\new Staff = "Staff_tenor" \with { instrumentName = "Tenor" }
\new Voice = "tenor"
\tenorMusic
\new Lyrics \lyricsto "tenor" { \tenorLyrics }
>>
\new StaffGroup = "StaffGroup_strings" <<
\new GrandStaff = "GrandStaff_violins" <<
\new Staff = "Staff_violinI" \with { instrumentName = "Violin I" }
\violinIMusic
\new Staff = "Staff_violinII" \with { instrumentName = "Violin II" }
\violinIIMusic
>>
\new Staff = "Staff_viola" \with { instrumentName = "Viola" }
\violaMusic
\new Staff = "Staff_cello" \with { instrumentName = "Cello" }
\celloMusic
\new Staff = "Staff_bass" \with { instrumentName = "Double Bass" }
\bassMusic
>>
>>
\layout { }
}
|
Evitar que se añadan becuadros adicionales automáticamente
Según las reglas tradicionales de composición tipográfica, se imprime
un becuadro antes de un sostenido o un bemol cuando se tiene que
cancelar un doble sostenido o un doble bemol anterior en la misma
nota. Para modificar este comportamiento a la práctica actual,
establezca el valor de la propiedad extraNatural a ##f
(falso) dentro del contexto de Staff.
| | \relative c'' {
aeses4 aes ais a
\set Staff.extraNatural = ##f
aeses4 aes ais a
}
|
Evitar que se impriman becuadros cuando cambia la armadura
Cuando cambia la armadura de la tonalidad, se imprimen becuadros
automáticamente para cancelar las alteraciones de las armaduras
anteriores. Esto se puede evitar estableciendo al valor “falso” la
propiedad printKeyCancellation del contexto Staff.
| | \relative c' {
\key d \major
a4 b cis d
\key g \minor
a4 bes c d
\set Staff.printKeyCancellation = ##f
\key d \major
a4 b cis d
\key g \minor
a4 bes c d
}
|
Citar otra voz con transposición
Los pasajes citados tienen en cuenta la transposición de la fuente
tanto como la del destino. En este ejemplo, todos los instrumentos
interpretan una nota con el sonido del Do central; el destino de un
instrumento transpositor en Fa. La parte de destino se puede
transportar utilizando \transpose. En este caso las notas
citadas permanecen sin cambios.
| | \addQuote clarinet {
\transposition bes
\repeat unfold 8 { d'16 d' d'8 }
}
\addQuote sax {
\transposition es'
\repeat unfold 16 { a8 }
}
quoteTest = {
% french horn
\transposition f
g'4
<< \quoteDuring "clarinet" { \skip 4 } s4^"clar." >>
<< \quoteDuring "sax" { \skip 4 } s4^"sax." >>
g'4
}
{
\new Staff \with {
instrumentName = \markup { \column { Horn "in F" } }
}
\quoteTest
\transpose c' d' << \quoteTest s4_"up a tone" >>
}
|
Separar las cancelaciones de tonalidad de los cambios de armadura
De forma predeterminada, las alteraciones accidentales que se usan
para las cancelaciones en las armaduras se colocan adyacentes a las
que se usan para los cambios de tonalidad. Este comportamiento se
puede cambiar sobreescribiendo la propiedad 'break-align-orders
del objeto gráfico BreakAlignment.
El valor de 'break-align-orders es un vector de longitud 3, con
listas entrecomilladas cuyos elementos con objets que se pueden
dividir en un salto. Este ejemplo solo modifica la segunda lista,
moviendo key-cancellation antes de staff-bar;
modificando la segunda lista, el comportamiento de alineación de los
saltos solo cambia en la mitad de un sistema, no al principio ni al
final.
| | \new Staff {
\override Score.BreakAlignment.break-align-orders =
##((left-edge ambitus breathing-sign clef staff-bar
key-cancellation key-signature time-signature custos)
(left-edge ambitus breathing-sign clef key-cancellation
staff-bar key-signature time-signature custos)
(left-edge ambitus breathing-sign clef key-cancellation
key-signature staff-bar time-signature custos))
\key des \major
c'1
\bar "||"
\key bes \major
c'1
}
|
Transportar música con el menor número de alteraciones
Este ejemplo utiliza código de Scheme para forzar las
modificaciones enarmónicas de las notas, y así tener el menor
número de alteraciones accidentales. En este caso se aplican las
siguientes reglas:
-
Se quitan las dobles alteraciones
-
Si sostenido -> Do
-
Mi sistenido -> Fa
-
Do bemol -> Si
-
Fa bemol -> Mi
De esta forma se selecciona el mayor número de notas enarmónicas
naturales.
| | #(define (naturalize-pitch p)
(let ((o (ly:pitch-octave p))
(a (* 4 (ly:pitch-alteration p)))
;; alteration, a, in quarter tone steps,
;; for historical reasons
(n (ly:pitch-notename p)))
(cond
((and (> a 1) (or (eqv? n 6) (eqv? n 2)))
(set! a (- a 2))
(set! n (+ n 1)))
((and (< a -1) (or (eqv? n 0) (eqv? n 3)))
(set! a (+ a 2))
(set! n (- n 1))))
(cond
((> a 2) (set! a (- a 4)) (set! n (+ n 1)))
((< a -2) (set! a (+ a 4)) (set! n (- n 1))))
(if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7))))
(if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7))))
(ly:make-pitch o n (/ a 4))))
#(define (naturalize music)
(let ((es (ly:music-property music 'elements))
(e (ly:music-property music 'element))
(p (ly:music-property music 'pitch)))
(if (pair? es)
(ly:music-set-property!
music 'elements
(map naturalize es)))
(if (ly:music? e)
(ly:music-set-property!
music 'element
(naturalize e)))
(if (ly:pitch? p)
(begin
(set! p (naturalize-pitch p))
(ly:music-set-property! music 'pitch p)))
music))
naturalizeMusic =
#(define-music-function (m)
(ly:music?)
(naturalize m))
music = \relative c' { c4 d e g }
\score {
\new Staff {
\transpose c ais { \music }
\naturalizeMusic \transpose c ais { \music }
\transpose c deses { \music }
\naturalizeMusic \transpose c deses { \music }
}
\layout { }
}
|
Turkish Makam example
This template uses the start of a well-known Turkish Saz Semai that is
familiar in the repertoire in order to illustrate some of the elements
of Turkish music notation.
| | % Initialize makam settings
\include "turkish-makam.ly"
\header {
title = "Hüseyni Saz Semaisi"
composer = "Lavtacı Andon"
}
\relative {
\set Staff.extraNatural = ##f
\set Staff.autoBeaming = ##f
\key a \huseyni
\time 10/8
a'4 g'16 [fb] e8. [d16] d [c d e] c [d c8] bfc |
a16 [bfc a8] bfc c16 [d c8] d16 [e d8] e4 fb8 |
d4 a'8 a16 [g fb e] fb8 [g] a8. [b16] a16 [g] |
g4 g16 [fb] fb8. [e16] e [g fb e] e4 r8 |
}
|
Trucaje de las propiedades de clave
La modificación del glifo de la clave, su posición o su octavación, no
cambian ’per se’ la posición de las siguientes notas del pentagrama.
Para conseguir armaduras de tonalidad sobre las líneas del pentagrama
adecuadas, también debe especificarse middleCClefPosition, con
valores positivos o negativos que mueven el Do central hacia
arriba o hacia abajo, respectivamente, en relación con la línea
central del pentagrama (usualmente la tercera).
Por ejemplo, la instrucción \clef "treble_8" equivale a un
ajuste de clefGlyph, clefPosition (que controla la
posición vertical de la clave sobre el pentagrama),
middleCPosition y clefTransposition. Se imprime una
clave cada vez que se modifica cualquiera de las propiedades excepto
middleCPosition.
Los siguientes ejemplos muestran las posibilidades cuando se ajustan
estas propiedades manualmente. En la primera línea, los cambios
manuales preservan el posicionamiento relativo estándar de las claves
y las notas, pero no lo hacen en la segunda línea.
| | {
% The default treble clef
\key f \major
c'1
% The standard bass clef
\set Staff.clefGlyph = #"clefs.F"
\set Staff.clefPosition = #2
\set Staff.middleCPosition = #6
\set Staff.middleCClefPosition = #6
\key g \major
c'1
% The baritone clef
\set Staff.clefGlyph = #"clefs.C"
\set Staff.clefPosition = #4
\set Staff.middleCPosition = #4
\set Staff.middleCClefPosition = #4
\key f \major
c'1
% The standard choral tenor clef
\set Staff.clefGlyph = #"clefs.G"
\set Staff.clefPosition = #-2
\set Staff.clefTransposition = #-7
\set Staff.middleCPosition = #1
\set Staff.middleCClefPosition = #1
\key f \major
c'1
% A non-standard clef
\set Staff.clefPosition = #0
\set Staff.clefTransposition = #0
\set Staff.middleCPosition = #-4
\set Staff.middleCClefPosition = #-4
\key g \major
c'1 \break
% The following clef changes do not preserve
% the normal relationship between notes, key signatures
% and clefs:
\set Staff.clefGlyph = #"clefs.F"
\set Staff.clefPosition = #2
c'1
\set Staff.clefGlyph = #"clefs.G"
c'1
\set Staff.clefGlyph = #"clefs.C"
c'1
\set Staff.clefTransposition = #7
c'1
\set Staff.clefTransposition = #0
\set Staff.clefPosition = #0
c'1
% Return to the normal clef:
\set Staff.middleCPosition = #0
c'1
}
|
Usar cambio automático de pentagrama con más de una voz
Utilización de autoChange con más de una voz.
| | \score
{
\new PianoStaff
<<
\new Staff = "up" {
<<
\set Timing.beamExceptions = #'()
\set Timing.beatStructure = #'(4)
\new Voice {
\voiceOne
\autoChange
\relative c' {
g8 a b c d e f g
g,8 a b c d e f g
}
}
\new Voice {
\voiceTwo
\autoChange
\relative c' {
g8 a b c d e f g
g,,8 a b c d e f g
}
}
>>
}
\new Staff = "down" {
\clef bass
}
>>
}
|
Rhythms
Rhythms
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.\)
}
|
Escritura de partes de percusión
Mediante la utilización de las potentes herramientas preconfiguradas
como la función \drummode y el contexto DrumStaff, la
introducción de partes para percusión es muy fácil: las percusiones se
sitúan en sus propias posiciones de pentagrama (con una clave
especial) y tienen las cabezas correspondientes al instrumento. Es
posible añadir un símbolo adicional a la percusión o reducir el número
de líneas.
| | drh = \drummode {
cymc4.^"crash" hhc16^"h.h." hh hhc8 hho hhc8 hh16 hh
hhc4 r4 r2
}
drl = \drummode {
bd4 sn8 bd bd4 << bd ss >>
bd8 tommh tommh bd toml toml bd tomfh16 tomfh
}
timb = \drummode {
timh4 ssh timl8 ssh r timh r4
ssh8 timl r4 cb8 cb
}
\score {
<<
\new DrumStaff \with {
instrumentName = "timbales"
drumStyleTable = #timbales-style
\override StaffSymbol.line-count = #2
\override BarLine.bar-extent = #'(-1 . 1)
}
<<
\timb
>>
\new DrumStaff \with { instrumentName = "drums" }
<<
\new DrumVoice { \stemUp \drh }
\new DrumVoice { \stemDown \drl }
>>
>>
\layout { }
\midi { \tempo 4 = 120 }
}
|
Ajuste del espaciado de las notas de adorno
Se puede ajustar la separación entre las notas de adorno utilizando la
propiedad spacing-increment de Score.GraceSpacing.
| | graceNotes = {
\grace { c4 c8 c16 c32 }
c8
}
\relative c'' {
c8
\graceNotes
\override Score.GraceSpacing.spacing-increment = #2.0
\graceNotes
\revert Score.GraceSpacing.spacing-increment
\graceNotes
}
|
Alineación de los números de compás
Los números de compás se alinean de forma predeterminada por la
derecha con su objeto padre. Éste es por lo general el borde
izquierdo de una línea o, si los números se imprimen dentro de la
línea, el lado izquierdo de una línea divisoria. Los números
también se pueden situar directamente sobre la barra de compás o
alineados por la izquierda con ella.
| | \relative c' {
\set Score.currentBarNumber = #111
\override Score.BarNumber.break-visibility = #all-visible
% Increase the size of the bar number by 2
\override Score.BarNumber.font-size = #2
% Print a bar number every second measure
\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2)
c1 | c1
% Center-align bar numbers
\override Score.BarNumber.self-alignment-X = #CENTER
c1 | c1
% Left-align bar numbers
\override Score.BarNumber.self-alignment-X = #LEFT
c1 | c1
}
|
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
}
|
Appoggiatura or grace note before a bar line
By default, appoggiaturas and grace notes that occur on the first beat
of a measure are printed after the bar line. They can however be
printed before, simply by adding an invisible BarLine and then the
visible one, as demonstrated here.
| | {
R1
%% default
\appoggiatura d''8 c''4 r2.
%% cheated
\appoggiatura { \bar "" d''8 \bar "|" } c''4 r2.
}
|
Subdivisiones de barra automáticas
Se pueden subdividir las barras automáticamente. Estableciendo la
propiedad subdivideBeams, las barras se subdividen en
posiciones de pulso (tal y como se especifica en beatLength).
| | \new Staff {
\relative c'' {
<<
{
\voiceOne
\set subdivideBeams = ##t
b32[ a g f c' b a g
b32^"subdivide beams" a g f c' b a g]
}
\new Voice {
\voiceTwo
b32_"default"[ a g f c' b a g
b32 a g f c' b a g]
}
>>
\oneVoice
\set baseMoment = #(ly:make-moment 1/8)
\set beatStructure = 2,2,2,2
b32^"baseMoment 1 8"[ a g f c' b a g]
\set baseMoment = #(ly:make-moment 1/16)
\set beatStructure = 4,4,4,4
b32^"baseMoment 1 16"[ a g f c' b a g]
}
}
|
Modificar duraciones automáticamente
Se puede usar shiftDurations para cambiar la longitud de
las notas de una pieza musical. Toma dos argumentos: el factor de
escalado como una potencia de dos, y el número de puntillos que añadir
como un entero positivo.
| | \paper { indent = 0 }
music = \relative c'' { a1 b2 c4 d8 r }
\score {
\new Voice {
\time 4/2
\music
\time 4/4
\shiftDurations #1 #0 { \music }
\time 2/4
\shiftDurations #2 #0 { \music }
\time 4/1
\shiftDurations #-1 #0 { \music }
\time 8/1
\shiftDurations #-2 #0 { \music }
\time 6/2
\shiftDurations #0 #1 { \music }
\time 7/2
\shiftDurations #0 #2 { \music }
}
}
|
Finales de barra en el contexto Score
Las reglas de final de barra especificadas en el contexto
Score se aplican a todos los pentagramas, pero se pueden
modificar tanto en los niveles de Staff como de
Voice:
| | \relative c'' {
\time 5/4
% Set default beaming for all staves
\set Score.baseMoment = #(ly:make-moment 1/8)
\set Score.beatStructure = 3,4,3
<<
\new Staff {
c8 c c c c c c c c c
}
\new Staff {
% Modify beaming for just this staff
\set Staff.beatStructure = 6,4
c8 c c c c c c c c c
}
\new Staff {
% Inherit beaming from Score context
<<
{
\voiceOne
c8 c c c c c c c c c
}
% Modify beaming for this voice only
\new Voice {
\voiceTwo
\set Voice.beatStructure = 6,4
a8 a a a a a a a a a
}
>>
}
>>
}
|
Barras que atraviesan saltos de línea
Normalmente están prohibidos los saltos de línea si las barras
atraviesan las líneas divisorias. Se puede cambiar este
comportamiento como se muestra aquí:
| | \relative c'' {
\override Beam.breakable = ##t
c8 c[ c] c[ c] c[ c] c[ \break
c8] c[ c] c[ c] c[ c] c
}
|
Cambiar el salto de las barras en ángulo
Se insertan automáticamente barras en ángulo cuando se detecta un
intervalo muy grande entre las notas. Se puede hacer un ajuste
fino de este comportamiento a través de la propiedad
auto-knee-gap. Se traza una barra doblada si el salto es
mayor que el valor de auto-knee-gap más el ancho del objeto
barra (que depende de la duración de las notas y de la inclinación
de la barra). De forma predeterminada auto-knee-gap está
establecido a 5.5 espacios de pentagrama.
| | {
f8 f''8 f8 f''8
\override Beam.auto-knee-gap = #6
f8 f''8 f8 f''8
}
|
Cambiar la forma de los silencios multicompás
Si hay diez compases de silencio o menos, se imprime en el pentagrama
una serie de silencios de breve y longa (conocidos en alemán como
“Kirchenpausen”, «silencios eclesiásticos»); en caso contrario se
muestra una barra normal. Este número predeterminado de diez se
puede cambiar sobreescribiendo la propiedad expand-limit:
| | \relative c'' {
\compressMMRests {
R1*2 | R1*5 | R1*9
\override MultiMeasureRest.expand-limit = #3
R1*2 | R1*5 | R1*9
}
}
|
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 |
}
|
Cambiar el tempo sin indicación metronómica
Para cambiar el tempo en la salida MIDI sin
imprimir nada, hacemos invisible la indicación metronómica:
| | \score {
\new Staff \relative c' {
\tempo 4 = 160
c4 e g b
c4 b d c
\set Score.tempoHideNote = ##t
\tempo 4 = 96
d,4 fis a cis
d4 cis e d
}
\layout { }
\midi { }
}
|
Cambiar el número del grupo especial
De forma predeterminada sólo se imprime sobre el corchete de grupo el
numerador del grupo especial, o sea, el numerador del argumento de la instrucción
\tuplet.
De forma alternativa, se puede imprimr
un quebrado en la forma numerador:denominador del número del grupo, o
eliminar el número.
| | \relative c'' {
\tuplet 3/2 { c8 c c }
\tuplet 3/2 { c8 c c }
\override TupletNumber.text = #tuplet-number::calc-fraction-text
\tuplet 3/2 { c8 c c }
\omit TupletNumber
\tuplet 3/2 { c8 c c }
}
|
Modificar el compás dentro de una sección polimétrica utilizando \scaleDurations
La propiedad measureLength, junto con
measurePosition, determina cuándo es necesario dibujar una
línea divisoria. Sin embargo, al utilizar
\scaleDurations, el escalado proporcional de las
duraciones hace difícil introducir cambios de compás. En este
caso se debe establecer manualmente el valor de
measureLength utilizando la función ly:make-moment.
El segundo argumento debe ser el mismo que el segundo argumento de
\scaleDurations.
| | \layout {
\context {
\Score
\remove "Timing_translator"
\remove "Default_bar_line_engraver"
}
\context {
\Staff
\consists "Timing_translator"
\consists "Default_bar_line_engraver"
}
}
<<
\new Staff {
\scaleDurations 8/5 {
\time 6/8
\set Timing.measureLength = #(ly:make-moment 6/5)
b8 b b b b b
\time 2/4
\set Timing.measureLength = #(ly:make-moment 4/5)
b4 b
}
}
\new Staff {
\clef bass
\time 2/4
c2 d e f
}
>>
|
Notación de responsos o salmos
Este tipo de notación se utiliza para los cantos salmódicos, en
que las estrofas no siempre tienen la misma longitud.
| | stemOff = \hide Staff.Stem
stemOn = \undo \stemOff
\score {
\new Staff \with { \remove "Time_signature_engraver" }
{
\key g \minor
\cadenzaOn
\stemOff a'\breve bes'4 g'4
\stemOn a'2 \bar "||"
\stemOff a'\breve g'4 a'4
\stemOn f'2 \bar "||"
\stemOff a'\breve^\markup { \italic flexe }
\stemOn g'2 \bar "||"
}
}
|
Indicaciones de compases compuestos
Las indicaciones de compás poco frecuentes como "5/8" se pueden
ejecutar como compases compuestos (p.ej. "3/8 + 2/8"), que combinan
dos o más metros diferentes. LilyPond puede hacer la música de este
tipo fácil de leer e interpretar, imprimiendo explícitamente las
indicaciones de compás compuesto y adaptando el comportamiento
automático de las barras (también se pueden añadir indicaciones
gráficas de la agrupación de compases; véase el fragmento de código
apropiado en la base de datos).
| | \relative c' {
\compoundMeter #'((2 8) (3 8))
c8 d e fis gis
c8 fis, gis e d
c8 d e4 gis8
}
|
Símbolos de dirección y símbolos de agrupación de compás
La agrupación de pulsos dentro de un compás está controlada por la
propiedad de contexto beatStructure. Hay establecidos valores
de beatStructure para muchos tipos de compases en
scm/time-signature-settings.scm. Los valores de
beatStructure se pueden cambiar o establecer con \set.
Como alternativa, se puede usar \time para establecer tanto el
compás como la estructura de pulsos. Para ello, especificamos la
agrupación interna de los pulsos del compás como una lista de números
(en la sintaxis de Scheme) antes de la indicación de compás.
\time se aplica al contexto Timing, por lo que no
restablece los valores de beatStructure ni de baseMoment
que se establezcan en otros contextos de nivel inferior, como
Voice.
Si el grabador Measure_grouping_engraver está incluido en uno
de los contextos de presentación, se imprimirán signos de agrupación
de pulsos. Estos símbolos facilitan la lectura de música moderna
rítmicamente compleja. En este ejemplo, el compás de 9/8 se agrupa
según dos patrones distintos utilizando los dos métodos, mientras que
el compás de 5/8 se agrupa de acuerdo con el ajuste predeterminado que
está en scm/time-signature-settings.scm:
| | \score {
\new Voice \relative c'' {
\time 9/8
g8 g d d g g a( bes g) |
\set Timing.beatStructure = 2,2,2,3
g8 g d d g g a( bes g) |
\time 4,5 9/8
g8 g d d g g a( bes g) |
\time 5/8
a4. g4 |
}
\layout {
\context {
\Staff
\consists "Measure_grouping_engraver"
}
}
}
|
Números de compás alineados a la izquierda de forma consistente
Cuando se alinean los números de compás, pueden aparecer problemas de
superposición con los corchetes de sistema. Este fragmento de código
lo resuelve dejando alineados a la derecha los números de compás
después de un salto de línea.
| | consistentlyLeftAlignedBarNumbers = {
\override Score.BarNumber.break-visibility = #end-of-line-invisible
\override Score.BarNumber.self-alignment-X =
#(lambda (grob)
(let ((break-dir (ly:item-break-dir grob)))
(if (= break-dir RIGHT) RIGHT LEFT)))
}
\new ChoirStaff <<
\new Staff {
\relative c' {
\set Score.barNumberVisibility = #(every-nth-bar-number-visible 3)
\bar ""
\consistentlyLeftAlignedBarNumbers
\set Score.currentBarNumber = #112
\repeat unfold 8 { R1 }
\break
\repeat unfold 9 { R1 }
\break
\repeat unfold 7 { R1 }
}
}
\new Staff {
\relative c' {
\repeat unfold 24 { R1 }
}
}
>>
\layout {
indent = #0
ragged-right = ##t
ragged-last = ##t
}
|
Controlar la visibilidad de los corchetes de grupo especial
El comportamiento predeterminado de la visibilidad de los corchetes de
grupo de valoración especial es imprimir el corchete a no ser que haya
una barra de la misma longitud que el grupo especial. Para controlar
la visibilidad de los corchetes de grupo, establezca la propiedad
'bracket-visibility a #t (imprimir el corchete siempre),
#'if-no-beam (imprimir el corchete solamente si no hay barra,
el comportamiento predeterminado), o #f (no imprimir nunca el
corchete). Este último equivale de hecho a omitir el objeto
TupletBracket de la salida impresa.
| | music = \relative c'' {
\tuplet 3/2 { c16[ d e } f8]
\tuplet 3/2 { c8 d e }
\tuplet 3/2 { c4 d e }
}
\new Voice {
\relative c' {
<< \music s4^"default" >>
\override TupletBracket.bracket-visibility = #'if-no-beam
<< \music s4^"'if-no-beam" >>
\override TupletBracket.bracket-visibility = ##t
<< \music s4^"#t" >>
\override TupletBracket.bracket-visibility = ##f
<< \music s4^"#f" >>
\omit TupletBracket
<< \music s4^"omit" >>
}
}
|
Crear indicaciones metronómicas en modo de marcado
Se pueden crear indicaciones metronómicas nuevas en modo de
marcado, pero no cambian el tempo en la salida MIDI.
| | \relative c' {
\tempo \markup {
\concat {
(
\smaller \general-align #Y #DOWN \note {16.} #1
" = "
\smaller \general-align #Y #DOWN \note {8} #1
)
}
}
c1
c4 c' c,2
}
|
Grabado manual de las ligaduras
Se pueden grabar a mano las ligaduras modificando la propiedad
tie-configuration del objeto TieColumn. El primer número
indica la distancia a partir de la tercera línea del pentagrama en
espacios de pentagrama, y el segundo número indica la dirección (1 =
hacia arriba, -1 = hacia abajo).
Observe que LilyPond distingue entre valores exactos e inexactos para
el primer número. Si se está usando un valor exacto (p.ej., un entero
o una fracción como (/ 4 5)), el valor sirve como una posición
vertical aproximada que después se ajusta por parte de LilyPond para
que la ligadura evite las líneas del pentagrama. Si se usa un valor
inexacto, como un número de coma flotante, se toma como la posición
vertical sin más ajustes posteriores.
| | \relative c' {
<c e g>2~ <c e g>
\override TieColumn.tie-configuration =
#'((0.0 . 1) (-2.0 . 1) (-4.0 . 1))
<c e g>2~ <c e g>
\override TieColumn.tie-configuration =
#'((0 . 1) (-2 . 1) (-4 . 1))
<c e g>2~ <c e g>
}
|
Trémolos con barras flotantes
Si la duración total de un trémolo es menor de una negra, o
exactamente de una blanca, normalmente se compone tipográficamente con
todas las barras de corchea tocando las plicas. Ciertos estilos de
notación de partituras componen algunas de estas barras como barras
flotantes centradas que no tocan las plicas de las figuras. El número
de barras flotantes en este tipo de trémolo está controlado por la
propiedad 'gap-count del objeto Beam y la separación
entre las barras y las plicas se fija con la propiedad 'gap.
| | \relative c'' {
\repeat tremolo 8 { a32 f }
\override Beam.gap-count = #1
\repeat tremolo 8 { a32 f }
\override Beam.gap-count = #2
\repeat tremolo 8 { a32 f }
\override Beam.gap-count = #3
\repeat tremolo 8 { a32 f }
\override Beam.gap-count = #3
\override Beam.gap = #1.33
\repeat tremolo 8 { a32 f }
\override Beam.gap = #1
\repeat tremolo 8 { a32 f }
\override Beam.gap = #0.67
\repeat tremolo 8 { a32 f }
\override Beam.gap = #0.33
\repeat tremolo 8 { a32 f }
}
|
Entering several tuplets using only one \tuplet command
The property tupletSpannerDuration sets how long each of the
tuplets contained within the brackets after \tuplet should
last. Many consecutive tuplets can then be placed within a single
\tuplet expression, thus saving typing.
There are several ways to set tupletSpannerDuration. The
command \tupletSpan sets it to a given duration, and clears it
when instead of a duration \default is specified. Another way
is to use an optional argument with \tuplet.
| | \relative c' {
\time 2/4
\tupletSpan 4
\tuplet 3/2 { c8^"\\tupletSpan 4" c c c c c }
\tupletSpan \default
\tuplet 3/2 { c8^"\\tupletSpan \\default" c c c c c }
\tuplet 3/2 4 { c8^"\\tuplet 3/2 4 {...}" c c c c c }
}
|
Corchetes rectos y extremos de barra sueltos
Son posibles tanto los corchetes rectos sobre notas sueltas como
extremos de barra sueltos en figuras unidas, con una combinación de
stemLeftBeamCount, stemRightBeamCount e indicadores de
barra [] emparejados.
Para corchetes rectos que apunten a la derecha sobre notas sueltas,
use indicadores de barra emparejados [] y establezca
stemLeftBeamCount a cero (véase el ejemplo 1).
Para corchetes rectos que apunten a la izquierda, establezca en su
lugar stemRightBeamCount (ejemplo 2).
Para extremos sueltos que apunten a la derecha al final de un conjunto
de notas unidas, establezca stemRightBeamCount a un valor
positivo. Y para extremos sueltos que apunten a la izquierda al
principio de un conjunto de notas unidas, establezca
stemLeftBeamCount en su lugar (ejemplo 3).
A veces, para una nota suelta rodeada de silencios tiene sentido que
lleve los dos extremos sueltos del corchete plano, apuntando a derecha
e izquierda. Hágalo solamente con indicadores de barra emparejados
[ ] (ejemplo 4).
(Observe que \set stemLeftBeamCount siempre equivale a
\once \set. En otras palabras, los ajustes de la cantidad de
barras no se recuerdan, y por ello el par de corchetes planos
aplicados a la nota Do semicorchea c'16[] del último ejemplo no
tiene nada que ver con el \set de dos notas por detrás.)
| | \score {
<<
% Example 1
\new RhythmicStaff {
\set stemLeftBeamCount = #0
c16[]
r8.
}
% Example 2
\new RhythmicStaff {
r8.
\set stemRightBeamCount = #0
16[]
}
% Example 3
\new RhythmicStaff {
16 16
\set stemRightBeamCount = #2
16 r r
\set stemLeftBeamCount = #2
16 16 16
}
% Example 4
\new RhythmicStaff {
16 16
\set stemRightBeamCount = #2
16 r16
16[]
r16
\set stemLeftBeamCount = #2
16 16
}
>>
}
|
Forzar que las marcas de ensayo comiencen en una letra o número dados
Este fragmento de código muestra cómo obtener marcas de ensayo
ordenadas automáticamente, pero partiendo de la letra o número
deseados.
| | \relative c'' {
c1 \mark \default
c1 \mark \default
c1 \mark \default
c1 \mark #14
c1 \mark \default
c1 \mark \default
c1 \mark \default
c1
}
|
Generar corchetes personalizados
La propiedad stencil del grob Flag (el objeto gráfico corchete)
se puede fijar a una función de Scheme personalizada que genere el
glifo del corchete.
| | #(define-public (weight-flag grob)
(let* ((stem-grob (ly:grob-parent grob X))
(log (- (ly:grob-property stem-grob 'duration-log) 2))
(is-up? (eqv? (ly:grob-property stem-grob 'direction) UP))
(yext (if is-up? (cons (* log -0.8) 0) (cons 0 (* log 0.8))))
(flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext))
(stroke-style (ly:grob-property grob 'stroke-style))
(stroke-stencil (if (equal? stroke-style "grace")
(make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4)
empty-stencil)))
(ly:stencil-add flag-stencil stroke-stencil)))
% Create a flag stencil by looking up the glyph from the font
#(define (inverted-flag grob)
(let* ((stem-grob (ly:grob-parent grob X))
(dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u"))
(flag (retrieve-glyph-flag "" dir "" grob))
(line-thickness (ly:staff-symbol-line-thickness grob))
(stem-thickness (ly:grob-property stem-grob 'thickness))
(stem-width (* line-thickness stem-thickness))
(stroke-style (ly:grob-property grob 'stroke-style))
(stencil (if (null? stroke-style)
flag
(add-stroke-glyph flag stem-grob dir stroke-style "")))
(rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0)))
(ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0))))
snippetexamplenotes =
{
\autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64
}
{
\override Score.RehearsalMark.self-alignment-X = #LEFT
\time 1/4
\mark "Normal flags"
\snippetexamplenotes
\mark "Custom flag: inverted"
\override Flag.stencil = #inverted-flag
\snippetexamplenotes
\mark "Custom flag: weight"
\override Flag.stencil = #weight-flag
\snippetexamplenotes
\mark "Revert to normal"
\revert Flag.stencil
\snippetexamplenotes
}
|
Ritmos rasgueados de guitarra
Para la música de guitarra, es posible mostrar los ritmos de rasgueo,
además de las notas de la melodía, acordes y diagramas de posiciones.
| | \include "predefined-guitar-fretboards.ly"
<<
\new ChordNames {
\chordmode {
c1 | f | g | c
}
}
\new FretBoards {
\chordmode {
c1 | f | g | c
}
}
\new Voice \with {
\consists "Pitch_squash_engraver"
} {
\relative c'' {
\improvisationOn
c4 c8 c c4 c8 c
f4 f8 f f4 f8 f
g4 g8 g g4 g8 g
c4 c8 c c4 c8 c
}
}
\new Voice = "melody" {
\relative c'' {
c2 e4 e4
f2. r4
g2. a4
e4 c2.
}
}
\new Lyrics {
\lyricsto "melody" {
This is my song.
I like to sing.
}
}
>>
|
Indicaciones de compás polimétricas profundamente personalizadas
Aunque aquí el elemento más esencial no es la indicación de compás
polimétrica que se muestra, se ha incluido para mostrar el pulso de la
pieza, que es la plantilla de una canción de los Balcanes real.
| | melody = \relative c'' {
\key g \major
\compoundMeter #'((3 8) (2 8) (2 8) (3 8) (2 8) (2 8)
(2 8) (2 8) (3 8) (2 8) (2 8))
c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break
c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4
c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
c4. d4 c4 d4. c4 d c2 d4. e4-^ d4
c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
}
drum = \new DrumStaff \drummode {
\bar ".|:" bd4.^\markup { Drums } sn4 bd \bar ";" sn4.
bd4 sn \bar ";" bd sn bd4. sn4 bd \bar ":|."
}
\new Staff \with {
instrumentName = \markup { \concat { "B" \flat " Sop." } }
}
{
\melody
\drum
}
|
Hacer invisible un objeto con la propiedad ’transparent
Si se ajusta la propiedad transparent de un objeto, se imprime
en “tinta invisible”: el objeto no se imprime pero se retienen
todos sus otros comportamientos. El objeto aún ocupa espacio,
participa en las colisiones y se le pueden unir ligaduras de
expresión, ligaduras de unión y barras de corchea.
Este fragmento de código muestra cómo conectar diferentes voces usando
ligaduras de unión. Normalmente las ligaduras de unión solamente
conectan dos notas que estén en la misma voz. Mediante la
introducción de una ligadura en una voz distinta y pintando de color
blanco la primera plica hacia arriba dentro de esa voz, la ligadura
parece cruzar de una voz a otra.
| | \relative {
\time 2/4
<<
{
\once \hide Stem
\once \override Stem.length = #8
b'8 ~ 8\noBeam
\once \hide Stem
\once \override Stem.length = #8
g8 ~ 8\noBeam
}
\\
{
b8 g g e
}
>>
}
|
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)
}
|
Controlar manualmente las posiciones de las barras
Se pueden controlar manualmente las posiciones de las barras de
corchea, sobreescribiendo el valor del parámetro positions del
objeto gráfico Beam.
| | \relative c' {
\time 2/4
% from upper staff-line (position 2) to center (position 0)
\override Beam.positions = #'(2 . 0)
c8 c
% from center to one above center (position 1)
\override Beam.positions = #'(0 . 1)
c8 c
}
|
Combinar los silencios multicompás en una parte polifónica
Cuando se usan silencios multicompás en un pentagrama polifónico, los
silencios se sitúan de forma diferente dependiendo de a qué voz
pertenecen. Sin embargo, se pueden imprimir sobre la misma línea del
pentagrama, usando el ajuste que aparece a continuación.
| | normalPos = \revert MultiMeasureRest.direction
{
<<
{
c''1
R1
c''1
\normalPos
R1
}
\\
{
c'1
R1
c'1
\normalPos
R1
}
>>
}
|
Modificar la longitud del corchete de grupo especial
Se puede hacer que los corchetes de grupo de valoración especial, como
los tresillos, comprendan música anterior al propio grupo o incluyan
la nota siguiente. Los corchetes predeterminados finalizan en el
extremo derecho de la última nota del grupo; el corchete de un grupo
de duración completa se exiende más a la derecha, bien para que cubra
toda la notación no rítmica hasta la nota siguiente, o bien para que
cubra solamente el espacio vacía que hay antes del elemento siguiente
de notación, sea éste una clave, una indicación de compás, u otra
nota. El ejemplo muestra cómo activar el modo de duración completa de
los grupos de valoración especial y cómo cambiar la parte de música
que cubren.
| | \new RhythmicStaff {
% Set tuplets to be extendable...
\set tupletFullLength = ##t
% ...to cover all items up to the next note
\set tupletFullLengthNote = ##t
\time 2/4
\tuplet 3/2 { c4 4 4 }
% ...or to cover just whitespace
\set tupletFullLengthNote = ##f
\time 4/4
\tuplet 5/4 { 4 1 }
\time 3/4
2.
}
|
Desplazar las notas con puntillo en polifonía
Cuando se puede una nota en la voz superior para evitar la colisión
con una nota de otra voz, el comportamiento predeterminado es
desplazar la nota superior a la derecha. Se puede cambiar usando la
propiedad prefer-dotted-right de NoteCollision.
| | \new Staff \relative c' <<
{
f2. f4
\override Staff.NoteCollision.prefer-dotted-right = ##f
f2. f4
\override Staff.NoteCollision.prefer-dotted-right = ##t
f2. f4
}
\\
{ e4 e e e e e e e e e e e }
>>
|
Multi-measure rest length control
Multi-measure rests have length according to their total duration which
is under the control of MultiMeasureRest.space-increment. Note that
the default value is 2.0.
| | \relative c' {
\compressEmptyMeasures
R1*2 R1*4 R1*64 R1*16
\override Staff.MultiMeasureRest.space-increment = 2.5
R1*2 R1*4 R1*64 R1*16
}
|
Marcado de silencios multicompás
Los elementos de marcado aplicados a un silencio multicompás se
centran encima o debajo de éste. Los elementos de marcado extensos
que se adjuntan a silencios multicompás no producen la expansión del
compás. Para expandir un silencio multicompás de forma que quepa todo
el marcado, utilice un acorde vacío con un marcado aplicado antes del
silencio multicompás.
El texto aplicado a un siencio sparador de esta forma se alinea por la
izquierda a la posición en que la nota estaría situada dentro del
compás, pero si la longitud del compás está determinada por la
longitud del texto, éste aparecerá centrado.
| | \relative c' {
\compressMMRests {
\textLengthOn
<>^\markup { [MAJOR GENERAL] }
R1*19
<>_\markup { \italic { Cue: ... it is yours } }
<>^\markup { A }
R1*30^\markup { [MABEL] }
\textLengthOff
c4^\markup { CHORUS } d f c
}
}
|
Números de agrupación especial distintos a los predeterminados
LilyPond también proporciona funciones de formato para imprimir
números de grupo especial diferentes a la propia fracción, así
como para añadir una figura al número o a la fracción de la
agrupación.
| | \relative c'' {
\once \override TupletNumber.text =
#(tuplet-number::non-default-tuplet-denominator-text 7)
\tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text =
#(tuplet-number::non-default-tuplet-fraction-text 12 7)
\tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
(tuplet-number::non-default-tuplet-fraction-text 12 7) (ly:make-duration 3 0))
\tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
tuplet-number::calc-denominator-text (ly:make-duration 2 0))
\tuplet 3/2 { c8 c8 c8 c8 c8 c8 }
\once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
tuplet-number::calc-fraction-text (ly:make-duration 2 0))
\tuplet 3/2 { c8 c8 c8 c8 c8 c8 }
\once \override TupletNumber.text =
#(tuplet-number::fraction-with-notes (ly:make-duration 2 1) (ly:make-duration 3 0))
\tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text =
#(tuplet-number::non-default-fraction-with-notes 12 (ly:make-duration 3 0) 4 (ly:make-duration 2 0))
\tuplet 3/2 { c4. c4. c4. c4. }
}
|
Numbering single measure rests
Multi measure rests show their length by a number except for single
measures. This can be changed by setting restNumberThreshold.
| | {
\compressEmptyMeasures
R1 R1*10 R1*11 \bar "||"
\set restNumberThreshold = 0
R1 R1*10 R1*11 \bar "||"
\set restNumberThreshold = 10
R1 R1*10 R1*11
}
|
PartCombine y autoBeamOff
Puede ser difícil comprender la función de \autoBeamOff cuando
se usa con \partCombine.
Puede ser preferible usar
\set Staff.autoBeaming = ##f
en su lugar, para asegurarse de que el barrado automático se desactiva
para todo el pentagrama.
\partCombine funciona aparentemente con tres voces: plica
arriba cuando hay una sola voz, plica abajo con la otra, y plica
arriba cuando está combinada.
Una llamada a \autoBeamOff en el primer argumento de
partCombine se aplica a la voz que está activa en el momento en que se
procesa la llamada, ya sea voz única con la plica hacia arriba, hacia
abajo o combinadas. Una llamada a \autoBeamOff en el segundo
argumento se aplica a la voz que está sola con la plica abajo.
Para pode usar \autoBeamOff con el objeto de detener todo el
barrado automático cuando se usa con \partCombine, es
necesario hacer tres llamadas a \autoBeamOff.
| | {
%\set Staff.autoBeaming = ##f % turns off all autobeaming
\partCombine
{
\autoBeamOff % applies to split up stems
\repeat unfold 4 a'16
%\autoBeamOff % applies to combined up stems
\repeat unfold 4 a'8
\repeat unfold 4 a'16
}
{
\autoBeamOff % applies to down stems
\repeat unfold 4 f'8
\repeat unfold 8 f'16 |
}
}
|
Percussion example
A short example taken from Stravinsky’s L’histoire du Soldat.
| | #(define mydrums '((bassdrum default #t 4)
(snare default #t -4)
(tambourine default #t 0)))
global = {
\time 3/8 s4.
\time 2/4 s2*2
\time 3/8 s4.
\time 2/4 s2
}
drumsA = {
\context DrumVoice <<
{ \global }
{ \drummode {
\autoBeamOff
\stemDown sn8 \stemUp tamb s8 |
sn4 \stemDown sn4 |
\stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 |
\stemDown sn8 \stemUp tamb s8 |
\stemUp sn4 s8 \stemUp tamb
}
}
>>
}
drumsB = {
\drummode {
s4 bd8 s2*2 s4 bd8 s4 bd8 s8
}
}
\layout {
indent = #40
}
\score {
\new StaffGroup <<
\new DrumStaff \with {
instrumentName = \markup {
\center-column {
"Tambourine"
"et"
"caisse claire s. timbre"
}
}
drumStyleTable = #(alist->hash-table mydrums)
}
\drumsA
\new DrumStaff \with {
instrumentName = #"Grosse Caisse"
drumStyleTable = #(alist->hash-table mydrums)
}
\drumsB
>>
}
|
Permitir saltos de línea dentro de grupos especiales con barra
Este ejemplo artificial muestra cómo se pueden permitir tanto los
saltos de línea manuales como los automáticos dentro de un grupo de
valoración especial unido por una barra. Observe que estos grupos
sincopados se deben barrar manualmente.
| | \layout {
\context {
\Voice
% Permit line breaks within tuplets
\remove "Forbid_line_break_engraver"
% Allow beams to be broken at line breaks
\override Beam.breakable = ##t
}
}
\relative c'' {
a8
\repeat unfold 5 { \tuplet 3/2 { c[ b a] } }
% Insert a manual line break within a tuplet
\tuplet 3/2 { c[ b \bar "" \break a] }
\repeat unfold 5 { \tuplet 3/2 { c[ b a] } }
c8
}
|
Colocar las barras de las notas de adorno a la misma altura que las barras de notas normales
Cuando se colocan figuras sobre líneas adicionales, sus barras se
sitúan generalmente en medio del pentagrama. La barra de las notas de
adorno es más corta y las notas de adorno sobre líneas adicionales
podrían tener la barra fuera del pentagrama. Podemos corregir este
barrado para las notas de adorno.
| | \relative c {
f8[ e]
\grace {
f8[ e]
\override Stem.no-stem-extend = ##f
f8[ e]
\revert Stem.no-stem-extend
}
f8[ e]
}
|
Posicionamiento de las notas de adorno con espacio flotante
Al establecer la propiedad 'strict-grace-spacing hacemos que
las columnas musicales para las notas de adorno sean ‘flotantes’, es
decir, desacopladas de las notas que no son de adorno: primero se
aplica el espaciado de las notas normales, y luego se ponen las
columnas musicales de las notas de adorno a la izquierda de las
columnas musicales de las notas principales.
| | \relative c'' {
<<
\override Score.SpacingSpanner.strict-grace-spacing = ##t
\new Staff \new Voice {
\afterGrace c4 { c16[ c8 c16] }
c8[ \grace { b16 d } c8]
c4 r
}
\new Staff {
c16 c c c c c c c c4 r
}
>>
}
|
Posicionar los silencios multicompás
A diferencia de los silencios normales, no existe una instrucción
predefinida para modificar la posición predeterminada de un
símbolo de silencio multicompás sobre el pentagrama, adjuntándolo
a una nota, independientemente de cuál sea su forma. Sin embargo,
en la música polifónica los silencios multicompás de las voces de
numeración par e impar están separados verticalmente. La
colocación de los silencios multicompás se puede controlar como se
ve a continuación:
| | \relative c'' {
% Multi-measure rests by default are set under the fourth line
R1
% They can be moved using an override
\override MultiMeasureRest.staff-position = #-2
R1
\override MultiMeasureRest.staff-position = #0
R1
\override MultiMeasureRest.staff-position = #2
R1
\override MultiMeasureRest.staff-position = #3
R1
\override MultiMeasureRest.staff-position = #6
R1
\revert MultiMeasureRest.staff-position
\break
% In two Voices, odd-numbered voices are under the top line
<< { R1 } \\ { a1 } >>
% Even-numbered voices are under the bottom line
<< { a1 } \\ { R1 } >>
% Multi-measure rests in both voices remain separate
<< { R1 } \\ { R1 } >>
% Separating multi-measure rests in more than two voices
% requires an override
<< { R1 } \\ { R1 } \\
\once \override MultiMeasureRest.staff-position = #0
{ R1 }
>>
% Using compressed bars in multiple voices requires another override
% in all voices to avoid multiple instances being printed
\compressMMRests
<<
\revert MultiMeasureRest.direction
{ R1*3 }
\\
\revert MultiMeasureRest.direction
{ R1*3 }
>>
}
|
Evitar que una marca de ensayo final suprima el corchete de un grupo de valoración especial
Al añadir una marca de ensayo mark al final puede ocurrir que
se pierda una indicación de grupo especial colocado al final. Se
puede solventar fijando TupletBracket.full-length-to-extent
al valor false.
| | % due to issue 2362 a long mark such as
% \mark "Composed Feb 2007 - Feb 2008"
% cannot be used here.
\new Staff {
\set tupletFullLength = ##t
\time 1/8
\tuplet 3/2 8 { c'16 c' c' c' c' c' c' c' c' }
\override Score.RehearsalMark.break-visibility = ##(#t #t #t)
\override Score.RehearsalMark.direction = #DOWN
\override Score.RehearsalMark.self-alignment-X = #RIGHT
\mark "1234"
}
\new Staff {
\set tupletFullLength = ##t
\override TupletBracket.full-length-to-extent = ##f
\time 1/8
\tuplet 3/2 8 { c'16 c' c' c' c' c' c' c' c' }
\override Score.RehearsalMark.break-visibility = ##(#t #t #t)
\override Score.RehearsalMark.direction = #DOWN
\override Score.RehearsalMark.self-alignment-X = #RIGHT
\mark "1234"
}
|
Imprimir números de compás a intervalos regulares
Se pueden imprimir los números de compás a intervalos regulares
mediante el establecimiento de la propiedad
barNumberVisibility. Aquí los números de compás se
imprimen a cada dos compases excepto al final de la línea.
| | \relative c' {
\override Score.BarNumber.break-visibility = #end-of-line-invisible
\set Score.currentBarNumber = #11
% Permit first bar number to be printed
\bar ""
% Print a bar number every second measure
\set Score.barNumberVisibility = #(every-nth-bar-number-visible 2)
c1 | c | c | c | c
\break
c1 | c | c | c | c
}
|
Imprimir números de compás dentro de rectángulos o circunferencias
Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
| | \relative c' {
% Prevent bar numbers at the end of a line and permit them elsewhere
\override Score.BarNumber.break-visibility = #end-of-line-invisible
\set Score.barNumberVisibility = #(every-nth-bar-number-visible 4)
% Increase the size of the bar number by 2
\override Score.BarNumber.font-size = #2
% Draw a box round the following bar number(s)
\override Score.BarNumber.stencil
= #(make-stencil-boxer 0.1 0.25 ly:text-interface::print)
\repeat unfold 5 { c1 }
% Draw a circle round the following bar number(s)
\override Score.BarNumber.stencil
= #(make-stencil-circler 0.1 0.25 ly:text-interface::print)
\repeat unfold 4 { c1 } \bar "|."
}
|
Printing bar numbers with changing regular intervals
The bar number interval can be changed by changing the context function
{set-bar-number-visibility}.
| | \relative c' {
\override Score.BarNumber.break-visibility = #end-of-line-invisible
\context Score \applyContext #(set-bar-number-visibility 4)
\repeat unfold 10 c'1
\context Score \applyContext #(set-bar-number-visibility 2)
\repeat unfold 10 c
}
|
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
}
|
Imprimir música que tenga compases distintos en cada pentagrama
En el siguiente fragmento de código, dos partes distintas tienen un
compás completamente diferente y sin embargo se mantienen
sincronizadas. Las barras de compás ya no se pueden imprimir en el
nivel de Score; para permitir barras de compás independientes
en cada parte se trasladan los grabadores
Default_barline_engraver y Timing_translator desde el
contexto de partitura Score hasta el contexto de pentagrama
Staff.
Si son necesarios números de compás, el grabador de números de compás
Bar_number_engraver también debe trasladarse, ya que descansa
en propiedades fijadas por el Timing_translator; se puede usar
un bloque \with para añadir números de compás al pentagrama
apropiado.
| | \paper {
indent = #0
ragged-right = ##t
}
global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } }
\layout {
\context {
\Score
\remove "Timing_translator"
\remove "Default_bar_line_engraver"
\remove "Bar_number_engraver"
\override SpacingSpanner.uniform-stretching = ##t
\override SpacingSpanner.strict-note-spacing = ##t
proportionalNotationDuration = #(ly:make-moment 1/64)
}
\context {
\Staff
\consists "Timing_translator"
\consists "Default_bar_line_engraver"
}
\context {
\Voice
\remove "Forbid_line_break_engraver"
tupletFullLength = ##t
}
}
Bassklarinette = \new Staff \with {
\consists "Bar_number_engraver"
barNumberVisibility = #(every-nth-bar-number-visible 2)
\override BarNumber.break-visibility = #end-of-line-invisible
} <<
\global {
\bar "|"
\clef treble
\time 3/8
d''4.
\bar "|"
\time 3/4
r8 des''2( c''8)
\bar "|"
\time 7/8
r4. ees''2 ~
\bar "|"
\time 2/4
\tupletUp
\tuplet 3/2 { ees''4 r4 d''4 ~ }
\bar "|"
\time 3/8
\tupletUp
\tuplet 4/3 { d''4 r4 }
\bar "|"
\time 2/4
e''2
\bar "|"
\time 3/8
es''4.
\bar "|"
\time 3/4
r8 d''2 r8
\bar "|"
}
>>
Perkussion = \new StaffGroup <<
\new Staff <<
\global {
\bar "|"
\clef percussion
\time 3/4
r4 c'2 ~
\bar "|"
c'2.
\bar "|"
R2.
\bar "|"
r2 g'4 ~
\bar "|"
g'2. ~
\bar "|"
g'2.
}
>>
\new Staff <<
\global {
\bar "|"
\clef percussion
\time 3/4
R2.
\bar "|"
g'2. ~
\bar "|"
g'2.
\bar "|"
r4 g'2 ~
\bar "|"
g'2 r4
\bar "|"
g'2.
}
>>
>>
\score {
<<
\Bassklarinette
\Perkussion
>>
}
|
Imprimir el número de compás en el primer compás
De forma predeterminada se suprime el número del primer compás de una
partitura si es menor o igual a ‘1’. Al establecer el valor de
barNumberVisibility a all-bar-numbers-visible, se puede
imprimir cualquier número de compás para el primer compás y todos los
siguientes. Observe que, para que esto funcione, se debe insertar una
líinea divisoria vacía antes de la primera nota.
| | \layout {
indent = 0
ragged-right = ##t
}
\relative c' {
\set Score.barNumberVisibility = #all-bar-numbers-visible
\bar ""
c1 | d | e | f \break
g1 | e | d | c
}
|
Redefinición de los valores globales predeterminados para notas de adorno
Los valores predeterminados para las notas de adorno están
almacenados en los identificadores startGraceMusic,
stopGraceMusic, startAcciaccaturaMusic,
stopAcciaccaturaMusic, startAppoggiaturaMusic y
stopAppoggiaturaMusic, que están definidos en el archivo
‘ly/grace-init.ly’. Redefiniéndolos se pueden obtener otros
efectos.
| | startAcciaccaturaMusic = {
<>(
\override Flag.stroke-style = #"grace"
\slurDashed
}
stopAcciaccaturaMusic = {
\revert Flag.stroke-style
\slurSolid
<>)
}
\relative c'' {
\acciaccatura d8 c1
}
|
Suprimir los números de compás de toda la partitura
Se pueden eliminar completamente los números de compás quitando el
grabador Bar_number_engraver del contexto de Score.
| | \layout {
\context {
\Score
\omit BarNumber
% or:
%\remove "Bar_number_engraver"
}
}
\relative c'' {
c4 c c c \break
c4 c c c
}
|
Quitar las barras de compás entre los pentagramas de un StaffGroup PianoStaff o GrandStaff
De forma predeterminada, las líneas divisorias en los grupos
StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas.
Se puede alterar este comportamiento pentagrama a pentagrama.
| | \relative c' {
\new StaffGroup <<
\new Staff {
e1 | e
\once \override Staff.BarLine.allow-span-bar = ##f
e1 | e | e
}
\new Staff {
c1 | c | c
\once \override Staff.BarLine.allow-span-bar = ##f
c1 | c
}
\new Staff {
a1 | a | a | a | a
}
>>
}
|
Estilos de silencios
Los silencios se pueden imprimir en distintos estilos.
| | \new Staff \relative c {
\omit Score.TimeSignature
\cadenzaOn
\override Staff.Rest.style = #'mensural
r\maxima^\markup \typewriter { mensural }
r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
\bar ""
\break
\override Staff.Rest.style = #'neomensural
r\maxima^\markup \typewriter { neomensural }
r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
\bar ""
\break
\override Staff.Rest.style = #'classical
r\maxima^\markup \typewriter { classical }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
\bar ""
\break
\override Staff.Rest.style = #'z
r\maxima^\markup \typewriter { z-style }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
\bar ""
\break
\override Staff.Rest.style = #'default
r\maxima^\markup \typewriter { default }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
}
|
Alteración de los finales de barra predeterminados
Para tipografiar las barras agrupadas en la forma 3-4-3-2 sólo
es necesario modificar la estructura de pulsos:
| | \relative c'' {
\time 12/8
% Default beaming
a8 a a a a a a a a a a a
% Set new values for beam endings
\set Score.beatStructure = 3,4,3,2
a8 a a a a a a a a a a a
}
|
Barras rítmicas
En las hojas guía de acordes o lead-sheets “sencillas”, a veces no
se imprime realmente ninguna nota, y en su lugar se hace una notación
que tiene solamente “patrones rítmicos” y acordes encima de los
compases, dando la estructura de la canción song. Tal funcionalidad es
útil, por ejemplo, al crear o transcribir la estructura de una canción
y también si se quieren compartir las hojas guía con guitarristas o
músicos de jazz. La forma estándar en que está contemplada esta
funcionalidad empleando \repeat percent no es adecuada aquí
porque el primer compás tendría que ser una nota o silencio normales.
Este ejemplo muestra dos soluciones al problema, redefiniendo los
silencios normales para que se impriman como barras inclinadas (si la
duración de cada pulso no es una negra, sustituiremos el r4 que
aparece en las definiciones con un silencio de la duración adecuada).
| | % Macro to print single slash
rs = {
\once \override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
\once \override Rest.thickness = #0.48
\once \override Rest.slope = #1.7
r4
}
% Function to print a specified number of slashes
comp = #(define-music-function (count) (integer?)
#{
\override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
\override Rest.thickness = #0.48
\override Rest.slope = #1.7
\repeat unfold $count { r4 }
\revert Rest.stencil
#}
)
\score {
\relative c' {
c4 d e f |
\rs \rs \rs \rs |
\comp #4 |
}
}
|
Silencios de separación en modo de letra (2)
Aunque no se pueden usar los silencios de separación s dentro
de \lyricmode (se toman como una “s”, literal, no como un
espacio), sí están disponibles las comillas dobles ("") y el
carácter subrayado (_). Así por ejemplo:
| | <<
\relative c'' { a4 b c d }
\new Lyrics \lyricmode { a4 "" _ gap }
>>
|
Silencios de separación en modo de letra
La sintaxis s para los silencios de desplazamiento solamente
está disponible en los modos de nota y de acorde. En otras
situaciones, por ejemplo al escribir la letra de las canciones, se
recomienda usar la instrucción \skip.
| | <<
\relative c'' { a1 | a }
\new Lyrics \lyricmode { \skip 1 bla1 }
>>
|
Stemlets (plicas de tamaño reducido)
En ciertas convenciones notacionales se permite que las barras se
extiendan por encima de los silencios. Dependiendo de nuestras
preferencias, estas barras pueden presentar pequeñas plicas para que
el ojo aprecie más fácilmente el ritmo, y en algunos casos de música
moderna el propio silencio se omite y permanecen solamente las
pequeñas plicas sin cabeza.
Este fragmento de código muestra una progresión a partir de la
notación tradicional, pasando por barras sobre silencios y plicas
sobre los silencios, hasta las plicas solamente. Las pequeñas plicas
o Stemlets se generan sobreescribiendo la propiedad
'stemlet-length del objeto Stem, mientras que los
silencios quedan ocultos estableciendo 'transparent = ##t.
Algunos elementos de \markup se incluyen en la fuente para
imprimir títulos sobre cada estilo de notación.
| | \paper { ragged-right = ##f }
{
c'16^\markup { traditional } d' r f'
g'16[^\markup { beams over rests } f' r d']
% N.B. use Score.Stem to set for the whole score.
\override Staff.Stem.stemlet-length = #0.75
c'16[^\markup { stemlets over rests } d' r f']
g'16[^\markup { stemlets and no rests } f'
\once \hide Rest
r16 d']
}
|
Barras que se atienen al pulso estrictamente
Se puede hacer que las barras secundarias apunten en la dirección del
pulso o fracción a que pertenecen. La primera barra evita los
corchetes sueltos (que es el comportamiento predeterminado); la
segunda barra sigue el pulso o fracción estrictamente.
| | \relative c'' {
\time 6/8
a8. a16 a a
\set strictBeatBeaming = ##t
a8. a16 a a
}
|
Subdivisión de barras
Las barras de semicorchea, o de figuras más breves, no se subdividen
de forma predeterminada. Esto es, las tres (o más) barras se amplían
sin romperse sobre grupos completos de notas. Este comportamiento se
puede modificar para subdividir las barras en subgrupos mediante el
establecimiento de la propiedad subdivideBeams. Cuando está
activada, las barras se subdividen a intervalos definidos por el valor
actual de baseMoment mediante la reducción de las barras
repetidas a una sola entre los subgrupos. Observe que el valor
predeterminado de baseMoment es uno más que el denominador del
tipo de compás actual, si no se fija explícitamente. Se debe ajustar
a una fracción que da la duración del subgrupo de barras utilizando la
función ly:make-moment, como se ve en este fragmento de código.
Asimismo, cuando se modifica baseMoment, se debería cambiar
también beatStructure para que corresponda al baseMoment
nuevo:
| | \relative c'' {
c32[ c c c c c c c]
\set subdivideBeams = ##t
c32[ c c c c c c c]
% Set beam sub-group length to an eighth note
\set baseMoment = #(ly:make-moment 1/8)
\set beatStructure = 2,2,2,2
c32[ c c c c c c c]
% Set beam sub-group length to a sixteenth note
\set baseMoment = #(ly:make-moment 1/16)
\set beatStructure = 4,4,4,4
c32[ c c c c c c c]
% Shorten beam by 1/32
\set baseMoment = #(ly:make-moment 1/8)
\set beatStructure = 2,2,2,2
c32[ c c c c c c] r32
% Shorten beam by 3/32
\set baseMoment = #(ly:make-moment 1/8)
\set beatStructure = 2,2,2,2
c32[ c c c c] r16.
r2
}
|
Tam-tam example
A tam-tam example, entered with ’tt’
| | #(define mydrums '((tamtam default #t 0)))
\new DrumStaff \with { instrumentName = #"Tamtam" }
\drummode {
\set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
\override Staff.StaffSymbol.line-positions = #'( 0 )
\override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
tt 1 \pp \laissezVibrer
}
|
Rectángulo de tres segmentos visibles
Este ejemplo muestra cómo añadir ina instrucción de marcado para
obtener un rectángulo de tres segmentos visibles rodeando un elemento
de texto (u otro elemento de marcado).
| | % New command to add a three sided box, with sides north, west and south
% Based on the box-stencil command defined in scm/stencil.scm
% Note that ";;" is used to comment a line in Scheme
#(define-public (NWS-box-stencil stencil thickness padding)
"Add a box around STENCIL, producing a new stencil."
(let* ((x-ext (interval-widen (ly:stencil-extent stencil X) padding))
(y-ext (interval-widen (ly:stencil-extent stencil Y) padding))
(y-rule (make-filled-box-stencil (cons 0 thickness) y-ext))
(x-rule (make-filled-box-stencil
(interval-widen x-ext thickness) (cons 0 thickness))))
;; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding))
(set! stencil (ly:stencil-combine-at-edge stencil X LEFT y-rule padding))
(set! stencil (ly:stencil-combine-at-edge stencil Y UP x-rule 0.0))
(set! stencil (ly:stencil-combine-at-edge stencil Y DOWN x-rule 0.0))
stencil))
% The corresponding markup command, based on the \box command defined
% in scm/define-markup-commands.scm
#(define-markup-command (NWS-box layout props arg) (markup?)
#:properties ((thickness 0.1) (font-size 0) (box-padding 0.2))
"Draw a box round @var{arg}. Looks at @code{thickness},
@code{box-padding} and @code{font-size} properties to determine line
thickness and padding around the markup."
(let ((pad (* (magstep font-size) box-padding))
(m (interpret-markup layout props arg)))
(NWS-box-stencil m thickness pad)))
% Test it:
\relative c' {
c1^\markup { \NWS-box ABCD }
c1^\markup { \NWS-box \note {4} #1.0 }
}
|
Indicación de compás entre paréntesis: método número 3
Otra forma de poner la indicación de compás entre paréntesis.
| | \relative c'' {
\override Staff.TimeSignature.stencil = #(lambda (grob)
(parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1 ))
\time 2/4
a4 b8 c
}
|
Compás entre paréntesis
La indicación de compás puede encerrarse entre paréntesis.
| | \relative c'' {
\override Staff.TimeSignature.stencil = #(lambda (grob)
(bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
\time 2/4
a4 b8 c
}
|
Indicación de compás imprimiendo sólo el numerador (en lugar de la fracción)
A veces, la indicación de compás no debe imprimir la fracción completa
(p.ej. 7/4), sino sólo el numerador (7 en este caso). Esto se puede
hacer fácilmente utilizando \override Staff.TimeSignature.style
= #'single-digit para cambiar el estilo permanentemente. Usando
\revert Staff.TimeSignature.style, se puede revertir el
cambio. Para aplicar el estilo de un dígito único a una sola
indicación de compás, utilice la instrucción \override y
anteponga la instrucción \once.
| | \relative c'' {
\time 3/4
c4 c c
% Change the style permanently
\override Staff.TimeSignature.style = #'single-digit
\time 2/4
c4 c
\time 3/4
c4 c c
% Revert to default style:
\revert Staff.TimeSignature.style
\time 2/4
c4 c
% single-digit style only for the next time signature
\once \override Staff.TimeSignature.style = #'single-digit
\time 5/4
c4 c c c c
\time 2/4
c4 c
}
|
Trucar la disposición de las notas de adorno dentro de la música
La disposición de las expresiones de adorno se puede cambiar a lo
largo de toda la música usando las funciones
add-grace-property y remove-grace-property. El
ejemplo siguiente borra la definición de la dirección de la plica
para esta nota de adorno, de manera que las plicas no siemmpre
apuntan hacia arriba, y cambia la forma predeterminada de las
cabezas a aspas.
| | \relative c'' {
\new Staff {
$(remove-grace-property 'Voice 'Stem 'direction)
$(add-grace-property 'Voice 'NoteHead 'style 'cross)
\new Voice {
\acciaccatura { f16 } g4
\grace { d16 e } f4
\appoggiatura { f,32 g a } e2
}
}
}
|
User defined time signatures
New time signature styles can be defined. The time signature in
the second measure should be upside down in both staves.
| | #(add-simple-time-signature-style 'topsy-turvy
(lambda (fraction)
(make-rotate-markup 180 (make-compound-meter-markup fraction))))
<<
\new Staff {
\time 3/4 f'2.
\override Score.TimeSignature.style = #'topsy-turvy
\time 3/4 R2. \bar "|."
}
\new Staff {
R2. e''
}
>>
|
Uso de estilos alternativos para los corchetes
Se pueden imprimir estilos alternativos del corchete o gancho de las
corcheas y figuras menores, mediante la sobreescritura de la propiedad
stencil del objeto Flag. Son valores válidos
modern-straight-flag y old-straight-flag y
flat-flag.
| | testnotes = {
\autoBeamOff
c8 d16 c32 d64 \acciaccatura { c8 } d64 r4
}
\score {
\relative c' {
\time 2/4
\testnotes
\override Flag.stencil = #modern-straight-flag
\testnotes
\override Flag.stencil = #old-straight-flag
\testnotes
\override Flag.stencil = #flat-flag
\testnotes
\revert Flag.stencil
\testnotes
}
\layout {
indent = 0
\context {
\Score
\override NonMusicalPaperColumn.line-break-permission = ##f
}
}
}
|
Utilizar la barra que tacha las notas de adorno con notas normales
Es posible aplicar la barrita que cruza la barra de las
acciaccaturas, en otras situaciones.
| | \relative c'' {
\override Flag.stroke-style = #"grace"
c8( d2) e8( f4)
}
|
Uso de ligaduras en los arpegios
En ocasiones se usan ligaduras de unión para escribir los arpegios.
En este caso, las dos notas ligadas no tienen que ser consecutivas.
Esto se puede conseguir estableciendo la propiedad
tieWaitForNote al valor #t. La misma funcionalidad
es de utilidad, por ejemplo, para ligar un trémolo a un acorde, pero
en principio también se puede usar para notas normales consecutivas.
| | \relative c' {
\set tieWaitForNote = ##t
\grace { c16[ ~ e ~ g] ~ } <c, e g>2
\repeat tremolo 8 { c32 ~ c' ~ } <c c,>1
e8 ~ c ~ a ~ f ~ <e' c a f>2
\tieUp
c8 ~ a
\tieDown
\tieDotted
g8 ~ c g2
}
|
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.\)
}
|
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 ParenthesesItem.
| | \relative c' {
c2-\parenthesize ->
\override ParenthesesItem.padding = #0.1
\override ParenthesesItem.font-size = #-4
<d \parenthesize f a>2
}
|
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 |
}
|
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
}
|
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
}
|
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
}
|
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 } >> |
% 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 "||"
}
|
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.
}
>>
}
|
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 "|."
}
|
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.
| | 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))
(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 text) X CENTER))
X LEFT))
(staff-space (ly:output-def-lookup
(ly:grob-layout grob) 'staff-space))
(staff-line-thickness
(ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
(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
}
|
Cambiar el tamaño de la marca de \flageolet
Para hacer más pequeño el círculo de \flageolet (armónico)
utilice el siguiente truco.
| | smallFlageolet = \tweak font-size -3 \flageolet
\layout { ragged-right = ##f }
\relative c'' {
d4^\flageolet_\markup { default size } d_\flageolet
c4^\smallFlageolet_\markup { smaller } c_\smallFlageolet
}
|
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
}
|
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)
}
|
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
}
|
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 |
}
|
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
}
|
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 "|"
}
|
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
}
|
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 }
}
|
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'' {
c2*2/3 ( s2*1/3\turn d4) r
<<
{ c4.( d8) }
{ s4 s\turn }
>>
\transpose c d \relative c'' <<
{ c4.( d8) }
{
s4
\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
\single \hideNotes
b8-\turn \noBeam
s8
}
>>
}
|
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 }
>>
}
|
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
}
}
>>
|
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"
}
}
}
|
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
}
|
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
}
|
Creación de marcas de ensayo simultáneas
A diferencia de las inscripciones de texto, las lestras de ensayo
no se pueden apilar en un punto concreto de la partitura: sólo se
crea un objeto RehearsalMark. Utilizando un compás y línea
divisoria invisibles se puede crear una nueva marca de ensayo,
dando la apariencia de dos marcas en la misma columna.
Este método también puede resultar útil para colocar marcas de
ensayo tanto al final de un sistema como al comienzo del sistema
siguiente.
| | {
\key a \major
\set Score.markFormatter = #format-mark-box-letters
\once \override Score.RehearsalMark.outside-staff-priority = #5000
\once \override Score.RehearsalMark.self-alignment-X = #LEFT
\once \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\mark \markup { \bold { Senza denti } }
% the hidden measure and bar line
% \cadenzaOn turns off automatic calculation of bar numbers
\cadenzaOn
\once \override Score.TimeSignature.stencil = ##f
\time 1/16
s16 \bar ""
\cadenzaOff
\time 4/4
\once \override Score.RehearsalMark.self-alignment-X = #LEFT
\mark \markup { \box \bold Intro }
d'1
\mark \default
d'1
}
|
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)
}
>>
}
|
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
}
|
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
}
|
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\!
}
|
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,
}
|
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\!
}
|
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\!
}
|
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 }
|
Cómo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 1)
Este método imprime dos letras de ensayo, una encima de la otra,
desplaza la marca inferior a una posición debajo del pentagrama y
después añade un relleno sobre ella de forma que la marca superior se
sitúe encima del pentagrama.
Ajustando los valores de extra-offset y de baseline-skip podemos
aumentar o disminuir el espacio total entre la marca de ensayo y el
pentagrama.
Debido a que puede hacrse que prácticamente cualquier tipo de glifo o
cadena de caracteres se comporte como una marca de ensayo, es posible
centrarlas encima y debajo de una barra de compás.
Añadiendo la propiedad ’break visibility’ (visibilidad en caso de
salto) adecuada como se muestra en el ejemplo número 1, podemos
también posicionar las dos marcas al final de una línea.
Nota: el método 1 es menos complejo que el método 2 pero realmente no
permite un ajuste fino de la colocación de una de las marcas de ensayo
sin afectar a la otra. También puede dar algunos problemas con el
espaciado vertical, porque el uso de extra-offset no cambia la
caja circundante de la letra de ensayo desde su valor original.
| | \relative c'{
c d e f |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \circle 1 \box A }
g f e d |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \flat { \bold \small \italic Fine. } }
g f e d |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
\mark \markup \center-column { \fermata \box z }
}
|
Cömo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 2)
Este método imprime dos ’letras de ensayo’: una sobre el pentagrama y
otra debajo, creando dos voces, añadiendo el grabador Rehearsal Mark a
cada unad e las voces (sin esto no se imprime ninguna marca de ensayo)
y después poniendo cada marca de ensayo en las posiciones UP y DOWN en
cada voz respectivamente.
Este método (a diferencia del método 1) es más complejo, pero permite
más flexibilidad y sería necesario para trucar cada letra de ensayo
independientemente de las demás.
| | \score {
\relative c'
<<
\new Staff {
<<
\new Voice \with {
\consists Mark_engraver
\consists "Staff_collecting_engraver"
}
{ c4 d e f
\mark \markup { \box A }
c4 d e f
}
\new Voice \with {
\consists Mark_engraver
\consists "Staff_collecting_engraver"
\override RehearsalMark.direction = #DOWN
}
{ s4 s s s
\mark \markup { \circle 1 }
s4 s s s
}
>>
}
>>
\layout {
\context {
\Score
\remove "Mark_engraver"
\remove "Staff_collecting_engraver"
}
}
}
|
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
}
|
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
}
|
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
}
|
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)
}
|
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-+ }
|
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)
}
|
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
}
|
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
}
|
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
}
|
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\!
}
|
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\!
}
|
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
}
|
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\!
}
|
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.
| | \relative c'' {
c4\< c\! d\> e\!
<< f1 { s4 s\< s\> s\! } >>
\override Hairpin.minimum-length = #5
<< f1 { s4 s\< s\> s\! } >>
}
|
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>
| | % The same as \flageolet, just a little smaller
smallFlageolet = \tweak font-size #-2 \flageolet
\relative c' {
s4^"Wrong:"
c4_\fermata^\fermata % The second fermata is ignored!
<e d'>4^\smallFlageolet_\smallFlageolet
s4^"Works if written inside a chord:"
<e_\smallFlageolet d'^\smallFlageolet>4
<e_\flageolet d'^\flageolet>4
<e_\smallFlageolet^\smallFlageolet>4
<e_\fermata^\fermata>4
}
|
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
}
|
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
}
|
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 }
}
|
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>)
}
|
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
}
|
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
}
|
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\!
}
|
Repeats
Repeats
Añadir corchetes de primera y segunda vez a más pentagramas
El grabador Volta_engraver reside de forma predeterminada
dentro del contexto de Score, y los corchetes de la repetición
se imprimen así normalmente sólo encima del pentagrama superior. Esto
se puede ajustar añadiendo el grabador Volta_engraver al
contexto de Staff en que deban aparecer los corchetes; véase
también el fragmento de código “Volta multi staff”.
| | <<
\new Staff { \repeat volta 2 { c'1 } \alternative { c' } }
\new Staff { \repeat volta 2 { c'1 } \alternative { c' } }
\new Staff \with { \consists "Volta_engraver" } { c'2 g' e' a' }
\new Staff { \repeat volta 2 { c'1 } \alternative { c' } }
>>
|
Números de compás centrados
Con frecuencia, las partituras de obras para conjuntos grandes tienen
los números de compás debajo del sistema y centrados horizontalmente
sobre el ancho del compás. Este fragmento de código muestra cómo
puede usarse el grabador Measure_counter_engraver para simular
esta práctica notacional. Aquí hemos añadido el grabador a un
contexto Dynamics.
| | \layout {
\context {
\Dynamics
\consists #Measure_counter_engraver
\override MeasureCounter.direction = #DOWN
\override MeasureCounter.font-encoding = #'latin1
\override MeasureCounter.font-shape = #'italic
% to control the distance of the Dynamics context from the staff:
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
}
\context {
\Score
\remove "Bar_number_engraver"
}
}
pattern = \repeat unfold 7 { c'4 d' e' f' }
\new StaffGroup <<
\new Staff {
\pattern
}
\new Staff {
\pattern
}
\new Dynamics {
\startMeasureCount
s1*7
\stopMeasureCount
}
>>
|
Changing the default bar lines
Default bar lines can be changed when re-defined in a score context.
| | % http://lsr.di.unimi.it/LSR/Item?id=964
%%=> http://lists.gnu.org/archive/html/lilypond-user/2014-03/msg00126.html
%%=> https://lilypond.1069038.n5.nabble.com/Changing-the-default-end-repeat-bracket-tc169357.html
\layout {
\context {
\Score
%% Changing the defaults from engraver-init.ly
defaultBarType = #"!"
startRepeatType = #"[|:"
endRepeatType = #":|]"
doubleRepeatType = #":|][|:"
}
}
%% example:
{
c'1
\repeat volta 2 { \repeat unfold 2 c' }
\repeat volta 2 { \repeat unfold 2 c' }
\alternative {
{ c' }
{
%% v2.18 workaround
\once\override Score.VoltaBracket.shorten-pair = #'(1 . -1)
c'
}
}
\bar "|."
}
|
Trémolos de pentagrama cruzado
Dado que \repeat tremolo espera exactamente dos argumentos
musicales para los trémolos de acorde, la nota o acorde que cambia de
pentagrama en un trémolo que cruza el pentagrama se debe colocar
dentro de llaves curvas junto a su instrucción \change Staff.
| | \new PianoStaff <<
\new Staff = "up" \relative c'' {
\key a \major
\time 3/8
s4.
}
\new Staff = "down" \relative c'' {
\key a \major
\time 3/8
\voiceOne
\repeat tremolo 6 {
<a e'>32
{
\change Staff = "up"
\voiceTwo
<cis a' dis>32
}
}
}
>>
|
Trémolos con barras flotantes
Si la duración total de un trémolo es menor de una negra, o
exactamente de una blanca, normalmente se compone tipográficamente con
todas las barras de corchea tocando las plicas. Ciertos estilos de
notación de partituras componen algunas de estas barras como barras
flotantes centradas que no tocan las plicas de las figuras. El número
de barras flotantes en este tipo de trémolo está controlado por la
propiedad 'gap-count del objeto Beam y la separación
entre las barras y las plicas se fija con la propiedad 'gap.
| | \relative c'' {
\repeat tremolo 8 { a32 f }
\override Beam.gap-count = #1
\repeat tremolo 8 { a32 f }
\override Beam.gap-count = #2
\repeat tremolo 8 { a32 f }
\override Beam.gap-count = #3
\repeat tremolo 8 { a32 f }
\override Beam.gap-count = #3
\override Beam.gap = #1.33
\repeat tremolo 8 { a32 f }
\override Beam.gap = #1
\repeat tremolo 8 { a32 f }
\override Beam.gap = #0.67
\repeat tremolo 8 { a32 f }
\override Beam.gap = #0.33
\repeat tremolo 8 { a32 f }
}
|
Símbolos de porcentaje sueltos
También se pueden imprimir símbolos de porcentaje sueltos.
| | makePercent =
#(define-music-function (note) (ly:music?)
"Make a percent repeat the same length as NOTE."
(make-music 'PercentEvent
'length (ly:music-length note)))
\relative c'' {
\makePercent s1
}
|
Contador de compases
Este fragmento de código proporciona una solución alternativa a la
producción de contadores de compás utilizando repeticiones
transparentes de tipo porcentaje.
| | <<
\context Voice = "foo" {
\clef bass
c4 r g r
c4 r g r
c4 r g r
c4 r g r
}
\context Voice = "foo" {
\set countPercentRepeats = ##t
\hide PercentRepeat
\override PercentRepeatCounter.staff-padding = #1
\repeat percent 4 { s1 }
}
>>
|
Numerar grupos de compases
Este fragmento de código muestra el uso del grabador
Measure_counter_engraver para numerar grupos de compases
sucesivos. Se puede numerar cualquier período de compases tanto si
tiene repeticiones como si no.
Se debe añadir el grabador al contexto adecuado. Aquí se usa un
contexto Staff; otra posibilidad sería un contexto
Dynamics.
El contador se inicia con \startMeasureCount y finaliza con
\stopMeasureCount. La numeración comienza con 1, de
forma predeterminada, pero se puede modificar este comportamiento
sobreescribiendo la propiedad count-from.
Cuando un compás se extiende más allá de un salto de línea, el número
aparece dos veces, la segunda vez entre paréntesis.
| | \layout {
\context {
\Staff
\consists #Measure_counter_engraver
}
}
\new Staff {
\startMeasureCount
\repeat unfold 7 {
c'4 d' e' f'
}
\stopMeasureCount
\bar "||"
g'4 f' e' d'
\override Staff.MeasureCounter.count-from = #2
\startMeasureCount
\repeat unfold 5 {
g'4 f' e' d'
}
g'4 f'
\bar ""
\break
e'4 d'
\repeat unfold 7 {
g'4 f' e' d'
}
\stopMeasureCount
}
|
Visibilidad del contador de repeticiones de tipo porcentaje
Se pueden mostrar los contadores de las repeticiones del tipo
porcentaje a intervalos regulares mediante el establecimiento de
la propiedad de contexto repeatCountVisibility.
| | \relative c'' {
\set countPercentRepeats = ##t
\set repeatCountVisibility = #(every-nth-repeat-count-visible 5)
\repeat percent 10 { c1 } \break
\set repeatCountVisibility = #(every-nth-repeat-count-visible 2)
\repeat percent 6 { c1 d1 }
}
|
Contador de repeticiones de tipo porcentaje
Las repeticiones de compases completos de más de dos repeticiones
pueden llevar un contador si se activa la propiedad adecuada, como se
ve en este ejemplo:
| | \relative c'' {
\set countPercentRepeats = ##t
\repeat percent 4 { c1 }
}
|
Posicionar los símbolos de repetición segno y coda (con saltos de línea)
Si queremos colocar un símbolo de segno de salida y añadir texto como
“D.S. al Coda” junto a él donde normalmente están las líneas del
pentagrama, cpodemos usar este código. La coda continúa en una línea
nueva. Hay una variante documentada en el fragmento de código, donde
la coda se mantiene en la misma línea.
| | {
\clef treble
\key g \major
\time 4/4
\relative c'' {
\repeat unfold 4 {
c4 c c c
}
% Set segno sign as rehearsal mark and adjust size if needed
% \once \override Score.RehearsalMark.font-size = #3
\mark \markup { \musicglyph "scripts.segno" }
\repeat unfold 2 {
c4 c c c
}
% Set coda sign as rehearsal mark and adjust size if needed
\once \override Score.RehearsalMark.font-size = #4
\mark \markup { \musicglyph "scripts.coda" }
\repeat unfold 2 {
c4 c c c
}
% Should Coda be on anew line?
% Coda NOT on new line: use \nobreak
% Coda on new line: DON'T use \nobreak
% \noBreak
\bar "||"
% Set segno sign as rehearsal mark and adjust size if needed
\once \override Score.RehearsalMark.break-visibility =
#begin-of-line-invisible
% \once \override Score.RehearsalMark.font-size = #3
\mark \markup { \musicglyph "scripts.segno" }
% Here begins the trickery!
% \cadenzaOn will suppress the bar count
% and \stopStaff removes the staff lines.
\cadenzaOn
\stopStaff
% Some examples of possible text-displays
% text line-aligned
% ==================
% Move text to the desired position
% \once \override TextScript.extra-offset = #'( 2 . -3.5 )
% | <>^\markup { D.S. al Coda } }
% text center-aligned
% ====================
% Move text to the desired position
% \once \override TextScript.extra-offset = #'( 6 . -5.0 )
% | <>^\markup { \center-column { D.S. "al Coda" } }
% text and symbols center-aligned
% ===============================
% Move text to the desired position
% and tweak spacing for optimum text alignment
\repeat unfold 1 {
s1
\bar ""
}
\once \override TextScript.extra-offset = #'( 0 . -3.0 )
\once \override TextScript.word-space = #1.5
<>^\markup { \center-column { "D.S. al Coda"
\line {
\musicglyph "scripts.coda"
\musicglyph "scripts.tenuto"
\musicglyph "scripts.coda"} } }
% Increasing the unfold counter will expand the staff-free space
\repeat unfold 3 {
s1
\bar ""
}
% Resume bar count and show staff lines again
\startStaff
\cadenzaOff
% Should Coda be on new line?
% Coda NOT on new line: DON'T use \break
% Coda on new line: use \break
\break
% Show up, you clef and key!
\once \override Staff.KeySignature.break-visibility = #end-of-line-invisible
\once \override Staff.Clef.break-visibility = #end-of-line-invisible
% Set coda sign as rehearsal mark and adjust size and position
% Put the coda sign on top of the (treble-)clef
% depending on coda's line-position
% Coda NOT on new line, use this:
% \once \override Score.RehearsalMark.extra-offset = #'( -2 . 1.75 )
% Coda on new line, use this:
\once \override Score.RehearsalMark.extra-offset = #'( -5 . .5 )
\once \override Score.RehearsalMark.font-size = #5
\mark \markup { \musicglyph "scripts.coda" }
% The coda
\repeat unfold 6 {
c4 c c c
}
\bar"|."
}
}
|
Establecer el tipo de repetición doble predeterminado para la primera y segunda vez
Existen tres estilos distintos de repeticiones dobles para la primera
y segunda vez, que se pueden ajustar utilizando
doubleRepeatType.
| | \relative c'' {
\repeat volta 1 { c1 }
\set Score.doubleRepeatType = #":..:"
\repeat volta 1 { c1 }
\set Score.doubleRepeatType = #":|.|:"
\repeat volta 1 { c1 }
\set Score.doubleRepeatType = #":|.:"
\repeat volta 1 { c1 }
}
|
Acortar los corchetes de primera y segunda vez
De forma predeterminada, los corchetes de primera y segunda vez se
trazan encima de los finales alternativos completos, pero es posible
acortartlos estableciendo un valor cierto para
voltaSpannerDuration. En el ejemplo siguiente, el corchete
sólo dura un compás, que corresponde a una duración de 3/4.
| | \relative c'' {
\time 3/4
c4 c c
\set Score.voltaSpannerDuration = #(ly:make-moment 3/4)
\repeat volta 5 { d4 d d }
\alternative {
{
e4 e e
f4 f f
}
{ g4 g g }
}
}
|
Corchetes de primera y segunda vez debajo de los acordes
Mediante la adición del grabador Volta_engraver al
pentagrama pertinente, se pueden poner los corchetes de primera y
segunda vez debajo de los acordes.
| | \score {
<<
\chords {
c1
c1
}
\new Staff \with {
\consists "Volta_engraver"
}
{
\repeat volta 2 { c'1 }
\alternative { c' }
}
>>
\layout {
\context {
\Score
\remove "Volta_engraver"
}
}
}
|
Casillas de repetición en varios pentagramas
Mediante la adición del grabador Volta_engraver al pentagrama
adecuado, las casillas de primera y segunda vez se pueden poner sobre
algún pentagrama distinto al más alto de la partitura.
| | voltaMusic = \relative c'' {
\repeat volta 2 {
c1
}
\alternative {
d1
e1
}
}
<<
\new StaffGroup <<
\new Staff \voltaMusic
\new Staff \voltaMusic
>>
\new StaffGroup <<
\new Staff \with { \consists "Volta_engraver" }
\voltaMusic
\new Staff \voltaMusic
>>
>>
|
Elementos de marcado para el texto de las casillas de repetición usando repeatCommands
Aunque las casillas de repetición se especifican de forma óptima
usando \repeat volta, debe usarse la propiedad de contexto
repeatCommands en caso de que el texto de la casilla requiera
un formato más avanzado con \markup.
Puesto que repeatCommands admite una lista, el método más
sencillo de incluir elementos de marcado es usar un identificador para
el texto e insertarlo en la lista de instrucciones usando la sintaxis
de Scheme #(list (list 'volta textIdentifier)). Las
instrucciones de principio y fin de repetición se pueden añadir como
elementos de lista independientes:
| | voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } }
\relative c'' {
c1
\set Score.repeatCommands = #(list (list 'volta voltaAdLib) 'start-repeat)
c4 b d e
\set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat)
f1
\set Score.repeatCommands = #'((volta #f))
}
|
Simultaneous notes
Simultaneous notes
Voces adicionales para evitar colisiones
En ciertos casos de polifonía compleja, se necesitan voces adicionales
para evitar colisiones entre las notas. Si se necesitan más de cuatro
voces paralelas, las voces adicionales se añaden definiendo una
variable que utiliza la función de Scheme context-spec-music.
| | voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice)
\relative c'' {
\time 3/4
\key d \minor
\partial 2
<<
\new Voice {
\voiceOne
a4. a8
e'4 e4. e8
f4 d4. c8
}
\new Voice {
\voiceTwo
d,2
d4 cis2
d4 bes2
}
\new Voice {
\voiceThree
f'2
bes4 a2
a4 s2
}
\new Voice {
\voiceFive
s2
g4 g2
f4 f2
}
>>
}
|
Modificar el tamaño de una nota suelta de un acorde
Se pueden modificar notas individuales de un acorde con la instrucción
\tweak, alterando la propiedad font-size.
Dentro de un acorde (entre ángulos simples < >), antes de la
nota que queremos alterar, situamos la instrucción \tweak
seguida por font-size y definimos el tamaño adecuado como
#-2 (una cabeza pequeña).
| | \relative c' {
<\tweak font-size #+2 c e g c
\tweak font-size #-2 e>1
^\markup { A tiny e }_\markup { A big c }
}
|
Cambiar los textos de partCombine
Al utilizar la posibilidad de combinación automática de partes, se
puede modificar el texto que se imprime para las secciones de solo
y de unísono:
| | \new Staff <<
\set Staff.soloText = #"girl"
\set Staff.soloIIText = #"boy"
\set Staff.aDueText = #"together"
\partCombine
\relative c'' {
g4 g r r
a2 g
}
\relative c'' {
r4 r a( b)
a2 g
}
>>
|
Clusters («racimos»)
Los «clusters» o racimos son un mecanismo para indicar la
interpretación de un ámbito de notas al mismo tiempo.
| | fragment = \relative c' {
c4 f <e d'>4
<g a>8 <e a> a4 c2 <d b>4
e2 c
}
<<
\new Staff \fragment
\new Staff \makeClusters \fragment
>>
|
Combinar dos partes sobre el mismo pentagrama
La herramienta de combinación de partes (instrucción
\partCombine) permite la combinación de varias partes
diferentes sobre el mismo pentagrama. Las indicaciones textuales
tales como “solo” o “a2” se añaden de forma predeterminada; para
quitarlas, sencillamente establezca la propiedad
printPartCombineTexts al valor “falso”. Para partituras
vocales (como himnos), no hay necesidad de añadir los textos “solo”
o “a2”, por lo que se deben desactivar. Sin embargo, podría ser
mejor no usarlo si hay solos, porque éstos no se indicarán. En tales
casos podría ser preferible la notación polifónica estándar.
Este fragmento de código presenta las tres formas en que se pueden
imprimir dos partes sobre un solo pentagrama: polifonía estándar,
\partCombine sin textos, y \partCombine con
textos.
| | %% Combining pedal notes with clef changes
musicUp = \relative c'' {
\time 4/4
a4 c4.( g8) a4 |
g4 e' g,( a8 b) |
c b a2.
}
musicDown = \relative c'' {
g4 e4.( d8) c4 |
r2 g'4( f8 e) |
d2 \stemDown a
}
\score {
<<
\new Staff \with { instrumentName = "Standard polyphony" }
<< \musicUp \\ \musicDown >>
\new Staff \with {
instrumentName = "PartCombine without text"
printPartCombineTexts = ##f
}
\partCombine \musicUp \musicDown
\new Staff \with { instrumentName = "PartCombine with text" }
\partCombine \musicUp \musicDown
>>
\layout {
indent = 6.0\cm
\context {
\Score
\override SystemStartBar.collapse-height = #30
}
}
}
|
Impresión de acordes complejos
He aquí una forma de imprimir un acorde en el que suena la misma nota
dos veces con distintas alteraciones.
| | fixA = {
\once \override Stem.length = #11
}
fixB = {
\once \override NoteHead.X-offset = #1.7
\once \override Stem.length = #7
\once \override Stem.rotation = #'(45 0 0)
\once \override Stem.extra-offset = #'(-0.1 . -0.2)
\once \override Flag.style = #'no-flag
\once \override Accidental.extra-offset = #'(4 . -.1)
}
\relative c' {
<< { \fixA <b d!>8 } \\ { \voiceThree \fixB dis } >> s
}
|
Forzar el desplazamiento horizontal de las notas
Cuando el motor de tipografiado no es capaz de todo, se puede usar la
sintaxis siguiente para sobreescribir las decisiones de tipografía.
Las unidades de medida que se usan aquí son espacios de pentagrama.
| | \relative c' <<
{
<d g>2 <d g>
}
\\
{
<b f'>2
\once \override NoteColumn.force-hshift = #1.7
<b f'>2
}
>>
|
Hacer invisible un objeto con la propiedad ’transparent
Si se ajusta la propiedad transparent de un objeto, se imprime
en “tinta invisible”: el objeto no se imprime pero se retienen
todos sus otros comportamientos. El objeto aún ocupa espacio,
participa en las colisiones y se le pueden unir ligaduras de
expresión, ligaduras de unión y barras de corchea.
Este fragmento de código muestra cómo conectar diferentes voces usando
ligaduras de unión. Normalmente las ligaduras de unión solamente
conectan dos notas que estén en la misma voz. Mediante la
introducción de una ligadura en una voz distinta y pintando de color
blanco la primera plica hacia arriba dentro de esa voz, la ligadura
parece cruzar de una voz a otra.
| | \relative {
\time 2/4
<<
{
\once \hide Stem
\once \override Stem.length = #8
b'8 ~ 8\noBeam
\once \hide Stem
\once \override Stem.length = #8
g8 ~ 8\noBeam
}
\\
{
b8 g g e
}
>>
}
|
Desplazar las notas con puntillo en polifonía
Cuando se puede una nota en la voz superior para evitar la colisión
con una nota de otra voz, el comportamiento predeterminado es
desplazar la nota superior a la derecha. Se puede cambiar usando la
propiedad prefer-dotted-right de NoteCollision.
| | \new Staff \relative c' <<
{
f2. f4
\override Staff.NoteCollision.prefer-dotted-right = ##f
f2. f4
\override Staff.NoteCollision.prefer-dotted-right = ##t
f2. f4
}
\\
{ e4 e e e e e e e e e e e }
>>
|
Evitar las advertencias sobre columnas de notas que chocan
Si se colocan sobre la misma posición notas de dos voces distintas con
las plicas en la misma dirección, y ninguna de las voces tiene un
desplazamiento o ambas tienen el mismo desplazamiento, aparece el
mensaje de error ‘advertencia: demasiadas columnas de notas en
colisión; se ignora’ aparece al compilar el archivo de LilyPond. Este
mensaje se puede evitar fijando la propiedad 'ignore-collision
del objero NoteColumn al valor #t. Observe que esto no
elimina solamente las advertencias, sino que hace que LilyPond deje de
intentar resolver las colisiones en absoluto, por lo que pueden
obtenerse resultados distintos de los esperados si no se usa con
prudencia.
| | ignore = \override NoteColumn.ignore-collision = ##t
\relative c' {
\new Staff <<
\new Voice { \ignore \stemDown f2 g }
\new Voice { c2 \stemDown c, }
>>
}
|
Two \partCombine pairs on one staff
The \partCombine function takes two music expressions each
containing a part, and distributes them among four Voices named
“two” “one” “solo” and “chords” depending on when and how
the parts merged into a common voice. The voices output from
\partCombine can have their layout properties adjusted in the
usual way. Here we define extensions of \partCombine to make
it easier to put four voices on a staff.
soprano = { d’4 | cis’ b e’ d’8 cis’ | cis’2 b } alto = { fis4 |
e8 fis gis ais b4 b | b ais fis2 } tenor = { a8 b | cis’ dis’ e’4 b8
cis’ d’4 | gis cis’ dis’2 } bass = { fis8 gis | a4 gis g fis | eis
fis b,2 }
\new Staff <<
\key b\minor
\clef alto
\partial 4
\transpose b b’
\partCombineUp \soprano \alto
\partCombineDown \tenor \bass >>
| | \layout {
\context {
\Staff
\accepts "VoiceBox"
}
\context {
\name "VoiceBox"
\type "Engraver_group"
\defaultchild "Voice"
\accepts "Voice"
\accepts "NullVoice"
}
}
customPartCombineUp =
#(define-music-function (partOne partTwo)
(ly:music? ly:music?)
"Take the music in @var{partOne} and @var{partTwo} and return
a @code{VoiceBox} named @q{Up} containing @code{Voice}s
that contain @var{partOne} and @var{partTwo} merged into one
voice where feasible. This variant sets the default voicing
in the output to use upward stems."
#{
\new VoiceBox = "Up" <<
\context Voice = "one" { \voiceOne }
\context Voice = "two" { \voiceThree }
\context Voice = "shared" { \voiceOne }
\context Voice = "solo" { \voiceOne }
\context NullVoice = "null" {}
\partCombine #partOne #partTwo
>>
#})
customPartCombineDown = #
(define-music-function (partOne partTwo)
(ly:music? ly:music?)
"Take the music in @var{partOne} and @var{partTwo} and return
a @code{VoiceBox} named @q{Down} containing @code{Voice}s
that contain @var{partOne} and @var{partTwo} merged into one
voice where feasible. This variant sets the default voicing
in the output to use downward stems."
#{
\new VoiceBox = "Down" <<
\set VoiceBox.soloText = #"Solo III"
\set VoiceBox.soloIIText = #"Solo IV"
\context Voice ="one" { \voiceFour }
\context Voice ="two" { \voiceTwo }
\context Voice ="shared" { \voiceFour }
\context Voice ="solo" { \voiceFour }
\context NullVoice = "null" {}
\partCombine #partOne #partTwo
>>
#})
soprano = { d'4 | cis' b e' d'8 cis' | cis'2 b }
alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 }
tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 }
bass = { fis8 gis | a4 gis g fis | eis fis b,2 }
\new Staff <<
\key b\minor
\clef alto
\partial 4
\transpose b b'
\customPartCombineUp \soprano \alto
\customPartCombineDown \tenor \bass
>>
|
Staff notation
Staff notation
Añadir un ámbito por voz
Se puede añadir un ámbito por cada voz. En este caso, el ámbito se
debe desplazar manualmente para evitar colisiones.
| | \new Staff <<
\new Voice \with {
\consists "Ambitus_engraver"
} \relative c'' {
\override Ambitus.X-offset = #2.0
\voiceOne
c4 a d e
f1
}
\new Voice \with {
\consists "Ambitus_engraver"
} \relative c' {
\voiceTwo
es4 f g as
b1
}
>>
|
Añadir un pentagrama adicional en un salto de línea
Al añadir un pentagrama nuevo en un salto de línea, por desgracia
se añade un espacio adicional al final de la línea antes del salto
(reservado para hacer sitio a un cambio de armadura que de todas
formas no se va a imprimir). La solución alternativa es añadir un
ajuste para Staff.explicitKeySignatureVisibility como se
muestra en el ejemplo.
| | \score {
\new StaffGroup \relative c'' {
\new Staff
\key f \major
c1 c^"Unwanted extra space" \break
<< { c1 | c }
\new Staff {
\key f \major
\once \omit Staff.TimeSignature
c1 | c
}
>>
c1 | c^"Fixed here" \break
<< { c1 | c }
\new Staff {
\once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible
\key f \major
\once \omit Staff.TimeSignature
c1 | c
}
>>
}
}
|
Añadir un pentagrama nuevo
Se puede añadir (posiblemente de forma temporal) un pentagrama
nuevo una vez que la pieza ha comenzado.
| | \score {
<<
\new Staff \relative c'' {
c1 | c | c | c | c
}
\new StaffGroup \relative c'' {
\new Staff {
c1 | c
<<
{
c1 | d
}
\new Staff {
\once \omit Staff.TimeSignature
c1 | b
}
>>
c1
}
}
>>
}
|
Añadir indicadoes a los pentagramas que se dividen después de un salto de línea
Este fragmento de código define las instrucciones
\splitStaffBarLine, convUpStaffBarLine y
convDownStaffBarLine, que añaden flechas en las sobre una línea
divisoria, para denotar que cada una de las voces que comparten un
pentagrama continúan en su propio pentagrama en el siguiente sistema,
o que las voces así divididas se recombinan.
| | #(define-markup-command (arrow-at-angle layout props angle-deg length fill)
(number? number? boolean?)
(let* (
(PI-OVER-180 (/ (atan 1 1) 34))
(degrees->radians (lambda (degrees) (* degrees PI-OVER-180)))
(angle-rad (degrees->radians angle-deg))
(target-x (* length (cos angle-rad)))
(target-y (* length (sin angle-rad))))
(interpret-markup layout props
(markup
#:translate (cons (/ target-x 2) (/ target-y 2))
#:rotate angle-deg
#:translate (cons (/ length -2) 0)
#:concat (#:draw-line (cons length 0)
#:arrow-head X RIGHT fill)))))
splitStaffBarLineMarkup = \markup \with-dimensions #'(0 . 0) #'(0 . 0) {
\combine
\arrow-at-angle #45 #(sqrt 8) ##t
\arrow-at-angle #-45 #(sqrt 8) ##t
}
splitStaffBarLine = {
\once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob splitStaffBarLineMarkup)
0))
\break
}
convDownStaffBarLine = {
\once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob #{
\markup\with-dimensions #'(0 . 0) #'(0 . 0) {
\translate #'(0 . -.13)\arrow-at-angle #-45 #(sqrt 8) ##t
}#})
0))
\break
}
convUpStaffBarLine = {
\once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob #{
\markup\with-dimensions #'(0 . 0) #'(0 . 0) {
\translate #'(0 . .14)\arrow-at-angle #45 #(sqrt 8) ##t
}#})
0))
\break
}
\paper {
ragged-right = ##t
short-indent = 10\mm
}
separateSopranos = {
\set Staff.instrumentName = "AI AII"
\set Staff.shortInstrumentName = "AI AII"
\splitStaffBarLine
\change Staff = "up"
}
convSopranos = {
\convDownStaffBarLine
\change Staff = "shared"
\set Staff.instrumentName = "S A"
\set Staff.shortInstrumentName = "S A"
}
sI = {
\voiceOne
\repeat unfold 4 f''2
\separateSopranos
\repeat unfold 4 g''2
\convSopranos
\repeat unfold 4 c''2
}
sII = {
s1*2
\voiceTwo
\change Staff = "up"
\repeat unfold 4 d''2
}
aI = {
\voiceTwo
\repeat unfold 4 a'2
\voiceOne
\repeat unfold 4 b'2
\convUpStaffBarLine
\voiceTwo
\repeat unfold 4 g'2
}
aII = {
s1*2
\voiceTwo
\repeat unfold 4 g'2
}
ten = {
\voiceOne
\repeat unfold 4 c'2
\repeat unfold 4 d'2
\repeat unfold 4 c'2
}
bas = {
\voiceTwo
\repeat unfold 4 f2
\repeat unfold 4 g2
\repeat unfold 4 c2
}
\score {
<<
\new ChoirStaff <<
\new Staff = up \with {
instrumentName = "SI SII"
shortInstrumentName = "SI SII"
} {
s1*4
}
\new Staff = shared \with {
instrumentName = "S A"
shortInstrumentName = "S A"
} <<
\new Voice = sopI \sI
\new Voice = sopII \sII
\new Voice = altI \aI
\new Voice = altII \aII
>>
\new Lyrics \with {
alignBelowContext = up
}
\lyricsto sopII { e f g h }
\new Lyrics \lyricsto altI { a b c d e f g h i j k l }
\new Staff = men \with {
instrumentName = "T B"
shortInstrumentName = "T B"
} <<
\clef F
\new Voice = ten \ten
\new Voice = bas \bas
>>
\new Lyrics \lyricsto bas { a b c d e f g h i j k l }
>>
>>
\layout {
\context {
\Staff \RemoveEmptyStaves
\override VerticalAxisGroup.remove-first = ##t
}
}
}
|
Añadir notas guía orquestales a una partitura vocal
Este ejemplo muestra una forma de simplificar la adición de muchas
notas guía orquestales a la reducción de piano en una partitura vocal.
La función musical \cueWhile toma cuatro argumentos: la música
de la que se toma la cita, como viene definida por \addQuote,
el nombre que insertar antes de las notas guía, y después #UP o
#DOWN para especificar \voiceOne con el nombre encima
del pentagrama o bien \voiceTwo con el nombre debajo del
pentagrama, y finalmente la música de piano con la que las notas guía
deben aparecer en paralelo. El nombre del instrumento citado se
posiciona a la izquierda de las notas guía. Se pueden citar muchos
pasajes como guía, pero no se pueden superponer en el tiempo entre
ellos.
| | cueWhile =
#(define-music-function
(instrument name dir music)
(string? string? ly:dir? ly:music?)
#{
\cueDuring $instrument #dir {
\once \override TextScript.self-alignment-X = #RIGHT
\once \override TextScript.direction = $dir
<>-\markup { \tiny #name }
$music
}
#})
flute = \relative c'' {
\transposition c'
s4 s4 e g
}
\addQuote "flute" { \flute }
clarinet = \relative c' {
\transposition bes
fis4 d d c
}
\addQuote "clarinet" { \clarinet }
singer = \relative c'' { c4. g8 g4 bes4 }
words = \lyricmode { here's the lyr -- ics }
pianoRH = \relative c'' {
\transposition c'
\cueWhile "clarinet" "Clar." #DOWN { c4. g8 }
\cueWhile "flute" "Flute" #UP { g4 bes4 }
}
pianoLH = \relative c { c4 <c' e> e, <g c> }
\score {
<<
\new Staff {
\new Voice = "singer" {
\singer
}
}
\new Lyrics {
\lyricsto "singer"
\words
}
\new PianoStaff <<
\new Staff {
\new Voice {
\pianoRH
}
}
\new Staff {
\clef "bass"
\pianoLH
}
>>
>>
}
|
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 |
}
|
Numeración de compases alternativa
Se pueden seleccionar dos métodos alternativos para la numeración de
compases, especiales para cuando hay repeticiones.
| | \relative c'{
\set Score.alternativeNumberingStyle = #'numbers
\repeat volta 3 { c4 d e f | }
\alternative {
{ c4 d e f | c2 d \break }
{ f4 g a b | f4 g a b | f2 a | \break }
{ c4 d e f | c2 d }
}
c1 \break
\set Score.alternativeNumberingStyle = #'numbers-with-letters
\repeat volta 3 { c,4 d e f | }
\alternative {
{ c4 d e f | c2 d \break }
{ f4 g a b | f4 g a b | f2 a | \break }
{ c4 d e f | c2 d }
}
c1
}
|
Números de compás centrados
Con frecuencia, las partituras de obras para conjuntos grandes tienen
los números de compás debajo del sistema y centrados horizontalmente
sobre el ancho del compás. Este fragmento de código muestra cómo
puede usarse el grabador Measure_counter_engraver para simular
esta práctica notacional. Aquí hemos añadido el grabador a un
contexto Dynamics.
| | \layout {
\context {
\Dynamics
\consists #Measure_counter_engraver
\override MeasureCounter.direction = #DOWN
\override MeasureCounter.font-encoding = #'latin1
\override MeasureCounter.font-shape = #'italic
% to control the distance of the Dynamics context from the staff:
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
}
\context {
\Score
\remove "Bar_number_engraver"
}
}
pattern = \repeat unfold 7 { c'4 d' e' f' }
\new StaffGroup <<
\new Staff {
\pattern
}
\new Staff {
\pattern
}
\new Dynamics {
\startMeasureCount
s1*7
\stopMeasureCount
}
>>
|
Changing the default bar lines
Default bar lines can be changed when re-defined in a score context.
| | % http://lsr.di.unimi.it/LSR/Item?id=964
%%=> http://lists.gnu.org/archive/html/lilypond-user/2014-03/msg00126.html
%%=> https://lilypond.1069038.n5.nabble.com/Changing-the-default-end-repeat-bracket-tc169357.html
\layout {
\context {
\Score
%% Changing the defaults from engraver-init.ly
defaultBarType = #"!"
startRepeatType = #"[|:"
endRepeatType = #":|]"
doubleRepeatType = #":|][|:"
}
}
%% example:
{
c'1
\repeat volta 2 { \repeat unfold 2 c' }
\repeat volta 2 { \repeat unfold 2 c' }
\alternative {
{ c' }
{
%% v2.18 workaround
\once\override Score.VoltaBracket.shorten-pair = #'(1 . -1)
c'
}
}
\bar "|."
}
|
Cambiar el número de líneas de una pauta
El número de líneas de una pauta se puede modificar sobreescribiendo
la propiedad line-count del objeto StaffSymbol.
| | upper = \relative c'' {
c4 d e f
}
lower = \relative c {
\clef bass
c4 b a g
}
\score {
\context PianoStaff <<
\new Staff {
\upper
}
\new Staff {
\override Staff.StaffSymbol.line-count = #4
\lower
}
>>
}
|
Modificar el tamaño de la pauta
Aunque la manera más sencilla de redimensionar los pentagramas es usar
#(set-global-staff-size xx), el tamaño de una pauta individual
se puede cambiar escalando las propiedades de 'staff-space y de
fontSize.
| | <<
\new Staff {
\relative c'' {
\dynamicDown
c8\ff c c c c c c c
}
}
\new Staff \with {
fontSize = #-3
\override StaffSymbol.staff-space = #(magstep -3)
} {
\clef bass
c8 c c c c\f c c c
}
>>
|
Crear pentagramas en blanco
Para crear pentagramas en blanco, genere compases vacíos y después
elimine el grabador de números de compás Bar_number_engraver
del contexto Score, y los grabadores de la indicación de compás
Time_signature_engraver, de la clave Clef_engraver y de
los compases Bar_engraver del contexto de Staff.
| | #(set-global-staff-size 20)
\score {
{
\repeat unfold 12 { s1 \break }
}
\layout {
indent = 0\in
\context {
\Staff
\remove "Time_signature_engraver"
\remove "Clef_engraver"
\remove "Bar_engraver"
}
\context {
\Score
\remove "Bar_number_engraver"
}
}
}
% uncomment these lines for "letter" size
%{
\paper {
#(set-paper-size "letter")
ragged-last-bottom = ##f
line-width = 7.5\in
left-margin = 0.5\in
bottom-margin = 0.25\in
top-margin = 0.25\in
}
%}
% uncomment these lines for "A4" size
%{
\paper {
#(set-paper-size "a4")
ragged-last-bottom = ##f
line-width = 180
left-margin = 15
bottom-margin = 10
top-margin = 10
}
%}
|
Creating custom key signatures
LilyPond supports custom key signatures. In this example, print for D
minor with an extended range of printed flats.
| | \new Staff \with {
\override StaffSymbol.line-count = #8
\override KeySignature.flat-positions = #'((-7 . 6))
\override KeyCancellation.flat-positions = #'((-7 . 6))
% presumably sharps are also printed in both octaves
\override KeySignature.sharp-positions = #'((-6 . 7))
\override KeyCancellation.sharp-positions = #'((-6 . 7))
\override Clef.stencil = #
(lambda (grob)(grob-interpret-markup grob
#{ \markup\combine
\musicglyph "clefs.C"
\translate #'(-3 . -2)
\musicglyph "clefs.F"
#}))
clefPosition = #3
middleCPosition = #3
middleCClefPosition = #3
}
{
\key d\minor
f bes, f bes,
}
|
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
}
|
Plicas de pentagrama cruzado
Este fragmento de código muestra el uso del grabador
Span_stem_engraver y de \crossStaff para conectar
automáticamente plicas de un pentagrama a otro. No es necesario
especificar la longitud de la plica porque la distancia variable entre
las cabezas de las notas y los pentagramas se calcula automáticamente.
| | \layout {
\context {
\PianoStaff
\consists #Span_stem_engraver
}
}
{
\new PianoStaff <<
\new Staff {
<b d'>4 r d'16\> e'8. g8 r\!
e'8 f' g'4 e'2
}
\new Staff {
\clef bass
\voiceOne
\autoBeamOff
\crossStaff { <e g>4 e, g16 a8. c8} d
\autoBeamOn
g8 f g4 c2
}
>>
}
|
Mostrar corchete o llave en grupos de un solo pentagrama
Si hay un solo pentagrama en un de los tipos de sistema
ChoirStaff o StaffGroup, el comportamiento
predeterminado es que no se imprima el corchete en la barra inicial.
Esto se puede cambiar sobreescribiendo collapse-height para
fijar su valor de manera que sea menor que el número de líneas en la
pauta.
Observe que en contextos como PianoStaff y
GrandStaff en que los sistemas empiezan con una llave en
lugar de un corchete, se debe establecer el valor de una propiedad
distinta, como se ve en el segundo sistema del ejemplo.
| | \score {
\new StaffGroup <<
% Must be lower than the actual number of staff lines
\override StaffGroup.SystemStartBracket.collapse-height = #4
\override Score.SystemStartBar.collapse-height = #4
\new Staff {
c'1
}
>>
}
\score {
\new PianoStaff <<
\override PianoStaff.SystemStartBrace.collapse-height = #4
\override Score.SystemStartBar.collapse-height = #4
\new Staff {
c'1
}
>>
}
|
Extending a TrillSpanner
For TrillSpanner, the minimum-length property becomes
effective only if the set-spacing-rods procedure is called
explicitly. To do this, the springs-and-rods property should be
set to ly:spanner::set-spacing-rods.
| | \relative c' {
\key c\minor
\time 2/4
c16( as') c,-. des-.
\once\override TrillSpanner.minimum-length = #15
\once\override TrillSpanner.springs-and-rods = #ly:spanner::set-spacing-rods
\afterGrace es4
\startTrillSpan { d16[( \stopTrillSpan es)] }
c( c' g es c g' es d
\hideNotes
c8)
}
|
Extender glissandos sobre repeticiones
Se puede simular un glissando que se extiende hasta el interior de
varios bloques \alternative de primera y segunda vez mediante
la adición de una nota de adorno oculta con un glissando al comienzo
de cada bloque \alternative. La nota de adorno debe estar a la
misma altura que la nota que da inicio al primer glissando. Esto se
implementa aquí con una función musical que toma como argumento la
altura de la nota de adorno.
Observe que en música polifónica la nota de adorno debe coincidir con
las notas de adorno correspondientes en todas las otras voces.
| | repeatGliss = #(define-music-function (grace)
(ly:pitch?)
#{
% the next two lines ensure the glissando is long enough
% to be visible
\once \override Glissando.springs-and-rods
= #ly:spanner::set-spacing-rods
\once \override Glissando.minimum-length = #3.5
\once \hideNotes
\grace $grace \glissando
#})
\score {
\relative c'' {
\repeat volta 3 { c4 d e f\glissando }
\alternative {
{ g2 d }
{ \repeatGliss f g2 e }
{ \repeatGliss f e2 d }
}
}
}
music = \relative c' {
\voiceOne
\repeat volta 2 {
g a b c\glissando
}
\alternative {
{ d1 }
{ \repeatGliss c \once \omit StringNumber e1\2 }
}
}
\score {
\new StaffGroup <<
\new Staff <<
\context Voice { \clef "G_8" \music }
>>
\new TabStaff <<
\context TabVoice { \clef "moderntab" \music }
>>
>>
}
|
Flat Ties
The function takes the default Tie.stencil as an argument,
calculating the result relying on the extents of this default. Further
tweaking is possible by overriding Tie.details.height-limit or
with \shape. It’s also possible to change the custom-definition
on the fly.
| | %% http://lsr.di.unimi.it/LSR/Item?id=1031
#(define ((flared-tie coords) grob)
(define (pair-to-list pair)
(list (car pair) (cdr pair)))
(define (normalize-coords goods x y dir)
(map
(lambda (coord)
;(coord-scale coord (cons x (* y dir)))
(cons (* x (car coord)) (* y dir (cdr coord))))
goods))
(define (my-c-p-s points thick)
(make-connected-path-stencil
points
thick
1.0
1.0
#f
#f))
;; outer let to trigger suicide
(let ((sten (ly:tie::print grob)))
(if (grob::is-live? grob)
(let* ((layout (ly:grob-layout grob))
(line-thickness (ly:output-def-lookup layout 'line-thickness))
(thickness (ly:grob-property grob 'thickness 0.1))
(used-thick (* line-thickness thickness))
(dir (ly:grob-property grob 'direction))
(xex (ly:stencil-extent sten X))
(yex (ly:stencil-extent sten Y))
(lenx (interval-length xex))
(leny (interval-length yex))
(xtrans (car xex))
(ytrans (if (> dir 0)(car yex) (cdr yex)))
(uplist
(map pair-to-list
(normalize-coords coords lenx (* leny 2) dir))))
(ly:stencil-translate
(my-c-p-s uplist used-thick)
(cons xtrans ytrans)))
'())))
#(define flare-tie
(flared-tie '((0 . 0)(0.1 . 0.2) (0.9 . 0.2) (1.0 . 0.0))))
\layout {
\context {
\Voice
\override Tie.stencil = #flare-tie
}
}
\paper { ragged-right = ##f }
\relative c' {
a4~a
\override Tie.height-limit = 4
a'4~a
a'4~a
<a,, c e a c e a c e>~ q
\break
a'4~a
\once \override Tie.details.height-limit = 14
a4~a
\break
a4~a
\once \override Tie.details.height-limit = 0.5
a4~a
\break
a4~a
\shape #'((0 . 0) (0 . 0.4) (0 . 0.4) (0 . 0)) Tie
a4~a
\break
a4~a
\once \override Tie.stencil =
#(flared-tie '((0 . 0)(0.1 . 0.4) (0.9 . 0.4) (1.0 . 0.0)))
a4~a
a4~a
\once \override Tie.stencil =
#(flared-tie '((0 . 0)(0.06 . 0.1) (0.94 . 0.1) (1.0 . 0.0)))
a4~a
}
|
Forzar la anchura de los compases para que se adapten a la anchura de las indicaciones metronómicas
De forma predeterminada, las indicaciones metronómicas no influyen el
espaciado horizontal. Esto se puede resolver por medio de una sencilla
sobreescritura, como puede verse en la segunda mitad del ejemplo.
| | example = {
\tempo "Allegro"
R1*6
\tempo "Rall."
R1*2
\tempo "A tempo"
R1*8
}
{
\compressMMRests {
\example
R1
R1
\override Score.MetronomeMark.extra-spacing-width = #'(-3 . 0)
\example
}
}
|
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,
}
|
Cómo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 1)
Este método imprime dos letras de ensayo, una encima de la otra,
desplaza la marca inferior a una posición debajo del pentagrama y
después añade un relleno sobre ella de forma que la marca superior se
sitúe encima del pentagrama.
Ajustando los valores de extra-offset y de baseline-skip podemos
aumentar o disminuir el espacio total entre la marca de ensayo y el
pentagrama.
Debido a que puede hacrse que prácticamente cualquier tipo de glifo o
cadena de caracteres se comporte como una marca de ensayo, es posible
centrarlas encima y debajo de una barra de compás.
Añadiendo la propiedad ’break visibility’ (visibilidad en caso de
salto) adecuada como se muestra en el ejemplo número 1, podemos
también posicionar las dos marcas al final de una línea.
Nota: el método 1 es menos complejo que el método 2 pero realmente no
permite un ajuste fino de la colocación de una de las marcas de ensayo
sin afectar a la otra. También puede dar algunos problemas con el
espaciado vertical, porque el uso de extra-offset no cambia la
caja circundante de la letra de ensayo desde su valor original.
| | \relative c'{
c d e f |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \circle 1 \box A }
g f e d |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \flat { \bold \small \italic Fine. } }
g f e d |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
\mark \markup \center-column { \fermata \box z }
}
|
Cömo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 2)
Este método imprime dos ’letras de ensayo’: una sobre el pentagrama y
otra debajo, creando dos voces, añadiendo el grabador Rehearsal Mark a
cada unad e las voces (sin esto no se imprime ninguna marca de ensayo)
y después poniendo cada marca de ensayo en las posiciones UP y DOWN en
cada voz respectivamente.
Este método (a diferencia del método 1) es más complejo, pero permite
más flexibilidad y sería necesario para trucar cada letra de ensayo
independientemente de las demás.
| | \score {
\relative c'
<<
\new Staff {
<<
\new Voice \with {
\consists Mark_engraver
\consists "Staff_collecting_engraver"
}
{ c4 d e f
\mark \markup { \box A }
c4 d e f
}
\new Voice \with {
\consists Mark_engraver
\consists "Staff_collecting_engraver"
\override RehearsalMark.direction = #DOWN
}
{ s4 s s s
\mark \markup { \circle 1 }
s4 s s s
}
>>
}
>>
\layout {
\context {
\Score
\remove "Mark_engraver"
\remove "Staff_collecting_engraver"
}
}
}
|
Incipit
Al transcribir música mensural, es útil poner un incipit al comienzo
de la pieza para indicar la tonalidad y el compás originales.
Actualmente los músicos están acostumbrados a las líneas del
pentagrama, pero en el período de la música mensural aún no se
utilizaban. Como compromiso, con frecuencia se imprimen líneas
divisorias entre los pentagramas, un estilo de diseño conocido como
mensurstriche.
| | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% A short excerpt from the Jubilate Deo by Orlande de Lassus
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\set Score.skipBars = ##t
\key g \major
\time 4/4
% the actual music
\skip 1*8
% let finis bar go through all staves
\override Staff.BarLine.transparent = ##f
% finis bar
\bar "|."
}
discantusIncipit = {
\clef "neomensural-c1"
\key f \major
\time 2/2
c''1.
}
discantusNotes = {
\transpose c' c'' {
\clef "treble"
d'2. d'4 |
b e' d'2 |
c'4 e'4.( d'8 c' b |
a4) b a2 |
b4.( c'8 d'4) c'4 |
\once \hide NoteHead
c'1 |
b\breve |
}
}
discantusLyrics = \lyricmode {
Ju -- bi -- la -- te De -- o,
om -- nis ter -- ra, __ om-
"..."
-us.
}
altusIncipit = {
\clef "neomensural-c3"
\key f \major
\time 2/2
r1 f'1.
}
altusNotes = {
\transpose c' c'' {
\clef "treble"
r2 g2. e4 fis g |
a2 g4 e |
fis g4.( fis16 e fis4) |
g1 |
\once \hide NoteHead
g1 |
g\breve |
}
}
altusLyrics = \lyricmode {
Ju -- bi -- la -- te
De -- o, om -- nis ter -- ra,
"..."
-us.
}
tenorIncipit = {
\clef "neomensural-c4"
\key f \major
\time 2/2
r\longa
r\breve
r1 c'1.
}
tenorNotes = {
\transpose c' c' {
\clef "treble_8"
R1 |
R1 |
R1 |
% two measures
r2 d'2. d'4 b e' |
\once \hide NoteHead
e'1 |
d'\breve |
}
}
tenorLyrics = \lyricmode {
Ju -- bi -- la -- te
"..."
-us.
}
bassusIncipit = {
\clef "mensural-f"
\key f \major
\time 2/2
r\maxima
f1.
}
bassusNotes = {
\transpose c' c' {
\clef "bass"
R1 |
R1 |
R1 |
R1 |
g2. e4 |
\once \hide NoteHead
e1 |
g\breve |
}
}
bassusLyrics = \lyricmode {
Ju -- bi-
"..."
-us.
}
\score {
<<
\new StaffGroup = choirStaff <<
\new Voice = "discantusNotes" <<
\set Staff.instrumentName = "Discantus"
\incipit \discantusIncipit
\global
\discantusNotes
>>
\new Lyrics \lyricsto discantusNotes { \discantusLyrics }
\new Voice = "altusNotes" <<
\set Staff.instrumentName = "Altus"
\global
\incipit \altusIncipit
\altusNotes
>>
\new Lyrics \lyricsto altusNotes { \altusLyrics }
\new Voice = "tenorNotes" <<
\set Staff.instrumentName = "Tenor"
\global
\incipit \tenorIncipit
\tenorNotes
>>
\new Lyrics \lyricsto tenorNotes { \tenorLyrics }
\new Voice = "bassusNotes" <<
\set Staff.instrumentName = "Bassus"
\global
\incipit \bassusIncipit
\bassusNotes
>>
\new Lyrics \lyricsto bassusNotes { \bassusLyrics }
>>
>>
\layout {
\context {
\Score
%% no bar lines in staves or lyrics
\hide BarLine
}
%% the next two instructions keep the lyrics between the bar lines
\context {
\Lyrics
\consists "Bar_engraver"
\consists "Separating_line_group_engraver"
}
\context {
\Voice
%% no slurs
\hide Slur
%% Comment in the below "\remove" command to allow line
%% breaking also at those bar lines where a note overlaps
%% into the next measure. The command is commented out in this
%% short example score, but especially for large scores, you
%% will typically yield better line breaking and thus improve
%% overall spacing if you comment in the following command.
%%\remove "Forbid_line_break_engraver"
}
indent = 6\cm
incipit-width = 4\cm
}
}
|
Insertar fragmentos de partituras sobre del pentagrama como elementos de marcado
La instrucción \markup es muy versátil. En este fragmento de
código, contiene un bloque \score con una partitura completa
en lugar de textos u otras marcas.
| | tuning = \markup {
\score {
\new Staff \with { \remove "Time_signature_engraver" }
{
\clef bass
<c, g, d g>1
}
\layout { ragged-right = ##t indent = 0\cm }
}
}
\header {
title = "Solo Cello Suites"
subtitle = "Suite IV"
subsubtitle = \markup { Originalstimmung: \raise #0.5 \tuning }
}
\layout { ragged-right = ##f }
\relative c'' {
\time 4/8
\tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
\tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
g8 a g a
g8 a g a
}
|
Let TabStaff print the topmost string at bottom
In tablatures usually the first string is printed topmost. If you want
to have it at the bottom change the
stringOneTopmost-context-property. For a context-wide setting
this could be done in layout as well.
| | %
%\layout {
% \context {
% \Score
% stringOneTopmost = ##f
% }
% \context {
% \TabStaff
% tablatureFormat = #fret-letter-tablature-format
% }
%}
m = {
\cadenzaOn
e, b, e gis! b e'
\bar "||"
}
<<
\new Staff { \clef "G_8" <>_"default" \m <>_"italian (historic)"\m }
\new TabStaff
{
\m
\set Score.stringOneTopmost = ##f
\set TabStaff.tablatureFormat = #fret-letter-tablature-format
\m
}
>>
|
Formateado de tablaturas con letras
La tablatura se puede formatear utilizando letras en lugar de números.
| | music = \relative c {
c4 d e f
g4 a b c
d4 e f g
}
<<
\new Staff {
\clef "G_8"
\music
}
\new TabStaff \with {
tablatureFormat = #fret-letter-tablature-format
}
{
\music
}
>>
|
Hacer que los glissandos se puedan dividir en el salto de línea
Si se ajusta la propiedad breakable al valor #t en
combinación con after-line-breaking, podemos hacer que un
glissando se divida en el salto de línea:
| | glissandoSkipOn = {
\override NoteColumn.glissando-skip = ##t
\hide NoteHead
\override NoteHead.no-ledgers = ##t
}
\relative c'' {
\override Glissando.breakable = ##t
\override Glissando.after-line-breaking = ##t
f1\glissando |
\break
a4 r2. |
f1\glissando
\once \glissandoSkipOn
\break
a2 a4 r4 |
}
|
Hacer unas líneas del pentagrama más gruesas que las otras
Se puede engrosar una línea del pentagrama con fines pedagógicos
(p.ej. la tercera línea o la de la clave de Sol). Esto se puede
conseguir añadiendo más líneas muy cerca de la línea que se quiere
destacar, utilizando la propiedad line-positions del objeto
StaffSymbol.
| | {
\override Staff.StaffSymbol.line-positions =
#'(-4 -2 -0.2 0 0.2 2 4)
d'4 e' f' g'
}
|
Contador de compases
Este fragmento de código proporciona una solución alternativa a la
producción de contadores de compás utilizando repeticiones
transparentes de tipo porcentaje.
| | <<
\context Voice = "foo" {
\clef bass
c4 r g r
c4 r g r
c4 r g r
c4 r g r
}
\context Voice = "foo" {
\set countPercentRepeats = ##t
\hide PercentRepeat
\override PercentRepeatCounter.staff-padding = #1
\repeat percent 4 { s1 }
}
>>
|
Disposición Mensurstriche (líneas divisorias entre pentagramas)
La disposición «mensurstriche» en que las líneas divisorias no
están dibujadas sobre los pentagramas, sino entre ellos, se puede
conseguir con un StaffGroup en vez de un ChoirStaff.
La línea divisoria sobre los pentagramas se borra usando \hide.
| | global = {
\hide Staff.BarLine
s1 s
% the final bar line is not interrupted
\undo \hide Staff.BarLine
\bar "|."
}
\new StaffGroup \relative c'' {
<<
\new Staff { << \global { c1 c } >> }
\new Staff { << \global { c c } >> }
>>
}
|
Modifying the Ottava spanner slope
It is possible to change the slope of the Ottava spanner.
| | \relative c'' {
\override Staff.OttavaBracket.stencil = #ly:line-spanner::print
\override Staff.OttavaBracket.bound-details =
#`((left . ((Y . 0) ; Change the integer here
(attach-dir . ,LEFT)
(padding . 0)
(stencil-align-dir-y . ,CENTER)))
(right . ((Y . 5) ; Change the integer here
(padding . 0)
(attach-dir . ,RIGHT)
(text . ,(make-draw-dashed-line-markup (cons 0 -1.2))))))
\override Staff.OttavaBracket.left-bound-info =
#ly:line-spanner::calc-left-bound-info-and-text
\override Staff.OttavaBracket.right-bound-info =
#ly:line-spanner::calc-right-bound-info
\ottava #1
c1
c'''1
}
|
Anidado de grupos de pentagramas
Se puede utilizar la propiedad
systemStartDelimiterHierarchy para crear grupos de
pentagramas anidados de forma más compleja. La instrucción
\set StaffGroup.systemStartDelimiterHierarchy toma una
lista alfabética del número de pentagramas producidos. Se puede
proporcionar antes de cada pentagrama un delimitador de comienzo
de sistema. Se debe encerrar entre corchetes y admite tantos
pentagramas como encierren las llaves. Se pueden omitir los
elementos de la lista, pero el primer corchete siempre abarca
todos los pentagramas. Las posibilidades son
SystemStartBar, SystemStartBracket,
SystemStartBrace y SystemStartSquare.
| | \new StaffGroup
\relative c'' <<
\override StaffGroup.SystemStartSquare.collapse-height = #4
\set StaffGroup.systemStartDelimiterHierarchy
= #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a
(SystemStartSquare b) ) c ) d)
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
>>
|
Armaduras de tonalidad no tradicionales
La muy utilizada instrucción \key establece la propiedad
keyAlterations dentro del contexto Staff. Para crear
armaduras de tonalidad no estándar, ajuste esta propiedad
directamente.
El formato de esta instrucción es una lista:
\set Staff.keyAlterations = #`(((octava . paso) . alteración)
((octava . paso) . alteración) ...)
donde, para cada elemento dentro de la lista, octava especifica
la octava (siendo cero la octava desde el Do central hasta
el Si por encima), paso especifica la nota dentro de la octava
(cero significa Do y 6 significa Si), y
alteración es ,SHARP ,FLAT ,DOUBLE-SHARP etc.
De forma alternativa, el uso del formato más conciso (paso
. alteración) para cada elemento de la lista especifica que la misma
alteración debe estar en todas las octavas. Para escalas microtonales
en las que un “sostenido” no son 100 cents, alteración se
refiere a la proporción de un tono entero de 200 cents.
| | \include "arabic.ly"
\relative do' {
\set Staff.keyAlterations = #`((0 . ,SEMI-FLAT)
(1 . ,SEMI-FLAT)
(2 . ,FLAT)
(5 . ,FLAT)
(6 . ,SEMI-FLAT))
%\set Staff.extraNatural = ##f
re reb \dwn reb resd
dod dob dosd \dwn dob |
dobsb dodsd do do |
}
|
Numerar grupos de compases
Este fragmento de código muestra el uso del grabador
Measure_counter_engraver para numerar grupos de compases
sucesivos. Se puede numerar cualquier período de compases tanto si
tiene repeticiones como si no.
Se debe añadir el grabador al contexto adecuado. Aquí se usa un
contexto Staff; otra posibilidad sería un contexto
Dynamics.
El contador se inicia con \startMeasureCount y finaliza con
\stopMeasureCount. La numeración comienza con 1, de
forma predeterminada, pero se puede modificar este comportamiento
sobreescribiendo la propiedad count-from.
Cuando un compás se extiende más allá de un salto de línea, el número
aparece dos veces, la segunda vez entre paréntesis.
| | \layout {
\context {
\Staff
\consists #Measure_counter_engraver
}
}
\new Staff {
\startMeasureCount
\repeat unfold 7 {
c'4 d' e' f'
}
\stopMeasureCount
\bar "||"
g'4 f' e' d'
\override Staff.MeasureCounter.count-from = #2
\startMeasureCount
\repeat unfold 5 {
g'4 f' e' d'
}
g'4 f'
\bar ""
\break
e'4 d'
\repeat unfold 7 {
g'4 f' e' d'
}
\stopMeasureCount
}
|
Plantilla de orquesta con coro y piano
Esta plantilla muestra el uso de contextos StaffGroup y
GrandStaff anidados para sub-agrupar instrumentos del mismo
tipo, y una forma de usar \transpose de manera que unas
variables contengan la música para instrumentos transpositores en
afinación de concierto.
| | #(set-global-staff-size 17)
\paper {
indent = 3.0\cm % add space for instrumentName
short-indent = 1.5\cm % add less space for shortInstrumentName
}
fluteMusic = \relative c' { \key g \major g'1 b }
% Pitches as written on a manuscript for Clarinet in A
% are transposed to concert pitch.
clarinetMusic = \transpose c' a
\relative c'' { \key bes \major bes1 d }
trumpetMusic = \relative c { \key g \major g''1 b }
% Key signature is often omitted for horns
hornMusic = \transpose c' f
\relative c { d'1 fis }
percussionMusic = \relative c { \key g \major g1 b }
sopranoMusic = \relative c'' { \key g \major g'1 b }
sopranoLyrics = \lyricmode { Lyr -- ics }
altoIMusic = \relative c' { \key g \major g'1 b }
altoIIMusic = \relative c' { \key g \major g'1 b }
altoILyrics = \sopranoLyrics
altoIILyrics = \lyricmode { Ah -- ah }
tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b }
tenorLyrics = \sopranoLyrics
pianoRHMusic = \relative c { \key g \major g''1 b }
pianoLHMusic = \relative c { \clef bass \key g \major g1 b }
violinIMusic = \relative c' { \key g \major g'1 b }
violinIIMusic = \relative c' { \key g \major g'1 b }
violaMusic = \relative c { \clef alto \key g \major g'1 b }
celloMusic = \relative c { \clef bass \key g \major g1 b }
bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b }
\score {
<<
\new StaffGroup = "StaffGroup_woodwinds" <<
\new Staff = "Staff_flute" \with { instrumentName = "Flute" }
\fluteMusic
\new Staff = "Staff_clarinet" \with {
instrumentName = \markup { \concat { "Clarinet in B" \flat } }
}
% Declare that written Middle C in the music
% to follow sounds a concert B flat, for
% output using sounded pitches such as MIDI.
%\transposition bes
% Print music for a B-flat clarinet
\transpose bes c' \clarinetMusic
>>
\new StaffGroup = "StaffGroup_brass" <<
\new Staff = "Staff_hornI" \with { instrumentName = "Horn in F" }
% \transposition f
\transpose f c' \hornMusic
\new Staff = "Staff_trumpet" \with { instrumentName = "Trumpet in C" }
\trumpetMusic
>>
\new RhythmicStaff = "RhythmicStaff_percussion"
\with { instrumentName = "Percussion" }
<<
\percussionMusic
>>
\new PianoStaff \with { instrumentName = "Piano" }
<<
\new Staff { \pianoRHMusic }
\new Staff { \pianoLHMusic }
>>
\new ChoirStaff = "ChoirStaff_choir" <<
\new Staff = "Staff_soprano" \with { instrumentName = "Soprano" }
\new Voice = "soprano"
\sopranoMusic
\new Lyrics \lyricsto "soprano" { \sopranoLyrics }
\new GrandStaff = "GrandStaff_altos"
\with { \accepts Lyrics } <<
\new Staff = "Staff_altoI" \with { instrumentName = "Alto I" }
\new Voice = "altoI"
\altoIMusic
\new Lyrics \lyricsto "altoI" { \altoILyrics }
\new Staff = "Staff_altoII" \with { instrumentName = "Alto II" }
\new Voice = "altoII"
\altoIIMusic
\new Lyrics \lyricsto "altoII" { \altoIILyrics }
>>
\new Staff = "Staff_tenor" \with { instrumentName = "Tenor" }
\new Voice = "tenor"
\tenorMusic
\new Lyrics \lyricsto "tenor" { \tenorLyrics }
>>
\new StaffGroup = "StaffGroup_strings" <<
\new GrandStaff = "GrandStaff_violins" <<
\new Staff = "Staff_violinI" \with { instrumentName = "Violin I" }
\violinIMusic
\new Staff = "Staff_violinII" \with { instrumentName = "Violin II" }
\violinIIMusic
>>
\new Staff = "Staff_viola" \with { instrumentName = "Viola" }
\violaMusic
\new Staff = "Staff_cello" \with { instrumentName = "Cello" }
\celloMusic
\new Staff = "Staff_bass" \with { instrumentName = "Double Bass" }
\bassMusic
>>
>>
\layout { }
}
|
Putting lyrics inside the staff
Se pueden mover las líneas de letra verticalmente para imprimirlas
dentro del pentagrama. Las letras se mueven con \override
LyricText.extra-offset = #'(0 . dy) y hay instrucciones similares
para mover las líneas extensoras y los guiones. El desplazamiento
necesario se establece mediante un proceso de ensayo y error.
| | <<
\new Staff <<
\new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 }
>>
\new Lyrics \with {
\override LyricText.extra-offset = #'(0 . 8.6)
\override LyricExtender.extra-offset = #'(0 . 8.6)
\override LyricHyphen.extra-offset = #'(0 . 8.6)
} \lyricsto "voc" { La la -- la __ _ la }
>>
|
Citar otra voz con transposición
Los pasajes citados tienen en cuenta la transposición de la fuente
tanto como la del destino. En este ejemplo, todos los instrumentos
interpretan una nota con el sonido del Do central; el destino de un
instrumento transpositor en Fa. La parte de destino se puede
transportar utilizando \transpose. En este caso las notas
citadas permanecen sin cambios.
| | \addQuote clarinet {
\transposition bes
\repeat unfold 8 { d'16 d' d'8 }
}
\addQuote sax {
\transposition es'
\repeat unfold 16 { a8 }
}
quoteTest = {
% french horn
\transposition f
g'4
<< \quoteDuring "clarinet" { \skip 4 } s4^"clar." >>
<< \quoteDuring "sax" { \skip 4 } s4^"sax." >>
g'4
}
{
\new Staff \with {
instrumentName = \markup { \column { Horn "in F" } }
}
\quoteTest
\transpose c' d' << \quoteTest s4_"up a tone" >>
}
|
Citar otra voz
La propiedad quotedEventTypes determina los tipos de eventos
musicales que resultan citados. El valor predeterminado es
(note-event rest-event tie-event beam-event tuplet-span-event),
que significa que sólo aparecen en la expresión \quoteDuring
las notas, silencios, ligaduras, barras y grupos especiales. En el
ejemplo siguiente, el silencio de semicorchea no aparece en el
fragmento citado porque rest-event no está dentro de los
quotedEventTypes.
Para ver una lista de los tipos de evento, consulte la sección
“Music classes” de la Referencia de funcionamiento interno.
| | quoteMe = \relative c' {
fis4 r16 a8.-> b4\ff c
}
\addQuote quoteMe \quoteMe
original = \relative c'' {
c8 d s2
\once \override NoteColumn.ignore-collision = ##t
es8 gis8
}
<<
\new Staff \with { instrumentName = "quoteMe" }
\quoteMe
\new Staff \with { instrumentName = "orig" }
\original
\new Staff \with {
instrumentName = "orig+quote"
quotedEventTypes = #'(note-event articulation-event)
}
\relative c''
<<
\original
\new Voice {
s4
\set fontSize = #-4
\override Stem.length-fraction = #(magstep -4)
\quoteDuring "quoteMe" { \skip 2. }
}
>>
>>
|
Removing brace on first line of piano score
This snippet removes the first brace from a PianoStaff or a
GrandStaff. It may be useful when cutting and pasting the
engraved image into existing music.
It uses \alterBroken.
| | someMusic = {
\once \override Staff.Clef.stencil = ##f
\once \override Staff.TimeSignature.stencil = ##f
\repeat unfold 3 c1 \break
\repeat unfold 5 c1 \break
\repeat unfold 5 c1
}
\score {
\new PianoStaff
<<
\new Staff = "right" \relative c'' \someMusic
\new Staff = "left" \relative c' { \clef F \someMusic }
>>
\layout {
indent=75
\context {
\PianoStaff
\alterBroken transparent #'(#t) SystemStartBrace
}
}
}
|
Quitar la primera línea vacía
El primer pentagrama vacío también se puede suprimir de la
partitura estableciendo la propiedad remove-first de
VerticalAxisGroup. Esto se puede hacer globalmente dentro
del bloque \layout, o localmente dentro del pentagrama
concreto que se quiere suprimir. En este último caso, tenemos que
especificar el contexto (Staff se aplica sólo al pentagrama
actual) delante de la propiedad.
El pentagrama inferior del segundo grupo no se elimina, porque el
ajuste sólo se aplica al pentagrama concreto dentro del que se
escribe.
| | \layout {
\context {
\Staff \RemoveEmptyStaves
% To use the setting globally, uncomment the following line:
% \override VerticalAxisGroup.remove-first = ##t
}
}
\new StaffGroup <<
\new Staff \relative c' {
e4 f g a \break
c1
}
\new Staff {
% To use the setting globally, comment this line,
% uncomment the line in the \layout block above
\override Staff.VerticalAxisGroup.remove-first = ##t
R1 \break
R
}
>>
\new StaffGroup <<
\new Staff \relative c' {
e4 f g a \break
c1
}
\new Staff {
R1 \break
R
}
>>
|
Fijar un separador entre los sistemas
Se pueden insertar separadores sistema entre los sistemas de una
página. Se puede usar cualquier elemento de marcado, pero
\slashSeparator está disponible como una elección
predeterminada adecuada.
| | \paper {
system-separator-markup = \slashSeparator
line-width = 120
}
notes = \relative c' {
c1 | c \break
c1 | c \break
c1 | c
}
\book {
\score {
\new GrandStaff <<
\new Staff \notes
\new Staff \notes
>>
}
}
|
Barras de compás en forma de raya corta
Con frecuencia se usan barras de compás en forma de ’tick’ o raya
corta donde la línea divisoria se emplea solamente a efectos de
coordinación y no se quiere implicar con ella ningún énfasis rítmico.
| | \relative c' {
\set Score.defaultBarType = #"'"
c4 d e f
g4 f e d
c4 d e f
g4 f e d
\bar "|."
}
|
Indicación de compás entre paréntesis: método número 3
Otra forma de poner la indicación de compás entre paréntesis.
| | \relative c'' {
\override Staff.TimeSignature.stencil = #(lambda (grob)
(parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1 ))
\time 2/4
a4 b8 c
}
|
Compás entre paréntesis
La indicación de compás puede encerrarse entre paréntesis.
| | \relative c'' {
\override Staff.TimeSignature.stencil = #(lambda (grob)
(bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
\time 2/4
a4 b8 c
}
|
Trucaje de las propiedades de clave
La modificación del glifo de la clave, su posición o su octavación, no
cambian ’per se’ la posición de las siguientes notas del pentagrama.
Para conseguir armaduras de tonalidad sobre las líneas del pentagrama
adecuadas, también debe especificarse middleCClefPosition, con
valores positivos o negativos que mueven el Do central hacia
arriba o hacia abajo, respectivamente, en relación con la línea
central del pentagrama (usualmente la tercera).
Por ejemplo, la instrucción \clef "treble_8" equivale a un
ajuste de clefGlyph, clefPosition (que controla la
posición vertical de la clave sobre el pentagrama),
middleCPosition y clefTransposition. Se imprime una
clave cada vez que se modifica cualquiera de las propiedades excepto
middleCPosition.
Los siguientes ejemplos muestran las posibilidades cuando se ajustan
estas propiedades manualmente. En la primera línea, los cambios
manuales preservan el posicionamiento relativo estándar de las claves
y las notas, pero no lo hacen en la segunda línea.
| | {
% The default treble clef
\key f \major
c'1
% The standard bass clef
\set Staff.clefGlyph = #"clefs.F"
\set Staff.clefPosition = #2
\set Staff.middleCPosition = #6
\set Staff.middleCClefPosition = #6
\key g \major
c'1
% The baritone clef
\set Staff.clefGlyph = #"clefs.C"
\set Staff.clefPosition = #4
\set Staff.middleCPosition = #4
\set Staff.middleCClefPosition = #4
\key f \major
c'1
% The standard choral tenor clef
\set Staff.clefGlyph = #"clefs.G"
\set Staff.clefPosition = #-2
\set Staff.clefTransposition = #-7
\set Staff.middleCPosition = #1
\set Staff.middleCClefPosition = #1
\key f \major
c'1
% A non-standard clef
\set Staff.clefPosition = #0
\set Staff.clefTransposition = #0
\set Staff.middleCPosition = #-4
\set Staff.middleCClefPosition = #-4
\key g \major
c'1 \break
% The following clef changes do not preserve
% the normal relationship between notes, key signatures
% and clefs:
\set Staff.clefGlyph = #"clefs.F"
\set Staff.clefPosition = #2
c'1
\set Staff.clefGlyph = #"clefs.G"
c'1
\set Staff.clefGlyph = #"clefs.C"
c'1
\set Staff.clefTransposition = #7
c'1
\set Staff.clefTransposition = #0
\set Staff.clefPosition = #0
c'1
% Return to the normal clef:
\set Staff.middleCPosition = #0
c'1
}
|
Two \partCombine pairs on one staff
The \partCombine function takes two music expressions each
containing a part, and distributes them among four Voices named
“two” “one” “solo” and “chords” depending on when and how
the parts merged into a common voice. The voices output from
\partCombine can have their layout properties adjusted in the
usual way. Here we define extensions of \partCombine to make
it easier to put four voices on a staff.
soprano = { d’4 | cis’ b e’ d’8 cis’ | cis’2 b } alto = { fis4 |
e8 fis gis ais b4 b | b ais fis2 } tenor = { a8 b | cis’ dis’ e’4 b8
cis’ d’4 | gis cis’ dis’2 } bass = { fis8 gis | a4 gis g fis | eis
fis b,2 }
\new Staff <<
\key b\minor
\clef alto
\partial 4
\transpose b b’
\partCombineUp \soprano \alto
\partCombineDown \tenor \bass >>
| | \layout {
\context {
\Staff
\accepts "VoiceBox"
}
\context {
\name "VoiceBox"
\type "Engraver_group"
\defaultchild "Voice"
\accepts "Voice"
\accepts "NullVoice"
}
}
customPartCombineUp =
#(define-music-function (partOne partTwo)
(ly:music? ly:music?)
"Take the music in @var{partOne} and @var{partTwo} and return
a @code{VoiceBox} named @q{Up} containing @code{Voice}s
that contain @var{partOne} and @var{partTwo} merged into one
voice where feasible. This variant sets the default voicing
in the output to use upward stems."
#{
\new VoiceBox = "Up" <<
\context Voice = "one" { \voiceOne }
\context Voice = "two" { \voiceThree }
\context Voice = "shared" { \voiceOne }
\context Voice = "solo" { \voiceOne }
\context NullVoice = "null" {}
\partCombine #partOne #partTwo
>>
#})
customPartCombineDown = #
(define-music-function (partOne partTwo)
(ly:music? ly:music?)
"Take the music in @var{partOne} and @var{partTwo} and return
a @code{VoiceBox} named @q{Down} containing @code{Voice}s
that contain @var{partOne} and @var{partTwo} merged into one
voice where feasible. This variant sets the default voicing
in the output to use downward stems."
#{
\new VoiceBox = "Down" <<
\set VoiceBox.soloText = #"Solo III"
\set VoiceBox.soloIIText = #"Solo IV"
\context Voice ="one" { \voiceFour }
\context Voice ="two" { \voiceTwo }
\context Voice ="shared" { \voiceFour }
\context Voice ="solo" { \voiceFour }
\context NullVoice = "null" {}
\partCombine #partOne #partTwo
>>
#})
soprano = { d'4 | cis' b e' d'8 cis' | cis'2 b }
alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 }
tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 }
bass = { fis8 gis | a4 gis g fis | eis fis b,2 }
\new Staff <<
\key b\minor
\clef alto
\partial 4
\transpose b b'
\customPartCombineUp \soprano \alto
\customPartCombineDown \tenor \bass
>>
|
Uso del corchete recto al comienzo de un grupo de pentagramas
Se puede usar el delimitador de comienzo de un sistema
SystemStartSquare estableciéndolo explícitamente dentro de
un contexto StaffGroup o ChoirStaffGroup.
| | \score {
\new StaffGroup { <<
\set StaffGroup.systemStartDelimiter = #'SystemStartSquare
\new Staff { c'4 d' e' f' }
\new Staff { c'4 d' e' f' }
>> }
}
|
Usar cambio automático de pentagrama con más de una voz
Utilización de autoChange con más de una voz.
| | \score
{
\new PianoStaff
<<
\new Staff = "up" {
<<
\set Timing.beamExceptions = #'()
\set Timing.beatStructure = #'(4)
\new Voice {
\voiceOne
\autoChange
\relative c' {
g8 a b c d e f g
g,8 a b c d e f g
}
}
\new Voice {
\voiceTwo
\autoChange
\relative c' {
g8 a b c d e f g
g,,8 a b c d e f g
}
}
>>
}
\new Staff = "down" {
\clef bass
}
>>
}
|
Using marklines in a Frenched score
Using MarkLine contexts (such as in
LSR1010) in a
Frenched score can be problematic if all the staves between two
MarkLines are removed in one system. The
Keep_alive_together_engraver can be used within each
StaffGroup to keep the MarkLine alive only as long
as the other staves in the group stay alive.
| | bars = {
\tempo "Allegro" 4=120
s1*2
\repeat unfold 5 { \mark \default s1*2 }
\bar "||"
\tempo "Adagio" 4=40
s1*2
\repeat unfold 8 { \mark \default s1*2 }
\bar "|."
}
winds = \repeat unfold 120 { c''4 }
trumpet = { \repeat unfold 8 g'2 R1*16 \repeat unfold 4 g'2 R1*8 }
trombone = { \repeat unfold 4 c'1 R1*8 d'1 R1*17 }
strings = \repeat unfold 240 { c''8 }
#(set-global-staff-size 16)
\paper {
systems-per-page = 5
ragged-last-bottom = ##f
}
\layout {
indent = 15\mm
short-indent = 5\mm
\context {
\name MarkLine
\type Engraver_group
\consists Output_property_engraver
\consists Axis_group_engraver
\consists Mark_engraver
\consists Metronome_mark_engraver
\override VerticalAxisGroup.remove-empty = ##t
\override VerticalAxisGroup.remove-layer = #'any
\override VerticalAxisGroup.staff-affinity = #DOWN
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing.basic-distance = 1
keepAliveInterfaces = #'()
}
\context {
\Staff
\override VerticalAxisGroup.remove-empty = ##t
\override VerticalAxisGroup.remove-layer = ##f
}
\context {
\StaffGroup
\accepts MarkLine
\consists Keep_alive_together_engraver
}
\context {
\Score
\remove Mark_engraver
\remove Metronome_mark_engraver
}
}
\score {
<<
\new StaffGroup = "winds" \with {
instrumentName = "Winds"
shortInstrumentName = "Winds"
} <<
\new MarkLine \bars
\new Staff \winds
>>
\new StaffGroup = "brass" <<
\new MarkLine \bars
\new Staff = "trumpet" \with {
instrumentName = "Trumpet"
shortInstrumentName = "Tpt"
} \trumpet
\new Staff = "trombone" \with {
instrumentName = "Trombone"
shortInstrumentName = "Tbn"
} \trombone
>>
\new StaffGroup = "strings" \with {
instrumentName = "Strings"
shortInstrumentName = "Strings"
} <<
\new MarkLine \bars
\new Staff = "strings" { \strings }
>>
>>
}
|
Grupos de pentagramas alineados verticalmente sin una barra SystemStartBar que los interconecte
Este fragmento de código muestra cómo obtener grupos de pentagramas
StaffGroups alineados verticalmente con una barra de inicio de sistema
SystemStartBar por cada StaffGroup, pero sin conectarlos entre sí.
| | % by Thomas Morley
#(set-global-staff-size 18)
\paper {
indent = 0
ragged-right = ##f
print-all-headers = ##t
}
\layout {
\context {
\Staff
\consists "Mark_engraver"
\override RehearsalMark.self-alignment-X = #LEFT
}
\context {
\StaffGroup
systemStartDelimiterHierarchy =
#'(SystemStartBrace (SystemStartBracket a b))
}
\context {
\Score
\override SystemStartBrace.style = #'bar-line
\omit SystemStartBar
\override SystemStartBrace.padding = #-0.1
\override SystemStartBrace.thickness = #1.6
\remove "Mark_engraver"
\override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15
}
}
%%%% EXAMPLE
txt =
\lyricmode {
Wer4 nur den lie -- ben Gott läßt wal2 -- ten4
und4 hof -- fet auf ihn al -- le Zeit2.
}
% First StaffGroup "exercise"
eI =
\relative c' {
\mark \markup {
\bold Teacher:
This is a simple setting of the choral. Please improve it.
}
\key a \minor
\time 4/4
\voiceOne
\partial 4
e4
a b c b
a b gis2
e4\fermata g! g f
e a a gis
a2.\fermata
\bar ":|."
}
eII =
\relative c' {
\key a \minor
\time 4/4
\voiceTwo
\partial 4
c4
e e e gis
a f e2
b4 b d d
c c d d
c2.
\bar ":|."
}
eIII =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceOne
\partial 4
a4
c b a b
c d b2
gis4 g g b
c a f e
e2.
}
eIV =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceTwo
\partial 4
a,4
a' gis a e
a, d e2
e,4\fermata e' b g
c f d e
a,2.\fermata
\bar ":|."
}
exercise =
\new StaffGroup = "exercise"
<<
\new Staff
<<
\new Voice \eI
\new Voice \eII
>>
\new Lyrics \txt
\new Staff
<<
\new Voice \eIII
\new Voice \eIV
>>
>>
% Second StaffGRoup "simple Bach"
sbI =
\relative c' {
\mark \markup { \bold" Pupil:" Here's my version! }
\key a \minor
\time 4/4
\voiceOne
\partial 4
e4
a b c b
a b gis2
e4\fermata g! g f
e a a gis
a2.\fermata
\bar ":|."
}
sbII =
\relative c' {
\key a \minor
\time 4/4
\voiceTwo
\partial 4
c8 d
e4 e e8 f g4
f f e2
b4 b8 c d4 d
e8 d c4 b8 c d4
c2.
\bar ":|."
}
sbIII =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceOne
\partial 4
a8 b
c4 b a b8 c
d4 d8 c b2
gis4 g g8 a b4
b a8 g f4 e
e2.
}
sbIV =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceTwo
\partial 4
a,4
a' gis a e
f8 e d4 e2
e,4\fermata e' b a8 g
c4 f8 e d4 e
a,2.\fermata
\bar ":|."
}
simpleBach =
\new StaffGroup = "simple Bach"
<<
\new Staff
<<
\new Voice \sbI
\new Voice \sbII
>>
\new Lyrics \txt
\new Staff
<<
\new Voice \sbIII
\new Voice \sbIV
>>
>>
% Third StaffGroup "chromatic Bach"
cbI =
\relative c' {
\mark \markup {
\bold "Teacher:"
\column {
"Well, you simply copied and transposed a version of J.S.Bach."
"Do you know this one?"
}
}
\key a \minor
\time 4/4
\voiceOne
\partial 4
e4
a b c b
a b gis4. fis8
e4\fermata g! g f
e a a8 b gis4
a2.\fermata
\bar ":|."
}
cbII =
\relative c' {
\key a \minor
\time 4/4
\voiceTwo
\partial 4
c8 d
e4 e e8 fis gis4
a8 g! f!4 e2
b4 e e d
d8[ cis] d dis e fis e4
e2.
\bar ":|."
}
cbIII =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceOne
\partial 4
a8 b
c[ b] a gis8 a4 d,
e8[ e'] d c b4. a8
gis4 b c d8 c
b[ a] a b c b b c16 d
c2.
}
cbIV =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceTwo
\partial 4
a4
c, e a, b
c d e2
e4\fermata e a b8 c
gis[ g] fis f e dis e4
a,2.\fermata
\bar ":|."
}
chromaticBach =
\new StaffGroup = "chromatic Bach"
<<
\new Staff
<<
\new Voice \cbI
\new Voice \cbII
>>
\new Lyrics \txt
\new Staff
<<
\new Voice \cbIII
\new Voice \cbIV
>>
>>
% Score
\score {
<<
\exercise
\simpleBach
\chromaticBach
>>
\header {
title = \markup
\column {
\combine \null \vspace #1
"Exercise: Improve the given choral"
" "
}
}
\layout {
\context {
\Lyrics
\override LyricText.X-offset = #-1
}
}
}
|
Corchetes de primera y segunda vez debajo de los acordes
Mediante la adición del grabador Volta_engraver al
pentagrama pertinente, se pueden poner los corchetes de primera y
segunda vez debajo de los acordes.
| | \score {
<<
\chords {
c1
c1
}
\new Staff \with {
\consists "Volta_engraver"
}
{
\repeat volta 2 { c'1 }
\alternative { c' }
}
>>
\layout {
\context {
\Score
\remove "Volta_engraver"
}
}
}
|
Casillas de repetición en varios pentagramas
Mediante la adición del grabador Volta_engraver al pentagrama
adecuado, las casillas de primera y segunda vez se pueden poner sobre
algún pentagrama distinto al más alto de la partitura.
| | voltaMusic = \relative c'' {
\repeat volta 2 {
c1
}
\alternative {
d1
e1
}
}
<<
\new StaffGroup <<
\new Staff \voltaMusic
\new Staff \voltaMusic
>>
\new StaffGroup <<
\new Staff \with { \consists "Volta_engraver" }
\voltaMusic
\new Staff \voltaMusic
>>
>>
|
Editorial annotations
Editorial annotations
Añadir digitaciones a la partitura
Se pueden escribir instrucciones de digitación usando una sintaxis muy
sencilla.
| | \relative c'' {
c4-1 d-2 f-4 e-3
}
|
Añadir enlaces a los objetos
Para añadir un enlace al sello de un objeto gráfico, podemos usar
add-link tal y como se define aquí. FUnciona con
\override y con \tweak. Inconveniente:
point-and-click (apuntar y pulsar) quedará obstacuilzado por
los objetos gráficos enlazados.
Limitación: funciona solamente para PDF.
Los objetos enlazados se colorean con una instrucción aparte.
| | #(define (add-link url-strg)
(lambda (grob)
(let* ((stil (ly:grob-property grob 'stencil)))
(if (ly:stencil? stil)
(begin
(let* (
(x-ext (ly:stencil-extent stil X))
(y-ext (ly:stencil-extent stil Y))
(url-expr `(url-link url-strg ,x-ext ,y-ext))
(new-stil (ly:stencil-add
(ly:make-stencil url-expr x-ext y-ext) stil)))
(ly:grob-set-property! grob 'stencil new-stil)))
#f))))
%%%% test
urlI =
"https://lilypond.org/doc/v2.14/Documentation/notation/writing-pitches"
urlII =
"https://lilypond.org/doc/v2.14/Documentation/notation/rhythms"
urlIII =
"https://lilypond.org/doc/v2.14/Documentation/notation/note-heads"
urlIV =
"https://lilypond.org/doc/v2.14/Documentation/notation/beams"
urlV =
"https://lilypond.org/doc/v2.14/Documentation/notation/note-head-styles"
\relative c' {
\key cis \minor
\once \override Staff.Clef.color = #green
\once \override Staff.Clef.after-line-breaking =
#(add-link urlI)
\once \override Staff.TimeSignature.color = #green
\once \override Staff.TimeSignature.after-line-breaking =
#(add-link urlII)
\once \override NoteHead.color = #green
\once \override NoteHead.after-line-breaking =
#(add-link urlIII)
cis'1
\once \override Beam.color = #green
\once \override Beam.after-line-breaking =
#(add-link urlIV)
cis8 dis e fis gis2
<gis,
% With 2.17.9 you could use the command below to address the Accidental.
% \tweak Accidental.before-line-breaking #(add-link url)
\tweak color #green
\tweak after-line-breaking #(add-link urlV)
\tweak style #'harmonic
bis
dis
fis
>1
<cis, cis' e>
}
|
Adding markups in a tablature
By default markups does not show in a tablature. To make them appear,
simply use the command \revert TabStaff.TextScript.stencil
| | %% http://lsr.di.unimi.it/LSR/Item?id=919
% by P.P.Schneider on June 2014
high = { r4 r8 <g c'> q r8 r4 }
low = { c4 r4 c8 r8 g,8 b, }
pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" }
\score {
\new TabStaff {
\repeat unfold 2 << \high \\ \low \\ \pulse >>
}
\layout {
\context {
\TabStaff
\clef moderntab
\revert TextScript.stencil
\override TextScript.font-series = #'bold
\override TextScript.font-size = #-2
\override TextScript.color = #red
}
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1/8)
}
}
}
|
Permitir que las digitaciones se impriman dentro del pentagrama
Las cifras de digitación orientadas verticalmente se colocan de forma
predeterminada fuera del pentagrama. Sin embargo, este comportamiento
se puede cancelar. Hay que prestar atención en situaciones en las que
las digitaciones y las plicas están en la misma dirección: por
defecto, las digitaciones solo evitan la colisión con plicas unidas
por una barra. Se puede cambiar este ajuste para no evitar ninguna
plica o evitarlas todas; el ejemplo siguiente muestra las dos
copciones, así como la manera de volver al comportamiento
predeteminado.
| | \relative c' {
<c-1 e-2 g-3 b-5>2
\override Fingering.staff-padding = #'()
<c-1 e-2 g-3 b-5>4 g'-0
a8[-1 b]-2 g-0 r
\override Fingering.add-stem-support = ##f
a[-1 b]-2 g-0 r
\override Fingering.add-stem-support = ##t
a[-1 b]-2 g-0 r
\override Fingering.add-stem-support = #only-if-beamed
a[-1 b]-2 g-0 r
}
|
Numeración de compases alternativa
Se pueden seleccionar dos métodos alternativos para la numeración de
compases, especiales para cuando hay repeticiones.
| | \relative c'{
\set Score.alternativeNumberingStyle = #'numbers
\repeat volta 3 { c4 d e f | }
\alternative {
{ c4 d e f | c2 d \break }
{ f4 g a b | f4 g a b | f2 a | \break }
{ c4 d e f | c2 d }
}
c1 \break
\set Score.alternativeNumberingStyle = #'numbers-with-letters
\repeat volta 3 { c,4 d e f | }
\alternative {
{ c4 d e f | c2 d \break }
{ f4 g a b | f4 g a b | f2 a | \break }
{ c4 d e f | c2 d }
}
c1
}
|
Corchetes de análisis encima del pentagrama
De forma predeterminada se añaden corchetes de análisis sencillos
debajo del pentagrama. El ejemplo siguiente muestra una manera de
colocarlos por encima.
| | \layout {
\context {
\Voice
\consists "Horizontal_bracket_engraver"
}
}
\relative c'' {
\once \override HorizontalBracket.direction = #UP
c2\startGroup
d2\stopGroup
}
|
Analysis brackets with labels
Text may be added to analysis brackets through the text property
of the HorizontalBracketText grob. Adding different texts to
brackets beginning at the same time requires the \tweak command.
Bracket text will be parenthesized after a line break.
| | \layout {
\context {
\Voice
\consists "Horizontal_bracket_engraver"
\override HorizontalBracket.direction = #UP
}
}
{
\once\override HorizontalBracketText.text = "a"
c''\startGroup d''\stopGroup
\once\override HorizontalBracketText.text = "a'"
e''\startGroup d''\stopGroup
c''
-\tweak HorizontalBracketText.text \markup \bold \huge "b" \startGroup
-\tweak HorizontalBracketText.text "a" \startGroup
d''\stopGroup
e''-\tweak HorizontalBracketText.text "a'" \startGroup
d''\stopGroup\stopGroup
c''-\tweak HorizontalBracketText.text foo \startGroup d'' e'' f''
\break
g'' a'' b'' c'''\stopGroup
}
|
Aplicar estilos de cabeza según la nota de la escala
La propiedad shapeNoteStyles se puede usar para definir varios
estilos de cabezas de nota para cada grado de la escala (según esté
establecido por la armadura o por la propiedad tonic). Esta
propiedad requiere un conjunto de símbolos, que pueden ser puramente
arbitrarios (se permiten expresiones geométricas como triangle,
triángulo, cross, aspas, y xcircle, círculo con aspas) o
basados en una antigua tradición americana de grabado (ciertos nombres
de nota latinos trambién se permiten).
Dicho esto, para imitar antiguos cancioneros americanos, existen varios
estilos predefinidos de cabezas de nota disponibles a través de
instrucciones de abreviatura como \aikenHeads o
\sacredHarpHeads.
Este ejemplo muestra distintas formas de obtener cabezas de notas con forma,
y muestra la capacidad de transportar una melodía sin perder la
correspondencia entre las funciones armónicas y los estilos de cabezas de
nota.
| | fragment = {
\key c \major
c2 d
e2 f
g2 a
b2 c
}
\new Staff {
\transpose c d
\relative c' {
\set shapeNoteStyles = ##(do re mi fa
#f la ti)
\fragment
}
\break
\relative c' {
\set shapeNoteStyles = ##(cross triangle fa #f
mensural xcircle diamond)
\fragment
}
}
|
Poner en blanco las líneas del pentagrama utilizando la instrucción \whiteout
La instrucción \whiteout intercala un rectángulo blanco
debajo de un elemento de marcado. Este rectángulo blanco no tapa
a ningún otro objeto gráfico, puesto que las líneas del pentagrama
están en una capa inferior a la de la mayor parte de los otros
objetos.
| | \layout {
ragged-right = ##f
}
\relative c' {
\override TextScript.extra-offset = #'(2 . 4)
c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c
}
|
Modificar el tamaño de una nota suelta de un acorde
Se pueden modificar notas individuales de un acorde con la instrucción
\tweak, alterando la propiedad font-size.
Dentro de un acorde (entre ángulos simples < >), antes de la
nota que queremos alterar, situamos la instrucción \tweak
seguida por font-size y definimos el tamaño adecuado como
#-2 (una cabeza pequeña).
| | \relative c' {
<\tweak font-size #+2 c e g c
\tweak font-size #-2 e>1
^\markup { A tiny e }_\markup { A big c }
}
|
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)
}
|
Colorear las notas según su altura
Es posible colorear la cabeza de las notas dependiendo de su altura
y/o de su nombre: la función que se usa en este ejemplo hace posible
incluso distinguir los armónicos.
| | %Association list of pitches to colors.
#(define color-mapping
(list
(cons (ly:make-pitch 0 0 NATURAL) (x11-color 'red))
(cons (ly:make-pitch 0 0 SHARP) (x11-color 'green))
(cons (ly:make-pitch 0 1 FLAT) (x11-color 'green))
(cons (ly:make-pitch 0 2 NATURAL) (x11-color 'red))
(cons (ly:make-pitch 0 2 SHARP) (x11-color 'green))
(cons (ly:make-pitch 0 3 FLAT) (x11-color 'red))
(cons (ly:make-pitch 0 3 NATURAL) (x11-color 'green))
(cons (ly:make-pitch 0 4 SHARP) (x11-color 'red))
(cons (ly:make-pitch 0 5 NATURAL) (x11-color 'green))
(cons (ly:make-pitch 0 5 FLAT) (x11-color 'red))
(cons (ly:make-pitch 0 6 SHARP) (x11-color 'red))
(cons (ly:make-pitch 0 1 NATURAL) (x11-color 'blue))
(cons (ly:make-pitch 0 3 SHARP) (x11-color 'blue))
(cons (ly:make-pitch 0 4 FLAT) (x11-color 'blue))
(cons (ly:make-pitch 0 5 SHARP) (x11-color 'blue))
(cons (ly:make-pitch 0 6 FLAT) (x11-color 'blue))))
%Compare pitch and alteration (not octave).
#(define (pitch-equals? p1 p2)
(and
(= (ly:pitch-alteration p1) (ly:pitch-alteration p2))
(= (ly:pitch-notename p1) (ly:pitch-notename p2))))
#(define (pitch-to-color pitch)
(let ((color (assoc pitch color-mapping pitch-equals?)))
(if color
(cdr color))))
#(define (color-notehead grob)
(pitch-to-color
(ly:event-property (event-cause grob) 'pitch)))
\score {
\new Staff \relative c' {
\override NoteHead.color = #color-notehead
c8 b d dis ees f g aes
}
}
|
Controlar la colocación de las digitaciones de acordes
Se puede controlar con precisión la colocación de los números de
digitación. Para que se tenga en cuenta la orientación de las
digitaciones, se debe utilizar dentro de una construcción de acorde <>
aunque sea una sola nota. Se puede establecer la orientación para los
números de cuerda y las digitaciones de la mano derecha de una forma
similar.
| | \relative c' {
\set fingeringOrientations = #'(left)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down right up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(left)
<c-1>2
\set fingeringOrientations = #'(down)
<e-3>2
\set stringNumberOrientations = #'(up left down)
<f\3 a\2 c\1>1
\set strokeFingerOrientations = #'(down right up)
<c\rightHandFinger #1 e\rightHandFinger #2 c'\rightHandFinger #4 >
}
|
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'' {
c2*2/3 ( s2*1/3\turn d4) r
<<
{ c4.( d8) }
{ s4 s\turn }
>>
\transpose c d \relative c'' <<
{ c4.( d8) }
{
s4
\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
\single \hideNotes
b8-\turn \noBeam
s8
}
>>
}
|
Crear pentagramas en blanco
Para crear pentagramas en blanco, genere compases vacíos y después
elimine el grabador de números de compás Bar_number_engraver
del contexto Score, y los grabadores de la indicación de compás
Time_signature_engraver, de la clave Clef_engraver y de
los compases Bar_engraver del contexto de Staff.
| | #(set-global-staff-size 20)
\score {
{
\repeat unfold 12 { s1 \break }
}
\layout {
indent = 0\in
\context {
\Staff
\remove "Time_signature_engraver"
\remove "Clef_engraver"
\remove "Bar_engraver"
}
\context {
\Score
\remove "Bar_number_engraver"
}
}
}
% uncomment these lines for "letter" size
%{
\paper {
#(set-paper-size "letter")
ragged-last-bottom = ##f
line-width = 7.5\in
left-margin = 0.5\in
bottom-margin = 0.25\in
top-margin = 0.25\in
}
%}
% uncomment these lines for "A4" size
%{
\paper {
#(set-paper-size "a4")
ragged-last-bottom = ##f
line-width = 180
left-margin = 15
bottom-margin = 10
top-margin = 10
}
%}
|
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
}
|
Dirección predeterminada de las plicas sobre la tercera línea del pentagrama
La dirección predeterminada de las plicas sobre la tercera línea
del pentagrama está determinada por la propiedad
neutral-direction del objeto Stem.
| | \relative c'' {
a4 b c b
\override Stem.neutral-direction = #up
a4 b c b
\override Stem.neutral-direction = #down
a4 b c b
}
|
Different font size settings for instrumentName and shortInstrumentName
Choose different font sizes for instrumentName and shortInstrumentName
as a context override.
| | InstrumentNameFontSize =
#(define-music-function (font-size-pair)(pair?)
"Sets the @code{font-size} of @code{InstrumentName}.
The font-size for the initial @code{instrumentName} is taken from the first
value in @var{font-size-pair}. @code{shortInstrumentName} will get the second
value of @var{font-size-pair}.
"
;; This code could be changed/extended to set different values for each
;; occurance of `shortInstrumentName'
#{
\override InstrumentName.after-line-breaking =
#(lambda (grob)
(let* ((orig (ly:grob-original grob))
(siblings (if (ly:grob? orig)
(ly:spanner-broken-into orig)
'())))
(if (pair? siblings)
(begin
(ly:grob-set-property!
(car siblings)
'font-size
(car font-size-pair))
(for-each
(lambda (g)
(ly:grob-set-property! g 'font-size (cdr font-size-pair)))
(cdr siblings))))))
#})
\layout {
\context {
\Staff
\InstrumentNameFontSize #'(6 . -3)
}
}
\new StaffGroup <<
\new Staff
\with {
instrumentName = "Flute"
shortInstrumentName = "Fl."
}
{ c''1 \break c'' \break c'' }
\new Staff
\with {
instrumentName = "Violin"
shortInstrumentName = "Vl."
}
{ c''1 \break c'' \break c'' }
>>
|
Rodear los objetos gráficos con rectángulos
Se puede sobreescribir la función print-function para trazar un
rectángulo alrededor de un objeto gráfico arbitrario.
| | \relative c'' {
\override TextScript.stencil =
#(make-stencil-boxer 0.1 0.3 ly:text-interface::print)
c'4^"foo"
\override Stem.stencil =
#(make-stencil-boxer 0.05 0.25 ly:stem::print)
\override Score.RehearsalMark.stencil =
#(make-stencil-boxer 0.15 0.3 ly:text-interface::print)
b8
\revert Stem.stencil
\revert Flag.stencil
c4. c4
\mark "F"
c1
}
|
Trazar circunferencias alrededor de la cabeza de las notas
He aquí cómo rodear una nota con una circunferencia.
| | circle =
\once \override NoteHead.stencil = #(lambda (grob)
(let* ((note (ly:note-head::print grob))
(combo-stencil (ly:stencil-add
note
(circle-stencil note 0.1 0.8))))
(ly:make-stencil (ly:stencil-expr combo-stencil)
(ly:stencil-extent note X)
(ly:stencil-extent note Y))))
{ \circle c'' }
|
Rodear diversos objetos con una circunferencia
La instrucción de marcado \circle traza circunferencias
alrededor de varios objetos, por ejemplo las indicaciones de
digitación. Para otros objetos pueden requerirse trucos específicos:
este ejemplo muestra dos estrategias para las letras de ensayo y los
números de compás.
| | \relative c' {
c1
\set Score.markFormatter =
#(lambda (mark context)
(make-circle-markup (format-mark-numbers mark context)))
\mark \default
c2 d^\markup {
\override #'(thickness . 3) {
\circle \finger 2
}
}
\override Score.BarNumber.break-visibility = #all-visible
\override Score.BarNumber.stencil =
#(make-stencil-circler 0.1 0.25 ly:text-interface::print)
}
|
Empotrar PostScript nativo dentro de un bloque \markup
Se puede insertar códico PostScript directamente dentro de un
bloque \markup.
| | % PostScript is a registered trademark of Adobe Systems Inc.
\relative c'' {
a4-\markup { \postscript "3 4 moveto 5 3 rlineto stroke" }
-\markup { \postscript "[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " }
b4-\markup { \postscript "3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" }
s2
a'1
}
|
Líneas de rejilla: modificar su aspecto
Se puede cambiar el aspecto de las líneas de rejilla
sobreescribiendo algunas de sus propiedades.
| | \score {
\new ChoirStaff <<
\new Staff {
\relative c'' {
\stemUp
c'4. d8 e8 f g4
}
}
\new Staff {
\relative c {
% this moves them up one staff space from the default position
\override Score.GridLine.extra-offset = #'(0.0 . 1.0)
\stemDown
\clef bass
\once \override Score.GridLine.thickness = #5.0
c4
\once \override Score.GridLine.thickness = #1.0
g'4
\once \override Score.GridLine.thickness = #3.0
f4
\once \override Score.GridLine.thickness = #5.0
e4
}
}
>>
\layout {
\context {
\Staff
% set up grids
\consists "Grid_point_engraver"
% set the grid interval to one quarter note
gridInterval = #(ly:make-moment 1/4)
}
\context {
\Score
\consists "Grid_line_span_engraver"
% this moves them to the right half a staff space
\override NoteColumn.X-offset = #-0.5
}
}
}
|
Líneas de rejilla: destacar ritmos y la relación temporal entre notas
Se pueden trazar líneas verticales normales entre pentagramas para
mostrar la relación entre notas; sin embargo, en caso de música
monofónica, podemos hacer invisible el segundo pentagrama, y que
las líneas sean más cortas, como en este fragmento de código.
| | \score {
\new ChoirStaff {
\relative c'' <<
\new Staff {
\time 12/8
\stemUp
c4. d8 e8 f g4 f8 e8. d16 c8
}
\new Staff {
% hides staff and notes so that only the grid lines are visible
\hideNotes
\hide Staff.BarLine
\override Staff.StaffSymbol.line-count = #0
\hide Staff.TimeSignature
\hide Staff.Clef
% dummy notes to force regular note spacing
\once \override Score.GridLine.thickness = #4.0
c8 c c
\once \override Score.GridLine.thickness = #3.0
c8 c c
\once \override Score.GridLine.thickness = #4.0
c8 c c
\once \override Score.GridLine.thickness = #3.0
c8 c c
}
>>
}
\layout {
\context {
\Score
\consists "Grid_line_span_engraver"
% center grid lines horizontally below note heads
\override NoteColumn.X-offset = #-0.5
}
\context {
\Staff
\consists "Grid_point_engraver"
gridInterval = #(ly:make-moment 1/8)
% set line length and positioning:
% two staff spaces above center line on hidden staff
% to four spaces below center line on visible staff
\override GridPoint.Y-extent = #'(2 . -4)
}
ragged-right = ##t
}
}
|
Hammer on and pull off using chords
When using hammer-on or pull-off with chorded notes, only a single arc
is drawn. However “double arcs” are possible by setting the
doubleSlurs property to #t.
| | \new TabStaff {
\relative c' {
% chord hammer-on and pull-off
\set doubleSlurs = ##t
<g' b>8( <a c> <g b>)
}
}
|
Hammer on and pull off using voices
The arc of hammer-on and pull-off is upwards in voices one and three
and downwards in voices two and four:
| | \new TabStaff {
\relative c' {
<< { \voiceOne g2( a) }
\\ { \voiceTwo a,( b) }
>> \oneVoice
}
}
|
Hammer on and pull off
Hammer-on and pull-off can be obtained using slurs.
| | \new TabStaff {
\relative c' {
d4( e\2)
a( g)
}
}
|
Cómo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 1)
Este método imprime dos letras de ensayo, una encima de la otra,
desplaza la marca inferior a una posición debajo del pentagrama y
después añade un relleno sobre ella de forma que la marca superior se
sitúe encima del pentagrama.
Ajustando los valores de extra-offset y de baseline-skip podemos
aumentar o disminuir el espacio total entre la marca de ensayo y el
pentagrama.
Debido a que puede hacrse que prácticamente cualquier tipo de glifo o
cadena de caracteres se comporte como una marca de ensayo, es posible
centrarlas encima y debajo de una barra de compás.
Añadiendo la propiedad ’break visibility’ (visibilidad en caso de
salto) adecuada como se muestra en el ejemplo número 1, podemos
también posicionar las dos marcas al final de una línea.
Nota: el método 1 es menos complejo que el método 2 pero realmente no
permite un ajuste fino de la colocación de una de las marcas de ensayo
sin afectar a la otra. También puede dar algunos problemas con el
espaciado vertical, porque el uso de extra-offset no cambia la
caja circundante de la letra de ensayo desde su valor original.
| | \relative c'{
c d e f |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \circle 1 \box A }
g f e d |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \flat { \bold \small \italic Fine. } }
g f e d |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
\mark \markup \center-column { \fermata \box z }
}
|
Cömo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 2)
Este método imprime dos ’letras de ensayo’: una sobre el pentagrama y
otra debajo, creando dos voces, añadiendo el grabador Rehearsal Mark a
cada unad e las voces (sin esto no se imprime ninguna marca de ensayo)
y después poniendo cada marca de ensayo en las posiciones UP y DOWN en
cada voz respectivamente.
Este método (a diferencia del método 1) es más complejo, pero permite
más flexibilidad y sería necesario para trucar cada letra de ensayo
independientemente de las demás.
| | \score {
\relative c'
<<
\new Staff {
<<
\new Voice \with {
\consists Mark_engraver
\consists "Staff_collecting_engraver"
}
{ c4 d e f
\mark \markup { \box A }
c4 d e f
}
\new Voice \with {
\consists Mark_engraver
\consists "Staff_collecting_engraver"
\override RehearsalMark.direction = #DOWN
}
{ s4 s s s
\mark \markup { \circle 1 }
s4 s s s
}
>>
}
>>
\layout {
\context {
\Score
\remove "Mark_engraver"
\remove "Staff_collecting_engraver"
}
}
}
|
Hacer unas líneas del pentagrama más gruesas que las otras
Se puede engrosar una línea del pentagrama con fines pedagógicos
(p.ej. la tercera línea o la de la clave de Sol). Esto se puede
conseguir añadiendo más líneas muy cerca de la línea que se quiere
destacar, utilizando la propiedad line-positions del objeto
StaffSymbol.
| | {
\override Staff.StaffSymbol.line-positions =
#'(-4 -2 -0.2 0 0.2 2 4)
d'4 e' f' g'
}
|
Marcar notas de las partes habladas con unas aspas en la plica
Este ejemplo muestra cómo añadir aspas sobre las plicas. Marcamos el
comienzo de una sección hablada con la palabra clave \speakOn,
y la finalizamos con la palabra clave \speakOff.
| | speakOn = {
\override Stem.stencil =
#(lambda (grob)
(let* ((x-parent (ly:grob-parent grob X))
(is-rest? (ly:grob? (ly:grob-object x-parent 'rest))))
(if is-rest?
empty-stencil
(ly:stencil-combine-at-edge
(ly:stem::print grob)
Y
(- (ly:grob-property grob 'direction))
(grob-interpret-markup grob
(markup #:center-align #:fontsize -4
#:musicglyph "noteheads.s2cross"))
-2.3))))
}
speakOff = {
\revert Stem.stencil
\revert Flag.stencil
}
\score {
\new Staff {
\relative c'' {
a4 b a c
\speakOn
g4 f r g
b4 r d e
\speakOff
c4 a g f
}
}
}
|
Contador de compases
Este fragmento de código proporciona una solución alternativa a la
producción de contadores de compás utilizando repeticiones
transparentes de tipo porcentaje.
| | <<
\context Voice = "foo" {
\clef bass
c4 r g r
c4 r g r
c4 r g r
c4 r g r
}
\context Voice = "foo" {
\set countPercentRepeats = ##t
\hide PercentRepeat
\override PercentRepeatCounter.staff-padding = #1
\repeat percent 4 { s1 }
}
>>
|
Numerar grupos de compases
Este fragmento de código muestra el uso del grabador
Measure_counter_engraver para numerar grupos de compases
sucesivos. Se puede numerar cualquier período de compases tanto si
tiene repeticiones como si no.
Se debe añadir el grabador al contexto adecuado. Aquí se usa un
contexto Staff; otra posibilidad sería un contexto
Dynamics.
El contador se inicia con \startMeasureCount y finaliza con
\stopMeasureCount. La numeración comienza con 1, de
forma predeterminada, pero se puede modificar este comportamiento
sobreescribiendo la propiedad count-from.
Cuando un compás se extiende más allá de un salto de línea, el número
aparece dos veces, la segunda vez entre paréntesis.
| | \layout {
\context {
\Staff
\consists #Measure_counter_engraver
}
}
\new Staff {
\startMeasureCount
\repeat unfold 7 {
c'4 d' e' f'
}
\stopMeasureCount
\bar "||"
g'4 f' e' d'
\override Staff.MeasureCounter.count-from = #2
\startMeasureCount
\repeat unfold 5 {
g'4 f' e' d'
}
g'4 f'
\bar ""
\break
e'4 d'
\repeat unfold 7 {
g'4 f' e' d'
}
\stopMeasureCount
}
|
Posicionamiento preciso de indicaciones de digitación
Generalmente, las opciones disponibles para la digitación de los
acordes funciona bien de forma predeterminada, pero si una de las
indicaciones precisa colocarse de forma más exacta puede usarse el
truco siguiente. Esto es especialmente útil para corregir el
posicionado cuando están presentes intervalos de segunda.
| | \relative c' {
\set fingeringOrientations = #'(left)
<c-1 d-2 a'-5>4
<c-1 d-\tweak extra-offset #'(0 . 0.2)-2 a'-5>4
\set fingeringOrientations = #'(down)
<c-1 d-2 a'-5>4
<c-\tweak extra-offset #'(0 . -1.1)-1
d-\tweak extra-offset #'(-1.2 . -1.8)-2 a'-5>4
\set fingeringOrientations = #'(down right up)
<c-1 d-\tweak extra-offset #'(-0.3 . 0)-2 a'-5>4
<c-1 d-\tweak extra-offset #'(-1 . 1.2)-2 a'-5>4
\set fingeringOrientations = #'(up)
<c-1 d-\tweak extra-offset #'(0 . 1.1)-2
a'-\tweak extra-offset #'(0 . 1)-5>4
<c-1 d-\tweak extra-offset #'(-1.2 . 1.5)-2
a'-\tweak extra-offset #'(0 . 1.4)-5>4
}
|
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
}
|
Impresión de texto de derecha a izquierda
Es posible imprimir texto de derecha a izquierda en un elemento de
marcado, como se muestra aquí.
| | {
b1^\markup {
\line { i n g i r u m i m u s n o c t e }
}
f'_\markup {
\override #'(text-direction . -1)
\line { i n g i r u m i m u s n o c t e }
}
}
|
Líneas de extensión para números de cuerda
Hacemos una línea extensora para las indicaciones de número de cuerda,
motrando que una serie de notas se han de tocar sobre la misma cuerda.
| | stringNumberSpanner =
#(define-music-function (StringNumber) (string?)
#{
\override TextSpanner.style = #'solid
\override TextSpanner.font-size = #-5
\override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
\override TextSpanner.bound-details.left.text =
\markup { \circle \number $StringNumber }
#})
\relative c {
\clef "treble_8"
\stringNumberSpanner "5"
\textSpannerDown
a8\startTextSpan
b c d e f\stopTextSpan
\stringNumberSpanner "4"
g\startTextSpan a
bes4 a g2\stopTextSpan
}
|
Uso del lenguaje PostScript para generar cabezas de nota de formas especiales
Cuando la cabeza de una nota con una forma especial no se puede
generar fácilmente mediante elementos de marcado gráfico, puede
emplearse código de PostScript para generar la forma. Este ejemplo
muestra cómo se genera una cabeza en forma de paralelogramo.
| | parallelogram =
#(ly:make-stencil (list 'embedded-ps
"gsave
currentpoint translate
newpath
0 0.25 moveto
1.3125 0.75 lineto
1.3125 -0.25 lineto
0 -0.75 lineto
closepath
fill
grestore" )
(cons 0 1.3125)
(cons -.75 .75))
myNoteHeads = \override NoteHead.stencil = \parallelogram
normalNoteHeads = \revert NoteHead.stencil
\relative c'' {
\myNoteHeads
g4 d'
\normalNoteHeads
<f, \tweak stencil \parallelogram b e>4 d
}
|
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
}
|
Text
Text
Adding markups in a tablature
By default markups does not show in a tablature. To make them appear,
simply use the command \revert TabStaff.TextScript.stencil
| | %% http://lsr.di.unimi.it/LSR/Item?id=919
% by P.P.Schneider on June 2014
high = { r4 r8 <g c'> q r8 r4 }
low = { c4 r4 c8 r8 g,8 b, }
pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" }
\score {
\new TabStaff {
\repeat unfold 2 << \high \\ \low \\ \pulse >>
}
\layout {
\context {
\TabStaff
\clef moderntab
\revert TextScript.stencil
\override TextScript.font-series = #'bold
\override TextScript.font-size = #-2
\override TextScript.color = #red
}
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1/8)
}
}
}
|
Añadir la fecha actual a una partitura
Con algo de código de Scheme, se puede añadir fácilmente la fecha
actual a una partitura.
| | % first, define a variable to hold the formatted date:
date = #(strftime "%d-%m-%Y" (localtime (current-time)))
% use it in the title block:
\header {
title = "Including the date!"
subtitle = \date
}
\score {
\relative c'' {
c4 c c c
}
}
% and use it in a \markup block:
\markup {
\date
}
|
Ajuste del especiado vertical de la letra
Este fragmento de código muestra cómo situar la línea de base de la
letra más cerca del pentagrama.
| | % Default layout:
<<
\new Staff \new Voice = melody \relative c' {
c4 d e f
g4 f e d
c1
}
\new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa }
\new Staff {
\new Voice = melody \relative c' {
c4 d e f
g4 f e d
c1
}
}
% Reducing the minimum space below the staff and above the lyrics:
\new Lyrics \with {
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
#'((basic-distance . 1))
}
\lyricsto melody { aa aa aa aa aa aa aa aa aa }
>>
|
Alinear y centrar los nombres de instrumento
La alineación horizontal de los nombres de instrumento se puede
trucar modificando la propiedad Staff.InstrumentName
#'self-alignment-X. Las variables de \layout
indent y short-indent definen el espacio en que se
alinean los nombres de instrumento antes del primer sistema y de
los siguientes, respectivamente.
| | \paper { left-margin = 3\cm }
\score {
\new StaffGroup <<
\new Staff \with {
\override InstrumentName.self-alignment-X = #LEFT
instrumentName = \markup \left-column {
"Left aligned"
"instrument name"
}
shortInstrumentName = "Left"
}
{ c''1 \break c''1 }
\new Staff \with {
\override InstrumentName.self-alignment-X = #CENTER
instrumentName = \markup \center-column {
Centered
"instrument name"
}
shortInstrumentName = "Centered"
}
{ g'1 g'1}
\new Staff \with {
\override InstrumentName.self-alignment-X = #RIGHT
instrumentName = \markup \right-column {
"Right aligned"
"instrument name"
}
shortInstrumentName = "Right"
}
{ e'1 e'1 }
>>
\layout {
ragged-right = ##t
indent = 4\cm
short-indent = 2\cm
}
}
|
Alineamiento de objetos creados con la instrucción \mark
De forma predeterminada, la instrucción \mark centra los
objetos sobre la barra de compás. Este comportamiento se puede
modificar para que la alineación se haga a la derecha o a la
izquierda.
| | \relative c' {
c1 \mark "(Center)"
c1
\once \override Score.RehearsalMark.self-alignment-X = #LEFT
\mark "(Left)"
c4 c c c
c4 c c c
\once \override Score.RehearsalMark.self-alignment-X = #RIGHT
\mark "(Right)"
c1
}
|
Alineación de sílabas con melisma
De forma predeterminada, las sílabas de la letra que comienzan un
melisma se alinean a la izquierda sobre su nota correspondiente. Se
puede alterar la alineación usando la propiedad
lyricMelismaAlignment.
| | \score {
<<
\new Staff {
\relative c''
\new Voice = "vocal" {
c d~^\markup default d e
c d~^\markup "right aligned" d e
c d~^\markup "center aligned" d e
c d~^\markup "reset to default" d e
}
}
\new Lyrics \lyricsto "vocal" {
word word word
\set lyricMelismaAlignment = #RIGHT
word word word
\set lyricMelismaAlignment = #CENTER
word word word
\unset lyricMelismaAlignment
word word word
}
>>
}
|
Poner en blanco las líneas del pentagrama utilizando la instrucción \whiteout
La instrucción \whiteout intercala un rectángulo blanco
debajo de un elemento de marcado. Este rectángulo blanco no tapa
a ningún otro objeto gráfico, puesto que las líneas del pentagrama
están en una capa inferior a la de la mayor parte de los otros
objetos.
| | \layout {
ragged-right = ##f
}
\relative c' {
\override TextScript.extra-offset = #'(2 . 4)
c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c
}
|
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.
| | 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))
(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 text) X CENTER))
X LEFT))
(staff-space (ly:output-def-lookup
(ly:grob-layout grob) 'staff-space))
(staff-line-thickness
(ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
(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
}
|
Changing ottava text
Internally, \ottava sets the properties ottavation (for
example, to 8va or 8vb) and middleCPosition. To
override the text of the bracket, set ottavation after invoking
\ottava.
Short text is especially useful when a brief ottava is used.
| | {
c'2
\ottava #1
\set Staff.ottavation = #"8"
c''2
\ottava #0
c'1
\ottava #1
\set Staff.ottavation = #"Text"
c''1
}
|
Cambiar la familia de tipografía predeterminada para el texto
Las familias de fuente tipográfica para el texto se pueden
sobreescribir con make-pango-font-tree.
| | \paper {
% change for other default global staff size.
myStaffSize = #20
%{
run
lilypond -dshow-available-fonts
to show all fonts available in the process log.
%}
#(define fonts
(make-pango-font-tree "Times New Roman"
"Nimbus Sans,Nimbus Sans L"
"Luxi Mono"
;; "Helvetica"
;; "Courier"
(/ myStaffSize 20)))
}
\relative c'' {
c4^\markup {
roman: foo \bold bla \italic bar \italic \bold baz
}
c'4_\markup {
\override #'(font-family . sans)
{
sans: foo \bold bla \italic bar \italic \bold baz
}
}
c'2^\markup {
\override #'(font-family . typewriter)
{
mono: foo \bold bla \italic bar \italic \bold baz
}
}
}
|
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
}
|
Combinar dos partes sobre el mismo pentagrama
La herramienta de combinación de partes (instrucción
\partCombine) permite la combinación de varias partes
diferentes sobre el mismo pentagrama. Las indicaciones textuales
tales como “solo” o “a2” se añaden de forma predeterminada; para
quitarlas, sencillamente establezca la propiedad
printPartCombineTexts al valor “falso”. Para partituras
vocales (como himnos), no hay necesidad de añadir los textos “solo”
o “a2”, por lo que se deben desactivar. Sin embargo, podría ser
mejor no usarlo si hay solos, porque éstos no se indicarán. En tales
casos podría ser preferible la notación polifónica estándar.
Este fragmento de código presenta las tres formas en que se pueden
imprimir dos partes sobre un solo pentagrama: polifonía estándar,
\partCombine sin textos, y \partCombine con
textos.
| | %% Combining pedal notes with clef changes
musicUp = \relative c'' {
\time 4/4
a4 c4.( g8) a4 |
g4 e' g,( a8 b) |
c b a2.
}
musicDown = \relative c'' {
g4 e4.( d8) c4 |
r2 g'4( f8 e) |
d2 \stemDown a
}
\score {
<<
\new Staff \with { instrumentName = "Standard polyphony" }
<< \musicUp \\ \musicDown >>
\new Staff \with {
instrumentName = "PartCombine without text"
printPartCombineTexts = ##f
}
\partCombine \musicUp \musicDown
\new Staff \with { instrumentName = "PartCombine with text" }
\partCombine \musicUp \musicDown
>>
\layout {
indent = 6.0\cm
\context {
\Score
\override SystemStartBar.collapse-height = #30
}
}
}
|
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
}
|
Creación de marcas de ensayo simultáneas
A diferencia de las inscripciones de texto, las lestras de ensayo
no se pueden apilar en un punto concreto de la partitura: sólo se
crea un objeto RehearsalMark. Utilizando un compás y línea
divisoria invisibles se puede crear una nueva marca de ensayo,
dando la apariencia de dos marcas en la misma columna.
Este método también puede resultar útil para colocar marcas de
ensayo tanto al final de un sistema como al comienzo del sistema
siguiente.
| | {
\key a \major
\set Score.markFormatter = #format-mark-box-letters
\once \override Score.RehearsalMark.outside-staff-priority = #5000
\once \override Score.RehearsalMark.self-alignment-X = #LEFT
\once \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\mark \markup { \bold { Senza denti } }
% the hidden measure and bar line
% \cadenzaOn turns off automatic calculation of bar numbers
\cadenzaOn
\once \override Score.TimeSignature.stencil = ##f
\time 1/16
s16 \bar ""
\cadenzaOff
\time 4/4
\once \override Score.RehearsalMark.self-alignment-X = #LEFT
\mark \markup { \box \bold Intro }
d'1
\mark \default
d'1
}
|
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
}
|
Muestra de cada uno de los encabezamientos posibles
Muestra de todos los tipos de encabezamiento.
| | \header {
copyright = "copyright"
title = "title"
subtitle = "subtitle"
composer = "composer"
arranger = "arranger"
instrument = "instrument"
metre = "metre"
opus = "opus"
piece = "piece"
poet = "poet"
texidoc = "All header fields with special meanings."
copyright = "public domain"
enteredby = "jcn"
source = "urtext"
}
\layout {
ragged-right = ##f
}
\score {
\relative c'' { c1 | c | c | c }
}
\score {
\relative c'' { c1 | c | c | c }
\header {
title = "localtitle"
subtitle = "localsubtitle"
composer = "localcomposer"
arranger = "localarranger"
instrument = "localinstrument"
metre = "localmetre"
opus = "localopus"
piece = "localpiece"
poet = "localpoet"
copyright = "localcopyright"
}
}
|
Empotrar PostScript nativo dentro de un bloque \markup
Se puede insertar códico PostScript directamente dentro de un
bloque \markup.
| | % PostScript is a registered trademark of Adobe Systems Inc.
\relative c'' {
a4-\markup { \postscript "3 4 moveto 5 3 rlineto stroke" }
-\markup { \postscript "[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " }
b4-\markup { \postscript "3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" }
s2
a'1
}
|
Dar formato a sílabas de la letra
Es posible usar el modo de marcado para dar formato a sílabas
individuales dentro de la letra.
| | mel = \relative c'' { c4 c c c }
lyr = \lyricmode {
Lyrics \markup { \italic can } \markup { \with-color #red contain }
\markup { \fontsize #8 \bold Markup! }
}
<<
\new Voice = melody \mel
\new Lyrics \lyricsto melody \lyr
>>
|
Cómo poner ligaduras entre sílabas de la letra
Se puede hacer separando las sílabas mediante símbolos de tilde curva.
Alineación de la letra
La alineación horizontal de la letra se puede ajustar sobreescribiendo
la propiedad self-alignment-X del objeto LyricText.
#-1 es izquierda, #0 es centrado y #1 es derecha;
sin embargo, podemos usar también #LEFT, #CENTER y
#RIGHT.
| | \layout { ragged-right = ##f }
\relative c'' {
c1
c1
c1
}
\addlyrics {
\once \override LyricText.self-alignment-X = #LEFT
"This is left-aligned"
\once \override LyricText.self-alignment-X = #CENTER
"This is centered"
\once \override LyricText.self-alignment-X = #1
"This is right-aligned"
}
|
Markup list
Text that can spread over pages is entered with the \markuplist
command.
| | %% updated/modified by P.P.Schneider on Feb. 2014
#(set-default-paper-size "a6")
#(define-markup-list-command (paragraph layout props args) (markup-list?)
(interpret-markup-list layout props
(make-justified-lines-markup-list (cons (make-hspace-markup 2) args))))
% Candide, Voltaire
\markuplist {
\override-lines #'(baseline-skip . 2.5) {
\paragraph {
Il y avait en Westphalie, dans le château de M. le baron de
Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné
les mœurs les plus douces. Sa physionomie annonçait son âme.
Il avait le jugement assez droit, avec l'esprit le plus
\concat { simple \hspace #.3 ; }
c'est, je crois, pour cette raison qu'on le nommait Candide. Les
anciens domestiques de la maison soupçonnaient qu'il était fils
de la sœur de monsieur le baron et d'un bon et honnête
gentilhomme du voisinage, que cette demoiselle ne voulut jamais
épouser parce qu'il n'avait pu prouver que soixante et onze
quartiers, et que le reste de son arbre généalogique avait été
perdu par l'injure du temps.
}
\vspace #.3
\paragraph {
Monsieur le baron était un des plus puissants seigneurs de la
Westphalie, car son château avait une porte et des fenêtres. Sa
grande salle même était ornée d'une tapisserie. Tous les chiens
de ses basses-cours composaient une meute dans le
\concat { besoin \hspace #.3 ; }
ses palefreniers étaient ses
\concat { piqueurs \hspace #.3 ; }
le vicaire du village était
son grand-aumônier. Ils l'appelaient tous monseigneur, et ils
riaient quand il faisait des contes.
}
}
}
|
Marcado de silencios multicompás
Los elementos de marcado aplicados a un silencio multicompás se
centran encima o debajo de éste. Los elementos de marcado extensos
que se adjuntan a silencios multicompás no producen la expansión del
compás. Para expandir un silencio multicompás de forma que quepa todo
el marcado, utilice un acorde vacío con un marcado aplicado antes del
silencio multicompás.
El texto aplicado a un siencio sparador de esta forma se alinea por la
izquierda a la posición en que la nota estaría situada dentro del
compás, pero si la longitud del compás está determinada por la
longitud del texto, éste aparecerá centrado.
| | \relative c' {
\compressMMRests {
\textLengthOn
<>^\markup { [MAJOR GENERAL] }
R1*19
<>_\markup { \italic { Cue: ... it is yours } }
<>^\markup { A }
R1*30^\markup { [MABEL] }
\textLengthOff
c4^\markup { CHORUS } d f c
}
}
|
Of the ubiquity of markup objects
Text objects are entered either as simple strings between double quotes
or as \markup blocks that can accept a variety of advanced text
formatting and graphical enhancements.
As such, markup blocks may be used:
* in any TextScript object (attached to notes with -, ^
or _),
* any RehearsalMark introduced with the \mark keyword, or other
similar objects such as MetronomeMark introduced with \tempo,
* as standalone markup blocks, entered at the top level outside of any
\score block,
* in any definition inside the \header block (e.g. title,
subtitle, composer) or in some variables defined inside the
\paper block such as evenHeaderMarkup for page numbers.
\markup may additionally be used for lyrics, in chord names,
and as dynamics. In fact, it is possible to use \markup to
customize the appearance of virtually any object, as demonstrated in
this example using various methods.
| | %% Thanks to Aaron Hill https://lists.gnu.org/archive/html/lilypond-user/2019-01/msg00437.html
\paper {
paper-width = 8\cm paper-height = 8\cm
}
\header {
title = \markup "Header"
tagline = \markup "(tagline)"
}
\markup "Top-level markup"
dyn = #(make-dynamic-script #{ \markup \text "DynamicText" #})
\score {
<<
\new ChordNames
\with { majorSevenSymbol = \markup "majorSevenSymbol" }
\chordmode { c1:maj7 }
\new Staff {
\tempo \markup "MetronomeMark"
\mark \markup "RehearsalMark"
\once \override TupletNumber.text = \markup "TupletNumber"
\tuplet 3/2 {
\once \override NoteHead.stencil = #ly:text-interface::print
\once \override NoteHead.text = \markup \lower #0.5 "NoteHead"
c''8^\markup "TextScript"
\once \override Rest.stencil = #(lambda (grob)
(grob-interpret-markup grob #{
\markup "Rest"
#}))
r4
}
}
\new Lyrics \lyricmode { \markup "LyricText" 1 }
\new Dynamics { s1\dyn }
>>
}
|
Imprimir el número de versión
Introduciendo la salida de lilypond-version en la letra de una
canción, es posible imprimir el número de versión de LilyPond dentro
de una partitura, o en un documento generado con lilypond-book.
Otra posibillidad es añadir el número de versión al final de la
doc-string, de esta forma:
| | \score {
\new Lyrics {
\override Score.RehearsalMark.self-alignment-X = #LEFT
\mark #(string-append "Processed with LilyPond version " (lilypond-version))
s2
}
}
|
Plantilla de piano con letra centrada
En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta
se puede centrar entre los pentagramas de un sistema de piano.
| | upper = \relative c'' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
lower = \relative c {
\clef bass
\key c \major
\time 4/4
a2 c
}
text = \lyricmode {
Aaa Bee Cee Dee
}
\score {
\new PianoStaff <<
\new Staff = upper { \new Voice = "singer" \upper }
\new Lyrics \lyricsto "singer" \text
\new Staff = lower { \lower }
>>
\layout { }
\midi { }
}
|
Printing bar numbers with changing regular intervals
The bar number interval can be changed by changing the context function
{set-bar-number-visibility}.
| | \relative c' {
\override Score.BarNumber.break-visibility = #end-of-line-invisible
\context Score \applyContext #(set-bar-number-visibility 4)
\repeat unfold 10 c'1
\context Score \applyContext #(set-bar-number-visibility 2)
\repeat unfold 10 c
}
|
Imprimir marcas al final de una línea
Se pueden imprimir marcas al final de la línea actual, en vez de al
principio de la línea siguiente. En estos casos, puede ser preferible
alinear el borde derecho de la marca con la línea divisoria.
| | \relative c'' {
g2 c
d,2 a'
\once \override Score.RehearsalMark.break-visibility = #end-of-line-visible
\once \override Score.RehearsalMark.self-alignment-X = #RIGHT
\mark "D.C. al Fine"
\break
g2 b,
c1 \bar "||"
}
|
Imprimir marcas de ensayo en cualquier pentagrama
Aunque normalmente las marcas de ensayo textuales sólo se imprimen
sobre el pentagrama superior, también se pueden imprimir en otro
pentagrama cualquiera.
| | \score {
<<
\new Staff { c''1 \mark "molto" c'' }
\new Staff { c'1 \mark "molto" c' }
>>
\layout {
\context {
\Score
\remove "Mark_engraver"
\remove "Staff_collecting_engraver"
}
\context {
\Staff
\consists "Mark_engraver"
\consists "Staff_collecting_engraver"
}
}
}
|
Impresión de texto de derecha a izquierda
Es posible imprimir texto de derecha a izquierda en un elemento de
marcado, como se muestra aquí.
| | {
b1^\markup {
\line { i n g i r u m i m u s n o c t e }
}
f'_\markup {
\override #'(text-direction . -1)
\line { i n g i r u m i m u s n o c t e }
}
}
|
Putting lyrics inside the staff
Se pueden mover las líneas de letra verticalmente para imprimirlas
dentro del pentagrama. Las letras se mueven con \override
LyricText.extra-offset = #'(0 . dy) y hay instrucciones similares
para mover las líneas extensoras y los guiones. El desplazamiento
necesario se establece mediante un proceso de ensayo y error.
| | <<
\new Staff <<
\new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 }
>>
\new Lyrics \with {
\override LyricText.extra-offset = #'(0 . 8.6)
\override LyricExtender.extra-offset = #'(0 . 8.6)
\override LyricHyphen.extra-offset = #'(0 . 8.6)
} \lyricsto "voc" { La la -- la __ _ la }
>>
|
Elemento de marcado de texto independiente en dos columnas
Los textos independientes se pueden disponer en varias columnas
utilizando instrucciones \markup:
| | \markup {
\fill-line {
\hspace #1
\column {
\line { O sacrum convivium }
\line { in quo Christus sumitur, }
\line { recolitur memoria passionis ejus, }
\line { mens impletur gratia, }
\line { futurae gloriae nobis pignus datur. }
\line { Amen. }
}
\hspace #2
\column \italic {
\line { O sacred feast }
\line { in which Christ is received, }
\line { the memory of His Passion is renewed, }
\line { the mind is filled with grace, }
\line { and a pledge of future glory is given to us. }
\line { Amen. }
}
\hspace #1
}
}
|
Líneas de extensión para números de cuerda
Hacemos una línea extensora para las indicaciones de número de cuerda,
motrando que una serie de notas se han de tocar sobre la misma cuerda.
| | stringNumberSpanner =
#(define-music-function (StringNumber) (string?)
#{
\override TextSpanner.style = #'solid
\override TextSpanner.font-size = #-5
\override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
\override TextSpanner.bound-details.left.text =
\markup { \circle \number $StringNumber }
#})
\relative c {
\clef "treble_8"
\stringNumberSpanner "5"
\textSpannerDown
a8\startTextSpan
b c d e f\stopTextSpan
\stringNumberSpanner "4"
g\startTextSpan a
bes4 a g2\stopTextSpan
}
|
Rectángulo de tres segmentos visibles
Este ejemplo muestra cómo añadir ina instrucción de marcado para
obtener un rectángulo de tres segmentos visibles rodeando un elemento
de texto (u otro elemento de marcado).
| | % New command to add a three sided box, with sides north, west and south
% Based on the box-stencil command defined in scm/stencil.scm
% Note that ";;" is used to comment a line in Scheme
#(define-public (NWS-box-stencil stencil thickness padding)
"Add a box around STENCIL, producing a new stencil."
(let* ((x-ext (interval-widen (ly:stencil-extent stencil X) padding))
(y-ext (interval-widen (ly:stencil-extent stencil Y) padding))
(y-rule (make-filled-box-stencil (cons 0 thickness) y-ext))
(x-rule (make-filled-box-stencil
(interval-widen x-ext thickness) (cons 0 thickness))))
;; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding))
(set! stencil (ly:stencil-combine-at-edge stencil X LEFT y-rule padding))
(set! stencil (ly:stencil-combine-at-edge stencil Y UP x-rule 0.0))
(set! stencil (ly:stencil-combine-at-edge stencil Y DOWN x-rule 0.0))
stencil))
% The corresponding markup command, based on the \box command defined
% in scm/define-markup-commands.scm
#(define-markup-command (NWS-box layout props arg) (markup?)
#:properties ((thickness 0.1) (font-size 0) (box-padding 0.2))
"Draw a box round @var{arg}. Looks at @code{thickness},
@code{box-padding} and @code{font-size} properties to determine line
thickness and padding around the markup."
(let ((pad (* (magstep font-size) box-padding))
(m (interpret-markup layout props arg)))
(NWS-box-stencil m thickness pad)))
% Test it:
\relative c' {
c1^\markup { \NWS-box ABCD }
c1^\markup { \NWS-box \note {4} #1.0 }
}
|
UTF-8
Se pueden usar varios sistemas de escritura para textos (como títulos
o la letra de las canciones) si se introducen en la codificación
UTF-8, y utilizando un motor basado en Pango. Dependiendo de las
tipografías instaladas, este fragmento compone textos en Búlgaro
(cirílico), hebreo, japonés y portugués.
| | % end verbatim - this comment is a hack to prevent texinfo.tex
% from choking on non-European UTF-8 subsets
%% Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs
%{
You may have to install additional fonts.
Red Hat Fedora
linux-libertine-fonts (Latin, Cyrillic, Hebrew)
ipa-mincho-fonts ipa-gothic-fonts (Japanese)
Debian GNU/Linux, Ubuntu
fonts-linuxlibertine (Latin, Cyrillic, Hebrew)
fonts-ipafont (Japanese)
%}
% Font settings for Cyrillic and Hebrew
% Linux Libertine fonts contain Cyrillic and Hebrew glyphs.
\paper {
#(define fonts
(set-global-fonts
#:roman "Linux Libertine O,serif"
#:sans "Linux Biolinum O,sans-serif"
#:typewriter "Linux Libertine Mono O,monospace"
))
}
% Cyrillic font
bulgarian = \lyricmode {
Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон.
}
hebrew = \lyricmode {
זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן.
}
japanese = \lyricmode {
いろはにほへど ちりぬるを
わがよたれぞ つねならむ
うゐのおくや まけふこえて
あさきゆめみじ ゑひもせず
}
% "a legal song to you"
portuguese = \lyricmode {
à vo -- cê uma can -- ção legal
}
\relative c' {
c2 d
e2 f
g2 f
e1
}
\addlyrics { \bulgarian }
\addlyrics { \hebrew }
\addlyrics { \japanese }
\addlyrics { \portuguese }
|
Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas
Esta plantilla es, básicamente, la misma que la sencilla plantilla
“Conjunto vocal”, excepto que aquí todas las líneas de letra se
colocan utilizando alignAboveContext y
alignBelowContext.
| | global = {
\key c \major
\time 4/4
}
sopMusic = \relative c'' {
c4 c c8[( b)] c4
}
sopWords = \lyricmode {
hi hi hi hi
}
altoMusic = \relative c' {
e4 f d e
}
altoWords = \lyricmode {
ha ha ha ha
}
tenorMusic = \relative c' {
g4 a f g
}
tenorWords = \lyricmode {
hu hu hu hu
}
bassMusic = \relative c {
c4 c g c
}
bassWords = \lyricmode {
ho ho ho ho
}
\score {
\new ChoirStaff <<
\new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
\new Lyrics \with { alignAboveContext = #"women" }
\lyricsto "sopranos" \sopWords
\new Lyrics \with { alignBelowContext = #"women" }
\lyricsto "altos" \altoWords
% we could remove the line about this with the line below, since
% we want the alto lyrics to be below the alto Voice anyway.
% \new Lyrics \lyricsto "altos" \altoWords
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
\new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
>>
\new Lyrics \with { alignAboveContext = #"men" }
\lyricsto "tenors" \tenorWords
\new Lyrics \with { alignBelowContext = #"men" }
\lyricsto "basses" \bassWords
% again, we could replace the line above this with the line below.
% \new Lyrics \lyricsto "basses" \bassWords
>>
}
|
Elementos de marcado para el texto de las casillas de repetición usando repeatCommands
Aunque las casillas de repetición se especifican de forma óptima
usando \repeat volta, debe usarse la propiedad de contexto
repeatCommands en caso de que el texto de la casilla requiera
un formato más avanzado con \markup.
Puesto que repeatCommands admite una lista, el método más
sencillo de incluir elementos de marcado es usar un identificador para
el texto e insertarlo en la lista de instrucciones usando la sintaxis
de Scheme #(list (list 'volta textIdentifier)). Las
instrucciones de principio y fin de repetición se pueden añadir como
elementos de lista independientes:
| | voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } }
\relative c'' {
c1
\set Score.repeatCommands = #(list (list 'volta voltaAdLib) 'start-repeat)
c4 b d e
\set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat)
f1
\set Score.repeatCommands = #'((volta #f))
}
|
Vocal music
Vocal music
Añadir un ámbito por voz
Se puede añadir un ámbito por cada voz. En este caso, el ámbito se
debe desplazar manualmente para evitar colisiones.
| | \new Staff <<
\new Voice \with {
\consists "Ambitus_engraver"
} \relative c'' {
\override Ambitus.X-offset = #2.0
\voiceOne
c4 a d e
f1
}
\new Voice \with {
\consists "Ambitus_engraver"
} \relative c' {
\voiceTwo
es4 f g as
b1
}
>>
|
Añadir indicadoes a los pentagramas que se dividen después de un salto de línea
Este fragmento de código define las instrucciones
\splitStaffBarLine, convUpStaffBarLine y
convDownStaffBarLine, que añaden flechas en las sobre una línea
divisoria, para denotar que cada una de las voces que comparten un
pentagrama continúan en su propio pentagrama en el siguiente sistema,
o que las voces así divididas se recombinan.
| | #(define-markup-command (arrow-at-angle layout props angle-deg length fill)
(number? number? boolean?)
(let* (
(PI-OVER-180 (/ (atan 1 1) 34))
(degrees->radians (lambda (degrees) (* degrees PI-OVER-180)))
(angle-rad (degrees->radians angle-deg))
(target-x (* length (cos angle-rad)))
(target-y (* length (sin angle-rad))))
(interpret-markup layout props
(markup
#:translate (cons (/ target-x 2) (/ target-y 2))
#:rotate angle-deg
#:translate (cons (/ length -2) 0)
#:concat (#:draw-line (cons length 0)
#:arrow-head X RIGHT fill)))))
splitStaffBarLineMarkup = \markup \with-dimensions #'(0 . 0) #'(0 . 0) {
\combine
\arrow-at-angle #45 #(sqrt 8) ##t
\arrow-at-angle #-45 #(sqrt 8) ##t
}
splitStaffBarLine = {
\once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob splitStaffBarLineMarkup)
0))
\break
}
convDownStaffBarLine = {
\once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob #{
\markup\with-dimensions #'(0 . 0) #'(0 . 0) {
\translate #'(0 . -.13)\arrow-at-angle #-45 #(sqrt 8) ##t
}#})
0))
\break
}
convUpStaffBarLine = {
\once \override Staff.BarLine.stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob #{
\markup\with-dimensions #'(0 . 0) #'(0 . 0) {
\translate #'(0 . .14)\arrow-at-angle #45 #(sqrt 8) ##t
}#})
0))
\break
}
\paper {
ragged-right = ##t
short-indent = 10\mm
}
separateSopranos = {
\set Staff.instrumentName = "AI AII"
\set Staff.shortInstrumentName = "AI AII"
\splitStaffBarLine
\change Staff = "up"
}
convSopranos = {
\convDownStaffBarLine
\change Staff = "shared"
\set Staff.instrumentName = "S A"
\set Staff.shortInstrumentName = "S A"
}
sI = {
\voiceOne
\repeat unfold 4 f''2
\separateSopranos
\repeat unfold 4 g''2
\convSopranos
\repeat unfold 4 c''2
}
sII = {
s1*2
\voiceTwo
\change Staff = "up"
\repeat unfold 4 d''2
}
aI = {
\voiceTwo
\repeat unfold 4 a'2
\voiceOne
\repeat unfold 4 b'2
\convUpStaffBarLine
\voiceTwo
\repeat unfold 4 g'2
}
aII = {
s1*2
\voiceTwo
\repeat unfold 4 g'2
}
ten = {
\voiceOne
\repeat unfold 4 c'2
\repeat unfold 4 d'2
\repeat unfold 4 c'2
}
bas = {
\voiceTwo
\repeat unfold 4 f2
\repeat unfold 4 g2
\repeat unfold 4 c2
}
\score {
<<
\new ChoirStaff <<
\new Staff = up \with {
instrumentName = "SI SII"
shortInstrumentName = "SI SII"
} {
s1*4
}
\new Staff = shared \with {
instrumentName = "S A"
shortInstrumentName = "S A"
} <<
\new Voice = sopI \sI
\new Voice = sopII \sII
\new Voice = altI \aI
\new Voice = altII \aII
>>
\new Lyrics \with {
alignBelowContext = up
}
\lyricsto sopII { e f g h }
\new Lyrics \lyricsto altI { a b c d e f g h i j k l }
\new Staff = men \with {
instrumentName = "T B"
shortInstrumentName = "T B"
} <<
\clef F
\new Voice = ten \ten
\new Voice = bas \bas
>>
\new Lyrics \lyricsto bas { a b c d e f g h i j k l }
>>
>>
\layout {
\context {
\Staff \RemoveEmptyStaves
\override VerticalAxisGroup.remove-first = ##t
}
}
}
|
Añadir notas guía orquestales a una partitura vocal
Este ejemplo muestra una forma de simplificar la adición de muchas
notas guía orquestales a la reducción de piano en una partitura vocal.
La función musical \cueWhile toma cuatro argumentos: la música
de la que se toma la cita, como viene definida por \addQuote,
el nombre que insertar antes de las notas guía, y después #UP o
#DOWN para especificar \voiceOne con el nombre encima
del pentagrama o bien \voiceTwo con el nombre debajo del
pentagrama, y finalmente la música de piano con la que las notas guía
deben aparecer en paralelo. El nombre del instrumento citado se
posiciona a la izquierda de las notas guía. Se pueden citar muchos
pasajes como guía, pero no se pueden superponer en el tiempo entre
ellos.
| | cueWhile =
#(define-music-function
(instrument name dir music)
(string? string? ly:dir? ly:music?)
#{
\cueDuring $instrument #dir {
\once \override TextScript.self-alignment-X = #RIGHT
\once \override TextScript.direction = $dir
<>-\markup { \tiny #name }
$music
}
#})
flute = \relative c'' {
\transposition c'
s4 s4 e g
}
\addQuote "flute" { \flute }
clarinet = \relative c' {
\transposition bes
fis4 d d c
}
\addQuote "clarinet" { \clarinet }
singer = \relative c'' { c4. g8 g4 bes4 }
words = \lyricmode { here's the lyr -- ics }
pianoRH = \relative c'' {
\transposition c'
\cueWhile "clarinet" "Clar." #DOWN { c4. g8 }
\cueWhile "flute" "Flute" #UP { g4 bes4 }
}
pianoLH = \relative c { c4 <c' e> e, <g c> }
\score {
<<
\new Staff {
\new Voice = "singer" {
\singer
}
}
\new Lyrics {
\lyricsto "singer"
\words
}
\new PianoStaff <<
\new Staff {
\new Voice {
\pianoRH
}
}
\new Staff {
\clef "bass"
\pianoLH
}
>>
>>
}
|
Ajuste del especiado vertical de la letra
Este fragmento de código muestra cómo situar la línea de base de la
letra más cerca del pentagrama.
| | % Default layout:
<<
\new Staff \new Voice = melody \relative c' {
c4 d e f
g4 f e d
c1
}
\new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa }
\new Staff {
\new Voice = melody \relative c' {
c4 d e f
g4 f e d
c1
}
}
% Reducing the minimum space below the staff and above the lyrics:
\new Lyrics \with {
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
#'((basic-distance . 1))
}
\lyricsto melody { aa aa aa aa aa aa aa aa aa }
>>
|
Alineación de sílabas con melisma
De forma predeterminada, las sílabas de la letra que comienzan un
melisma se alinean a la izquierda sobre su nota correspondiente. Se
puede alterar la alineación usando la propiedad
lyricMelismaAlignment.
| | \score {
<<
\new Staff {
\relative c''
\new Voice = "vocal" {
c d~^\markup default d e
c d~^\markup "right aligned" d e
c d~^\markup "center aligned" d e
c d~^\markup "reset to default" d e
}
}
\new Lyrics \lyricsto "vocal" {
word word word
\set lyricMelismaAlignment = #RIGHT
word word word
\set lyricMelismaAlignment = #CENTER
word word word
\unset lyricMelismaAlignment
word word word
}
>>
}
|
Ámbitos con varias voces
La adición del grabador Ambitus_engraver al contexto de
Staff crea un solo ámbito por pentagrama, incluso en el caso de
pentagramas con varias voces.
| | \new Staff \with {
\consists "Ambitus_engraver"
}
<<
\new Voice \relative c'' {
\voiceOne
c4 a d e
f1
}
\new Voice \relative c' {
\voiceTwo
es4 f g as
b1
}
>>
|
Indicaciones de tesitura
Las indicaciones de ámbito o tesitura indican rangos de alturas para
las voces.
Las alteraciones accidentales sólo se muestran si no forman parte de
la armadura de tonalidad. Los objetos gráficos AmbitusNoteHead
también tienen líneas adicionales.
| | \layout {
\context {
\Voice
\consists "Ambitus_engraver"
}
}
<<
\new Staff {
\relative c' {
\time 2/4
c4 f'
}
}
\new Staff {
\relative c' {
\time 2/4
\key d \major
cis4 as'
}
}
>>
|
Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)
Este ejemplo muestra cómo hacer una transcripción moderna de canto
gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza
solamente cabezas de nota de blanca y de negra, y unas marcas
especiales que indican silencios de distintas longitudes.
| | \include "gregorian.ly"
chant = \relative c' {
\set Score.timing = ##f
f4 a2 \divisioMinima
g4 b a2 f2 \divisioMaior
g4( f) f( g) a2 \finalis
}
verba = \lyricmode {
Lo -- rem ip -- sum do -- lor sit a -- met
}
\score {
\new Staff <<
\new Voice = "melody" \chant
\new Lyrics = "one" \lyricsto melody \verba
>>
\layout {
\context {
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
\hide Stem
}
\context {
\Voice
\override Stem.length = #0
}
\context {
\Score
barAlways = ##t
}
}
}
|
Plantilla de salmo del canto anglicano
Esta plantilla muestra una forma de preparar un cántico salmódico
anglicano. También muestra cómo se pueden añadir estrofas adicionales
como texto independiente por debajo de la música. Las dos estrofas se
codifican en estilos diferentes para ilustrar más posibilidades.
| | SopranoMusic = \relative g' {
g1 | c2 b | a1 | \bar "||"
a1 | d2 c | c b | c1 | \bar "||"
}
AltoMusic = \relative c' {
e1 | g2 g | f1 |
f1 | f2 e | d d | e1 |
}
TenorMusic = \relative a {
c1 | c2 c | c1 |
d1 | g,2 g | g g | g1 |
}
BassMusic = \relative c {
c1 | e2 e | f1 |
d1 | b2 c | g' g | c,1 |
}
global = {
\time 2/2
}
dot = \markup {
\raise #0.7 \musicglyph "dots.dot"
}
tick = \markup {
\raise #1 \fontsize #-5 \musicglyph "scripts.rvarcomma"
}
% Use markup to center the chant on the page
\markup {
\fill-line {
\score { % centered
<<
\new ChoirStaff <<
\new Staff <<
\global
\clef "treble"
\new Voice = "Soprano" <<
\voiceOne
\SopranoMusic
>>
\new Voice = "Alto" <<
\voiceTwo
\AltoMusic
>>
>>
\new Staff <<
\clef "bass"
\global
\new Voice = "Tenor" <<
\voiceOne
\TenorMusic
>>
\new Voice = "Bass" <<
\voiceTwo
\BassMusic
>>
>>
>>
>>
\layout {
\context {
\Score
\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
}
\context {
\Staff
\remove "Time_signature_engraver"
}
}
} % End score
}
} % End markup
\markup {
\fill-line {
\column {
\left-align {
\null \null \null
\line {
\fontsize #5 O
\fontsize #3 come
let us \bold sing | unto \dot the | Lord : let
}
\line {
us heartily
\concat { re \bold joice }
in the | strength of | our
}
\line {
sal | vation.
}
\null
\line {
\hspace #2.5 8. Today if ye will hear his voice *
}
\line {
\concat { \bold hard en }
\tick not your \tick hearts : as in the pro-
}
\line {
vocation * and as in the \bold day of tempt- \tick
}
\line {
-ation \tick in the \tick wilderness.
}
}
}
}
}
|
Arranging separate lyrics on a single line
Sometimes you may want to put lyrics for different performers on a
single line: where there is rapidly alternating text, for example.
This snippet shows how this can be done with \override
VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = ##f.
| | \layout {
\context {
\Lyrics
\override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = ##f
}
}
aliceSings = \markup { \smallCaps "Alice" }
eveSings = \markup { \smallCaps "Eve" }
<<
\new Staff <<
\new Voice = "alice" {
f'4^\aliceSings g' r2 |
s1 |
f'4^\aliceSings g' r2 |
s1 | \break
% ...
\voiceOne
s2 a'8^\aliceSings a' b'4 |
\oneVoice
g'1
}
\new Voice = "eve" {
s1 |
a'2^\eveSings g' |
s1 |
a'2^\eveSings g'
% ...
\voiceTwo
f'4^\eveSings a'8 g' f'4 e' |
\oneVoice
s1
}
>>
\new Lyrics \lyricsto "alice" {
may -- be
sec -- ond
% ...
Shut up, you fool!
}
\new Lyrics \lyricsto "eve" {
that the
words are
% ...
…and then I was like–
}
>>
|
Modificar la tipografía para cada estrofa
Se pueden cambiar las fuentes tipográficas de forma independiente para
cada estrofa, incuida la fuente que se usa para imprimir el número de
estrofa.
| | \relative c'' {
\time 3/4
g2 e4
a2 f4
g2.
}
\addlyrics {
\set stanza = #"1. "
Hi, my name is Bert.
}
\addlyrics {
\override StanzaNumber.font-name = #"DejaVu Sans"
\set stanza = #"2. "
\override LyricText.font-family = #'typewriter
Oh, ché -- ri, je t'aime
}
|
Notación de responsos o salmos
Este tipo de notación se utiliza para los cantos salmódicos, en
que las estrofas no siempre tienen la misma longitud.
| | stemOff = \hide Staff.Stem
stemOn = \undo \stemOff
\score {
\new Staff \with { \remove "Time_signature_engraver" }
{
\key g \minor
\cadenzaOn
\stemOff a'\breve bes'4 g'4
\stemOn a'2 \bar "||"
\stemOff a'\breve g'4 a'4
\stemOn f'2 \bar "||"
\stemOff a'\breve^\markup { \italic flexe }
\stemOn g'2 \bar "||"
}
}
|
Forzar la visibilidad de los guiones separadores de sílabas
Si LilyPond no cree que haya sitio suficiente para un guión separador
de sílabas, lo omitirá. Se puede sobreescribir este comportamiento
con la propiedad minimum-distance de LyricHyphen.
| | \relative c'' {
c32 c c c
c32 c c c
c32 c c c
c32 c c c
}
\addlyrics {
syl -- lab word word
\override LyricHyphen.minimum-distance = #1.0
syl -- lab word word
\override LyricHyphen.minimum-distance = #2.0
syl -- lab word word
\revert LyricHyphen.minimum-distance
syl -- lab word word
}
|
Dar formato a sílabas de la letra
Es posible usar el modo de marcado para dar formato a sílabas
individuales dentro de la letra.
| | mel = \relative c'' { c4 c c c }
lyr = \lyricmode {
Lyrics \markup { \italic can } \markup { \with-color #red contain }
\markup { \fontsize #8 \bold Markup! }
}
<<
\new Voice = melody \mel
\new Lyrics \lyricsto melody \lyr
>>
|
Cómo poner ligaduras entre sílabas de la letra
Se puede hacer separando las sílabas mediante símbolos de tilde curva.
Plantilla para himnos
Este fragmento de código muestra una forma de preparar un himno cuando
cada línea comienza con un compás parcial. También muestra cómo
añadir los versos como texto independiente debajo de la música.
| | Timeline = {
\time 4/4
\tempo 4=96
\partial 2
s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||" \break
s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||"
}
SopranoMusic = \relative g' {
g4 g | g g g g | g g g g | g g g g | g2
g4 g | g g g g | g g g g | g g g g | g2
}
AltoMusic = \relative c' {
d4 d | d d d d | d d d d | d d d d | d2
d4 d | d d d d | d d d d | d d d d | d2
}
TenorMusic = \relative a {
b4 b | b b b b | b b b b | b b b b | b2
b4 b | b b b b | b b b b | b b b b | b2
}
BassMusic = \relative g {
g4 g | g g g g | g g g g | g g g g | g2
g4 g | g g g g | g g g g | g g g g | g2
}
global = {
\key g \major
}
\score { % Start score
<<
\new PianoStaff << % Start pianostaff
\new Staff << % Start Staff = RH
\global
\clef "treble"
\new Voice = "Soprano" << % Start Voice = "Soprano"
\Timeline
\voiceOne
\SopranoMusic
>> % End Voice = "Soprano"
\new Voice = "Alto" << % Start Voice = "Alto"
\Timeline
\voiceTwo
\AltoMusic
>> % End Voice = "Alto"
>> % End Staff = RH
\new Staff << % Start Staff = LH
\global
\clef "bass"
\new Voice = "Tenor" << % Start Voice = "Tenor"
\Timeline
\voiceOne
\TenorMusic
>> % End Voice = "Tenor"
\new Voice = "Bass" << % Start Voice = "Bass"
\Timeline
\voiceTwo
\BassMusic
>> % End Voice = "Bass"
>> % End Staff = LH
>> % End pianostaff
>>
} % End score
\markup {
\fill-line {
""
{
\column {
\left-align {
"This is line one of the first verse"
"This is line two of the same"
"And here's line three of the first verse"
"And the last line of the same"
}
}
}
""
}
}
\paper { % Start paper block
indent = 0 % don't indent first system
line-width = 130 % shorten line length to suit music
} % End paper block
|
Alineación de la letra
La alineación horizontal de la letra se puede ajustar sobreescribiendo
la propiedad self-alignment-X del objeto LyricText.
#-1 es izquierda, #0 es centrado y #1 es derecha;
sin embargo, podemos usar también #LEFT, #CENTER y
#RIGHT.
| | \layout { ragged-right = ##f }
\relative c'' {
c1
c1
c1
}
\addlyrics {
\once \override LyricText.self-alignment-X = #LEFT
"This is left-aligned"
\once \override LyricText.self-alignment-X = #CENTER
"This is centered"
\once \override LyricText.self-alignment-X = #1
"This is right-aligned"
}
|
Marcar notas de las partes habladas con unas aspas en la plica
Este ejemplo muestra cómo añadir aspas sobre las plicas. Marcamos el
comienzo de una sección hablada con la palabra clave \speakOn,
y la finalizamos con la palabra clave \speakOff.
| | speakOn = {
\override Stem.stencil =
#(lambda (grob)
(let* ((x-parent (ly:grob-parent grob X))
(is-rest? (ly:grob? (ly:grob-object x-parent 'rest))))
(if is-rest?
empty-stencil
(ly:stencil-combine-at-edge
(ly:stem::print grob)
Y
(- (ly:grob-property grob 'direction))
(grob-interpret-markup grob
(markup #:center-align #:fontsize -4
#:musicglyph "noteheads.s2cross"))
-2.3))))
}
speakOff = {
\revert Stem.stencil
\revert Flag.stencil
}
\score {
\new Staff {
\relative c'' {
a4 b a c
\speakOn
g4 f r g
b4 r d e
\speakOff
c4 a g f
}
}
}
|
Conseguir el espaciado de la letra de la versión 2.12
en versiones más recientes
El motor de espaciado vertical cambió en la versión 2.14. Esto puede
hacer que se altere el espaciado de la letra de las canciones. Es
posible fijar propiedades para los contextos Lyric y
Staff de forma que el motor de espaciado se comporte como lo
hacía en la versión 2.12.
| | global = {
\key d \major
\time 3/4
}
sopMusic = \relative c' {
% VERSE ONE
fis4 fis fis | \break
fis4. e8 e4
}
altoMusic = \relative c' {
% VERSE ONE
d4 d d |
d4. b8 b4 |
}
tenorMusic = \relative c' {
a4 a a |
b4. g8 g4 |
}
bassMusic = \relative c {
d4 d d |
g,4. g8 g4 |
}
words = \lyricmode {
Great is Thy faith -- ful -- ness,
}
\score {
\new ChoirStaff <<
\new Lyrics = sopranos
\new Staff = women <<
\new Voice = "sopranos" {
\voiceOne
\global \sopMusic
}
\new Voice = "altos" {
\voiceTwo
\global \altoMusic
}
>>
\new Lyrics = "altos"
\new Lyrics = "tenors"
\new Staff = men <<
\clef bass
\new Voice = "tenors" {
\voiceOne
\global \tenorMusic
}
\new Voice = "basses" {
\voiceTwo \global \bassMusic
}
>>
\new Lyrics = basses
\context Lyrics = sopranos \lyricsto sopranos \words
\context Lyrics = altos \lyricsto altos \words
\context Lyrics = tenors \lyricsto tenors \words
\context Lyrics = basses \lyricsto basses \words
>>
\layout {
\context {
\Lyrics
\override VerticalAxisGroup.staff-affinity = ##f
\override VerticalAxisGroup.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 2)
(padding . 2))
}
\context {
\Staff
\override VerticalAxisGroup.staff-staff-spacing =
#'((basic-distance . 0)
(minimum-distance . 2)
(padding . 2))
}
}
}
|
Plantilla de orquesta con coro y piano
Esta plantilla muestra el uso de contextos StaffGroup y
GrandStaff anidados para sub-agrupar instrumentos del mismo
tipo, y una forma de usar \transpose de manera que unas
variables contengan la música para instrumentos transpositores en
afinación de concierto.
| | #(set-global-staff-size 17)
\paper {
indent = 3.0\cm % add space for instrumentName
short-indent = 1.5\cm % add less space for shortInstrumentName
}
fluteMusic = \relative c' { \key g \major g'1 b }
% Pitches as written on a manuscript for Clarinet in A
% are transposed to concert pitch.
clarinetMusic = \transpose c' a
\relative c'' { \key bes \major bes1 d }
trumpetMusic = \relative c { \key g \major g''1 b }
% Key signature is often omitted for horns
hornMusic = \transpose c' f
\relative c { d'1 fis }
percussionMusic = \relative c { \key g \major g1 b }
sopranoMusic = \relative c'' { \key g \major g'1 b }
sopranoLyrics = \lyricmode { Lyr -- ics }
altoIMusic = \relative c' { \key g \major g'1 b }
altoIIMusic = \relative c' { \key g \major g'1 b }
altoILyrics = \sopranoLyrics
altoIILyrics = \lyricmode { Ah -- ah }
tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b }
tenorLyrics = \sopranoLyrics
pianoRHMusic = \relative c { \key g \major g''1 b }
pianoLHMusic = \relative c { \clef bass \key g \major g1 b }
violinIMusic = \relative c' { \key g \major g'1 b }
violinIIMusic = \relative c' { \key g \major g'1 b }
violaMusic = \relative c { \clef alto \key g \major g'1 b }
celloMusic = \relative c { \clef bass \key g \major g1 b }
bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b }
\score {
<<
\new StaffGroup = "StaffGroup_woodwinds" <<
\new Staff = "Staff_flute" \with { instrumentName = "Flute" }
\fluteMusic
\new Staff = "Staff_clarinet" \with {
instrumentName = \markup { \concat { "Clarinet in B" \flat } }
}
% Declare that written Middle C in the music
% to follow sounds a concert B flat, for
% output using sounded pitches such as MIDI.
%\transposition bes
% Print music for a B-flat clarinet
\transpose bes c' \clarinetMusic
>>
\new StaffGroup = "StaffGroup_brass" <<
\new Staff = "Staff_hornI" \with { instrumentName = "Horn in F" }
% \transposition f
\transpose f c' \hornMusic
\new Staff = "Staff_trumpet" \with { instrumentName = "Trumpet in C" }
\trumpetMusic
>>
\new RhythmicStaff = "RhythmicStaff_percussion"
\with { instrumentName = "Percussion" }
<<
\percussionMusic
>>
\new PianoStaff \with { instrumentName = "Piano" }
<<
\new Staff { \pianoRHMusic }
\new Staff { \pianoLHMusic }
>>
\new ChoirStaff = "ChoirStaff_choir" <<
\new Staff = "Staff_soprano" \with { instrumentName = "Soprano" }
\new Voice = "soprano"
\sopranoMusic
\new Lyrics \lyricsto "soprano" { \sopranoLyrics }
\new GrandStaff = "GrandStaff_altos"
\with { \accepts Lyrics } <<
\new Staff = "Staff_altoI" \with { instrumentName = "Alto I" }
\new Voice = "altoI"
\altoIMusic
\new Lyrics \lyricsto "altoI" { \altoILyrics }
\new Staff = "Staff_altoII" \with { instrumentName = "Alto II" }
\new Voice = "altoII"
\altoIIMusic
\new Lyrics \lyricsto "altoII" { \altoIILyrics }
>>
\new Staff = "Staff_tenor" \with { instrumentName = "Tenor" }
\new Voice = "tenor"
\tenorMusic
\new Lyrics \lyricsto "tenor" { \tenorLyrics }
>>
\new StaffGroup = "StaffGroup_strings" <<
\new GrandStaff = "GrandStaff_violins" <<
\new Staff = "Staff_violinI" \with { instrumentName = "Violin I" }
\violinIMusic
\new Staff = "Staff_violinII" \with { instrumentName = "Violin II" }
\violinIIMusic
>>
\new Staff = "Staff_viola" \with { instrumentName = "Viola" }
\violaMusic
\new Staff = "Staff_cello" \with { instrumentName = "Cello" }
\celloMusic
\new Staff = "Staff_bass" \with { instrumentName = "Double Bass" }
\bassMusic
>>
>>
\layout { }
}
|
Plantilla de piano con melodía y letra
He aquí el típico formato dde una canción: un pentagrama con la
melodía y la letra, y el acompañamiento de piano por debajo.
| | melody = \relative c'' {
\clef treble
\key c \major
\time 4/4
a b c d
}
text = \lyricmode {
Aaa Bee Cee Dee
}
upper = \relative c'' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
lower = \relative c {
\clef bass
\key c \major
\time 4/4
a2 c
}
\score {
<<
\new Voice = "mel" { \autoBeamOff \melody }
\new Lyrics \lyricsto mel \text
\new PianoStaff <<
\new Staff = "upper" \upper
\new Staff = "lower" \lower
>>
>>
\layout {
\context { \Staff \RemoveEmptyStaves }
}
\midi { }
}
|
Putting lyrics inside the staff
Se pueden mover las líneas de letra verticalmente para imprimirlas
dentro del pentagrama. Las letras se mueven con \override
LyricText.extra-offset = #'(0 . dy) y hay instrucciones similares
para mover las líneas extensoras y los guiones. El desplazamiento
necesario se establece mediante un proceso de ensayo y error.
| | <<
\new Staff <<
\new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 }
>>
\new Lyrics \with {
\override LyricText.extra-offset = #'(0 . 8.6)
\override LyricExtender.extra-offset = #'(0 . 8.6)
\override LyricHyphen.extra-offset = #'(0 . 8.6)
} \lyricsto "voc" { La la -- la __ _ la }
>>
|
Plantilla de coro SATB, a cuatro pentagramas
Plantilla de coro SATB (en cuatro pentagramas)
| | global = {
\key c \major
\time 4/4
\dynamicUp
}
sopranonotes = \relative c'' {
c2 \p \< d c d \f
}
sopranowords = \lyricmode { do do do do }
altonotes = \relative c'' {
c2\p d c d
}
altowords = \lyricmode { re re re re }
tenornotes = {
\clef "G_8"
c2\mp d c d
}
tenorwords = \lyricmode { mi mi mi mi }
bassnotes = {
\clef bass
c2\mf d c d
}
basswords = \lyricmode { mi mi mi mi }
\score {
\new ChoirStaff <<
\new Staff <<
\new Voice = "soprano" <<
\global
\sopranonotes
>>
\new Lyrics \lyricsto "soprano" \sopranowords
>>
\new Staff <<
\new Voice = "alto" <<
\global
\altonotes
>>
\new Lyrics \lyricsto "alto" \altowords
>>
\new Staff <<
\new Voice = "tenor" <<
\global
\tenornotes
>>
\new Lyrics \lyricsto "tenor" \tenorwords
>>
\new Staff <<
\new Voice = "bass" <<
\global
\bassnotes
>>
\new Lyrics \lyricsto "bass" \basswords
>>
>>
}
|
Plantilla de pentagrama único con música, letra y acordes
Esta plantilla facilita la preparación de una canción con melodía,
letra y acordes.
| | melody = \relative c' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
text = \lyricmode {
Aaa Bee Cee Dee
}
harmonies = \chordmode {
a2 c
}
\score {
<<
\new ChordNames {
\set chordChanges = ##t
\harmonies
}
\new Voice = "one" { \autoBeamOff \melody }
\new Lyrics \lyricsto "one" \text
>>
\layout { }
\midi { }
}
|
Plantilla para un pentagrama único con música, letra, acordes y trastes
Presentamos a continuación un ejemplo de plantilla para una hoja
guía de acordes con melodía, letra, acordes y diagramas de
trastes.
| | verseI = \lyricmode {
\set stanza = #"1."
This is the first verse
}
verseII = \lyricmode {
\set stanza = #"2."
This is the second verse.
}
theChords = \chordmode {
% insert chords for chordnames and fretboards here
c2 g4 c
}
staffMelody = \relative c' {
\key c \major
\clef treble
% Type notes for melody here
c4 d8 e f4 g
\bar "|."
}
\score {
<<
\context ChordNames { \theChords }
\context FretBoards { \theChords }
\new Staff {
\context Voice = "voiceMelody" { \staffMelody }
}
\new Lyrics = "lyricsI" {
\lyricsto "voiceMelody" \verseI
}
\new Lyrics = "lyricsII" {
\lyricsto "voiceMelody" \verseII
}
>>
\layout { }
\midi { }
}
|
Plantilla de pentagrama único don notas y letra
Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela
y péguela, escriba las notas y luego la letra. Este ejemplo desactiva
el barrado automático, que es lo más frecuente en las partes vocales
antiguas. Para usar el barrado automático modifique o marque como un
comentario la línea correspondiente.
| | melody = \relative c' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
text = \lyricmode {
Aaa Bee Cee Dee
}
\score{
<<
\new Voice = "one" {
\autoBeamOff
\melody
}
\new Lyrics \lyricsto "one" \text
>>
\layout { }
\midi { }
}
|
Silencios de separación en modo de letra (2)
Aunque no se pueden usar los silencios de separación s dentro
de \lyricmode (se toman como una “s”, literal, no como un
espacio), sí están disponibles las comillas dobles ("") y el
carácter subrayado (_). Así por ejemplo:
| | <<
\relative c'' { a4 b c d }
\new Lyrics \lyricmode { a4 "" _ gap }
>>
|
Silencios de separación en modo de letra
La sintaxis s para los silencios de desplazamiento solamente
está disponible en los modos de nota y de acorde. En otras
situaciones, por ejemplo al escribir la letra de las canciones, se
recomienda usar la instrucción \skip.
| | <<
\relative c'' { a1 | a }
\new Lyrics \lyricmode { \skip 1 bla1 }
>>
|
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 }
}
|
Using tags to produce mensural and modern music from the same source
By using tags, it’s possible to use the same music to produce both
mensural and modern music. In this snippet, a function menrest
is introduced, allowing mensural rests to be pitched as in the
original, but with modern rests in the standard staff position. Tags
are used to produce different types of bar line at the end of the
music, but tags can also be used where other differences are needed:
for example using “whole measure rests” (R1, R\breve etc.) in
modern music, but normal rests (r1, r\breve, etc.) in the mensural
version. Note that converting mensural music to its modern equivalent
is usually referred to as transcription.
| | menrest = #(define-music-function (note)
(ly:music?)
#{
\tag #'mens $(make-music 'RestEvent note)
\tag #'mod $(make-music 'RestEvent note 'pitch '())
#})
MensStyle = {
\autoBeamOff
\override NoteHead.style = #'petrucci
\override Score.BarNumber.transparent = ##t
\override Stem.neutral-direction = #up
}
finalis = {
\once \override BreathingSign.stencil = #ly:breathing-sign::finalis
\once \override BreathingSign.Y-offset = #0
\once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
\once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
\breathe
}
Music = \relative c'' {
\set Score.tempoHideNote = ##t
\key f \major
\time 4/4
g1 d'2 \menrest bes4 bes2 a2 r4 g4 fis2.
\tag #'mens { \finalis }
\tag #'mod { \bar "||" }
}
MenLyr = \lyricmode { So farre, deere life, deare life }
ModLyr = \lyricmode { So far, dear life, dear life }
\score {
\keepWithTag #'mens {
<<
\new MensuralStaff
{
\new MensuralVoice = Cantus \clef "mensural-c1" \MensStyle \Music
}
\new Lyrics \lyricsto Cantus \MenLyr
>>
}
}
\score {
\keepWithTag #'mod {
\new ChoirStaff <<
\new Staff
{
\new Voice = Sop \with {
\remove "Note_heads_engraver"
\consists "Completion_heads_engraver"
\remove "Rest_engraver"
\consists "Completion_rest_engraver" }
{
\shiftDurations #1 #0 { \autoBeamOff \Music }
}
}
\new Lyrics \lyricsto Sop \ModLyr
>>
}
}
|
Alineación vertical de la letra y los compases de ossia
Este fragmento de código muestra el uso de las propiedades de
contexto alignBelowContext y alignAboveContext para
controlar la posición de la letra y los compases de ossia.
| | \paper {
ragged-right = ##t
}
\relative c' <<
\new Staff = "1" { c4 c s2 }
\new Staff = "2" { c4 c s2 }
\new Staff = "3" { c4 c s2 }
{ \skip 2
<<
\lyrics {
\set alignBelowContext = #"1"
lyrics4 below
}
\new Staff \with {
alignAboveContext = #"3"
fontSize = #-2
\override StaffSymbol.staff-space = #(magstep -2)
\remove "Time_signature_engraver"
} {
\tuplet 6/4 {
\override TextScript.padding = #3
c8[^"ossia above" d e d e f]
}
}
>>
}
>>
|
Letra común centrada verticalmente
En una pieza vocal en la que hay varias líneas de letra (dos, cuatro o
más) y hay letras comunes a todas las voces en algún punto, se puede
hacer que las letras comunes se centren verticalmente como se muestra en el
siguiente ejemplo:
| | dropLyrics = {
\override LyricText.extra-offset = #'(0 . -4.5)
\override LyricHyphen.extra-offset = #'(0 . -4.5)
\override LyricExtender.extra-offset = #'(0 . -4.5)
\override StanzaNumber.extra-offset = #'(0 . -4.5)
}
raiseLyrics = {
\revert LyricText.extra-offset
\revert LyricHyphen.extra-offset
\revert LyricExtender.extra-offset
\revert StanzaNumber.extra-offset
}
skipFour = \repeat unfold 4 { \skip 8 }
lyricsA = \lyricmode {
The first verse has
\dropLyrics
\set stanza = #" All:"
the com -- mon __ words
\raiseLyrics
used in all four.
}
lyricsB = \lyricmode { In stan -- za two, \skipFour al -- so ap -- pear. }
lyricsC = \lyricmode { By the third verse, \skipFour are get -- ting dull. }
lyricsD = \lyricmode { Last stan -- za, and \skipFour get used once more. }
melody = \relative c' {
c4 d e f |
g f e8( e f) d |
c4 e d c |
}
\score {
<<
\new Voice = m \melody
\new Lyrics \lyricsto m \lyricsA
\new Lyrics \lyricsto m \lyricsB
\new Lyrics \lyricsto m \lyricsC
\new Lyrics \lyricsto m \lyricsD
>>
}
|
Plantilla de conjunto vocal con reducción de piano automática
Esta plantilla añade una reducción de piano automática a la partitura
vocal SATB estándar que se mostró en la “Plantilla de conjunto
vocal”. Esto presenta uno de los puntos fuertes de LilyPond: podemos
usar una definición de música más de una vez. Si se hace cualquier
cambio en las notas de la parte vocal (digamos tenorMusic),
entonces los cambios se aplicarán también a la reducción de piano.
| | \paper {
top-system-spacing.basic-distance = #10
score-system-spacing.basic-distance = #20
system-system-spacing.basic-distance = #20
last-bottom-spacing.basic-distance = #10
}
global = {
\key c \major
\time 4/4
}
sopMusic = \relative {
c''4 c c8[( b)] c4
}
sopWords = \lyricmode {
hi hi hi hi
}
altoMusic = \relative {
e'4 f d e
}
altoWords =\lyricmode {
ha ha ha ha
}
tenorMusic = \relative {
g4 a f g
}
tenorWords = \lyricmode {
hu hu hu hu
}
bassMusic = \relative {
c4 c g c
}
bassWords = \lyricmode {
ho ho ho ho
}
\score {
<<
\new ChoirStaff <<
\new Lyrics = "sopranos" \with {
% This is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
\new Lyrics = "altos"
\new Lyrics = "tenors" \with {
% This is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
\new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
>>
\new Lyrics = "basses"
\context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
\context Lyrics = "altos" \lyricsto "altos" \altoWords
\context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
\context Lyrics = "basses" \lyricsto "basses" \bassWords
>>
\new PianoStaff <<
\new Staff <<
\set Staff.printPartCombineTexts = ##f
\partCombine
<< \global \sopMusic >>
<< \global \altoMusic >>
>>
\new Staff <<
\clef bass
\set Staff.printPartCombineTexts = ##f
\partCombine
<< \global \tenorMusic >>
<< \global \bassMusic >>
>>
>>
>>
}
|
Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas
Esta plantilla es, básicamente, la misma que la sencilla plantilla
“Conjunto vocal”, excepto que aquí todas las líneas de letra se
colocan utilizando alignAboveContext y
alignBelowContext.
| | global = {
\key c \major
\time 4/4
}
sopMusic = \relative c'' {
c4 c c8[( b)] c4
}
sopWords = \lyricmode {
hi hi hi hi
}
altoMusic = \relative c' {
e4 f d e
}
altoWords = \lyricmode {
ha ha ha ha
}
tenorMusic = \relative c' {
g4 a f g
}
tenorWords = \lyricmode {
hu hu hu hu
}
bassMusic = \relative c {
c4 c g c
}
bassWords = \lyricmode {
ho ho ho ho
}
\score {
\new ChoirStaff <<
\new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
\new Lyrics \with { alignAboveContext = #"women" }
\lyricsto "sopranos" \sopWords
\new Lyrics \with { alignBelowContext = #"women" }
\lyricsto "altos" \altoWords
% we could remove the line about this with the line below, since
% we want the alto lyrics to be below the alto Voice anyway.
% \new Lyrics \lyricsto "altos" \altoWords
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
\new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
>>
\new Lyrics \with { alignAboveContext = #"men" }
\lyricsto "tenors" \tenorWords
\new Lyrics \with { alignBelowContext = #"men" }
\lyricsto "basses" \bassWords
% again, we could replace the line above this with the line below.
% \new Lyrics \lyricsto "basses" \bassWords
>>
}
|
Estrofa para solista y estribillo a dos voces
Esta plantilla crea una partitura que comienza con una estrofa para
solista y continúa con un estribillo a dos voces. también muestra el
uso de silencios de separación dentro de la variable \global
para definir cambios de compás (y otros elementos que son comunes a
todas las partes) a lo largo de toda la partitura.
| | global = {
\key g \major
% verse
\time 3/4
s2.*2
\break
% refrain
\time 2/4
s2*2
\bar "|."
}
SoloNotes = \relative g' {
\clef "treble"
% verse
g4 g g |
b4 b b |
% refrain
R2*2 |
}
SoloLyrics = \lyricmode {
One two three |
four five six |
}
SopranoNotes = \relative c'' {
\clef "treble"
% verse
R2.*2 |
% refrain
c4 c |
g4 g |
}
SopranoLyrics = \lyricmode {
la la |
la la |
}
BassNotes = \relative c {
\clef "bass"
% verse
R2.*2 |
% refrain
c4 e |
d4 d |
}
BassLyrics = \lyricmode {
dum dum |
dum dum |
}
\score {
<<
\new Voice = "SoloVoice" << \global \SoloNotes >>
\new Lyrics \lyricsto "SoloVoice" \SoloLyrics
\new ChoirStaff <<
\new Voice = "SopranoVoice" << \global \SopranoNotes >>
\new Lyrics \lyricsto "SopranoVoice" \SopranoLyrics
\new Voice = "BassVoice" << \global \BassNotes >>
\new Lyrics \lyricsto "BassVoice" \BassLyrics
>>
>>
\layout {
ragged-right = ##t
\context { \Staff
% these lines prevent empty staves from being printed
\RemoveEmptyStaves
\override VerticalAxisGroup.remove-first = ##t
}
}
}
|
Plantilla de conjunto vocal
He aquí una partitura vocal estándar para cuatro voces SATB. Con
grupos mayores, suele ser útil incluir una sección que aparezca en
todas las partes. Por ejemplo, el compás y la armadura casi siempre
son los mismos para todas. Como en la plantilla “Himno”, las cuatro
voces se reagrupan en sólo dos pentagramas.
| | \paper {
top-system-spacing.basic-distance = #10
score-system-spacing.basic-distance = #20
system-system-spacing.basic-distance = #20
last-bottom-spacing.basic-distance = #10
}
global = {
\key c \major
\time 4/4
}
sopMusic = \relative {
c''4 c c8[( b)] c4
}
sopWords = \lyricmode {
hi hi hi hi
}
altoMusic = \relative {
e'4 f d e
}
altoWords = \lyricmode {
ha ha ha ha
}
tenorMusic = \relative {
g4 a f g
}
tenorWords = \lyricmode {
hu hu hu hu
}
bassMusic = \relative {
c4 c g c
}
bassWords = \lyricmode {
ho ho ho ho
}
\score {
\new ChoirStaff <<
\new Lyrics = "sopranos" \with {
% this is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "women" <<
\new Voice = "sopranos" {
\voiceOne
<< \global \sopMusic >>
}
\new Voice = "altos" {
\voiceTwo
<< \global \altoMusic >>
}
>>
\new Lyrics = "altos"
\new Lyrics = "tenors" \with {
% this is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" {
\voiceOne
<< \global \tenorMusic >>
}
\new Voice = "basses" {
\voiceTwo << \global \bassMusic >>
}
>>
\new Lyrics = "basses"
\context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
\context Lyrics = "altos" \lyricsto "altos" \altoWords
\context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
\context Lyrics = "basses" \lyricsto "basses" \bassWords
>>
}
|
Chords
Chord notation
Añadir un bajo cifrado encima o debajo de las notas
Al escribir un bajo cifrado, podemos situar las cifras encima o debajo
de las notas del bajo, mediante la definición de la propiedad
BassFigureAlignmentPositioning #'direction (exclusivamente
dentro de un contexto Staff). Se puede elegir entre #UP
(o #1, arriba), #CENTER (o #0, centrado) y
#DOWN (o #-1, abajo).
Esta propiedad se puede cambiar tantas veces como queramos. Utilice
\once \override si no quiere que la sobreescritura se aplique
a toda la partitura.
| | bass = {
\clef bass
g4 b, c d
e d8 c d2
}
continuo = \figuremode {
<_>4 <6>4 <5/>4
\override Staff.BassFigureAlignmentPositioning.direction = #UP
%\bassFigureStaffAlignmentUp
< _+ >4 <6>
\set Staff.useBassFigureExtenders = ##t
\override Staff.BassFigureAlignmentPositioning.direction = #DOWN
%\bassFigureStaffAlignmentDown
<4>4. <4>8 <_+>4
}
\score {
<<
\new Staff = bassStaff \bass
\context Staff = bassStaff \continuo
>>
}
|
Añadir barras de compás al contexto de nombres de acorde (ChordNames)
Para añadir indicaciones de línea divisoria dentro del contexto de
los nombres de acorde ChordNames, incluya el grabador
Bar_engraver.
| | \new ChordNames \with {
\override BarLine.bar-extent = #'(-2 . 2)
\consists "Bar_engraver"
}
\chordmode {
f1:maj7 f:7 bes:7
}
|
Bar chords notation for Guitar (with Text Spanner)
Here is how to print bar chords (or barre chords) or half-bar chords
(just uncomment the appropriate line for to select either one). The
syntax is : \bbarre #"fret_number" note(s)
| | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%%%%%% Cut here ----- Start 'bbarred.ly'
%% C with slash -------------------------------
cWithSlash = \markup {
\combine \roman C \translate #'(0.6 . -0.4) \draw-line #'(0 . 2.0)
}
%% Span -----------------------------------
%% Syntax: \bbarre #"text" { notes } - text = any number of box
bbarre =
#(define-music-function (barre location str music) (string? ly:music?)
(let ((elts (extract-named-music music '(NoteEvent EventChord))))
(if (pair? elts)
(let ((first-element (first elts))
(last-element (last elts)))
(set! (ly:music-property first-element 'articulations)
(cons (make-music 'TextSpanEvent 'span-direction -1)
(ly:music-property first-element 'articulations)))
(set! (ly:music-property last-element 'articulations)
(cons (make-music 'TextSpanEvent 'span-direction 1)
(ly:music-property last-element 'articulations))))))
#{
\once \override TextSpanner.font-size = #-2
\once \override TextSpanner.font-shape = #'upright
\once \override TextSpanner.staff-padding = #3
\once \override TextSpanner.style = #'line
\once \override TextSpanner.to-barline = ##f
\once \override TextSpanner.bound-details =
#`((left
(text . ,#{ \markup { \draw-line #'( 0 . -.5) } #})
(Y . 0)
(padding . 0.25)
(attach-dir . -2))
(right
(text . ,#{ \markup { \cWithSlash #str } #})
(Y . 0)
(padding . 0.25)
(attach-dir . 2)))
%% uncomment this line for make full barred
% \once \override TextSpanner.bound-details.left.text = \markup{"B" #str}
$music
#})
%% %%%%%%% Cut here ----- End 'bbarred.ly'
%% Copy and change the last line for full barred. Rename in 'fbarred.ly'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Syntaxe: \bbarre #"text" { notes } - text = any number of box
\relative c'{ \clef "G_8" \stemUp \bbarre #"III" { <f a'>16[ c' d c d8] } }
|
Modificación del separador de acordes
Se puede establecer el separador entre las distintas partes del
nombre de un acorde para que sea cualquier elemento de marcado.
| | \chords {
c:7sus4
\set chordNameSeparator
= \markup { \typewriter | }
c:7sus4
}
|
Cambiar la nomenclatura de los acordes del cifrado americano por la notación alemana o semi-alemana
La nomenclatura inglesa (predeterminada) para los acordes del cifrado
americano se puede cambiar por la alemana (\germanChords
sustituye B y Bes por H y B) o por la semi-alemana
(\semiGermanChords sustituye B y Bes por H y Bb).
| | scm = \chordmode {
c1/c | cis/cis
b1/b | bis/bis | bes/bes
}
\layout {
ragged-right = ##t
\context {
\ChordNames
\consists "Instrument_name_engraver"
}
}
<<
\new ChordNames {
\set instrumentName = #"default"
\scm
}
\new ChordNames {
\set instrumentName = #"german"
\germanChords \scm
}
\new ChordNames {
\set instrumentName = #"semi-german"
\semiGermanChords \scm
}
\new ChordNames {
\set instrumentName = #"italian"
\italianChords \scm
}
\new ChordNames {
\set instrumentName = #"french"
\frenchChords \scm
}
\context Voice { \scm }
>>
|
Cambiar las posiciones de las alteraciones del bajo cifrado
Las alteraciones y los signos «más» pueden aparecer antes o
después de los números, según el valor de las propiedades
figuredBassAlterationDirection y
figuredBassPlusDirection.
| | \figures {
<6\+> <5+> <6 4-> r
\set figuredBassAlterationDirection = #RIGHT
<6\+> <5+> <6 4-> r
\set figuredBassPlusDirection = #RIGHT
<6\+> <5+> <6 4-> r
\set figuredBassAlterationDirection = #LEFT
<6\+> <5+> <6 4-> r
}
|
Excepciones para los nombres de acorde
Se puede usar la propiedad chordNameExceptions para
almacenar una lista de notaciones espaciales para acordes
específicos.
| | % modify maj9 and 6(add9)
% Exception music is chords with markups
chExceptionMusic = {
<c e g b d'>1-\markup { \super "maj9" }
<c e g a d'>1-\markup { \super "6(add9)" }
}
% Convert music to list and prepend to existing exceptions.
chExceptions = #( append
( sequential-music-to-chord-exceptions chExceptionMusic #t)
ignatzekExceptions)
theMusic = \chordmode {
g1:maj9 g1:6.9
\set chordNameExceptions = #chExceptions
g1:maj9 g1:6.9
}
\layout {
ragged-right = ##t
}
<< \context ChordNames \theMusic
\context Voice \theMusic
>>
|
Nombre de acorde maj7
La presentación del acorde de séptima mayor se
puede ajustar mediante majorSevenSymbol.
| | \chords {
c:7+
\set majorSevenSymbol = \markup { j7 }
c:7+
}
|
Chord names alternative
Chord names are generated from a list of pitches. The functions which
construct these names can be customised.
Here are shown chords following Ignatzek (pp. 17-18, 1995), used by
default since LilyPond 1.7.20, compared with an alternative Jazz chord
notation and Harald Banter’s (1987) notation. A smaller font is used
in the latter case, as these tend to be overly verbose.
This mirrors the mechanism originally used in early LilyPond versions
(pre-1.7); not having been properly maintained, however, some features
have been lost (mainly chord exception lists) and bugs have been
introduced.
| | %%%% Legacy chord naming functions (formerly in scm/chord-generic-names.scm)
%%%% Copyright (C) 2003--2015 Jan Nieuwenhuizen <janneke@gnu.org>
#(set-global-staff-size 19.7)
#(define-public (banter-chordnames pitches bass inversion context)
(old_chord->markup 'banter pitches bass inversion context))
#(define-public (jazz-chordnames pitches bass inversion context)
(old_chord->markup 'jazz pitches bass inversion context))
#(define (define-translator-property symbol type? description)
(if (not (and (symbol? symbol)
(procedure? type?)
(string? description)))
(ly:error "error in call of define-translator-property"))
(if (not (equal? (object-property symbol 'translation-doc) #f))
(ly:error (_ "symbol ~S redefined") symbol))
(set-object-property! symbol 'translation-type? type?)
(set-object-property! symbol 'translation-doc description)
symbol)
#(for-each
(lambda (x)
(apply define-translator-property x))
`((chordNameExceptionsFull ,list? "An alist of full chord
exceptions. Contains @code{(@var{chord} . @var{markup})} entries.")
(chordNameExceptionsPartial ,list? "An alist of partial chord
exceptions. Contains @code{(@var{chord} . (@var{prefix-markup}
@var{suffix-markup}))} entries.")))
#(define-public (old_chord->markup
style pitches bass inversion context)
"Entry point for @code{Chord_name_engraver}.
@var{pitches}, @var{bass}, and @var{inversion} are lily pitches."
(define (default-note-namer pitch)
(note-name->markup pitch #f))
(define (markup-or-empty-markup markup)
"Return MARKUP if markup, else empty-markup"
(if (markup? markup) markup empty-markup))
(define (accidental->markup alteration)
"Return accidental markup for ALTERATION."
(if (= alteration 0)
(make-line-markup (list empty-markup))
(conditional-kern-before
(alteration->text-accidental-markup alteration)
(= alteration FLAT) 0.094725)))
(define (list-minus a b)
"Return list of elements in A that are not in B."
(lset-difference eq? a b))
(define (markup-join markups sep)
"Return line-markup of MARKUPS, joining them with markup SEP"
(if (pair? markups)
(make-line-markup (list-insert-separator markups sep))
empty-markup))
(define (conditional-kern-before markup bool amount)
"Add AMOUNT of space before MARKUP if BOOL is true."
(if bool
(make-line-markup
(list (make-hspace-markup amount)
markup))
markup))
(define (step-nr pitch)
(let* ((pitch-nr (+ (* 7 (ly:pitch-octave pitch))
(ly:pitch-notename pitch)))
(root-nr (+ (* 7 (ly:pitch-octave (car pitches)))
(ly:pitch-notename (car pitches)))))
(+ 1 (- pitch-nr root-nr))))
(define (next-third pitch)
(ly:pitch-transpose pitch
(ly:make-pitch 0 2 (if (or (= (step-nr pitch) 3)
(= (step-nr pitch) 5))
FLAT 0))))
(define (step-alteration pitch)
(let* ((diff (ly:pitch-diff (ly:make-pitch 0 0 0) (car pitches)))
(normalized-pitch (ly:pitch-transpose pitch diff))
(alteration (ly:pitch-alteration normalized-pitch)))
(if (= (step-nr pitch) 7) (+ alteration SEMI-TONE) alteration)))
(define (pitch-unalter pitch)
(let ((alteration (step-alteration pitch)))
(if (= alteration 0)
pitch
(ly:make-pitch (ly:pitch-octave pitch) (ly:pitch-notename pitch)
(- (ly:pitch-alteration pitch) alteration)))))
(define (step-even-or-altered? pitch)
(let ((nr (step-nr pitch)))
(if (!= (modulo nr 2) 0)
(!= (step-alteration pitch) 0)
#t)))
(define (step->markup-plusminus pitch)
(let ((alt (step-alteration pitch)))
(make-line-markup
(list
(number->string (step-nr pitch))
(cond
((= alt DOUBLE-FLAT) "--")
((= alt FLAT) "-")
((= alt NATURAL) "")
((= alt SHARP) "+")
((= alt DOUBLE-SHARP) "++"))))))
(define (step->markup-accidental pitch)
(make-line-markup
(list (accidental->markup (step-alteration pitch))
(make-simple-markup (number->string (step-nr pitch))))))
(define (step->markup-ignatzek pitch)
(make-line-markup
(if (and (= (step-nr pitch) 7)
(= (step-alteration pitch) 1))
(list (ly:context-property context 'majorSevenSymbol))
(list (accidental->markup (step-alteration pitch))
(make-simple-markup (number->string (step-nr pitch)))))))
;; tja, kennok
(define (make-sub->markup step->markup)
(lambda (pitch)
(make-line-markup (list (make-simple-markup "no")
(step->markup pitch)))))
(define (step-based-sub->markup step->markup pitch)
(make-line-markup (list (make-simple-markup "no") (step->markup pitch))))
(define (get-full-list pitch)
(if (<= (step-nr pitch) (step-nr (last pitches)))
(cons pitch (get-full-list (next-third pitch)))
'()))
(define (get-consecutive nr pitches)
(if (pair? pitches)
(let* ((pitch-nr (step-nr (car pitches)))
(next-nr (if (!= (modulo pitch-nr 2) 0) (+ pitch-nr 2) nr)))
(if (<= pitch-nr nr)
(cons (car pitches) (get-consecutive next-nr (cdr pitches)))
'()))
'()))
;;; FIXME -- exceptions no longer work. -vv
(define (full-match exceptions)
(if (pair? exceptions)
(let* ((e (car exceptions))
(e-pitches (car e)))
(if (equal? e-pitches pitches)
e
(full-match (cdr exceptions))))
#f))
(define (partial-match exceptions)
(if (pair? exceptions)
(let* ((e (car exceptions))
(e-pitches (car e)))
(if (equal? e-pitches (take pitches (length e-pitches)))
e
(partial-match (cdr exceptions))))
#f))
;; FIXME: exceptions don’t work anyway.
(if #f (begin
(write-me "pitches: " pitches)))
(let* ((full-exceptions
(ly:context-property context 'chordNameExceptionsFull))
(full-exception (full-match full-exceptions))
(full-markup (if full-exception (cadr full-exception) '()))
(partial-exceptions
(ly:context-property context 'chordNameExceptionsPartial))
(partial-exception (partial-match partial-exceptions))
(partial-pitches (if partial-exception (car partial-exception) '()))
(partial-markup-prefix
(if partial-exception (markup-or-empty-markup
(cadr partial-exception)) empty-markup))
(partial-markup-suffix
(if (and partial-exception (pair? (cddr partial-exception)))
(markup-or-empty-markup (caddr partial-exception)) empty-markup))
(root (car pitches))
(full (get-full-list root))
;; kludge alert: replace partial matched lower part of all with
;; 'normal' pitches from full
;; (all pitches)
(all (append (take full (length partial-pitches))
(drop pitches (length partial-pitches))))
(highest (last all))
(missing (list-minus full (map pitch-unalter all)))
(consecutive (get-consecutive 1 all))
(rest (list-minus all consecutive))
(altered (filter step-even-or-altered? all))
(cons-alt (filter step-even-or-altered? consecutive))
(base (list-minus consecutive altered)))
(if #f (begin
(write-me "full:" full)
;; (write-me "partial-pitches:" partial-pitches)
(write-me "full-markup:" full-markup)
(write-me "partial-markup-perfix:" partial-markup-prefix)
(write-me "partial-markup-suffix:" partial-markup-suffix)
(write-me "all:" all)
(write-me "altered:" altered)
(write-me "missing:" missing)
(write-me "consecutive:" consecutive)
(write-me "rest:" rest)
(write-me "base:" base)))
(case style
((banter)
;; root
;; + steps:altered + (highest all -- if not altered)
;; + subs:missing
(let* ((root->markup default-note-namer)
(step->markup step->markup-plusminus)
(sub->markup (lambda (x)
(step-based-sub->markup step->markup x)))
(sep (make-simple-markup "/")))
(if
(pair? full-markup)
(make-line-markup (list (root->markup root) full-markup))
(make-line-markup
(list
(root->markup root)
partial-markup-prefix
(make-super-markup
(markup-join
(append
(map step->markup
(append altered
(if (and (> (step-nr highest) 5)
(not
(step-even-or-altered? highest)))
(list highest) '())))
(list partial-markup-suffix)
(map sub->markup missing))
sep)))))))
((jazz)
;; root
;; + steps:(highest base) + cons-alt
;; + 'add'
;; + steps:rest
(let* ((root->markup default-note-namer)
(step->markup step->markup-ignatzek)
(sep (make-simple-markup " "))
(add-prefix (make-simple-markup " add")))
(if
(pair? full-markup)
(make-line-markup (list (root->markup root) full-markup))
(make-line-markup
(list
(root->markup root)
partial-markup-prefix
(make-super-markup
(make-line-markup
(list
;; kludge alert: omit <= 5
;;(markup-join (map step->markup
;; (cons (last base) cons-alt)) sep)
;; This fixes:
;; c C5 -> C
;; c:2 C5 2 -> C2
;; c:3- Cm5 -> Cm
;; c:6.9 C5 6add9 -> C6 add 9 (add?)
;; ch = \chords { c c:2 c:3- c:6.9^7 }
(markup-join (map step->markup
(let ((tb (last base)))
(if (> (step-nr tb) 5)
(cons tb cons-alt)
cons-alt))) sep)
(if (pair? rest)
add-prefix
empty-markup)
(markup-join (map step->markup rest) sep)
partial-markup-suffix))))))))
(else empty-markup))))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%
%%%% Here begins the actual snippet:
chs = \transpose c' c' {
<c e g>1
<c es g> % m = minor triad
<c e gis>
<c es ges> \break
<c e g bes>
<c es g bes>
<c e g b> % triangle = maj
<c es ges beses>
<c es ges b> \break
<c e gis bes>
<c es g b>
<c e gis b>
<c es ges bes> \break
<c e g a> % 6 = major triad with added sixth
<c es g a> % m6 = minor triad with added sixth
<c e g bes d'>
<c es g bes d'> \break
<c es g bes d' f' a' >
<c es g bes d' f' >
<c es ges bes d' >
<c e g bes des' > \break
<c e g bes dis'>
<c e g bes d' f'>
<c e g bes d' fis'>
<c e g bes d' f' a'> \break
<c e g bes d' fis' as'>
<c e gis bes dis'>
<c e g bes dis' fis'>
<c e g bes d' f' as'> \break
<c e g bes des' f' as'>
<c e g bes d' fis'>
<c e g b d'>
<c e g bes d' f' as'> \break
<c e g bes des' f' as'>
<c e g bes des' f' a'>
<c e g b d'>
<c e g b d' f' a'> \break
<c e g b d' fis'>
<c e g bes des' f ' a'>
<c f g>
<c f g bes> \break
<c f g bes d'>
<c e g d'> % add9
<c es g f'>
<c e g b fis'> % Lydian
<c e g bes des' ees' fis' aes'> % altered chord
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% alternate Jazz notation
efullmusicJazzAlt = {
<c e gis>1-\markup { "+" }
<c e g b>-\markup {
\normal-size-super
% \override #'(font-family . math) "N"
\override #'(font-family . math) "M"
}
%%c:3.5.7 = \markup { \override #'(font-family . math) "M" }
%%c:3.5.7 = \markup { \normal-size-super "maj7" }
<c es ges>-\markup { \super "o" } % should be $\circ$ ?
<c es ges bes>-\markup { \super \combine "o" "/" }
<c es ges beses>-\markup { \super "o7" }
}
efullJazzAlt = #(sequential-music-to-chord-exceptions efullmusicJazzAlt #f)
epartialmusicJazzAlt = {
<c d>1-\markup { \normal-size-super "2" }
<c es>-\markup { "m" }
<c f>-\markup { \normal-size-super "sus4" }
<c g>-\markup { \normal-size-super "5" }
%% TODO, partial exceptions
<c es f>-\markup { "m" }-\markup { \normal-size-super "sus4" }
<c d es>-\markup { "m" }-\markup { \normal-size-super "sus2" }
}
epartialJazzAlt = #(sequential-music-to-chord-exceptions epartialmusicJazzAlt #f)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\score {
<<
\new ChordNames {
%% Already set by default:
%\set chordNameFunction = #ignatzek-chord-names
\set instrumentName = "Ignatzek"
\set shortInstrumentName = "Def"
\chs
}
\new ChordNames {
\set chordNameFunction = #jazz-chordnames
\set majorSevenSymbol = \whiteTriangleMarkup
\set chordNameSeparator = "/"
\set chordNameExceptionsFull = \efullJazzAlt
\set chordNameExceptionsPartial = \epartialJazzAlt
\set instrumentName = "Alternative"
\set shortInstrumentName = "Alt"
\chs
}
%% This is the Banter (1987) style. It gives exceedingly
%% verbose (wide) names, making the output file take up to 4 pages.
\new ChordNames {
\set chordNameFunction = #banter-chordnames
\override ChordName.font-size = #-3
\set instrumentName = "Banter"
\set shortInstrumentName = "Ban"
\chs
}
\new Staff \transpose c c' { \chs }
>>
\layout {
#(layout-set-staff-size 16)
system-system-spacing.basic-distance = #0
\context {
\ChordNames
\consists "Instrument_name_engraver"
}
\context {
\Score
\remove "Bar_number_engraver"
}
}
}
|
Chords with stretched fingering for FretBoards and TabVoice
Sometimes chords with a stretched fingering are required. If not
otherwise specified the context-property maximumFretStretch is
set to 4, though. Resulting in a warning about "No string for
pitch ..." and the note is omitted. You may set
maximumFretStretch to an approppriate value or explecitely
assign string-numbers to all notes of a chord.
| | %% The code below will print two warnings, which may be omitted by uncommenting:
%#(for-each (lambda (x) (ly:expect-warning "No string for pitch")) (iota 2))
mus = {
<c' bes'>
<c'\2 bes'>
\set maximumFretStretch = 5
<c' bes'>
<c'\2 bes'\1>
}
<<
\new FretBoards \mus
\new TabVoice \mus
>>
|
Clusters («racimos»)
Los «clusters» o racimos son un mecanismo para indicar la
interpretación de un ámbito de notas al mismo tiempo.
| | fragment = \relative c' {
c4 f <e d'>4
<g a>8 <e a> a4 c2 <d b>4
e2 c
}
<<
\new Staff \fragment
\new Staff \makeClusters \fragment
>>
|
Controlar la colocación de las digitaciones de acordes
Se puede controlar con precisión la colocación de los números de
digitación. Para que se tenga en cuenta la orientación de las
digitaciones, se debe utilizar dentro de una construcción de acorde <>
aunque sea una sola nota. Se puede establecer la orientación para los
números de cuerda y las digitaciones de la mano derecha de una forma
similar.
| | \relative c' {
\set fingeringOrientations = #'(left)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down right up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(left)
<c-1>2
\set fingeringOrientations = #'(down)
<e-3>2
\set stringNumberOrientations = #'(up left down)
<f\3 a\2 c\1>1
\set strokeFingerOrientations = #'(down right up)
<c\rightHandFinger #1 e\rightHandFinger #2 c'\rightHandFinger #4 >
}
|
Cross-staff chords - beaming problems workaround
Sometimes it is better to use stems from the upper staff for creating
cross-staff chords, because no problems with automatic beam collision
avoidance then arise. If the stems from the lower staff were used in
the following example, it would be necessary to change the automatic
beam collision avoidance settings so that it doesn’t detect collisions
between staves using \override Staff.Beam.collision-voice-only =
##t
| | \new PianoStaff <<
\new Staff = up
\relative c' {
<<
{ r4
\override Stem.cross-staff = ##t
\override Stem.length = #19 % this is in half-spaces,
% so it makes stems 9.5 staffspaces long
\override Stem.Y-offset = #-6 % stems are normally lengthened
% upwards, so here we must lower the stem by the amount
% equal to the lengthening - in this case (19 - 7) / 2
% (7 is default stem length)
e e e }
{ s4
\change Staff = "bottom"
\override NoteColumn.ignore-collision = ##t
c, c c
}
>>
}
\new Staff = bottom
\relative c' {
\clef bass
\voiceOne
g8 a g a g a g a
}
>>
|
Impresión de acordes complejos
He aquí una forma de imprimir un acorde en el que suena la misma nota
dos veces con distintas alteraciones.
| | fixA = {
\once \override Stem.length = #11
}
fixB = {
\once \override NoteHead.X-offset = #1.7
\once \override Stem.length = #7
\once \override Stem.rotation = #'(45 0 0)
\once \override Stem.extra-offset = #'(-0.1 . -0.2)
\once \override Flag.style = #'no-flag
\once \override Accidental.extra-offset = #'(4 . -.1)
}
\relative c' {
<< { \fixA <b d!>8 } \\ { \voiceThree \fixB dis } >> s
}
|
Dividir manualmente las líneas de extensión del bajo cifrado para ciertos números solamente
A menudo, el bajo figurado usa líneas de extensión para indicar la
continuación del elemento correspondiente dentro del acorde. Sin
embargo, en este caso lilypond está en el “modo voraz” y usa los
extensores cuando es posible. Para dividir los extensores
individuales, podemos sencillamente usar el modificador \! para un
número, lo que quiebra cualquier línea de extensión atribuida a dicho
número justo antes del número.
| | bassfigures = \figuremode {
\set useBassFigureExtenders = ##t
<6 4>4 <6 4\!> <6 4\!> <6 4\!> | <6\! 4\!> <6 4> <6 4\!> <6 4>
}
<<
\new Staff \relative c'' { c1 c1 }
\new FiguredBass \bassfigures
>>
|
Imprimir los acordes cuando se produce un cambio
De forma predeterminada se imprimen todos los acordes que aparecen en
el código de entrada; se puede modificar este comportamiento de tal
manera que los acordes se impriman exclusivamente al comienzo de las
líneas y cuando cambia el acorde.
| | harmonies = \chordmode {
c1:m c:m \break c:m c:m d
}
<<
\new ChordNames {
\set chordChanges = ##t
\harmonies
}
\new Staff {
\relative c' { \harmonies }
}
>>
|
Hoja guía de acordes o «lead sheet» sencilla
Al juntar nombres de acorde en cifrado americano, melodía y letra,
obtenemos una hoja guía de acordes o «lead sheet»:
| | <<
\chords { c2 g:sus4 f e }
\new Staff \relative c'' {
a4 e c8 e r4
b2 c4( d)
}
\addlyrics { One day this shall be free __ }
>>
|
Plantilla de pentagrama único con música, letra y acordes
Esta plantilla facilita la preparación de una canción con melodía,
letra y acordes.
| | melody = \relative c' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
text = \lyricmode {
Aaa Bee Cee Dee
}
harmonies = \chordmode {
a2 c
}
\score {
<<
\new ChordNames {
\set chordChanges = ##t
\harmonies
}
\new Voice = "one" { \autoBeamOff \melody }
\new Lyrics \lyricsto "one" \text
>>
\layout { }
\midi { }
}
|
Plantilla para un pentagrama único con música, letra, acordes y trastes
Presentamos a continuación un ejemplo de plantilla para una hoja
guía de acordes con melodía, letra, acordes y diagramas de
trastes.
| | verseI = \lyricmode {
\set stanza = #"1."
This is the first verse
}
verseII = \lyricmode {
\set stanza = #"2."
This is the second verse.
}
theChords = \chordmode {
% insert chords for chordnames and fretboards here
c2 g4 c
}
staffMelody = \relative c' {
\key c \major
\clef treble
% Type notes for melody here
c4 d8 e f4 g
\bar "|."
}
\score {
<<
\context ChordNames { \theChords }
\context FretBoards { \theChords }
\new Staff {
\context Voice = "voiceMelody" { \staffMelody }
}
\new Lyrics = "lyricsI" {
\lyricsto "voiceMelody" \verseI
}
\new Lyrics = "lyricsII" {
\lyricsto "voiceMelody" \verseII
}
>>
\layout { }
\midi { }
}
|
Plantilla de pentagrama único con música y acordes
¿Quiere preparar una hoja guía de acordes (o «lead sheet») con
melodía y acordes? ¡No busque más!
| | melody = \relative c' {
\clef treble
\key c \major
\time 4/4
f4 e8[ c] d4 g
a2 ~ a
}
harmonies = \chordmode {
c4:m f:min7 g:maj c:aug
d2:dim b4:5 e:sus
}
\score {
<<
\new ChordNames {
\set chordChanges = ##t
\harmonies
}
\new Staff \melody
>>
\layout{ }
\midi { }
}
|
Centrado vertical de las líneas de bajo cifrado emparejadas
Allí donde se utilicen líneas extensoras para el bajo cifrado mediante
el establecimiento de useBassFigureExtenders al valor
verdadero, las parejas de líneas extensoras congruentes se centran
verticalmente si el valor de figuredBassCenterContinuations
tiene el valor verdadero.
| | <<
\relative c' {
c8 c b b a a c16 c b b
c8 c b b a a c16 c b b
c8 c b b a a c c b b
}
\figures {
\set useBassFigureExtenders = ##t
<6+ 4 3>4 <6 4 3>8 r
<6+ 4 3>4 <6 4 3>8 <4 3+>16 r
\set figuredBassCenterContinuations = ##t
<6+ 4 3>4 <6 4 3>8 r
<6+ 4 3>4 <6 4 3>8 <4 3+>16 r
\set figuredBassCenterContinuations = ##f
<6+ 4 3>4 <6 4 3>8 r
<6+ 4 3>4 <6 4 3>8 <4 3+>8
}
>>
|
Corchetes de primera y segunda vez debajo de los acordes
Mediante la adición del grabador Volta_engraver al
pentagrama pertinente, se pueden poner los corchetes de primera y
segunda vez debajo de los acordes.
| | \score {
<<
\chords {
c1
c1
}
\new Staff \with {
\consists "Volta_engraver"
}
{
\repeat volta 2 { c'1 }
\alternative { c' }
}
>>
\layout {
\context {
\Score
\remove "Volta_engraver"
}
}
}
|
Keyboards
Keyboard and other multi-staff instruments
Símbolos de acordeón discanto
Este fragmento de código ha quedado obsoleto por las instrucciones de
marcado predefinidas, véase ‘Símbolos de discanto’ en la Referencia
de la notación. Sin embargo aún es útil como demostración sencilla de
la forma de combinar símbolos: la colocación de los símbolos añadidos
con \markup se puede trucar modificando los argumentos de
\translate-scaled. Aquí se usa \translate-scaled en
lugar de \translate para que el posicionamiento de las partes
de símbolos se adapte a los cambios en font-size.
| | discant = \markup {
\musicglyph "accordion.discant"
}
dot = \markup {
\musicglyph "accordion.dot"
}
\layout { ragged-right = ##t }
% 16 voets register
accBasson = ^\markup {
\combine
\discant
\translate-scaled #'(0 . 0.5) \dot
}
% een korig 8 en 16 voets register
accBandon = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 0.5) \dot
\translate-scaled #'(0 . 1.5) \dot
}
accVCello = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 0.5) \dot
\combine
\translate-scaled #'(0 . 1.5) \dot
\translate-scaled #'(1 . 1.5) \dot
}
% 4-8-16 voets register
accHarmon = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 0.5) \dot
\combine
\translate-scaled #'(0 . 1.5) \dot
\translate-scaled #'(0 . 2.5) \dot
}
accTrombon = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 0.5) \dot
\combine
\translate-scaled #'(0 . 1.5) \dot
\combine
\translate-scaled #'(1 . 1.5) \dot
\translate-scaled #'(-1 . 1.5) \dot
}
% eenkorig 4 en 16 voets register
accOrgan = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 0.5) \dot
\translate-scaled #'(0 . 2.5) \dot
}
accMaster = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 0.5) \dot
\combine
\translate-scaled #'(0 . 1.5) \dot
\combine
\translate-scaled #'(1 . 1.5) \dot
\combine
\translate-scaled #'(-1 . 1.5) \dot
\translate-scaled #'(0 . 2.5) \dot
}
accAccord = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 1.5) \dot
\combine
\translate-scaled #'(1 . 1.5) \dot
\combine
\translate-scaled #'(-1 . 1.5) \dot
\translate-scaled #'(0 . 2.5) \dot
}
accMusette = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 1.5) \dot
\combine
\translate-scaled #'(1 . 1.5) \dot
\translate-scaled #'(-1 . 1.5) \dot
}
accCeleste = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 1.5) \dot
\translate-scaled #'(-1 . 1.5) \dot
}
accOboe = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 1.5) \dot
\translate-scaled #'(0 . 2.5) \dot
}
accClarin = ^\markup {
\combine
\discant
\translate-scaled #'(0 . 1.5) \dot
}
accPiccolo = ^\markup {
\combine
\discant
\translate-scaled #'(0 . 2.5) \dot
}
accViolin = ^\markup {
\combine
\discant
\combine
\translate-scaled #'(0 . 1.5) \dot
\combine
\translate-scaled #'(1 . 1.5) \dot
\translate-scaled #'(0 . 2.5) \dot
}
\relative c'' {
c4 d\accBasson e f
c4 d\accBandon e f
c4 d\accVCello e f
c4 d\accHarmon e f
c4 d\accTrombon e f
\break
c4 d\accOrgan e f
c4 d\accMaster e f
c4 d\accAccord e f
c4 d\accMusette e f
c4 d\accCeleste e f
\break
c4 d\accOboe e f
c4 d\accClarin e f
c4 d\accPiccolo e f
c4 d\accViolin e f
}
|
Accordion register symbols
Accordion register symbols are available as \markup as well as
as standalone music events (as register changes tend to occur between
actual music events). Bass registers are not overly standardized. The
available commands can be found in ’Discant symbols’ in the Notation
Reference.
| | #(use-modules (scm accreg))
\new PianoStaff
<<
\new Staff \relative {
\clef treble \discant "10" r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
<<
{ r16 <f bes> r <e a> r <d g> }
\\
{ d r a r bes r }
>> |
<cis e a>1
}
\new Staff \relative {
\clef treble \freeBass "1" r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
\clef bass \stdBass "Master"
<<
{ r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
<e a cis>1^"a" }
\\
{ d8_"D" c_"C" bes_"B" | a1_"A" }
>>
}
>>
|
Modificar el texto de las indicaciones de pedal
Se puede usar Staff.pedalSustainStrings para fijar el texto de
las indicaciones de pisar pedal y levantar pedal. Observe que las
únicas cadenas válidas son las que están en la lista de glifos de
pedal: los valores que aparecen en este fragmento de código son una
relación exhaustiva.
| | sustainNotes = { c4\sustainOn d e\sustainOff\sustainOn f\sustainOff }
\relative c' {
\sustainNotes
\set Staff.pedalSustainStrings = #'("P" "P-" "-")
\sustainNotes
\set Staff.pedalSustainStrings = #'("d" "de" "e")
\sustainNotes
\set Staff.pedalSustainStrings = #'("M" "M-" "-")
\sustainNotes
\set Staff.pedalSustainStrings = #'("Ped" "*Ped" "*")
\sustainNotes
}
|
Clusters («racimos»)
Los «clusters» o racimos son un mecanismo para indicar la
interpretación de un ámbito de notas al mismo tiempo.
| | fragment = \relative c' {
c4 f <e d'>4
<g a>8 <e a> a4 c2 <d b>4
e2 c
}
<<
\new Staff \fragment
\new Staff \makeClusters \fragment
>>
|
Controlar la colocación de las digitaciones de acordes
Se puede controlar con precisión la colocación de los números de
digitación. Para que se tenga en cuenta la orientación de las
digitaciones, se debe utilizar dentro de una construcción de acorde <>
aunque sea una sola nota. Se puede establecer la orientación para los
números de cuerda y las digitaciones de la mano derecha de una forma
similar.
| | \relative c' {
\set fingeringOrientations = #'(left)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down right up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(left)
<c-1>2
\set fingeringOrientations = #'(down)
<e-3>2
\set stringNumberOrientations = #'(up left down)
<f\3 a\2 c\1>1
\set strokeFingerOrientations = #'(down right up)
<c\rightHandFinger #1 e\rightHandFinger #2 c'\rightHandFinger #4 >
}
|
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)
}
>>
}
|
Cross-staff chords - beaming problems workaround
Sometimes it is better to use stems from the upper staff for creating
cross-staff chords, because no problems with automatic beam collision
avoidance then arise. If the stems from the lower staff were used in
the following example, it would be necessary to change the automatic
beam collision avoidance settings so that it doesn’t detect collisions
between staves using \override Staff.Beam.collision-voice-only =
##t
| | \new PianoStaff <<
\new Staff = up
\relative c' {
<<
{ r4
\override Stem.cross-staff = ##t
\override Stem.length = #19 % this is in half-spaces,
% so it makes stems 9.5 staffspaces long
\override Stem.Y-offset = #-6 % stems are normally lengthened
% upwards, so here we must lower the stem by the amount
% equal to the lengthening - in this case (19 - 7) / 2
% (7 is default stem length)
e e e }
{ s4
\change Staff = "bottom"
\override NoteColumn.ignore-collision = ##t
c, c c
}
>>
}
\new Staff = bottom
\relative c' {
\clef bass
\voiceOne
g8 a g a g a g a
}
>>
|
Trémolos de pentagrama cruzado
Dado que \repeat tremolo espera exactamente dos argumentos
musicales para los trémolos de acorde, la nota o acorde que cambia de
pentagrama en un trémolo que cruza el pentagrama se debe colocar
dentro de llaves curvas junto a su instrucción \change Staff.
| | \new PianoStaff <<
\new Staff = "up" \relative c'' {
\key a \major
\time 3/8
s4.
}
\new Staff = "down" \relative c'' {
\key a \major
\time 3/8
\voiceOne
\repeat tremolo 6 {
<a e'>32
{
\change Staff = "up"
\voiceTwo
<cis a' dis>32
}
}
}
>>
|
Ajuste fino de las líneas de pedal
Se puede alterar el aspecto de las líneas de pedal de varias formas.
| | \paper { ragged-right = ##f }
\relative c'' {
c2\sostenutoOn c
c2\sostenutoOff c
\once \override Staff.PianoPedalBracket.shorten-pair = #'(-7 . -2)
c2\sostenutoOn c
c2\sostenutoOff c
\once \override Staff.PianoPedalBracket.edge-height = #'(0 . 3)
c2\sostenutoOn c
c2\sostenutoOff c
}
|
Indicar acordes de pentagrama cruzado con corchetes de arpegio
Un corchete de arpegio puede indicar que se tienen que tocar con la
misma mano notas que están en dos pentagramas distintos. Para hacerlo,
el PianoStaff se debe configurar para que acepte símbolos de
arpegio de pentagrama cruzado y los símbolos de arpegio se deben
configurar a la forma de corchete en el contexto de PianoStaff.
(Debussy, Les collines d’Anacapri, m. 65)
| | \new PianoStaff <<
\set PianoStaff.connectArpeggios = ##t
\override PianoStaff.Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket
\new Staff {
\relative c' {
\key b \major
\time 6/8
b8-.(\arpeggio fis'-.\> cis-. e-. gis-. b-.)\!\fermata^\laissezVibrer
\bar "||"
}
}
\new Staff {
\relative c' {
\clef bass
\key b \major
<<
{
<a e cis>2.\arpeggio
}
\\
{
<a, e a,>2.
}
>>
}
}
>>
|
Plantilla para combo de jazz
Ésta es una plantilla bastante avanzada, para un conjunto de
jazz. Observe que la notación de todos los instrumentos está en
\key c \major (Do mayor). Esto se refiere al tono de
concierto; la armadura se transporta automáticamente si la música está
dentro de una sección \transpose.
| | \header {
title = "Song"
subtitle = "(tune)"
composer = "Me"
meter = "moderato"
piece = "Swing"
tagline = \markup {
\column {
"LilyPond example file by Amelie Zapf,"
"Berlin 07/07/2003"
}
}
}
% To make the example display in the documentation
\paper {
paper-width = 130
}
%#(set-global-staff-size 16)
\include "english.ly"
%%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%%
sl = {
\override NoteHead.style = #'slash
\hide Stem
}
nsl = {
\revert NoteHead.style
\undo \hide Stem
}
crOn = \override NoteHead.style = #'cross
crOff = \revert NoteHead.style
%% insert chord name style stuff here.
jazzChords = { }
%%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%%
global = { \time 4/4 }
Key = { \key c \major }
% ############ Horns ############
% ------ Trumpet ------
trpt = \transpose c d \relative c'' {
\Key
c1 | c | c |
}
trpHarmony = \transpose c' d {
\jazzChords
}
trumpet = {
\global
\clef treble
<<
\trpt
>>
}
% ------ Alto Saxophone ------
alto = \transpose c a \relative c' {
\Key
c1 | c | c |
}
altoHarmony = \transpose c' a {
\jazzChords
}
altoSax = {
\global
\clef treble
<<
\alto
>>
}
% ------ Baritone Saxophone ------
bari = \transpose c a' \relative c {
\Key
c1
c1
\sl
d4^"Solo" d d d
\nsl
}
bariHarmony = \transpose c' a \chordmode {
\jazzChords s1 s d2:maj e:m7
}
bariSax = {
\global
\clef treble
<<
\bari
>>
}
% ------ Trombone ------
tbone = \relative c {
\Key
c1 | c | c
}
tboneHarmony = \chordmode {
\jazzChords
}
trombone = {
\global
\clef bass
<<
\tbone
>>
}
% ############ Rhythm Section #############
% ------ Guitar ------
gtr = \relative c'' {
\Key
c1
\sl
b4 b b b
\nsl
c1
}
gtrHarmony = \chordmode {
\jazzChords
s1 c2:min7+ d2:maj9
}
guitar = {
\global
\clef treble
<<
\gtr
>>
}
%% ------ Piano ------
rhUpper = \relative c'' {
\voiceOne
\Key
c1 | c | c
}
rhLower = \relative c' {
\voiceTwo
\Key
e1 | e | e
}
lhUpper = \relative c' {
\voiceOne
\Key
g1 | g | g
}
lhLower = \relative c {
\voiceTwo
\Key
c1 | c | c
}
PianoRH = {
\clef treble
\global
<<
\new Voice = "one" \rhUpper
\new Voice = "two" \rhLower
>>
}
PianoLH = {
\clef bass
\global
<<
\new Voice = "one" \lhUpper
\new Voice = "two" \lhLower
>>
}
piano = {
<<
\new Staff = "upper" \PianoRH
\new Staff = "lower" \PianoLH
>>
}
% ------ Bass Guitar ------
Bass = \relative c {
\Key
c1 | c | c
}
bass = {
\global
\clef bass
<<
\Bass
>>
}
% ------ Drums ------
up = \drummode {
\voiceOne
hh4 <hh sn> hh <hh sn>
hh4 <hh sn> hh <hh sn>
hh4 <hh sn> hh <hh sn>
}
down = \drummode {
\voiceTwo
bd4 s bd s
bd4 s bd s
bd4 s bd s
}
drumContents = {
\global
<<
\new DrumVoice \up
\new DrumVoice \down
>>
}
%%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%
\score {
<<
\new StaffGroup = "horns" <<
\new Staff = "trumpet" \with { instrumentName = "Trumpet" }
\trumpet
\new Staff = "altosax" \with { instrumentName = "Alto Sax" }
\altoSax
\new ChordNames = "barichords" \with { instrumentName = "Trumpet" }
\bariHarmony
\new Staff = "barisax" \with { instrumentName = "Bari Sax" }
\bariSax
\new Staff = "trombone" \with { instrumentName = "Trombone" }
\trombone
>>
\new StaffGroup = "rhythm" <<
\new ChordNames = "chords" \gtrHarmony
\new Staff = "guitar" \with { instrumentName = "Guitar" }
\guitar
\new PianoStaff = "piano" \with {
instrumentName = "Piano"
midiInstrument = "acoustic grand"
}
\piano
\new Staff = "bass" \with { instrumentName = "Bass" }
\bass
\new DrumStaff \with { instrumentName = "Drums" }
\drumContents
>>
>>
\layout {
\context { \Staff \RemoveEmptyStaves }
\context {
\Score
\override BarNumber.padding = #3
\override RehearsalMark.padding = #2
skipBars = ##t
}
}
\midi { }
}
|
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
}
|
Plantilla de piano (sencilla)
Presentamos a continuación una plantilla de piano sencilla con algunas
notas.
| | upper = \relative c'' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
lower = \relative c {
\clef bass
\key c \major
\time 4/4
a2 c
}
\score {
\new PianoStaff \with { instrumentName = "Piano" }
<<
\new Staff = "upper" \upper
\new Staff = "lower" \lower
>>
\layout { }
\midi { }
}
|
Plantilla de piano con letra centrada
En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta
se puede centrar entre los pentagramas de un sistema de piano.
| | upper = \relative c'' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
lower = \relative c {
\clef bass
\key c \major
\time 4/4
a2 c
}
text = \lyricmode {
Aaa Bee Cee Dee
}
\score {
\new PianoStaff <<
\new Staff = upper { \new Voice = "singer" \upper }
\new Lyrics \lyricsto "singer" \text
\new Staff = lower { \lower }
>>
\layout { }
\midi { }
}
|
Plantilla de piano con melodía y letra
He aquí el típico formato dde una canción: un pentagrama con la
melodía y la letra, y el acompañamiento de piano por debajo.
| | melody = \relative c'' {
\clef treble
\key c \major
\time 4/4
a b c d
}
text = \lyricmode {
Aaa Bee Cee Dee
}
upper = \relative c'' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
lower = \relative c {
\clef bass
\key c \major
\time 4/4
a2 c
}
\score {
<<
\new Voice = "mel" { \autoBeamOff \melody }
\new Lyrics \lyricsto mel \text
\new PianoStaff <<
\new Staff = "upper" \upper
\new Staff = "lower" \lower
>>
>>
\layout {
\context { \Staff \RemoveEmptyStaves }
}
\midi { }
}
|
Removing brace on first line of piano score
This snippet removes the first brace from a PianoStaff or a
GrandStaff. It may be useful when cutting and pasting the
engraved image into existing music.
It uses \alterBroken.
| | someMusic = {
\once \override Staff.Clef.stencil = ##f
\once \override Staff.TimeSignature.stencil = ##f
\repeat unfold 3 c1 \break
\repeat unfold 5 c1 \break
\repeat unfold 5 c1
}
\score {
\new PianoStaff
<<
\new Staff = "right" \relative c'' \someMusic
\new Staff = "left" \relative c' { \clef F \someMusic }
>>
\layout {
indent=75
\context {
\PianoStaff
\alterBroken transparent #'(#t) SystemStartBrace
}
}
}
|
Usar cambio automático de pentagrama con más de una voz
Utilización de autoChange con más de una voz.
| | \score
{
\new PianoStaff
<<
\new Staff = "up" {
<<
\set Timing.beamExceptions = #'()
\set Timing.beatStructure = #'(4)
\new Voice {
\voiceOne
\autoChange
\relative c' {
g8 a b c d e f g
g,8 a b c d e f g
}
}
\new Voice {
\voiceTwo
\autoChange
\relative c' {
g8 a b c d e f g
g,,8 a b c d e f g
}
}
>>
}
\new Staff = "down" {
\clef bass
}
>>
}
|
Plantilla de conjunto vocal con reducción de piano automática
Esta plantilla añade una reducción de piano automática a la partitura
vocal SATB estándar que se mostró en la “Plantilla de conjunto
vocal”. Esto presenta uno de los puntos fuertes de LilyPond: podemos
usar una definición de música más de una vez. Si se hace cualquier
cambio en las notas de la parte vocal (digamos tenorMusic),
entonces los cambios se aplicarán también a la reducción de piano.
| | \paper {
top-system-spacing.basic-distance = #10
score-system-spacing.basic-distance = #20
system-system-spacing.basic-distance = #20
last-bottom-spacing.basic-distance = #10
}
global = {
\key c \major
\time 4/4
}
sopMusic = \relative {
c''4 c c8[( b)] c4
}
sopWords = \lyricmode {
hi hi hi hi
}
altoMusic = \relative {
e'4 f d e
}
altoWords =\lyricmode {
ha ha ha ha
}
tenorMusic = \relative {
g4 a f g
}
tenorWords = \lyricmode {
hu hu hu hu
}
bassMusic = \relative {
c4 c g c
}
bassWords = \lyricmode {
ho ho ho ho
}
\score {
<<
\new ChoirStaff <<
\new Lyrics = "sopranos" \with {
% This is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
\new Lyrics = "altos"
\new Lyrics = "tenors" \with {
% This is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
\new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
>>
\new Lyrics = "basses"
\context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
\context Lyrics = "altos" \lyricsto "altos" \altoWords
\context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
\context Lyrics = "basses" \lyricsto "basses" \bassWords
>>
\new PianoStaff <<
\new Staff <<
\set Staff.printPartCombineTexts = ##f
\partCombine
<< \global \sopMusic >>
<< \global \altoMusic >>
>>
\new Staff <<
\clef bass
\set Staff.printPartCombineTexts = ##f
\partCombine
<< \global \tenorMusic >>
<< \global \bassMusic >>
>>
>>
>>
}
|
Percussion
Percussion
Escritura de partes de percusión
Mediante la utilización de las potentes herramientas preconfiguradas
como la función \drummode y el contexto DrumStaff, la
introducción de partes para percusión es muy fácil: las percusiones se
sitúan en sus propias posiciones de pentagrama (con una clave
especial) y tienen las cabezas correspondientes al instrumento. Es
posible añadir un símbolo adicional a la percusión o reducir el número
de líneas.
| | drh = \drummode {
cymc4.^"crash" hhc16^"h.h." hh hhc8 hho hhc8 hh16 hh
hhc4 r4 r2
}
drl = \drummode {
bd4 sn8 bd bd4 << bd ss >>
bd8 tommh tommh bd toml toml bd tomfh16 tomfh
}
timb = \drummode {
timh4 ssh timl8 ssh r timh r4
ssh8 timl r4 cb8 cb
}
\score {
<<
\new DrumStaff \with {
instrumentName = "timbales"
drumStyleTable = #timbales-style
\override StaffSymbol.line-count = #2
\override BarLine.bar-extent = #'(-1 . 1)
}
<<
\timb
>>
\new DrumStaff \with { instrumentName = "drums" }
<<
\new DrumVoice { \stemUp \drh }
\new DrumVoice { \stemDown \drl }
>>
>>
\layout { }
\midi { \tempo 4 = 120 }
}
|
Customized drum notation in printed and MIDI output
Customized drum “pitch” names (suitable for a custom drum style, for
example) may be used both in printed and MIDI output by defining such
variables as drumPitchNames, drumStyleTable and
midiDrumPitches, as demonstrated here. In short, this snippet:
* defines some "pitch" names * defines how they will be rendered *
tell LilyPond to use them for layout * assigns pitches to the names *
tell LilyPond to use them for MIDI output
| | %% This snippet tries to amend
%% NR 2.5.1 Common notation for percussion - Custom percussion staves
%% http://lilypond.org/doc/v2.18/Documentation/notation/common-notation-for-percussion#custom-percussion-staves
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% To use custom drum-pitch-names for your score and midi you need to follow
%% this route:
%%
%%%%%%%%%%%%
%% LAYOUT:
%%%%%%%%%%%%
%%
%% (1) Define a name and put it in `drumPitchNames'
%% This can be done at toplevel with
%% drumPitchNames.my-name = #'my-name
%% It's possible to add an alias as well.
%% (2) Define how it should be printed
%% Therefore put them into a toplevel-list, where each entry should look:
%% (my-name
%% note-head-style-or-default
%% articulation-string-or-#f
%% staff-position)
%% Example:
%% #(define my-style
%% '(
%% (my-name default "tenuto" -1)
%% ; ...
%% ))
%% (3) Tell LilyPond to use this custom-definitions, with
%% drumStyleTable = #(alist->hash-table my-style)
%% in a \layout or \with
%%
%% Now we're done for layout, here a short, but complete example:
%% \new DrumStaff
%% \with { drumStyleTable = #(alist->hash-table my-style) }
%% \drummode { my-name }
%%
%%%%%%%%%%%%
%% MIDI:
%%%%%%%%%%%%
%%
%% (1) Again at toplvel, assign a pitch to your custom-note-name
%% midiDrumPitches.my-name = ges
%% Note that you have to use the name, which is in drumPitchNames, no alias
%% (2) Tell LilyPond to use this pitch(es), with
%% drumPitchTable = #(alist->hash-table midiDrumPitches)
%%
%% Example:
%% \score {
%% \new DrumStaff
%% \with {
%% drumStyleTable = #(alist->hash-table my-style)
%% drumPitchTable = #(alist->hash-table midiDrumPitches)
%% }
%% \drummode { my-name4 }
%% \layout {}
%% \midi {}
%% }
%%
%%%%%%%%%%%%
%% TESTING
%%%%%%%%%%%%
%%
%% To test whether all is fine, run the following sequence in terminal:
%% lilypond my-file.ly
%% midi2ly my-file.midi
%% gedit my-file-midi.ly
%%
%% Which will do:
%% 1. create pdf and midi
%% 2. transform the midi back to a .ly-file
%% (note: midi2ly is not always good in correctly identifying enharmonic pitches)
%% 3. open this file in gedit (or use another editor)
%% Now watch what you've got.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% FULL EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
drumPitchNames.dbass = #'dbass
drumPitchNames.dba = #'dbass % 'db is in use already
drumPitchNames.dbassmute = #'dbassmute
drumPitchNames.dbm = #'dbassmute
drumPitchNames.do = #'dopen
drumPitchNames.dopenmute = #'dopenmute
drumPitchNames.dom = #'dopenmute
drumPitchNames.dslap = #'dslap
drumPitchNames.ds = #'dslap
drumPitchNames.dslapmute = #'dslapmute
drumPitchNames.dsm = #'dslapmute
#(define djembe
'((dbass default #f -2)
(dbassmute default "stopped" -2)
(dopen default #f 0)
(dopenmute default "stopped" 0)
(dslap default #f 2)
(dslapmute default "stopped" 2)))
midiDrumPitches.dbass = g
midiDrumPitches.dbassmute = fis
midiDrumPitches.dopen = a
midiDrumPitches.dopenmute = gis
midiDrumPitches.dslap = b
midiDrumPitches.dslapmute = ais
one = \drummode { r4 dba4 do ds r dbm dom dsm }
\score {
\new DrumStaff
\with {
\override StaffSymbol.line-count = #3
instrumentName = #"Djembe "
drumStyleTable = #(alist->hash-table djembe)
drumPitchTable = #(alist->hash-table midiDrumPitches)
}
\one
\layout {}
\midi {}
}
|
Indicaciones de compás polimétricas profundamente personalizadas
Aunque aquí el elemento más esencial no es la indicación de compás
polimétrica que se muestra, se ha incluido para mostrar el pulso de la
pieza, que es la plantilla de una canción de los Balcanes real.
| | melody = \relative c'' {
\key g \major
\compoundMeter #'((3 8) (2 8) (2 8) (3 8) (2 8) (2 8)
(2 8) (2 8) (3 8) (2 8) (2 8))
c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break
c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4
c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
c4. d4 c4 d4. c4 d c2 d4. e4-^ d4
c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
}
drum = \new DrumStaff \drummode {
\bar ".|:" bd4.^\markup { Drums } sn4 bd \bar ";" sn4.
bd4 sn \bar ";" bd sn bd4. sn4 bd \bar ":|."
}
\new Staff \with {
instrumentName = \markup { \concat { "B" \flat " Sop." } }
}
{
\melody
\drum
}
|
Plantilla para combo de jazz
Ésta es una plantilla bastante avanzada, para un conjunto de
jazz. Observe que la notación de todos los instrumentos está en
\key c \major (Do mayor). Esto se refiere al tono de
concierto; la armadura se transporta automáticamente si la música está
dentro de una sección \transpose.
| | \header {
title = "Song"
subtitle = "(tune)"
composer = "Me"
meter = "moderato"
piece = "Swing"
tagline = \markup {
\column {
"LilyPond example file by Amelie Zapf,"
"Berlin 07/07/2003"
}
}
}
% To make the example display in the documentation
\paper {
paper-width = 130
}
%#(set-global-staff-size 16)
\include "english.ly"
%%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%%
sl = {
\override NoteHead.style = #'slash
\hide Stem
}
nsl = {
\revert NoteHead.style
\undo \hide Stem
}
crOn = \override NoteHead.style = #'cross
crOff = \revert NoteHead.style
%% insert chord name style stuff here.
jazzChords = { }
%%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%%
global = { \time 4/4 }
Key = { \key c \major }
% ############ Horns ############
% ------ Trumpet ------
trpt = \transpose c d \relative c'' {
\Key
c1 | c | c |
}
trpHarmony = \transpose c' d {
\jazzChords
}
trumpet = {
\global
\clef treble
<<
\trpt
>>
}
% ------ Alto Saxophone ------
alto = \transpose c a \relative c' {
\Key
c1 | c | c |
}
altoHarmony = \transpose c' a {
\jazzChords
}
altoSax = {
\global
\clef treble
<<
\alto
>>
}
% ------ Baritone Saxophone ------
bari = \transpose c a' \relative c {
\Key
c1
c1
\sl
d4^"Solo" d d d
\nsl
}
bariHarmony = \transpose c' a \chordmode {
\jazzChords s1 s d2:maj e:m7
}
bariSax = {
\global
\clef treble
<<
\bari
>>
}
% ------ Trombone ------
tbone = \relative c {
\Key
c1 | c | c
}
tboneHarmony = \chordmode {
\jazzChords
}
trombone = {
\global
\clef bass
<<
\tbone
>>
}
% ############ Rhythm Section #############
% ------ Guitar ------
gtr = \relative c'' {
\Key
c1
\sl
b4 b b b
\nsl
c1
}
gtrHarmony = \chordmode {
\jazzChords
s1 c2:min7+ d2:maj9
}
guitar = {
\global
\clef treble
<<
\gtr
>>
}
%% ------ Piano ------
rhUpper = \relative c'' {
\voiceOne
\Key
c1 | c | c
}
rhLower = \relative c' {
\voiceTwo
\Key
e1 | e | e
}
lhUpper = \relative c' {
\voiceOne
\Key
g1 | g | g
}
lhLower = \relative c {
\voiceTwo
\Key
c1 | c | c
}
PianoRH = {
\clef treble
\global
<<
\new Voice = "one" \rhUpper
\new Voice = "two" \rhLower
>>
}
PianoLH = {
\clef bass
\global
<<
\new Voice = "one" \lhUpper
\new Voice = "two" \lhLower
>>
}
piano = {
<<
\new Staff = "upper" \PianoRH
\new Staff = "lower" \PianoLH
>>
}
% ------ Bass Guitar ------
Bass = \relative c {
\Key
c1 | c | c
}
bass = {
\global
\clef bass
<<
\Bass
>>
}
% ------ Drums ------
up = \drummode {
\voiceOne
hh4 <hh sn> hh <hh sn>
hh4 <hh sn> hh <hh sn>
hh4 <hh sn> hh <hh sn>
}
down = \drummode {
\voiceTwo
bd4 s bd s
bd4 s bd s
bd4 s bd s
}
drumContents = {
\global
<<
\new DrumVoice \up
\new DrumVoice \down
>>
}
%%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%
\score {
<<
\new StaffGroup = "horns" <<
\new Staff = "trumpet" \with { instrumentName = "Trumpet" }
\trumpet
\new Staff = "altosax" \with { instrumentName = "Alto Sax" }
\altoSax
\new ChordNames = "barichords" \with { instrumentName = "Trumpet" }
\bariHarmony
\new Staff = "barisax" \with { instrumentName = "Bari Sax" }
\bariSax
\new Staff = "trombone" \with { instrumentName = "Trombone" }
\trombone
>>
\new StaffGroup = "rhythm" <<
\new ChordNames = "chords" \gtrHarmony
\new Staff = "guitar" \with { instrumentName = "Guitar" }
\guitar
\new PianoStaff = "piano" \with {
instrumentName = "Piano"
midiInstrument = "acoustic grand"
}
\piano
\new Staff = "bass" \with { instrumentName = "Bass" }
\bass
\new DrumStaff \with { instrumentName = "Drums" }
\drumContents
>>
>>
\layout {
\context { \Staff \RemoveEmptyStaves }
\context {
\Score
\override BarNumber.padding = #3
\override RehearsalMark.padding = #2
skipBars = ##t
}
}
\midi { }
}
|
Símbolos de golpes de percusión
No están contemplados de forma nativa los símbolos gráficos para
instrumentos de percusión; sin embargo es posible incluir dichos
símbolos, ya sea como un archivo EPS externo o como código PostScript
incrustado dentro de un elemento de marcado, como se muestra en este
ejemplo.
| | stick = \markup {
\with-dimensions #'(0 . 5) #'(0 . 5)
\postscript "
0 6 translate
0.8 -0.8 scale
0 0 0 setrgbcolor
[] 0 setdash
1 setlinewidth
0 setlinejoin
0 setlinecap
gsave [1 0 0 1 0 0] concat
gsave [1 0 0 1 -3.5406095 -199.29342] concat
gsave
0 0 0 setrgbcolor
newpath
7.1434065 200.94354 moveto
7.2109628 200.90454 7.2785188 200.86554 7.3460747 200.82654 curveto
8.2056347 202.31535 9.0651946 203.80414 9.9247546 205.29295 curveto
9.8571989 205.33195 9.7896429 205.37095 9.7220864 205.40996 curveto
8.8625264 203.92115 8.0029664 202.43233 7.1434065 200.94354 curveto
closepath
eofill
grestore
gsave
0 0 0 setrgbcolor
newpath
4.9646672 203.10444 moveto
5.0036707 203.03688 5.0426744 202.96933 5.0816777 202.90176 curveto
6.5704792 203.76133 8.0592809 204.6209 9.5480824 205.48045 curveto
9.5090791 205.54801 9.4700754 205.61556 9.4310717 205.68311 curveto
7.94227 204.82356 6.4534687 203.96399 4.9646672 203.10444 curveto
closepath
eofill
grestore
gsave
<<
/ShadingType 3
/ColorSpace /DeviceRGB
/Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441]
/Extend [true true]
/Domain [0 1]
/Function <<
/FunctionType 3
/Functions
[
<<
/FunctionType 2
/Domain [0 1]
/C0 [1 1 1]
/C1 [0.72941178 0.72941178 0.72941178]
/N 1
>>
]
/Domain [0 1]
/Bounds [ ]
/Encode [ 0 1 ]
>>
>>
newpath
7.6422017 200.76488 moveto
7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto
6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto
6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto
7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto
closepath
clip
gsave [
0.052859054 0.063089841 -0.020912282 0.017521108 5.7334261 189.76443
] concat
shfill
grestore
grestore
0 0 0 setrgbcolor
[] 0 setdash
0.027282091 setlinewidth
0 setlinejoin
0 setlinecap
newpath
7.6422017 200.76488 moveto
7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto
6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto
6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto
7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto
closepath
stroke
gsave
<<
/ShadingType 3
/ColorSpace /DeviceRGB
/Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441]
/Extend [true true]
/Domain [0 1]
/Function <<
/FunctionType 3
/Functions
[
<<
/FunctionType 2
/Domain [0 1]
/C0 [1 1 1]
/C1 [0.72941178 0.72941178 0.72941178]
/N 1
>>
]
/Domain [0 1]
/Bounds [ ]
/Encode [ 0 1 ]
>>
>>
newpath
5.2721217 202.83181 moveto
5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto
4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto
4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto
5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto
closepath
clip
gsave [
0.052859054 0.063089841 -0.020912282 0.017521108 3.363346 191.83136
] concat
shfill
grestore
grestore
0 0 0 setrgbcolor
[] 0 setdash
0.027282091 setlinewidth
0 setlinejoin
0 setlinecap
newpath
5.2721217 202.83181 moveto
5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto
4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto
4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto
5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto
closepath
stroke
grestore
grestore
"
}
\score {
b1^\stick
}
|
Percussion example
A short example taken from Stravinsky’s L’histoire du Soldat.
| | #(define mydrums '((bassdrum default #t 4)
(snare default #t -4)
(tambourine default #t 0)))
global = {
\time 3/8 s4.
\time 2/4 s2*2
\time 3/8 s4.
\time 2/4 s2
}
drumsA = {
\context DrumVoice <<
{ \global }
{ \drummode {
\autoBeamOff
\stemDown sn8 \stemUp tamb s8 |
sn4 \stemDown sn4 |
\stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 |
\stemDown sn8 \stemUp tamb s8 |
\stemUp sn4 s8 \stemUp tamb
}
}
>>
}
drumsB = {
\drummode {
s4 bd8 s2*2 s4 bd8 s4 bd8 s8
}
}
\layout {
indent = #40
}
\score {
\new StaffGroup <<
\new DrumStaff \with {
instrumentName = \markup {
\center-column {
"Tambourine"
"et"
"caisse claire s. timbre"
}
}
drumStyleTable = #(alist->hash-table mydrums)
}
\drumsA
\new DrumStaff \with {
instrumentName = #"Grosse Caisse"
drumStyleTable = #(alist->hash-table mydrums)
}
\drumsB
>>
}
|
Imprimir música que tenga compases distintos en cada pentagrama
En el siguiente fragmento de código, dos partes distintas tienen un
compás completamente diferente y sin embargo se mantienen
sincronizadas. Las barras de compás ya no se pueden imprimir en el
nivel de Score; para permitir barras de compás independientes
en cada parte se trasladan los grabadores
Default_barline_engraver y Timing_translator desde el
contexto de partitura Score hasta el contexto de pentagrama
Staff.
Si son necesarios números de compás, el grabador de números de compás
Bar_number_engraver también debe trasladarse, ya que descansa
en propiedades fijadas por el Timing_translator; se puede usar
un bloque \with para añadir números de compás al pentagrama
apropiado.
| | \paper {
indent = #0
ragged-right = ##t
}
global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } }
\layout {
\context {
\Score
\remove "Timing_translator"
\remove "Default_bar_line_engraver"
\remove "Bar_number_engraver"
\override SpacingSpanner.uniform-stretching = ##t
\override SpacingSpanner.strict-note-spacing = ##t
proportionalNotationDuration = #(ly:make-moment 1/64)
}
\context {
\Staff
\consists "Timing_translator"
\consists "Default_bar_line_engraver"
}
\context {
\Voice
\remove "Forbid_line_break_engraver"
tupletFullLength = ##t
}
}
Bassklarinette = \new Staff \with {
\consists "Bar_number_engraver"
barNumberVisibility = #(every-nth-bar-number-visible 2)
\override BarNumber.break-visibility = #end-of-line-invisible
} <<
\global {
\bar "|"
\clef treble
\time 3/8
d''4.
\bar "|"
\time 3/4
r8 des''2( c''8)
\bar "|"
\time 7/8
r4. ees''2 ~
\bar "|"
\time 2/4
\tupletUp
\tuplet 3/2 { ees''4 r4 d''4 ~ }
\bar "|"
\time 3/8
\tupletUp
\tuplet 4/3 { d''4 r4 }
\bar "|"
\time 2/4
e''2
\bar "|"
\time 3/8
es''4.
\bar "|"
\time 3/4
r8 d''2 r8
\bar "|"
}
>>
Perkussion = \new StaffGroup <<
\new Staff <<
\global {
\bar "|"
\clef percussion
\time 3/4
r4 c'2 ~
\bar "|"
c'2.
\bar "|"
R2.
\bar "|"
r2 g'4 ~
\bar "|"
g'2. ~
\bar "|"
g'2.
}
>>
\new Staff <<
\global {
\bar "|"
\clef percussion
\time 3/4
R2.
\bar "|"
g'2. ~
\bar "|"
g'2.
\bar "|"
r4 g'2 ~
\bar "|"
g'2 r4
\bar "|"
g'2.
}
>>
>>
\score {
<<
\Bassklarinette
\Perkussion
>>
}
|
Tam-tam example
A tam-tam example, entered with ’tt’
| | #(define mydrums '((tamtam default #t 0)))
\new DrumStaff \with { instrumentName = #"Tamtam" }
\drummode {
\set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
\override Staff.StaffSymbol.line-positions = #'( 0 )
\override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
tt 1 \pp \laissezVibrer
}
|
Fretted strings
Fretted string instruments
Añadir digitaciones a la partitura
Se pueden escribir instrucciones de digitación usando una sintaxis muy
sencilla.
| | \relative c'' {
c4-1 d-2 f-4 e-3
}
|
Añadir digitaciones a las tablaturas
Para añadir digitaciones a las tablaturas, utilice una combinación de
\markup y \finger.
| | one = \markup { \finger 1 }
two = \markup { \finger 2 }
threeTwo = \markup {
\override #'(baseline-skip . 2)
\column {
\finger 3
\finger 2
}
}
threeFour = \markup {
\override #'(baseline-skip . 2)
\column {
\finger 3
\finger 4
}
}
\score {
\new TabStaff {
\tabFullNotation
\stemUp
e8\4^\one b\2 <g\3 e'\1>^>[ b\2 e\4]
<a\3 fis'\1>^>^\threeTwo[ b\2 e\4]
}
}
|
Adding markups in a tablature
By default markups does not show in a tablature. To make them appear,
simply use the command \revert TabStaff.TextScript.stencil
| | %% http://lsr.di.unimi.it/LSR/Item?id=919
% by P.P.Schneider on June 2014
high = { r4 r8 <g c'> q r8 r4 }
low = { c4 r4 c8 r8 g,8 b, }
pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" }
\score {
\new TabStaff {
\repeat unfold 2 << \high \\ \low \\ \pulse >>
}
\layout {
\context {
\TabStaff
\clef moderntab
\revert TextScript.stencil
\override TextScript.font-series = #'bold
\override TextScript.font-size = #-2
\override TextScript.color = #red
}
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1/8)
}
}
}
|
Permitir que las digitaciones se impriman dentro del pentagrama
Las cifras de digitación orientadas verticalmente se colocan de forma
predeterminada fuera del pentagrama. Sin embargo, este comportamiento
se puede cancelar. Hay que prestar atención en situaciones en las que
las digitaciones y las plicas están en la misma dirección: por
defecto, las digitaciones solo evitan la colisión con plicas unidas
por una barra. Se puede cambiar este ajuste para no evitar ninguna
plica o evitarlas todas; el ejemplo siguiente muestra las dos
copciones, así como la manera de volver al comportamiento
predeteminado.
| | \relative c' {
<c-1 e-2 g-3 b-5>2
\override Fingering.staff-padding = #'()
<c-1 e-2 g-3 b-5>4 g'-0
a8[-1 b]-2 g-0 r
\override Fingering.add-stem-support = ##f
a[-1 b]-2 g-0 r
\override Fingering.add-stem-support = ##t
a[-1 b]-2 g-0 r
\override Fingering.add-stem-support = #only-if-beamed
a[-1 b]-2 g-0 r
}
|
Barres in automatic fretboards
When automatic fretboards are used, barre indicators will be drawn whenever
one finger is responsible for multiple strings.
If no finger indications are given in the chord from which the automatic
fretboard is created, no barre indicators will be included, because
there is no way to identify where barres should be placed.
| | \new FretBoards {
<f,-1 c-3 f-4 a-2 c'-1 f'-1>1
<f, c f a c' f'>1
}
|
Bar chords notation for Guitar (with Text Spanner)
Here is how to print bar chords (or barre chords) or half-bar chords
(just uncomment the appropriate line for to select either one). The
syntax is : \bbarre #"fret_number" note(s)
| | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%%%%%% Cut here ----- Start 'bbarred.ly'
%% C with slash -------------------------------
cWithSlash = \markup {
\combine \roman C \translate #'(0.6 . -0.4) \draw-line #'(0 . 2.0)
}
%% Span -----------------------------------
%% Syntax: \bbarre #"text" { notes } - text = any number of box
bbarre =
#(define-music-function (barre location str music) (string? ly:music?)
(let ((elts (extract-named-music music '(NoteEvent EventChord))))
(if (pair? elts)
(let ((first-element (first elts))
(last-element (last elts)))
(set! (ly:music-property first-element 'articulations)
(cons (make-music 'TextSpanEvent 'span-direction -1)
(ly:music-property first-element 'articulations)))
(set! (ly:music-property last-element 'articulations)
(cons (make-music 'TextSpanEvent 'span-direction 1)
(ly:music-property last-element 'articulations))))))
#{
\once \override TextSpanner.font-size = #-2
\once \override TextSpanner.font-shape = #'upright
\once \override TextSpanner.staff-padding = #3
\once \override TextSpanner.style = #'line
\once \override TextSpanner.to-barline = ##f
\once \override TextSpanner.bound-details =
#`((left
(text . ,#{ \markup { \draw-line #'( 0 . -.5) } #})
(Y . 0)
(padding . 0.25)
(attach-dir . -2))
(right
(text . ,#{ \markup { \cWithSlash #str } #})
(Y . 0)
(padding . 0.25)
(attach-dir . 2)))
%% uncomment this line for make full barred
% \once \override TextSpanner.bound-details.left.text = \markup{"B" #str}
$music
#})
%% %%%%%%% Cut here ----- End 'bbarred.ly'
%% Copy and change the last line for full barred. Rename in 'fbarred.ly'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Syntaxe: \bbarre #"text" { notes } - text = any number of box
\relative c'{ \clef "G_8" \stemUp \bbarre #"III" { <f a'>16[ c' d c d8] } }
|
Modificar la orientación de los trastes
Los diagramas de posiciones de acordes se pueden orientar de tres
formas. De manera predeterminada se alinena la cuerda o traste
superior en las distintas alineaciones.
| | \include "predefined-guitar-fretboards.ly"
<<
\chords {
c1
c1
c1
}
\new FretBoards {
\chordmode {
c1
\override FretBoard.fret-diagram-details.orientation =
#'landscape
c1
\override FretBoard.fret-diagram-details.orientation =
#'opposing-landscape
c1
}
}
\new Voice {
c'1
c'1
c'
}
>>
|
Glissando de acordes en tablatura
Los deslizamientos para acordes se indican por omisión tanto en el contexto
Staff como en TabStaff. Los números de cuerda son
necesarios para TabStaff porque los cálculos de cuerda automáticos son
diferentes para los acordes y para notas sueltas.
| | myMusic = \relative c' {
<c e g>1 \glissando <f a c>
}
\score {
<<
\new Staff {
\clef "treble_8"
\myMusic
}
\new TabStaff \myMusic
>>
}
\score {
<<
\new Staff {
\clef "treble_8"
\myMusic
}
\new TabStaff \with { \override Glissando.style = #'none } {
\myMusic
}
>>
}
|
Cambios de acorde de posiciones de trastes
Se puede hacer que los diagramas de posiciones se muestren sólo
cuando el acorde cambia o al comienzo de una nueva línea.
| | \include "predefined-guitar-fretboards.ly"
myChords = \chordmode {
c1 c1 \break
\set chordChanges = ##t
c1 c1 \break
c1 c1
}
<<
\new ChordNames { \myChords }
\new FretBoards { \myChords }
\new Staff { \myChords }
>>
|
Chords with stretched fingering for FretBoards and TabVoice
Sometimes chords with a stretched fingering are required. If not
otherwise specified the context-property maximumFretStretch is
set to 4, though. Resulting in a warning about "No string for
pitch ..." and the note is omitted. You may set
maximumFretStretch to an approppriate value or explecitely
assign string-numbers to all notes of a chord.
| | %% The code below will print two warnings, which may be omitted by uncommenting:
%#(for-each (lambda (x) (ly:expect-warning "No string for pitch")) (iota 2))
mus = {
<c' bes'>
<c'\2 bes'>
\set maximumFretStretch = 5
<c' bes'>
<c'\2 bes'\1>
}
<<
\new FretBoards \mus
\new TabVoice \mus
>>
|
Controlar la colocación de las digitaciones de acordes
Se puede controlar con precisión la colocación de los números de
digitación. Para que se tenga en cuenta la orientación de las
digitaciones, se debe utilizar dentro de una construcción de acorde <>
aunque sea una sola nota. Se puede establecer la orientación para los
números de cuerda y las digitaciones de la mano derecha de una forma
similar.
| | \relative c' {
\set fingeringOrientations = #'(left)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(down right up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(up)
<c-1 e-3 a-5>4
\set fingeringOrientations = #'(left)
<c-1>2
\set fingeringOrientations = #'(down)
<e-3>2
\set stringNumberOrientations = #'(up left down)
<f\3 a\2 c\1>1
\set strokeFingerOrientations = #'(down right up)
<c\rightHandFinger #1 e\rightHandFinger #2 c'\rightHandFinger #4 >
}
|
Personalizar los diagramas de posiciones
Se pueden establecer las propiedades de los diagramas de
posiciones de acordes por medio de 'fret-diagram-details.
Para los diagramas de posiciones de FretBoard, se aplican los
overrides (sobreescrituras) al objeto FretBoards.FretBoard.
Como Voice, FretBoards es un contexto del nivel
inferior, y por tanto se puede omitir su nombre en la
sobreescritura de propiedades.
| | \include "predefined-guitar-fretboards.ly"
\storePredefinedDiagram #default-fret-table \chordmode { c' }
#guitar-tuning
#"x;1-1-(;3-2;3-3;3-4;1-1-);"
<<
\new ChordNames {
\chordmode { c1 | c | c | d }
}
\new FretBoards {
% Set global properties of fret diagram
\override FretBoards.FretBoard.size = #'1.2
\override FretBoard.fret-diagram-details.finger-code = #'in-dot
\override FretBoard.fret-diagram-details.dot-color = #'white
\chordmode {
c
\once \override FretBoard.size = #'1.0
\once \override FretBoard.fret-diagram-details.barre-type = #'straight
\once \override FretBoard.fret-diagram-details.dot-color = #'black
\once \override FretBoard.fret-diagram-details.finger-code = #'below-string
c'
\once \override FretBoard.fret-diagram-details.barre-type = #'none
\once \override FretBoard.fret-diagram-details.number-type = #'arabic
\once \override FretBoard.fret-diagram-details.orientation = #'landscape
\once \override FretBoard.fret-diagram-details.mute-string = #"M"
\once \override FretBoard.fret-diagram-details.label-dir = #LEFT
\once \override FretBoard.fret-diagram-details.dot-color = #'black
c'
\once \override FretBoard.fret-diagram-details.finger-code = #'below-string
\once \override FretBoard.fret-diagram-details.dot-radius = #0.35
\once \override FretBoard.fret-diagram-details.dot-position = #0.5
\once \override FretBoard.fret-diagram-details.fret-count = #3
d
}
}
\new Voice {
c'1 | c' | c' | d'
}
>>
|
Personalizar diagramas de posiciones de marcado
Se pueden establecer las propiedades de los diagramas de
posiciones a través de 'fret-diagram-details. Para los
diagramas de posiciones de marcado, se pueden aplicar overrides
(sobreescrituras) al objeto Voice.TextScript o directamente al elemento de marcado.
| | <<
\chords { c1 | c | c | d }
\new Voice = "mel" {
\textLengthOn
% Set global properties of fret diagram
\override TextScript.size = #'1.2
\override TextScript.fret-diagram-details.finger-code = #'in-dot
\override TextScript.fret-diagram-details.dot-color = #'white
%% C major for guitar, no barre, using defaults
% terse style
c'1^\markup { \fret-diagram-terse "x;3-3;2-2;o;1-1;o;" }
%% C major for guitar, barred on third fret
% verbose style
% size 1.0
% roman fret label, finger labels below string, straight barre
c'1^\markup {
% standard size
\override #'(size . 1.0) {
\override #'(fret-diagram-details . (
(number-type . roman-lower)
(finger-code . in-dot)
(barre-type . straight))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
}
%% C major for guitar, barred on third fret
% verbose style
% landscape orientation, arabic numbers, M for mute string
% no barre, fret label down or left, small mute label font
c'1^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(number-type . arabic)
(label-dir . -1)
(mute-string . "M")
(orientation . landscape)
(barre-type . none)
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
%% simple D chord
% terse style
% larger dots, centered dots, fewer frets
% label below string
d'1^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
}
>>
|
Definición de posiciones predefinidas para otros instrumentos
Se pueden añadir diagramas de posiciones predefinidas para
instrumentos nuevos además de los estándar que se usan para la
guitarra. Este archivo muestra cómo se hace, definiendo una afinación
nueva y unas cuantas posiciones para el cuatro venezolano.
Este archivo también muestra cómo se pueden incluir las digitaciones
en los acordes que se usan como puntos de referencia para la búsqueda
de acordes en la tabla, y mostrarse en el diagrama de posiciones y la
tablatura TabStaff, pero no en la música.
Estas posiciones no se pueden transportar porque contienen información
de las cuerdas. Hay planes para corregir esto en un futuro.
| | % add FretBoards for the Cuatro
% Note: This section could be put into a separate file
% predefined-cuatro-fretboards.ly
% and \included into each of your compositions
cuatroTuning = #`(,(ly:make-pitch 0 6 0)
,(ly:make-pitch 1 3 SHARP)
,(ly:make-pitch 1 1 0)
,(ly:make-pitch 0 5 0))
dSix = { <a\4 b\1 d\3 fis\2> }
dMajor = { <a\4 d\1 d\3 fis \2> }
aMajSeven = { <a\4 cis\1 e\3 g\2> }
dMajSeven = { <a\4 c\1 d\3 fis\2> }
gMajor = { <b\4 b\1 d\3 g\2> }
\storePredefinedDiagram #default-fret-table \dSix
#cuatroTuning
#"o;o;o;o;"
\storePredefinedDiagram #default-fret-table \dMajor
#cuatroTuning
#"o;o;o;3-3;"
\storePredefinedDiagram #default-fret-table \aMajSeven
#cuatroTuning
#"o;2-2;1-1;2-3;"
\storePredefinedDiagram #default-fret-table \dMajSeven
#cuatroTuning
#"o;o;o;1-1;"
\storePredefinedDiagram #default-fret-table \gMajor
#cuatroTuning
#"2-2;o;1-1;o;"
% end of potential include file /predefined-cuatro-fretboards.ly
#(set-global-staff-size 16)
primerosNames = \chordmode {
d:6 d a:maj7 d:maj7
g
}
primeros = {
\dSix \dMajor \aMajSeven \dMajSeven
\gMajor
}
\score {
<<
\new ChordNames {
\set chordChanges = ##t
\primerosNames
}
\new Staff {
\new Voice \with {
\remove "New_fingering_engraver"
}
\relative c'' {
\primeros
}
}
\new FretBoards {
\set Staff.stringTunings = #cuatroTuning
% \override FretBoard
% #'(fret-diagram-details string-count) = 4
\override FretBoard.fret-diagram-details.finger-code = #'in-dot
\primeros
}
\new TabStaff \relative c'' {
\set TabStaff.stringTunings = #cuatroTuning
\primeros
}
>>
\layout {
\context {
\Score
\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
}
}
\midi { }
}
|
Simular un hammer o ligado ascendente en una tablatura
Se puede simular un “hammer” o ligado ascendente con ligaduras de
expresión.
| | \score {
\new TabStaff {
\relative c'' {
\tabFullNotation
c4( d) d( d)
d2( c)
}
}
}
|
Digitaciones - indicación del número de cuerda y digitaciones de mano derecha
En este ejemplo se combinan las digitaciones de la mano izquierda,
indicaciones del número de cuerda y digitaciones de la mano
derecha.
| | #(define RH rightHandFinger)
\relative c {
\clef "treble_8"
<c-3\5\RH #1 >4
<e-2\4\RH #2 >4
<g-0\3\RH #3 >4
<c-1\2\RH #4 >4
}
|
Notación del flamenco
Para la guitarra flamenca se utilizan ciertos elementos de notación
especiales:
- un símbolo para indicar un golpe sobre la caja de la guitarra
con el nudillo del dedo anular
- una flecha para indicar la dirección de los rasgueos
- distintas legras para las digitaciones (“p”: pulgar, “i”:
índice, “m”: medio, “a”: anular y “x”: meñique)
- Rasgueados de 3 y cautro dedos: hacia arriba con todos los dedos
y terminando con arriba y abajo con el índice
- abanicos: rasgueos en serie con el pulgar, hacia abajo y el
meñique y el índice hacia arriba (hay también un abanico 2 en el que
los dedos medio y anular se usan en lugar del meñique)
- alza púa: pulsaciones rápidas con el pulgar
Casi todas las figuras utilizan flechas combinadas con digitaciones;
con los abanicos y los rasgueados, las notas se imprimen con cabeza
sólo en el primer acorde.
Este fragmento de código contiene código de tipo cabecera que se puede
copiar como ‘flamenco.ly’ e incluirse en los documentos fuente.
| | %%%%%%% Cut here ----- Start 'flamenco.ly'
% Text indicators :
abanico = ^\markup\small { \italic Abanico }
rasgueado = ^\markup\small { \italic Ras. }
alzapua = ^\markup\small { \italic Alzapua }
% Finger stroke symbols :
strokeUp = \markup\combine\override #'(thickness . 1.3) \draw-line #'(0 . 2)\raise #2 \arrow-head #Y #UP ##f
strokeDown = \markup\combine\arrow-head #Y #DOWN ##f \override #'(thickness . 1.3) \draw-line #'(0 . 2)
% Golpe symbol :
golpe = \markup {
\filled-box #'(0 . 1) #'(0 . 1) #0
\hspace #-1.6
\with-color #white
\filled-box #'(0.15 . 0.85) #'(0.15 . 0.85) #0
}
% Strokes, fingers and golpe command :
RHp = \rightHandFinger #1
RHi = \rightHandFinger #2
RHm = \rightHandFinger #3
RHa = \rightHandFinger #4
RHx = \rightHandFinger #5
RHu = \rightHandFinger \strokeUp
RHd = \rightHandFinger \strokeDown
RHg = \rightHandFinger \golpe
% Just handy :)
tupletOff = {
\once \omit TupletNumber
\once \omit TupletBracket
}
tupletsOff = {
\omit TupletNumber
\override TupletBracket.bracket-visibility = #'if-no-beam
}
tupletsOn = {
\override TupletBracket.bracket-visibility = #'default
\undo \omit TupletNumber
}
headsOff = {
\hide TabNoteHead
\hide NoteHead
\override NoteHead.no-ledgers = ##t
}
headsOn = {
\override TabNoteHead.transparent = ##f
\override NoteHead.transparent = ##f
\override NoteHead.no-ledgers = ##f
}
%%%%%%% Cut here ----- End 'flamenco.ly'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
part = \relative c' {
\set strokeFingerOrientations = #'(up)
\key a\major
<a, e' a cis e\RHu\RHi>8
<a e' a cis e\RHd\RHi>8
r4
r2^\markup\golpe
<a e' a cis e\RHu\RHi>8
<a e' a cis e\RHd\RHi>8
<a e' a cis e\RHu\RHi\RHg>8
<a e' a cis e\RHd\RHi>8
r2
<a e' a cis e\RHu\RHa>16\rasgueado
\headsOff
<a e' a cis e\RHu\RHm>
<a e' a cis e\RHu\RHi>
<a e' a cis e\RHd\RHi>~
\headsOn
<a e' a cis e>2
r4
\tupletOff
\tuplet 5/4 {
<a e' a cis e\RHu\RHx>16\rasgueado
\headsOff
<a e' a cis e\RHu\RHa>
<a e' a cis e\RHu\RHm>
<a e' a cis e\RHu\RHi>
<a e' a cis e\RHd\RHi>~
\headsOn
}
<a e' a cis e>2
r4
\tupletsOff
\tuplet 3/2 {
<a e' a cis e\RHd\RHp>8\abanico
\headsOff
<a e' a cis e\RHu\RHx>
<a e' a cis e\RHu\RHi>
\headsOn
}
\tuplet 3/2 {
<a e' a cis e\RHd\RHp>8
\headsOff
<a e' a cis e\RHu\RHx>
<a e' a cis e\RHu\RHi>
\headsOn
}
\tuplet 3/2 {
<a e' a cis e\RHd\RHp>8
\headsOff
<a e' a cis e\RHu\RHx>
<a e' a cis e\RHu\RHi>
\headsOn
}
\tuplet 3/2 {
<a e' a cis e\RHd\RHp>8
\headsOff
<a e' a cis e\RHu\RHx>
<a e' a cis e\RHu\RHi>
\headsOn
}
\tupletsOff
\override Beam.positions = #'(2 . 2)
\tuplet 3/2 {
a8\RHp\alzapua
<e' a\RHu\RHg>
<e a\RHd>
}
\tuplet 3/2 {
a,8\RHp
<e' a\RHu\RHg>
<e a\RHd>
}
\tuplet 3/2 {
a,8\RHp
<e' a\RHu\RHg>
<e a\RHd>
}
\tuplet 3/2 {
a,8\RHp
<e' a\RHu\RHg>
<e a\RHd>
}
\tupletsOn
<a, e' a\RHu\RHm>1
\bar "|."
}
\score {
\new StaffGroup <<
\context Staff = "part" <<
\clef "G_8"
{
\part
}
>>
\context TabStaff {
\part
}
>>
\layout {
ragged-right = ##t
}
}
|
Diagramas de posiciones de acorde, explicados y desarrollados
Eeste fragmento de código presenta muchas posibilidades para obtener
diagramas de posiciones de acorde y cómo trucarlos.
| | <<
\chords {
a2 a
\repeat unfold 3 {
c c c d d
}
}
\new Voice = "mel" {
\textLengthOn
% Set global properties of fret diagram
\override TextScript.size = #1.2
\override TextScript.fret-diagram-details.finger-code = #'below-string
\override TextScript.fret-diagram-details.dot-color = #'black
%% A chord for ukulele
a'2^\markup {
\override #'(fret-diagram-details . (
(string-count . 4)
(dot-color . white)
(finger-code . in-dot))) {
\fret-diagram "4-2-2;3-1-1;2-o;1-o;"
}
}
%% A chord for ukulele, with formatting defined in definition string
% 1.2 * size, 4 strings, 4 frets, fingerings below string
% dot radius .35 of fret spacing, dot position 0.55 of fret spacing
a'2^\markup {
\override #'(fret-diagram-details . (
(dot-color . white)
(open-string . "o"))) {
\fret-diagram "s:1.2;w:4;h:3;f:2;d:0.35;p:0.55;4-2-2;3-1-1;2-o;1-o;"
}
}
%% These chords will be in normal orientation
%% C major for guitar, barred on third fret
% verbose style
% roman fret label, finger labels below string, straight barre
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-lower)
(finger-code . below-string)
(barre-type . straight))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
}
%% C major for guitar, barred on third fret
%% Double barre used to test barre function
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . arabic)
(dot-label-font-mag . 0.9)
(finger-code . in-dot)
(fret-label-font-mag . 0.6)
(fret-label-vertical-offset . 0)
(label-dir . -1)
(mute-string . "M")
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 4 2 5)
(barre 5 1 3))
}
}
}
%% C major for guitar, with capo on third fret
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-upper)
(dot-label-font-mag . 0.9)
(finger-code . none)
(fret-label-vertical-offset . 0.5)
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(capo 3)
(open 5)
(place-fret 4 5 1)
(place-fret 3 5 2)
(place-fret 2 5 3)
(open 1))
}
}
}
%% simple D chord
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(string-thickness-factor . 0.3)
(dot-position . 0.5)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
%% simple D chord, large top fret thickness
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(top-fret-thickness . 7)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
% These chords will be in landscape orientation
\override TextScript.fret-diagram-details.orientation = #'landscape
%% C major for guitar, barred on third fret
% verbose style
% roman fret label, finger labels below string, straight barre
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-lower)
(finger-code . below-string)
(barre-type . straight))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
}
%% C major for guitar, barred on third fret
%% Double barre used to test barre function
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . arabic)
(dot-label-font-mag . 0.9)
(finger-code . in-dot)
(fret-label-font-mag . 0.6)
(fret-label-vertical-offset . 0)
(label-dir . -1)
(mute-string . "M")
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 4 2 5)
(barre 5 1 3))
}
}
}
%% C major for guitar, with capo on third fret
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-upper)
(dot-label-font-mag . 0.9)
(finger-code . none)
(fret-label-vertical-offset . 0.5)
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(capo 3)
(open 5)
(place-fret 4 5 1)
(place-fret 3 5 2)
(place-fret 2 5 3)
(open 1))
}
}
}
%% simple D chord
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
%% simple D chord, large top fret thickness
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(top-fret-thickness . 7)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
% These chords will be in opposing-landscape orientation
\override TextScript.fret-diagram-details.orientation = #'opposing-landscape
%% C major for guitar, barred on third fret
% verbose style
% roman fret label, finger labels below string, straight barre
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-lower)
(finger-code . below-string)
(barre-type . straight))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
}
%% C major for guitar, barred on third fret
%% Double barre used to test barre function
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . arabic)
(dot-label-font-mag . 0.9)
(finger-code . in-dot)
(fret-label-font-mag . 0.6)
(fret-label-vertical-offset . 0)
(label-dir . -1)
(mute-string . "M")
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 4 2 5)
(barre 5 1 3))
}
}
}
%% C major for guitar, with capo on third fret
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-upper)
(dot-label-font-mag . 0.9)
(finger-code . none)
(fret-label-vertical-offset . 0.5)
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(capo 3)
(open 5)
(place-fret 4 5 1)
(place-fret 3 5 2)
(place-fret 2 5 3)
(open 1))
}
}
}
%% simple D chord
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
%% simple D chord, large top fret thickness
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(top-fret-thickness . 7)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
}
>>
|
Tablas alternativas de diagramas de posiciones
Se pueden crear tablas alternativas de diagramas de posiciones. Se
utilizarían para tener diagramas altenativos para un acorde dado.
Para usar una tabla alternativa de diagramas de posiciones, se debe
crear la tabla primero. Después se añaden los diagramas a la tabla.
La tabla de diagramas de posiciones que se crea puede estar vacía o se
puede copiar a partir de una tabla existente.
La tabla a usar en la impresión de los diagramas predefinidos se
selecciona por medio de la propiedad \predefinedDiagramTable.
| | \include "predefined-guitar-fretboards.ly"
% Make a blank new fretboard table
#(define custom-fretboard-table-one (make-fretboard-table))
% Make a new fretboard table as a copy of default-fret-table
#(define custom-fretboard-table-two (make-fretboard-table default-fret-table))
% Add a chord to custom-fretboard-table-one
\storePredefinedDiagram #custom-fretboard-table-one
\chordmode {c}
#guitar-tuning
"3-(;3;5;5;5;3-);"
% Add a chord to custom-fretboard-table-two
\storePredefinedDiagram #custom-fretboard-table-two
\chordmode {c}
#guitar-tuning
"x;3;5;5;5;o;"
<<
\chords {
c1 | d1 |
c1 | d1 |
c1 | d1 |
}
\new FretBoards {
\chordmode {
\set predefinedDiagramTable = #default-fret-table
c1 | d1 |
\set predefinedDiagramTable = #custom-fretboard-table-one
c1 | d1 |
\set predefinedDiagramTable = #custom-fretboard-table-two
c1 | d1 |
}
}
\new Staff {
\clef "treble_8"
<<
\chordmode {
c1 | d1 |
c1 | d1 |
c1 | d1 |
}
{
s1_\markup "Default table" | s1 |
s1_\markup \column {"New table" "from empty"} | s1 |
s1_\markup \column {"New table" "from default"} | s1 |
}
>>
}
>>
|
Armónicos sobre cuerdas pisadas en tablatura
Armónicos sobre cuerdas pisadas (armónicos artificiales):
| | pinchedHarmonics = {
\textSpannerDown
\override TextSpanner.bound-details.left.text =
\markup {\halign #-0.5 \teeny "PH" }
\override TextSpanner.style =
#'dashed-line
\override TextSpanner.dash-period = #0.6
\override TextSpanner.bound-details.right.attach-dir = #1
\override TextSpanner.bound-details.right.text =
\markup { \draw-line #'(0 . 1) }
\override TextSpanner.bound-details.right.padding = #-0.5
}
harmonics = {
%artificial harmonics (AH)
\textLengthOn
<\parenthesize b b'\harmonic>4_\markup { \teeny "AH 16" }
<\parenthesize g g'\harmonic>4_\markup { \teeny "AH 17" }
<\parenthesize d' d''\harmonic>2_\markup { \teeny "AH 19" }
%pinched harmonics (PH)
\pinchedHarmonics
<a'\harmonic>2\startTextSpan
<d''\harmonic>4
<e'\harmonic>4\stopTextSpan
%tapped harmonics (TH)
<\parenthesize g\4 g'\harmonic>4_\markup { \teeny "TH 17" }
<\parenthesize a\4 a'\harmonic>4_\markup { \teeny "TH 19" }
<\parenthesize c'\3 c''\harmonic>2_\markup { \teeny "TH 17" }
%touch harmonics (TCH)
a4( <e''\harmonic>2. )_\markup { \teeny "TCH" }
}
frettedStrings = {
%artificial harmonics (AH)
\harmonicByFret #4 g4\3
\harmonicByFret #5 d4\4
\harmonicByFret #7 g2\3
%pinched harmonics (PH)
\harmonicByFret #7 d2\4
\harmonicByFret #5 d4\4
\harmonicByFret #7 a4\5
%tapped harmonics (TH)
\harmonicByFret #5 d4\4
\harmonicByFret #7 d4\4
\harmonicByFret #5 g2\3
%touch harmonics (TCH)
a4 \harmonicByFret #9 g2.\3
}
\score {
<<
\new Staff
\with { \omit StringNumber } {
\new Voice {
\clef "treble_8"
\harmonics
}
}
\new TabStaff {
\new TabVoice {
\frettedStrings
}
}
>>
}
|
Ligaduras de guitarra
A diferencia de los glissandos, los ‘slides’ o ligaduras pueden
partir de un punto impreciso del mástil hasta un traste específico.
Una buena forma de hacerlo es añadir una nota de mordente oculta antes de la
nota real, como se muestra en el ejemplo siguiente.
| | %% Hide fret number: useful to draw slide into/from a casual point of
%% the fretboard.
hideFretNumber = {
\once \hide TabNoteHead
\once \hide NoteHead
\once \hide Stem
\once \override NoteHead.no-ledgers = ##t
\once \override Glissando.bound-details.left.padding = #0.3
}
music= \relative c' {
\grace { \hideFretNumber d8\2 \glissando s2 } g2\2
\grace { \hideFretNumber g8\2 \glissando s2 } d2 |
\grace { \hideFretNumber c,8 \glissando s } f4\5^\markup \tiny { Slide into }
\grace { \hideFretNumber f8 \glissando s } a4\4
\grace { \hideFretNumber e'8\3 \glissando s } b4\3^\markup \tiny { Slide from }
\grace { \hideFretNumber b'8 \glissando s2 } g4 |
}
\score {
<<
\new Staff {
\clef "G_8"
\music
}
\new TabStaff {
\music
}
>>
}
|
Ritmos rasgueados de guitarra
Para la música de guitarra, es posible mostrar los ritmos de rasgueo,
además de las notas de la melodía, acordes y diagramas de posiciones.
| | \include "predefined-guitar-fretboards.ly"
<<
\new ChordNames {
\chordmode {
c1 | f | g | c
}
}
\new FretBoards {
\chordmode {
c1 | f | g | c
}
}
\new Voice \with {
\consists "Pitch_squash_engraver"
} {
\relative c'' {
\improvisationOn
c4 c8 c c4 c8 c
f4 f8 f f4 f8 f
g4 g8 g g4 g8 g
c4 c8 c c4 c8 c
}
}
\new Voice = "melody" {
\relative c'' {
c2 e4 e4
f2. r4
g2. a4
e4 c2.
}
}
\new Lyrics {
\lyricsto "melody" {
This is my song.
I like to sing.
}
}
>>
|
Hammer on and pull off using chords
When using hammer-on or pull-off with chorded notes, only a single arc
is drawn. However “double arcs” are possible by setting the
doubleSlurs property to #t.
| | \new TabStaff {
\relative c' {
% chord hammer-on and pull-off
\set doubleSlurs = ##t
<g' b>8( <a c> <g b>)
}
}
|
Hammer on and pull off using voices
The arc of hammer-on and pull-off is upwards in voices one and three
and downwards in voices two and four:
| | \new TabStaff {
\relative c' {
<< { \voiceOne g2( a) }
\\ { \voiceTwo a,( b) }
>> \oneVoice
}
}
|
Hammer on and pull off
Hammer-on and pull-off can be obtained using slurs.
| | \new TabStaff {
\relative c' {
d4( e\2)
a( g)
}
}
|
Cómo cambiar la posicion de un diagrama de posiciones
Si queremos mover un diagrama de posiciones de acorde, por ejemplo,
para evitar la colisión, o situarlo entre dos notas, tenemos varias
posibilidades:
1) modificar los valores de relleno #’padding o del desplazamiento
adicional #’extra-offset (como se muestra en el primer ejemplo)
2) podemos añadir una voz invisible y adjuntar los diagramas de
posiciones a las notas invisibles de esa voz (como se ve en el segundo
ejemplo).
Si tenemos que mover el diagrama según una posición rítmica dentro
del compás (en el ejemplo, la tercera parte del compás) es mejor el
segundo ejemplo, porque el diagrama se alinea con el tercer pulso por
sí solo.
| | harmonies = \chordmode
{
a8:13
% THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME
\once \override ChordNames.ChordName.extra-offset = #'(10 . 0)
b8:13 s2.
% THIS LINE IS THE SECOND METHOD
s4 s4 b4:13
}
\score
{
<<
\new ChordNames \harmonies
\new Staff
{a8^\markup { \fret-diagram "6-x;5-0;4-2;3-0;2-0;1-2;" }
% THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM
\once \override TextScript.extra-offset = #'(10 . 0)
b4.~^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break
% HERE IS THE SECOND METHOD
<<
{ a8 b4.~ b4. a8}
{ s4 s4 s4^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" }
}
>>
}
>>
}
|
Plantilla para combo de jazz
Ésta es una plantilla bastante avanzada, para un conjunto de
jazz. Observe que la notación de todos los instrumentos está en
\key c \major (Do mayor). Esto se refiere al tono de
concierto; la armadura se transporta automáticamente si la música está
dentro de una sección \transpose.
| | \header {
title = "Song"
subtitle = "(tune)"
composer = "Me"
meter = "moderato"
piece = "Swing"
tagline = \markup {
\column {
"LilyPond example file by Amelie Zapf,"
"Berlin 07/07/2003"
}
}
}
% To make the example display in the documentation
\paper {
paper-width = 130
}
%#(set-global-staff-size 16)
\include "english.ly"
%%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%%
sl = {
\override NoteHead.style = #'slash
\hide Stem
}
nsl = {
\revert NoteHead.style
\undo \hide Stem
}
crOn = \override NoteHead.style = #'cross
crOff = \revert NoteHead.style
%% insert chord name style stuff here.
jazzChords = { }
%%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%%
global = { \time 4/4 }
Key = { \key c \major }
% ############ Horns ############
% ------ Trumpet ------
trpt = \transpose c d \relative c'' {
\Key
c1 | c | c |
}
trpHarmony = \transpose c' d {
\jazzChords
}
trumpet = {
\global
\clef treble
<<
\trpt
>>
}
% ------ Alto Saxophone ------
alto = \transpose c a \relative c' {
\Key
c1 | c | c |
}
altoHarmony = \transpose c' a {
\jazzChords
}
altoSax = {
\global
\clef treble
<<
\alto
>>
}
% ------ Baritone Saxophone ------
bari = \transpose c a' \relative c {
\Key
c1
c1
\sl
d4^"Solo" d d d
\nsl
}
bariHarmony = \transpose c' a \chordmode {
\jazzChords s1 s d2:maj e:m7
}
bariSax = {
\global
\clef treble
<<
\bari
>>
}
% ------ Trombone ------
tbone = \relative c {
\Key
c1 | c | c
}
tboneHarmony = \chordmode {
\jazzChords
}
trombone = {
\global
\clef bass
<<
\tbone
>>
}
% ############ Rhythm Section #############
% ------ Guitar ------
gtr = \relative c'' {
\Key
c1
\sl
b4 b b b
\nsl
c1
}
gtrHarmony = \chordmode {
\jazzChords
s1 c2:min7+ d2:maj9
}
guitar = {
\global
\clef treble
<<
\gtr
>>
}
%% ------ Piano ------
rhUpper = \relative c'' {
\voiceOne
\Key
c1 | c | c
}
rhLower = \relative c' {
\voiceTwo
\Key
e1 | e | e
}
lhUpper = \relative c' {
\voiceOne
\Key
g1 | g | g
}
lhLower = \relative c {
\voiceTwo
\Key
c1 | c | c
}
PianoRH = {
\clef treble
\global
<<
\new Voice = "one" \rhUpper
\new Voice = "two" \rhLower
>>
}
PianoLH = {
\clef bass
\global
<<
\new Voice = "one" \lhUpper
\new Voice = "two" \lhLower
>>
}
piano = {
<<
\new Staff = "upper" \PianoRH
\new Staff = "lower" \PianoLH
>>
}
% ------ Bass Guitar ------
Bass = \relative c {
\Key
c1 | c | c
}
bass = {
\global
\clef bass
<<
\Bass
>>
}
% ------ Drums ------
up = \drummode {
\voiceOne
hh4 <hh sn> hh <hh sn>
hh4 <hh sn> hh <hh sn>
hh4 <hh sn> hh <hh sn>
}
down = \drummode {
\voiceTwo
bd4 s bd s
bd4 s bd s
bd4 s bd s
}
drumContents = {
\global
<<
\new DrumVoice \up
\new DrumVoice \down
>>
}
%%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%
\score {
<<
\new StaffGroup = "horns" <<
\new Staff = "trumpet" \with { instrumentName = "Trumpet" }
\trumpet
\new Staff = "altosax" \with { instrumentName = "Alto Sax" }
\altoSax
\new ChordNames = "barichords" \with { instrumentName = "Trumpet" }
\bariHarmony
\new Staff = "barisax" \with { instrumentName = "Bari Sax" }
\bariSax
\new Staff = "trombone" \with { instrumentName = "Trombone" }
\trombone
>>
\new StaffGroup = "rhythm" <<
\new ChordNames = "chords" \gtrHarmony
\new Staff = "guitar" \with { instrumentName = "Guitar" }
\guitar
\new PianoStaff = "piano" \with {
instrumentName = "Piano"
midiInstrument = "acoustic grand"
}
\piano
\new Staff = "bass" \with { instrumentName = "Bass" }
\bass
\new DrumStaff \with { instrumentName = "Drums" }
\drumContents
>>
>>
\layout {
\context { \Staff \RemoveEmptyStaves }
\context {
\Score
\override BarNumber.padding = #3
\override RehearsalMark.padding = #2
skipBars = ##t
}
}
\midi { }
}
|
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
}
|
Let TabStaff print the topmost string at bottom
In tablatures usually the first string is printed topmost. If you want
to have it at the bottom change the
stringOneTopmost-context-property. For a context-wide setting
this could be done in layout as well.
| | %
%\layout {
% \context {
% \Score
% stringOneTopmost = ##f
% }
% \context {
% \TabStaff
% tablatureFormat = #fret-letter-tablature-format
% }
%}
m = {
\cadenzaOn
e, b, e gis! b e'
\bar "||"
}
<<
\new Staff { \clef "G_8" <>_"default" \m <>_"italian (historic)"\m }
\new TabStaff
{
\m
\set Score.stringOneTopmost = ##f
\set TabStaff.tablatureFormat = #fret-letter-tablature-format
\m
}
>>
|
Formateado de tablaturas con letras
La tablatura se puede formatear utilizando letras en lugar de números.
| | music = \relative c {
c4 d e f
g4 a b c
d4 e f g
}
<<
\new Staff {
\clef "G_8"
\music
}
\new TabStaff \with {
tablatureFormat = #fret-letter-tablature-format
}
{
\music
}
>>
|
Referencia para armónicos sobre cuerdas al aire
Referencia para armónicos sobre cuerdas al aire (armónicos naturales):
| | openStringHarmonics = {
\textSpannerDown
\override TextSpanner.staff-padding = #3
\override TextSpanner.dash-fraction = #0.3
\override TextSpanner.dash-period = #1
%first harmonic
\override TextSpanner.bound-details.left.text = \markup\small "1st harm. "
\harmonicByFret #12 e,2\6\startTextSpan
\harmonicByRatio #1/2 e,\6\stopTextSpan
%second harmonic
\override TextSpanner.bound-details.left.text = \markup\small "2nd harm. "
\harmonicByFret #7 e,\6\startTextSpan
\harmonicByRatio #1/3 e,\6
\harmonicByFret #19 e,\6
\harmonicByRatio #2/3 e,\6\stopTextSpan
%\harmonicByFret #19 < e,\6 a,\5 d\4 >
%\harmonicByRatio #2/3 < e,\6 a,\5 d\4 >
%third harmonic
\override TextSpanner.bound-details.left.text = \markup\small "3rd harm. "
\harmonicByFret #5 e,\6\startTextSpan
\harmonicByRatio #1/4 e,\6
\harmonicByFret #24 e,\6
\harmonicByRatio #3/4 e,\6\stopTextSpan
\break
%fourth harmonic
\override TextSpanner.bound-details.left.text = \markup\small "4th harm. "
\harmonicByFret #4 e,\6\startTextSpan
\harmonicByRatio #1/5 e,\6
\harmonicByFret #9 e,\6
\harmonicByRatio #2/5 e,\6
\harmonicByFret #16 e,\6
\harmonicByRatio #3/5 e,\6\stopTextSpan
%fifth harmonic
\override TextSpanner.bound-details.left.text = \markup\small "5th harm. "
\harmonicByFret #3 e,\6\startTextSpan
\harmonicByRatio #1/6 e,\6\stopTextSpan
\break
%sixth harmonic
\override TextSpanner.bound-details.left.text = \markup\small "6th harm. "
\harmonicByFret #2.7 e,\6\startTextSpan
\harmonicByRatio #1/7 e,\6\stopTextSpan
%seventh harmonic
\override TextSpanner.bound-details.left.text = \markup\small "7th harm. "
\harmonicByFret #2.3 e,\6\startTextSpan
\harmonicByRatio #1/8 e,\6\stopTextSpan
%eighth harmonic
\override TextSpanner.bound-details.left.text = \markup\small "8th harm. "
\harmonicByFret #2 e,\6\startTextSpan
\harmonicByRatio #1/9 e,\6\stopTextSpan
}
\score {
<<
\new Staff
\with { \omit StringNumber } {
\new Voice {
\clef "treble_8"
\openStringHarmonics
}
}
\new TabStaff {
\new TabVoice {
\openStringHarmonics
}
}
>>
}
|
Posicionamiento de digitaciones de mano derecha
Es posible ejercer un mayor control sobre la colocación de las
digitaciones de la mano derecha estableciendo el valor de una
propiedad específica, como se muestra en el ejemplo siguiente.
| | #(define RH rightHandFinger)
\relative c {
\clef "treble_8"
\set strokeFingerOrientations = #'(up down)
<c\RH #1 e\RH #2 g\RH #3 c\RH #4 >4
\set strokeFingerOrientations = #'(up right down)
<c\RH #1 e\RH #2 g\RH #3 c\RH #4 >4
\set strokeFingerOrientations = #'(left)
<c\RH #1 e\RH #2 g\RH #3 c\RH #4 >2
\set strokeFingerOrientations = #'(right)
c\RH #1
}
|
Polifonía en tablaturas
La polifonía se crea de la misma forma en un TabStaff que
en una pauta normal.
| | upper = \relative c' {
\time 12/8
\key e \minor
\voiceOne
r4. r8 e, fis g16 b g e e' b c b a g fis e
}
lower = \relative c {
\key e \minor
\voiceTwo
r16 e d c b a g4 fis8 e fis g a b c
}
\score {
<<
\new StaffGroup = "tab with traditional" <<
\new Staff = "guitar traditional" <<
\clef "treble_8"
\context Voice = "upper" \upper
\context Voice = "lower" \lower
>>
\new TabStaff = "guitar tab" <<
\context TabVoice = "upper" \upper
\context TabVoice = "lower" \lower
>>
>>
>>
}
|
Deslizamientos en tablatura
Los deslizamientos se pueden componer tipográficamente tanto en los
contextos de Staff como en los de TabStaff:
| | slides = {
c'8\3(\glissando d'8\3)
c'8\3\glissando d'8\3
\hideNotes
\grace { g16\glissando }
\unHideNotes
c'4\3
\afterGrace d'4\3\glissando {
\stemDown \hideNotes
g16 }
\unHideNotes
}
\score {
<<
\new Staff { \clef "treble_8" \slides }
\new TabStaff { \slides }
>>
\layout {
\context {
\Score
\override Glissando.minimum-length = #4
\override Glissando.springs-and-rods =
#ly:spanner::set-spacing-rods
\override Glissando.thickness = #2
\omit StringNumber
% or:
%\override StringNumber.stencil = ##f
}
}
}
|
Comportamiento de las plicas y las barras de corchea en tablaturas
La dirección de las plicas se controla de la misma forma en la
tablatura que en la notación tradicional. Las barras se pueden
poner horizontales, como se muestra en este ejemplo.
| | \new TabStaff {
\relative c {
\tabFullNotation
g16 b d g b d g b
\stemDown
\override Beam.concaveness = #10000
g,,16 b d g b d g b
}
}
|
Líneas de extensión para números de cuerda
Hacemos una línea extensora para las indicaciones de número de cuerda,
motrando que una serie de notas se han de tocar sobre la misma cuerda.
| | stringNumberSpanner =
#(define-music-function (StringNumber) (string?)
#{
\override TextSpanner.style = #'solid
\override TextSpanner.font-size = #-5
\override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
\override TextSpanner.bound-details.left.text =
\markup { \circle \number $StringNumber }
#})
\relative c {
\clef "treble_8"
\stringNumberSpanner "5"
\textSpannerDown
a8\startTextSpan
b c d e f\stopTextSpan
\stringNumberSpanner "4"
g\startTextSpan a
bes4 a g2\stopTextSpan
}
|
Unfretted strings
Unfretted string instruments
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)
}
>>
}
|
Armónicos con puntillo
Los armónicos artificiales que usan la instrucción \harmonic
no tienen puntillo. Para sobreescribir este comportamiento, fije la
propiedad de contexto harmonicDots.
| | \relative c''' {
\time 3/4
\key f \major
\set harmonicDots = ##t
<bes f'\harmonic>2. ~
<bes f'\harmonic>4. <a e'\harmonic>8( <gis dis'\harmonic> <g d'\harmonic>)
<fis cis'\harmonic>2.
<bes f'\harmonic>2.
}
|
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
}
|
Plantilla de cuarteto de cuerda (sencilla)
Esta plantilla muestra un cuarteto de cuerda normal. También utiliza
una sección \global para el compás y la armadura
| | global= {
\time 4/4
\key c \major
}
violinOne = \new Voice \relative c'' {
c2 d
e1
\bar "|."
}
violinTwo = \new Voice \relative c'' {
g2 f
e1
\bar "|."
}
viola = \new Voice \relative c' {
\clef alto
e2 d
c1
\bar "|."
}
cello = \new Voice \relative c' {
\clef bass
c2 b
a1
\bar "|."
}
\score {
\new StaffGroup <<
\new Staff \with { instrumentName = "Violin 1" }
<< \global \violinOne >>
\new Staff \with { instrumentName = "Violin 2" }
<< \global \violinTwo >>
\new Staff \with { instrumentName = "Viola" }
<< \global \viola >>
\new Staff \with { instrumentName = "Cello" }
<< \global \cello >>
>>
\layout { }
\midi { }
}
|
Plantilla de cuarteto de cuerda con particellas independientes
El fragmento de código “Plantilla de cuarteto de cuerda” produce un
resultado satisfactorio para el cuarteto, pero ¿y si tenemos que
imprimir las particellas? Esta nueva plantilla muestra cómo usar la
funcionalidad \tag (etiqueta) para dividir fácilmente una
pieza en particellas indicviduales.
Tenemos que dividir esta plantilla en archivos independientes; los
nombres de archivo están dentro de los comentarios al principio de
cada archivo. ‘piece.ly’ contiene todas las definiciones de
música. Los otros archivos (‘score.ly’, ‘vn1.ly’,
‘vn2.ly’, ‘vla.ly’ y ‘vlc.ly’) producen la particella
correspondiente.
¡No olvide quitar los comentarios que hemos especificado cuando use
los archivos independientes!
| | %%%%% piece.ly
%%%%% (This is the global definitions file)
global= {
\time 4/4
\key c \major
}
Violinone = \new Voice {
\relative c'' {
c2 d e1
\bar "|."
}
}
Violintwo = \new Voice {
\relative c'' {
g2 f e1
\bar "|."
}
}
Viola = \new Voice {
\relative c' {
\clef alto
e2 d c1
\bar "|."
}
}
Cello = \new Voice {
\relative c' {
\clef bass
c2 b a1
\bar "|."
}
}
music = {
<<
\tag #'score \tag #'vn1
\new Staff \with { instrumentName = "Violin 1" }
<< \global \Violinone >>
\tag #'score \tag #'vn2
\new Staff \with { instrumentName = "Violin 2" }
<< \global \Violintwo>>
\tag #'score \tag #'vla
\new Staff \with { instrumentName = "Viola" }
<< \global \Viola>>
\tag #'score \tag #'vlc
\new Staff \with { instrumentName = "Cello" }
<< \global \Cello >>
>>
}
% These are the other files you need to save on your computer
% score.ly
% (This is the main file)
% uncomment the line below when using a separate file
%\include "piece.ly"
#(set-global-staff-size 14)
\score {
\new StaffGroup \keepWithTag #'score \music
\layout { }
\midi { }
}
%{ Uncomment this block when using separate files
% vn1.ly
% (This is the Violin 1 part file)
\include "piece.ly"
\score {
\keepWithTag #'vn1 \music
\layout { }
}
% vn2.ly
% (This is the Violin 2 part file)
\include "piece.ly"
\score {
\keepWithTag #'vn2 \music
\layout { }
}
% vla.ly
% (This is the Viola part file)
\include "piece.ly"
\score {
\keepWithTag #'vla \music
\layout { }
}
% vlc.ly
% (This is the Cello part file)
\include "piece.ly"
\score {
\keepWithTag #'vlc \music
\layout { }
}
%}
|
Winds
Wind instruments
Modificar el tamaño de los diagramas de viento madera
Se puede cambiar el tamaño y grosor de las líneas de los diagramas de
posiciones para instrumentos de viento madera.
| | \relative c'' {
\textLengthOn
c1^\markup
\woodwind-diagram
#'piccolo
#'()
c^\markup
\override #'(size . 1.5) {
\woodwind-diagram
#'piccolo
#'()
}
c^\markup
\override #'(thickness . 0.15) {
\woodwind-diagram
#'piccolo
#'()
}
}
|
Símbolos de digitación para instrumentos de viento
Se pueden conseguir símbolos especiales combinando glifos existentes,
lo que es de utilidad para la notación de instrumentos de viento.
| | centermarkup = {
\once \override TextScript.self-alignment-X = #CENTER
\once \override TextScript.X-offset =#(lambda (g)
(+ (ly:self-alignment-interface::centered-on-x-parent g)
(ly:self-alignment-interface::x-aligned-on-self g)))
}
\score {
\relative c'{
g\open
\once \override TextScript.staff-padding = #-1.0
\centermarkup
g^\markup {
\combine
\musicglyph "scripts.open"
\musicglyph "scripts.tenuto"
}
\centermarkup
g^\markup {
\combine
\musicglyph "scripts.open"
\musicglyph "scripts.stopped"
}
g\stopped
}
}
|
Notación de los golpes de lengua de la flauta
Es posible indicar técnicas de articulación especiales como el golpe
de lengua de la flauta (“tongue slap”) sustituyendo la cabeza de la
figura con el glifo adecuado.
| | slap =
#(define-music-function (music) (ly:music?)
#{
\temporary \override NoteHead.stencil =
#(lambda (grob)
(grob-interpret-markup grob
(markup #:musicglyph "scripts.sforzato")))
\temporary \override NoteHead.stem-attachment =
#(lambda (grob)
(let* ((thickness (ly:staff-symbol-line-thickness grob))
(stem (ly:grob-object grob 'stem))
(dir (ly:grob-property stem 'direction UP)))
(cons 1 (+ (if (= dir DOWN)
0.5
0)
(/ thickness 2)))))
#music
\revert NoteHead.stencil
\revert NoteHead.stem-attachment
#})
\relative c' {
c4 \slap c d r
\slap { g4 a } b r
}
|
Diagramas para viento madera gráficos y textuales
En muchos casos, las llaves que no están en la columna central se
pueden presentar por el nombre de la llave así como de forma gráfica.
| | \relative c'' {
\textLengthOn
c1^\markup
\woodwind-diagram
#'piccolo
#'((cc . (one three))
(lh . (gis))
(rh . (ees)))
c^\markup
\override #'(graphical . #f) {
\woodwind-diagram
#'piccolo
#'((cc . (one three))
(lh . (gis))
(rh . (ees)))
}
}
|
Diagramas de digitación para la flauta dulce
El ejemplo siguiente muestra cómo se pueden realizar diagramas de
digitación para instrumentos de viento.
| | % range chart for paetzold contrabass recorder
centermarkup = {
\once \override TextScript.self-alignment-X = #CENTER
\once \override TextScript.X-offset =#(lambda (g)
(+ (ly:self-alignment-interface::centered-on-x-parent g)
(ly:self-alignment-interface::x-aligned-on-self g)))
}
\score {
\new Staff \with {
\remove "Time_signature_engraver"
\omit Stem
\omit Flag
\consists "Horizontal_bracket_engraver"
}
{
\clef bass
\set Score.timing = ##f
f,1*1/4 \glissando
\clef violin
gis'1*1/4
\stemDown a'4^\markup {1)}
\centermarkup
\once \override TextScript.padding = #2
bes'1*1/4_\markup {\override #'(baseline-skip . 1.7) \column
{ \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 3 \finger 4
\finger 5 \finger 6 \finger 7} }
b'1*1/4
c''4^\markup {1)}
\centermarkup
\once \override TextScript.padding = #2
cis''1*1/4
deh''1*1/4
\centermarkup
\once \override TextScript.padding = #2
\once \override Staff.HorizontalBracket.direction = #UP
e''1*1/4_\markup {\override #'(baseline-skip . 1.7) \column
{ \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 4
\finger 5} }\startGroup
f''1*1/4^\markup {2)}\stopGroup
}
}
|
Listas de llaves para los diagramas de viento madera
El fragmento de código que aparece a continuación produce una lista de
todas las llaves y disposiciones de llave posibles para los diagramas
de posiciones de instrumentos de viento madera, tal y como están
definidos en scm/define-woodwind-diagrams.scm. La lista se
muestra en el archivo de registro, pero no en la música. Si desea una
salida por la consola, omita el (current-error-port) de las
instrucciones.
| | #(print-keys-verbose 'piccolo (current-error-port))
#(print-keys-verbose 'flute (current-error-port))
#(print-keys-verbose 'flute-b-extension (current-error-port))
#(print-keys-verbose 'tin-whistle (current-error-port))
#(print-keys-verbose 'oboe (current-error-port))
#(print-keys-verbose 'clarinet (current-error-port))
#(print-keys-verbose 'bass-clarinet (current-error-port))
#(print-keys-verbose 'low-bass-clarinet (current-error-port))
#(print-keys-verbose 'saxophone (current-error-port))
#(print-keys-verbose 'soprano-saxophone (current-error-port))
#(print-keys-verbose 'alto-saxophone (current-error-port))
#(print-keys-verbose 'tenor-saxophone (current-error-port))
#(print-keys-verbose 'baritone-saxophone (current-error-port))
#(print-keys-verbose 'bassoon (current-error-port))
#(print-keys-verbose 'contrabassoon (current-error-port))
\score {c''1}
|
Listado de los diagramas para viento madera
El fragmento de música que aparece a continuación presenta todos los
diagramas de viento madera que se encuentran definidos en LilyPond por
el momento.
| | \layout {
indent = 0
}
\relative c' {
\textLengthOn
c1^
\markup {
\center-column {
'tin-whistle
" "
\woodwind-diagram
#'tin-whistle
#'()
}
}
c1^
\markup {
\center-column {
'piccolo
" "
\woodwind-diagram
#'piccolo
#'()
}
}
c1^
\markup {
\center-column {
'flute
" "
\woodwind-diagram
#'flute
#'()
}
}
c1^\markup {
\center-column {
'oboe
" "
\woodwind-diagram
#'oboe
#'()
}
}
c1^\markup {
\center-column {
'clarinet
" "
\woodwind-diagram
#'clarinet
#'()
}
}
c1^\markup {
\center-column {
'bass-clarinet
" "
\woodwind-diagram
#'bass-clarinet
#'()
}
}
c1^\markup {
\center-column {
'saxophone
" "
\woodwind-diagram
#'saxophone
#'()
}
}
c1^\markup {
\center-column {
'bassoon
" "
\woodwind-diagram
#'bassoon
#'()
}
}
c1^\markup {
\center-column {
'contrabassoon
" "
\woodwind-diagram
#'contrabassoon
#'()
}
}
}
|
Ancient notation
Ancient notation
Añadir un bajo cifrado encima o debajo de las notas
Al escribir un bajo cifrado, podemos situar las cifras encima o debajo
de las notas del bajo, mediante la definición de la propiedad
BassFigureAlignmentPositioning #'direction (exclusivamente
dentro de un contexto Staff). Se puede elegir entre #UP
(o #1, arriba), #CENTER (o #0, centrado) y
#DOWN (o #-1, abajo).
Esta propiedad se puede cambiar tantas veces como queramos. Utilice
\once \override si no quiere que la sobreescritura se aplique
a toda la partitura.
| | bass = {
\clef bass
g4 b, c d
e d8 c d2
}
continuo = \figuremode {
<_>4 <6>4 <5/>4
\override Staff.BassFigureAlignmentPositioning.direction = #UP
%\bassFigureStaffAlignmentUp
< _+ >4 <6>
\set Staff.useBassFigureExtenders = ##t
\override Staff.BassFigureAlignmentPositioning.direction = #DOWN
%\bassFigureStaffAlignmentDown
<4>4. <4>8 <_+>4
}
\score {
<<
\new Staff = bassStaff \bass
\context Staff = bassStaff \continuo
>>
}
|
Tipografía de música antigua
Aquí se muestran muchos de los símbolos de LilyPond para la música
antigua.
| | upperStaff = \new VaticanaStaff = "upperStaff" <<
\context VaticanaVoice <<
\transpose c c {
\override NoteHead.style = #'vaticana.punctum
\key es \major
\clef "vaticana-fa2"
c1 des e f ges
\override NoteHead.style = #'vaticana.inclinatum
a! b ces'
\bar "|"
\override NoteHead.style = #'vaticana.quilisma
b! des'! ges! fes!
\breathe
\clef "vaticana-fa1"
\override NoteHead.style = #'vaticana.plica
es d
\override NoteHead.style = #'vaticana.reverse.plica
c d
\bar "|"
\override NoteHead.style = #'vaticana.punctum.cavum
es f
\override NoteHead.style = #'vaticana.lpes
g as
\override NoteHead.style = #'vaticana.upes
bes as
\override NoteHead.style = #'vaticana.vupes
g f
\override NoteHead.style = #'vaticana.linea.punctum
\once \override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"
es d
\override NoteHead.style = #'vaticana.epiphonus
c d
\override NoteHead.style = #'vaticana.cephalicus
es f
\override Staff.KeySignature.glyph-name-alist =
#alteration-medicaea-glyph-name-alist
\override Staff.Accidental.glyph-name-alist =
#alteration-medicaea-glyph-name-alist
\override Staff.Custos.style = #'medicaea
\override NoteHead.style = #'medicaea.punctum
\clef "medicaea-fa2"
ces des
\bar "|"
e! f! ges
\clef "medicaea-do2"
\override NoteHead.style = #'medicaea.inclinatum
a! b! ces'
\override NoteHead.style = #'medicaea.virga
b! a!
\bar "|"
ges fes
\clef "medicaea-fa1"
\override NoteHead.style = #'medicaea.rvirga
e des ces
\override Staff.KeySignature.glyph-name-alist =
#alteration-hufnagel-glyph-name-alist
\override Staff.Accidental.glyph-name-alist =
#alteration-hufnagel-glyph-name-alist
\override Staff.Custos.style = #'hufnagel
\override NoteHead.style = #'hufnagel.punctum
\clef "hufnagel-fa2"
ces des es
\bar "|"
fes ges
\clef "hufnagel-do2"
\override NoteHead.style = #'hufnagel.lpes
as! bes! ces'
\override NoteHead.style = #'hufnagel.virga
bes! as!
\bar "|"
ges! fes!
\clef "hufnagel-do-fa"
\override NoteHead.style = #'hufnagel.punctum
es! des ces des! es! fes!
\bar "||"
s32*1
}
>>
>>
lowerStaff = \new MensuralStaff = "lowerStaff" <<
\context MensuralVoice <<
\transpose c c {
\key a \major
cis'1 d'\breve gis'\breve e'\breve \[ e'\longa fis'\longa \]
\set Staff.forceClef = ##t
\clef "neomensural-c2"
cis1
\bar "|"
\[ g\breve dis''\longa \]
b\breve \[ a\longa d\longa \]
\clef "petrucci-c2"
fis1 ces1
\clef "petrucci-c2"
r\longa
\set Staff.forceClef = ##t
\clef "mensural-c2"
r\breve
\bar "|"
r2
\clef "mensural-g"
r4 r8 r16 r16
\override NoteHead.style = #'mensural
\override Rest.style = #'mensural
\clef "petrucci-f"
c8 b, c16 b, c32 b, c64 b, c64 b,
d8 e d16 e d32 e d64 e d64 e
r\longa
\set Staff.forceClef = ##t
\clef "petrucci-f"
r\breve
\bar "|"
r\breve
\clef "mensural-f"
r2 r4 r8 r16 r16
\set Staff.forceClef = ##t
\clef "mensural-f"
e\breve f g a1
\clef "mensural-g"
\[ bes'!\longa a'!\longa c''!\longa \]
e'1 d' c' d' \bar "|"
\bar "|"
bes'!\longa fis'!1 as'!1 ges'!\longa % lig
\set Staff.forceClef = ##t
\clef "mensural-g"
e'2 d' c' \bar "|"
\set Staff.forceClef = ##t
\clef "petrucci-g"
c'2 d' e' f'
\clef "petrucci-g"
g' as'! bes'! cis''!
bes'! as'! gis'! fis'!
\set Staff.forceClef = ##t
\clef "mensural-g"
es'! des'! cis'!1 \bar "||"
}
>>
>>
\paper {
line-thickness = #(/ staff-space 5.0)
}
\score {
<<
\upperStaff
\lowerStaff
>>
\layout {
indent = 0.0
\context {
\Score
timing = ##f
}
\context {
\MensuralVoice
\override NoteHead.style = #'neomensural
\override Rest.style = #'neomensural
\override Flag.style = #'mensural
\override Stem.thickness = #1.0
}
\context {
\MensuralStaff
\revert BarLine.transparent
\override KeySignature.glyph-name-alist =
#alteration-mensural-glyph-name-alist
clefGlyph = #"clefs.petrucci.c2"
}
\context {
\VaticanaStaff
\revert BarLine.transparent
\override StaffSymbol.thickness = #2.0
\override KeySignature.glyph-name-alist =
#alteration-vaticana-glyph-name-alist
\override Custos.neutral-position = #4
}
}
}
|
Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)
Este ejemplo muestra cómo hacer una transcripción moderna de canto
gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza
solamente cabezas de nota de blanca y de negra, y unas marcas
especiales que indican silencios de distintas longitudes.
| | \include "gregorian.ly"
chant = \relative c' {
\set Score.timing = ##f
f4 a2 \divisioMinima
g4 b a2 f2 \divisioMaior
g4( f) f( g) a2 \finalis
}
verba = \lyricmode {
Lo -- rem ip -- sum do -- lor sit a -- met
}
\score {
\new Staff <<
\new Voice = "melody" \chant
\new Lyrics = "one" \lyricsto melody \verba
>>
\layout {
\context {
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
\hide Stem
}
\context {
\Voice
\override Stem.length = #0
}
\context {
\Score
barAlways = ##t
}
}
}
|
Indicaciones de compás antiguas
Las indicaciones de compás también se pueden grabar en estilo antiguo.
| | {
\override Staff.TimeSignature.style = #'neomensural
s1
}
|
Notación de responsos o salmos
Este tipo de notación se utiliza para los cantos salmódicos, en
que las estrofas no siempre tienen la misma longitud.
| | stemOff = \hide Staff.Stem
stemOn = \undo \stemOff
\score {
\new Staff \with { \remove "Time_signature_engraver" }
{
\key g \minor
\cadenzaOn
\stemOff a'\breve bes'4 g'4
\stemOn a'2 \bar "||"
\stemOff a'\breve g'4 a'4
\stemOn f'2 \bar "||"
\stemOff a'\breve^\markup { \italic flexe }
\stemOn g'2 \bar "||"
}
}
|
Custos
Se pueden tipografiar «custos» en diferentes estilos.
| | \layout { ragged-right = ##t }
\new Staff \with { \consists "Custos_engraver" } \relative c' {
\override Staff.Custos.neutral-position = #4
\override Staff.Custos.style = #'hufnagel
c1^"hufnagel" \break
<d a' f'>1
\override Staff.Custos.style = #'medicaea
c1^"medicaea" \break
<d a' f'>1
\override Staff.Custos.style = #'vaticana
c1^"vaticana" \break
<d a' f'>1
\override Staff.Custos.style = #'mensural
c1^"mensural" \break
<d a' f'>1
}
|
Incipit
Al transcribir música mensural, es útil poner un incipit al comienzo
de la pieza para indicar la tonalidad y el compás originales.
Actualmente los músicos están acostumbrados a las líneas del
pentagrama, pero en el período de la música mensural aún no se
utilizaban. Como compromiso, con frecuencia se imprimen líneas
divisorias entre los pentagramas, un estilo de diseño conocido como
mensurstriche.
| | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% A short excerpt from the Jubilate Deo by Orlande de Lassus
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\set Score.skipBars = ##t
\key g \major
\time 4/4
% the actual music
\skip 1*8
% let finis bar go through all staves
\override Staff.BarLine.transparent = ##f
% finis bar
\bar "|."
}
discantusIncipit = {
\clef "neomensural-c1"
\key f \major
\time 2/2
c''1.
}
discantusNotes = {
\transpose c' c'' {
\clef "treble"
d'2. d'4 |
b e' d'2 |
c'4 e'4.( d'8 c' b |
a4) b a2 |
b4.( c'8 d'4) c'4 |
\once \hide NoteHead
c'1 |
b\breve |
}
}
discantusLyrics = \lyricmode {
Ju -- bi -- la -- te De -- o,
om -- nis ter -- ra, __ om-
"..."
-us.
}
altusIncipit = {
\clef "neomensural-c3"
\key f \major
\time 2/2
r1 f'1.
}
altusNotes = {
\transpose c' c'' {
\clef "treble"
r2 g2. e4 fis g |
a2 g4 e |
fis g4.( fis16 e fis4) |
g1 |
\once \hide NoteHead
g1 |
g\breve |
}
}
altusLyrics = \lyricmode {
Ju -- bi -- la -- te
De -- o, om -- nis ter -- ra,
"..."
-us.
}
tenorIncipit = {
\clef "neomensural-c4"
\key f \major
\time 2/2
r\longa
r\breve
r1 c'1.
}
tenorNotes = {
\transpose c' c' {
\clef "treble_8"
R1 |
R1 |
R1 |
% two measures
r2 d'2. d'4 b e' |
\once \hide NoteHead
e'1 |
d'\breve |
}
}
tenorLyrics = \lyricmode {
Ju -- bi -- la -- te
"..."
-us.
}
bassusIncipit = {
\clef "mensural-f"
\key f \major
\time 2/2
r\maxima
f1.
}
bassusNotes = {
\transpose c' c' {
\clef "bass"
R1 |
R1 |
R1 |
R1 |
g2. e4 |
\once \hide NoteHead
e1 |
g\breve |
}
}
bassusLyrics = \lyricmode {
Ju -- bi-
"..."
-us.
}
\score {
<<
\new StaffGroup = choirStaff <<
\new Voice = "discantusNotes" <<
\set Staff.instrumentName = "Discantus"
\incipit \discantusIncipit
\global
\discantusNotes
>>
\new Lyrics \lyricsto discantusNotes { \discantusLyrics }
\new Voice = "altusNotes" <<
\set Staff.instrumentName = "Altus"
\global
\incipit \altusIncipit
\altusNotes
>>
\new Lyrics \lyricsto altusNotes { \altusLyrics }
\new Voice = "tenorNotes" <<
\set Staff.instrumentName = "Tenor"
\global
\incipit \tenorIncipit
\tenorNotes
>>
\new Lyrics \lyricsto tenorNotes { \tenorLyrics }
\new Voice = "bassusNotes" <<
\set Staff.instrumentName = "Bassus"
\global
\incipit \bassusIncipit
\bassusNotes
>>
\new Lyrics \lyricsto bassusNotes { \bassusLyrics }
>>
>>
\layout {
\context {
\Score
%% no bar lines in staves or lyrics
\hide BarLine
}
%% the next two instructions keep the lyrics between the bar lines
\context {
\Lyrics
\consists "Bar_engraver"
\consists "Separating_line_group_engraver"
}
\context {
\Voice
%% no slurs
\hide Slur
%% Comment in the below "\remove" command to allow line
%% breaking also at those bar lines where a note overlaps
%% into the next measure. The command is commented out in this
%% short example score, but especially for large scores, you
%% will typically yield better line breaking and thus improve
%% overall spacing if you comment in the following command.
%%\remove "Forbid_line_break_engraver"
}
indent = 6\cm
incipit-width = 4\cm
}
}
|
Disposición Mensurstriche (líneas divisorias entre pentagramas)
La disposición «mensurstriche» en que las líneas divisorias no
están dibujadas sobre los pentagramas, sino entre ellos, se puede
conseguir con un StaffGroup en vez de un ChoirStaff.
La línea divisoria sobre los pentagramas se borra usando \hide.
| | global = {
\hide Staff.BarLine
s1 s
% the final bar line is not interrupted
\undo \hide Staff.BarLine
\bar "|."
}
\new StaffGroup \relative c'' {
<<
\new Staff { << \global { c1 c } >> }
\new Staff { << \global { c c } >> }
>>
}
|
Estilos de silencios
Los silencios se pueden imprimir en distintos estilos.
| | \new Staff \relative c {
\omit Score.TimeSignature
\cadenzaOn
\override Staff.Rest.style = #'mensural
r\maxima^\markup \typewriter { mensural }
r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
\bar ""
\break
\override Staff.Rest.style = #'neomensural
r\maxima^\markup \typewriter { neomensural }
r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
\bar ""
\break
\override Staff.Rest.style = #'classical
r\maxima^\markup \typewriter { classical }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
\bar ""
\break
\override Staff.Rest.style = #'z
r\maxima^\markup \typewriter { z-style }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
\bar ""
\break
\override Staff.Rest.style = #'default
r\maxima^\markup \typewriter { default }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
}
|
Using tags to produce mensural and modern music from the same source
By using tags, it’s possible to use the same music to produce both
mensural and modern music. In this snippet, a function menrest
is introduced, allowing mensural rests to be pitched as in the
original, but with modern rests in the standard staff position. Tags
are used to produce different types of bar line at the end of the
music, but tags can also be used where other differences are needed:
for example using “whole measure rests” (R1, R\breve etc.) in
modern music, but normal rests (r1, r\breve, etc.) in the mensural
version. Note that converting mensural music to its modern equivalent
is usually referred to as transcription.
| | menrest = #(define-music-function (note)
(ly:music?)
#{
\tag #'mens $(make-music 'RestEvent note)
\tag #'mod $(make-music 'RestEvent note 'pitch '())
#})
MensStyle = {
\autoBeamOff
\override NoteHead.style = #'petrucci
\override Score.BarNumber.transparent = ##t
\override Stem.neutral-direction = #up
}
finalis = {
\once \override BreathingSign.stencil = #ly:breathing-sign::finalis
\once \override BreathingSign.Y-offset = #0
\once \override BreathingSign.minimum-X-extent = #'(-1.0 . 0.0)
\once \override BreathingSign.minimum-Y-extent = #'(-2.5 . 2.5)
\breathe
}
Music = \relative c'' {
\set Score.tempoHideNote = ##t
\key f \major
\time 4/4
g1 d'2 \menrest bes4 bes2 a2 r4 g4 fis2.
\tag #'mens { \finalis }
\tag #'mod { \bar "||" }
}
MenLyr = \lyricmode { So farre, deere life, deare life }
ModLyr = \lyricmode { So far, dear life, dear life }
\score {
\keepWithTag #'mens {
<<
\new MensuralStaff
{
\new MensuralVoice = Cantus \clef "mensural-c1" \MensStyle \Music
}
\new Lyrics \lyricsto Cantus \MenLyr
>>
}
}
\score {
\keepWithTag #'mod {
\new ChoirStaff <<
\new Staff
{
\new Voice = Sop \with {
\remove "Note_heads_engraver"
\consists "Completion_heads_engraver"
\remove "Rest_engraver"
\consists "Completion_rest_engraver" }
{
\shiftDurations #1 #0 { \autoBeamOff \Music }
}
}
\new Lyrics \lyricsto Sop \ModLyr
>>
}
}
|
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
}
|
World music
World music
Improvisación de música árabe
Para las improvisaciones o taqasim que son libres durante unos
momentos, se puede omitir la indicación de compás y se puede usar
\cadenzaOn. Podría ser necesario ajustar el estilo de
alteraciones accidentales, porque la ausencia de líneas divisorias
hará que la alteración aparezca una sola vez. He aquí un ejemplo de
cómo podría ser el comienzo de una improvisación hijaz:
| | \include "arabic.ly"
\relative sol' {
\key re \kurd
\accidentalStyle forget
\cadenzaOn
sol4 sol sol sol fad mib sol1 fad8 mib re4. r8 mib1 fad sol
}
|
Ejemplo de «Makam»
El «Makam» es un tipo de melodía de Turquía que
utiliza alteraciones microtonales de 1/9 de tono. Consulte el
archivo de inicio ‘makam.ly’ (véase el ’Manual de
aprendizaje 2.21.5, 4.6.3 Otras fuentes de información’ para
averiguar la situación de este archivo) para ver detalles de los
nombres de las notas y las alteraciones.
| | % Initialize makam settings
\include "makam.ly"
\relative c' {
\set Staff.keyAlterations = #`((6 . ,(- KOMA)) (3 . ,BAKIYE))
c4 cc db fk
gbm4 gfc gfb efk
fk4 db cc c
}
|
Armaduras de tonalidad no tradicionales
La muy utilizada instrucción \key establece la propiedad
keyAlterations dentro del contexto Staff. Para crear
armaduras de tonalidad no estándar, ajuste esta propiedad
directamente.
El formato de esta instrucción es una lista:
\set Staff.keyAlterations = #`(((octava . paso) . alteración)
((octava . paso) . alteración) ...)
donde, para cada elemento dentro de la lista, octava especifica
la octava (siendo cero la octava desde el Do central hasta
el Si por encima), paso especifica la nota dentro de la octava
(cero significa Do y 6 significa Si), y
alteración es ,SHARP ,FLAT ,DOUBLE-SHARP etc.
De forma alternativa, el uso del formato más conciso (paso
. alteración) para cada elemento de la lista especifica que la misma
alteración debe estar en todas las octavas. Para escalas microtonales
en las que un “sostenido” no son 100 cents, alteración se
refiere a la proporción de un tono entero de 200 cents.
| | \include "arabic.ly"
\relative do' {
\set Staff.keyAlterations = #`((0 . ,SEMI-FLAT)
(1 . ,SEMI-FLAT)
(2 . ,FLAT)
(5 . ,FLAT)
(6 . ,SEMI-FLAT))
%\set Staff.extraNatural = ##f
re reb \dwn reb resd
dod dob dosd \dwn dob |
dobsb dodsd do do |
}
|
Impresión de texto de derecha a izquierda
Es posible imprimir texto de derecha a izquierda en un elemento de
marcado, como se muestra aquí.
| | {
b1^\markup {
\line { i n g i r u m i m u s n o c t e }
}
f'_\markup {
\override #'(text-direction . -1)
\line { i n g i r u m i m u s n o c t e }
}
}
|
Turkish Makam example
This template uses the start of a well-known Turkish Saz Semai that is
familiar in the repertoire in order to illustrate some of the elements
of Turkish music notation.
| | % Initialize makam settings
\include "turkish-makam.ly"
\header {
title = "Hüseyni Saz Semaisi"
composer = "Lavtacı Andon"
}
\relative {
\set Staff.extraNatural = ##f
\set Staff.autoBeaming = ##f
\key a \huseyni
\time 10/8
a'4 g'16 [fb] e8. [d16] d [c d e] c [d c8] bfc |
a16 [bfc a8] bfc c16 [d c8] d16 [e d8] e4 fb8 |
d4 a'8 a16 [g fb e] fb8 [g] a8. [b16] a16 [g] |
g4 g16 [fb] fb8. [e16] e [g fb e] e4 r8 |
}
|
Contexts and engravers
Changing defaults
Contexts and engravers
Añadir un bajo cifrado encima o debajo de las notas
Al escribir un bajo cifrado, podemos situar las cifras encima o debajo
de las notas del bajo, mediante la definición de la propiedad
BassFigureAlignmentPositioning #'direction (exclusivamente
dentro de un contexto Staff). Se puede elegir entre #UP
(o #1, arriba), #CENTER (o #0, centrado) y
#DOWN (o #-1, abajo).
Esta propiedad se puede cambiar tantas veces como queramos. Utilice
\once \override si no quiere que la sobreescritura se aplique
a toda la partitura.
| | bass = {
\clef bass
g4 b, c d
e d8 c d2
}
continuo = \figuremode {
<_>4 <6>4 <5/>4
\override Staff.BassFigureAlignmentPositioning.direction = #UP
%\bassFigureStaffAlignmentUp
< _+ >4 <6>
\set Staff.useBassFigureExtenders = ##t
\override Staff.BassFigureAlignmentPositioning.direction = #DOWN
%\bassFigureStaffAlignmentDown
<4>4. <4>8 <_+>4
}
\score {
<<
\new Staff = bassStaff \bass
\context Staff = bassStaff \continuo
>>
}
|
Añadir un pentagrama adicional en un salto de línea
Al añadir un pentagrama nuevo en un salto de línea, por desgracia
se añade un espacio adicional al final de la línea antes del salto
(reservado para hacer sitio a un cambio de armadura que de todas
formas no se va a imprimir). La solución alternativa es añadir un
ajuste para Staff.explicitKeySignatureVisibility como se
muestra en el ejemplo.
| | \score {
\new StaffGroup \relative c'' {
\new Staff
\key f \major
c1 c^"Unwanted extra space" \break
<< { c1 | c }
\new Staff {
\key f \major
\once \omit Staff.TimeSignature
c1 | c
}
>>
c1 | c^"Fixed here" \break
<< { c1 | c }
\new Staff {
\once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible
\key f \major
\once \omit Staff.TimeSignature
c1 | c
}
>>
}
}
|
Añadir un pentagrama nuevo
Se puede añadir (posiblemente de forma temporal) un pentagrama
nuevo una vez que la pieza ha comenzado.
| | \score {
<<
\new Staff \relative c'' {
c1 | c | c | c | c
}
\new StaffGroup \relative c'' {
\new Staff {
c1 | c
<<
{
c1 | d
}
\new Staff {
\once \omit Staff.TimeSignature
c1 | b
}
>>
c1
}
}
>>
}
|
Cambiar la dirección de la plica de las notas de la tercera línea automáticamente, basado en la melodía
LilyPond puede alterar la dirección de la plica de las notas que van
en la tercera línea de un pentagrama de forma que siga la melodía,
mediante la adición del grabador Melody_engraver al contexto
Voice y sobreescribiendo el valor de neutral-direction para el
objeto Stem (plica).
| | \relative c'' {
\time 3/4
a8 b g f b g |
c b d c b c |
}
\layout {
\context {
\Voice
\consists "Melody_engraver"
\autoBeamOff
\override Stem.neutral-direction = #'()
}
}
|
Números de compás centrados
Con frecuencia, las partituras de obras para conjuntos grandes tienen
los números de compás debajo del sistema y centrados horizontalmente
sobre el ancho del compás. Este fragmento de código muestra cómo
puede usarse el grabador Measure_counter_engraver para simular
esta práctica notacional. Aquí hemos añadido el grabador a un
contexto Dynamics.
| | \layout {
\context {
\Dynamics
\consists #Measure_counter_engraver
\override MeasureCounter.direction = #DOWN
\override MeasureCounter.font-encoding = #'latin1
\override MeasureCounter.font-shape = #'italic
% to control the distance of the Dynamics context from the staff:
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
}
\context {
\Score
\remove "Bar_number_engraver"
}
}
pattern = \repeat unfold 7 { c'4 d' e' f' }
\new StaffGroup <<
\new Staff {
\pattern
}
\new Staff {
\pattern
}
\new Dynamics {
\startMeasureCount
s1*7
\stopMeasureCount
}
>>
|
Modificar la salida MIDI para que tenga un canal por cada voz
Al producir una salida MIDI, el comportamiento predeterminado es que
cada pentagrama representa un canal MIDI, con todas las voces de dicho
pentagrama mezcladas. Esto reduce al mínimo el riesgo de que se agote
el número de canales MIDI disponibles, pues existe un máximo de 16
canales por cada puerto MIDI, y la mayoría de los dispositivos sólo
tiene un puerto.
Sin embargo, cuando se traslada el interpretador
Staff_performer al contexto Voice, cada voz de un
pentagrama puede tener su propio canal MIDI, como se muestra en el
siguiente ejemplo: a pesar de estar sobre el mismo pentagrama, se
crean dos canales MIDI, cada uno con un midiInstrument
distinto.
| | \score {
\new Staff <<
\new Voice \relative c''' {
\set midiInstrument = #"flute"
\voiceOne
\key g \major
\time 2/2
r2 g-"Flute" ~
g fis ~
fis4 g8 fis e2 ~
e4 d8 cis d2
}
\new Voice \relative c'' {
\set midiInstrument = #"clarinet"
\voiceTwo
b1-"Clarinet"
a2. b8 a
g2. fis8 e
fis2 r
}
>>
\layout { }
\midi {
\context {
\Staff
\remove "Staff_performer"
}
\context {
\Voice
\consists "Staff_performer"
}
\tempo 2 = 72
}
}
|
Modificar el compás dentro de una sección polimétrica utilizando \scaleDurations
La propiedad measureLength, junto con
measurePosition, determina cuándo es necesario dibujar una
línea divisoria. Sin embargo, al utilizar
\scaleDurations, el escalado proporcional de las
duraciones hace difícil introducir cambios de compás. En este
caso se debe establecer manualmente el valor de
measureLength utilizando la función ly:make-moment.
El segundo argumento debe ser el mismo que el segundo argumento de
\scaleDurations.
| | \layout {
\context {
\Score
\remove "Timing_translator"
\remove "Default_bar_line_engraver"
}
\context {
\Staff
\consists "Timing_translator"
\consists "Default_bar_line_engraver"
}
}
<<
\new Staff {
\scaleDurations 8/5 {
\time 6/8
\set Timing.measureLength = #(ly:make-moment 6/5)
b8 b b b b b
\time 2/4
\set Timing.measureLength = #(ly:make-moment 4/5)
b4 b
}
}
\new Staff {
\clef bass
\time 2/4
c2 d e f
}
>>
|
Notación de responsos o salmos
Este tipo de notación se utiliza para los cantos salmódicos, en
que las estrofas no siempre tienen la misma longitud.
| | stemOff = \hide Staff.Stem
stemOn = \undo \stemOff
\score {
\new Staff \with { \remove "Time_signature_engraver" }
{
\key g \minor
\cadenzaOn
\stemOff a'\breve bes'4 g'4
\stemOn a'2 \bar "||"
\stemOff a'\breve g'4 a'4
\stemOn f'2 \bar "||"
\stemOff a'\breve^\markup { \italic flexe }
\stemOn g'2 \bar "||"
}
}
|
Crear pentagramas en blanco
Para crear pentagramas en blanco, genere compases vacíos y después
elimine el grabador de números de compás Bar_number_engraver
del contexto Score, y los grabadores de la indicación de compás
Time_signature_engraver, de la clave Clef_engraver y de
los compases Bar_engraver del contexto de Staff.
| | #(set-global-staff-size 20)
\score {
{
\repeat unfold 12 { s1 \break }
}
\layout {
indent = 0\in
\context {
\Staff
\remove "Time_signature_engraver"
\remove "Clef_engraver"
\remove "Bar_engraver"
}
\context {
\Score
\remove "Bar_number_engraver"
}
}
}
% uncomment these lines for "letter" size
%{
\paper {
#(set-paper-size "letter")
ragged-last-bottom = ##f
line-width = 7.5\in
left-margin = 0.5\in
bottom-margin = 0.25\in
top-margin = 0.25\in
}
%}
% uncomment these lines for "A4" size
%{
\paper {
#(set-paper-size "a4")
ragged-last-bottom = ##f
line-width = 180
left-margin = 15
bottom-margin = 10
top-margin = 10
}
%}
|
Creating custom key signatures
LilyPond supports custom key signatures. In this example, print for D
minor with an extended range of printed flats.
| | \new Staff \with {
\override StaffSymbol.line-count = #8
\override KeySignature.flat-positions = #'((-7 . 6))
\override KeyCancellation.flat-positions = #'((-7 . 6))
% presumably sharps are also printed in both octaves
\override KeySignature.sharp-positions = #'((-6 . 7))
\override KeyCancellation.sharp-positions = #'((-6 . 7))
\override Clef.stencil = #
(lambda (grob)(grob-interpret-markup grob
#{ \markup\combine
\musicglyph "clefs.C"
\translate #'(-3 . -2)
\musicglyph "clefs.F"
#}))
clefPosition = #3
middleCPosition = #3
middleCClefPosition = #3
}
{
\key d\minor
f bes, f bes,
}
|
Plicas de pentagrama cruzado
Este fragmento de código muestra el uso del grabador
Span_stem_engraver y de \crossStaff para conectar
automáticamente plicas de un pentagrama a otro. No es necesario
especificar la longitud de la plica porque la distancia variable entre
las cabezas de las notas y los pentagramas se calcula automáticamente.
| | \layout {
\context {
\PianoStaff
\consists #Span_stem_engraver
}
}
{
\new PianoStaff <<
\new Staff {
<b d'>4 r d'16\> e'8. g8 r\!
e'8 f' g'4 e'2
}
\new Staff {
\clef bass
\voiceOne
\autoBeamOff
\crossStaff { <e g>4 e, g16 a8. c8} d
\autoBeamOn
g8 f g4 c2
}
>>
}
|
Definir un grabador en Scheme: grabador de ámbito o tesitura
Este ejemplo muestra cómo puede definirse el grabador de ámbito o
tesitura en el espacio del usuario, con un grabador de Scheme.
Esto es básicamente una reescritura en Scheme del código de
‘lily/ambitus-engraver.cc’.
| | #(use-modules (oop goops))
%%%
%%% Grob utilities
%%%
%%% These are literal rewrites of some C++ methods used by the ambitus engraver.
#(define (ly:separation-item::add-conditional-item grob grob-item)
"Add @var{grob-item} to the array of conditional elements of @var{grob}.
Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}."
(ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item))
#(define (ly:accidental-placement::accidental-pitch accidental-grob)
"Get the pitch from the grob cause of @var{accidental-grob}.
Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}."
(ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause)
'pitch))
#(define (ly:accidental-placement::add-accidental grob accidental-grob)
"Add @var{accidental-grob}, an @code{Accidental} grob, to the
list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement}
grob.
Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}."
(let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob)))
(set! (ly:grob-parent accidental-grob X) grob)
(let* ((accidentals (ly:grob-object grob 'accidental-grobs))
(handle (assq (ly:pitch-notename pitch) accidentals))
(entry (if handle (cdr handle) '())))
(set! (ly:grob-object grob 'accidental-grobs)
(assq-set! accidentals
(ly:pitch-notename pitch)
(cons accidental-grob entry))))))
%%%
%%% Ambitus data structure
%%%
%%% The <ambitus> class holds the various grobs that are created
%%% to print an ambitus:
%%% - ambitus-group: the grob that groups all the components of an ambitus
%%% (Ambitus grob);
%%% - ambitus-line: the vertical line between the upper and lower ambitus
%%% notes (AmbitusLine grob);
%%% - ambitus-up-note and ambitus-down-note: the note head and accidental
%%% for the lower and upper note of the ambitus (see <ambitus-note> class
%%% below).
%%% The other slots define the key and clef context of the engraver:
%%% - start-c0: position of middle c at the beginning of the piece. It
%%% is used to place the ambitus notes according to their pitch;
%%% - start-key-sig: the key signature at the beginning of the piece. It
%%% is used to determine if accidentals shall be printed next to ambitus
%%% notes.
#(define-class <ambitus> ()
(ambitus-group #:accessor ambitus-group)
(ambitus-line #:accessor ambitus-line)
(ambitus-up-note #:getter ambitus-up-note
#:init-form (make <ambitus-note>))
(ambitus-down-note #:getter ambitus-down-note
#:init-form (make <ambitus-note>))
(start-c0 #:accessor ambitus-start-c0
#:init-value #f)
(start-key-sig #:accessor ambitus-start-key-sig
#:init-value '()))
%%% Accessor for the lower and upper note data of an ambitus
#(define-method (ambitus-note (ambitus <ambitus>) direction)
"If @var{direction} is @code{UP}, then return the upper ambitus note
of @var{ambitus}, otherwise return the lower ambitus note."
(if (= direction UP)
(ambitus-up-note ambitus)
(ambitus-down-note ambitus)))
%%% The <ambitus-note> class holds the grobs that are specific to ambitus
%%% (lower and upper) notes:
%%% - head: an AmbitusNoteHead grob;
%%% - accidental: an AmbitusAccidental grob, to be possibly printed next
%%% to the ambitus note head.
%%% Moreover:
%%% - pitch is the absolute pitch of the note
%%% - cause is the note event that causes this ambitus note, i.e. the lower
%%% or upper note of the considered music sequence.
#(define-class <ambitus-note> ()
(head #:accessor ambitus-note-head
#:init-value #f)
(accidental #:accessor ambitus-note-accidental
#:init-value #f)
(cause #:accessor ambitus-note-cause
#:init-value #f)
(pitch #:accessor ambitus-note-pitch
#:init-value #f))
%%%
%%% Ambitus engraving logics
%%%
%%% Rewrite of the code from @file{lily/ambitus-engraver.cc}.
#(define (make-ambitus translator)
"Build an ambitus object: initialize all the grobs and their relations.
The Ambitus grob contain all other grobs:
Ambitus
|- AmbitusLine
|- AmbitusNoteHead for upper note
|- AmbitusAccidental for upper note
|- AmbitusNoteHead for lower note
|- AmbitusAccidental for lower note
The parent of an accidental is the corresponding note head,
and the accidental is set as the 'accidental-grob of the note head
so that is printed by the function that prints notes."
;; make the ambitus object
(let ((ambitus (make <ambitus>)))
;; build the Ambitus grob, which will contain all other grobs
(set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '()))
;; build the AmbitusLine grob (line between lower and upper note)
(set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '()))
;; build the upper and lower AmbitusNoteHead and AmbitusAccidental
(for-each (lambda (direction)
(let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '()))
(accidental (ly:engraver-make-grob translator 'AmbitusAccidental '()))
(group (ambitus-group ambitus)))
;; The parent of the AmbitusAccidental grob is the
;; AmbitusNoteHead grob
(set! (ly:grob-parent accidental Y) head)
;; The AmbitusAccidental grob is set as the accidental-grob
;; object of the AmbitusNoteHead. This is later used by the
;; function that prints notes.
(set! (ly:grob-object head 'accidental-grob) accidental)
;; both the note head and the accidental grobs are added
;; to the main ambitus grob.
(ly:axis-group-interface::add-element group head)
(ly:axis-group-interface::add-element group accidental)
;; the note head and the accidental grobs are added to the
;; ambitus object
(set! (ambitus-note-head (ambitus-note ambitus direction))
head)
(set! (ambitus-note-accidental (ambitus-note ambitus direction))
accidental)))
(list DOWN UP))
;; The parent of the ambitus line is the lower ambitus note head
(set! (ly:grob-parent (ambitus-line ambitus) X)
(ambitus-note-head (ambitus-note ambitus DOWN)))
;; the ambitus line is added to the ambitus main grob
(ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus))
ambitus))
#(define-method (initialize-ambitus-state (ambitus <ambitus>) translator)
"Initialize the state of @var{ambitus}, by getting the starting
position of middle C and key signature from @var{translator}'s context."
(if (not (ambitus-start-c0 ambitus))
(begin
(set! (ambitus-start-c0 ambitus)
(ly:context-property (ly:translator-context translator)
'middleCPosition
0))
(set! (ambitus-start-key-sig ambitus)
(ly:context-property (ly:translator-context translator)
'keyAlterations)))))
#(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob)
"Update the upper and lower ambitus pithes of @var{ambitus}, using
@var{note-grob}."
;; Get the event that caused the note-grob creation
;; and check that it is a note-event.
(let ((note-event (ly:grob-property note-grob 'cause)))
(if (ly:in-event-class? note-event 'note-event)
;; get the pitch from the note event
(let ((pitch (ly:event-property note-event 'pitch)))
;; if this pitch is lower than the current ambitus lower
;; note pitch (or it has not been initialized yet),
;; then this pitch is the new ambitus lower pitch,
;; and conversely for upper pitch.
(for-each (lambda (direction pitch-compare)
(if (or (not (ambitus-note-pitch (ambitus-note ambitus direction)))
(pitch-compare pitch
(ambitus-note-pitch (ambitus-note ambitus direction))))
(begin
(set! (ambitus-note-pitch (ambitus-note ambitus direction))
pitch)
(set! (ambitus-note-cause (ambitus-note ambitus direction))
note-event))))
(list DOWN UP)
(list ly:pitch<? (lambda (p1 p2)
(ly:pitch<? p2 p1))))))))
#(define-method (typeset-ambitus (ambitus <ambitus>) translator)
"Typeset the ambitus:
- place the lower and upper ambitus notes according to their pitch and
the position of the middle C;
- typeset or delete the note accidentals, according to the key signature.
An accidental, if it is to be printed, is added to an AccidentalPlacement
grob (a grob dedicated to the placement of accidentals near a chord);
- both note heads are added to the ambitus line grob, so that a line should
be printed between them."
;; check if there are lower and upper pitches
(if (and (ambitus-note-pitch (ambitus-note ambitus UP))
(ambitus-note-pitch (ambitus-note ambitus DOWN)))
;; make an AccidentalPlacement grob, for placement of note accidentals
(let ((accidental-placement (ly:engraver-make-grob
translator
'AccidentalPlacement
(ambitus-note-accidental (ambitus-note ambitus DOWN)))))
;; For lower and upper ambitus notes:
(for-each (lambda (direction)
(let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction))))
;; set the cause and the staff position of the ambitus note
;; according to the associated pitch
(set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
'cause)
(ambitus-note-cause (ambitus-note ambitus direction)))
(set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
'staff-position)
(+ (ambitus-start-c0 ambitus)
(ly:pitch-steps pitch)))
;; determine if an accidental shall be printed for this note,
;; according to the key signature
(let* ((handle (or (assoc (cons (ly:pitch-octave pitch)
(ly:pitch-notename pitch))
(ambitus-start-key-sig ambitus))
(assoc (ly:pitch-notename pitch)
(ambitus-start-key-sig ambitus))))
(sig-alter (if handle (cdr handle) 0)))
(cond ((= (ly:pitch-alteration pitch) sig-alter)
;; the note alteration is in the key signature
;; => it does not have to be printed
(ly:grob-suicide!
(ambitus-note-accidental (ambitus-note ambitus direction)))
(set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction))
'accidental-grob)
'()))
(else
;; otherwise, the accidental shall be printed
(set! (ly:grob-property (ambitus-note-accidental
(ambitus-note ambitus direction))
'alteration)
(ly:pitch-alteration pitch)))))
;; add the AccidentalPlacement grob to the
;; conditional items of the AmbitusNoteHead
(ly:separation-item::add-conditional-item
(ambitus-note-head (ambitus-note ambitus direction))
accidental-placement)
;; add the AmbitusAccidental to the list of the
;; AccidentalPlacement grob accidentals
(ly:accidental-placement::add-accidental
accidental-placement
(ambitus-note-accidental (ambitus-note ambitus direction)))
;; add the AmbitusNoteHead grob to the AmbitusLine grob
(ly:pointer-group-interface::add-grob
(ambitus-line ambitus)
'note-heads
(ambitus-note-head (ambitus-note ambitus direction)))))
(list DOWN UP))
;; add the AccidentalPlacement grob to the main Ambitus grob
(ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement))
;; no notes ==> suicide the grobs
(begin
(for-each (lambda (direction)
(ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction)))
(ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction))))
(list DOWN UP))
(ly:grob-suicide! ambitus-line))))
%%%
%%% Ambitus engraver definition
%%%
#(define ambitus-engraver
(lambda (context)
(let ((ambitus #f))
;; when music is processed: make the ambitus object, if not already built
(make-engraver
((process-music translator)
(if (not ambitus)
(set! ambitus (make-ambitus translator))))
;; set the ambitus clef and key signature state
((stop-translation-timestep translator)
(if ambitus
(initialize-ambitus-state ambitus translator)))
;; when a note-head grob is built, update the ambitus notes
(acknowledgers
((note-head-interface engraver grob source-engraver)
(if ambitus
(update-ambitus-notes ambitus grob))))
;; finally, typeset the ambitus according to its upper and lower notes
;; (if any).
((finalize translator)
(if ambitus
(typeset-ambitus ambitus translator)))))))
%%%
%%% Example
%%%
\score {
\new StaffGroup <<
\new Staff { c'4 des' e' fis' gis' }
\new Staff { \clef "bass" c4 des ~ des ees b, }
>>
\layout { \context { \Staff \consists #ambitus-engraver } }
}
|
Mostrar un sistema GrandStaff completo si sigue con vida uno solo de sus pentagramas
A veces, en las partituras orquestales se dejan en silencio
instrumentos individuales o grupos de ellos durante un período de
tiempo, y sus pentagramas correspondientes se pueden suprimir durante
ese tiempo (con \removeEmptyStaves).
Cuando vuelven a sonar, con frecuencia se prefiere mostrar todos los
instrumentos del grupo. Esto se puede hacer añadiendo el grabador
Keep_alive_together_engraver en el contexto agrupador (p.ej.:
un GrandStaff o un StaffGroup)
En este ejemplo, los violines están en silencio durante los sistemas
segundo y tercero. Solo el violín primero suena en el último compás,
pero se muestra también el pentagrama del violín segundo.
| | \score {
<<
\new StaffGroup = "StaffGroup_woodwinds"
<<
\new Staff = "Staff_flute" \with {
instrumentName = "Flute"
shortInstrumentName = "Fl"
}
\relative c' {
\repeat unfold 3 { c'4 c c c | c c c c | c c c c | \break }
}
>>
\new StaffGroup = "StaffGroup_Strings"
<<
\new GrandStaff = "GrandStaff_violins"
<<
\new Staff = "StaffViolinI" \with {
instrumentName = "Violin I"
shortInstrumentName = "Vi I"
}
\relative c'' {
a1 \repeat unfold 7 { s1 } \repeat unfold 12 a16 a4
}
\new Staff = "StaffViolinII" \with {
instrumentName = "Violin II"
shortInstrumentName = "Vi II"
}
\relative c' { e1 \repeat unfold 8 { s1 } }
>>
\new Staff = "Staff_cello" \with {
instrumentName = "Cello"
shortInstrumentName = "Ce"
}
\relative c { \clef bass \repeat unfold 9 { c1 }}
>>
>>
}
\layout {
indent = 3.0\cm
short-indent = 1.5\cm
\context {
\GrandStaff
\consists Keep_alive_together_engraver
}
\context {
\Staff
\RemoveEmptyStaves
}
}
|
Los grabadores, uno por uno
Del problema central de la notación, esto es, crear un determinado
símbolo, se encargan los «plugins» o complementos añadidos. Cada
uno de los complementos se conoce como un grabador. En este
ejemplo, los grabadores se van activando uno por uno, en el orden
siguiente:
- cabeza de las notas,
- el símbolo del pentagrama,
- clave,
- plicas,
- barras, ligaduras de expresión, acentos,
- alteraciones, líneas divisorias, indicación del compás, y armadura.
Los grabadores se encuentran agrupados. Por ejemplo, las cabezas de
nota, ligaduras de expresión, barras de corchea, etc. forman un
contexto de voz, Voice. Los grabadores de la armadura,
alteraciones, líneas de compás, etc. forman un contexto de pentagrama,
Staff.
| | %% sample music
topVoice = \relative c' {
\key d \major
es8([ g] a[ fis])
b4
b16[-. b-. b-. cis-.]
d4->
}
botVoice = \relative c' {
\key d \major
c8[( f] b[ a)]
es4
es16[-. es-. es-. fis-.]
b4->
}
hoom = \relative c {
\key d \major
\clef bass
g8-. r
r4
fis8-.
r8
r4
b'4->
}
pah = \relative c' {
r8 b-.
r4
r8 g8-.
r16 g-. r8
\clef treble
fis'4->
}
%
% setup for Request->Element conversion. Guru-only
%
MyStaff = \context {
\type "Engraver_group"
\name Staff
\description "Handles clefs, bar lines, keys, accidentals. It can contain
@code{Voice} contexts."
\consists "Output_property_engraver"
\consists "Font_size_engraver"
\consists "Volta_engraver"
\consists "Separating_line_group_engraver"
\consists "Dot_column_engraver"
\consists "Ottava_spanner_engraver"
\consists "Rest_collision_engraver"
\consists "Piano_pedal_engraver"
\consists "Piano_pedal_align_engraver"
\consists "Instrument_name_engraver"
\consists "Grob_pq_engraver"
\consists "Forbid_line_break_engraver"
\consists "Axis_group_engraver"
\consists "Pitch_squash_engraver"
localAlterations = #'()
% explicitly set instrumentName, so we don't get
% weird effects when doing instrument names for
% piano staves
instrumentName = #'()
shortInstrumentName = #'()
\accepts "Voice"
\defaultchild "Voice"
}
MyVoice = \context {
\type "Engraver_group"
\name Voice
\description "
Corresponds to a voice on a staff. This context handles the
conversion of dynamic signs, stems, beams, super- and subscripts,
slurs, ties, and rests.
You have to instantiate this explicitly if you want to have
multiple voices on the same staff."
localAlterations = #'()
\consists "Font_size_engraver"
% must come before all
\consists "Output_property_engraver"
\consists "Arpeggio_engraver"
\consists "Multi_measure_rest_engraver"
\consists "Text_spanner_engraver"
\consists "Grob_pq_engraver"
\consists "Note_head_line_engraver"
\consists "Glissando_engraver"
\consists "Ligature_bracket_engraver"
\consists "Breathing_sign_engraver"
% \consists "Rest_engraver"
\consists "Grace_beam_engraver"
\consists "New_fingering_engraver"
\consists "Chord_tremolo_engraver"
\consists "Percent_repeat_engraver"
\consists "Slash_repeat_engraver"
%{
Must come before text_engraver, but after note_column engraver.
%}
\consists "Text_engraver"
\consists "Dynamic_engraver"
\consists "Dynamic_align_engraver"
\consists "Fingering_engraver"
\consists "Script_column_engraver"
\consists "Rhythmic_column_engraver"
\consists "Cluster_spanner_engraver"
\consists "Tie_engraver"
\consists "Tie_engraver"
\consists "Tuplet_engraver"
\consists "Note_heads_engraver"
\consists "Rest_engraver"
}
\score {
\topVoice
\layout {
\context { \MyStaff }
\context { \MyVoice }
}
}
MyStaff = \context {
\MyStaff
\consists "Staff_symbol_engraver"
}
\score {
\topVoice
\layout {
\context { \MyStaff }
\context { \MyVoice }
}
}
MyStaff = \context {
\MyStaff
\consists "Clef_engraver"
\remove "Pitch_squash_engraver"
}
\score {
\topVoice
\layout {
\context { \MyStaff }
\context { \MyVoice }
}
}
MyVoice = \context {
\MyVoice
\consists "Stem_engraver"
}
\score {
\topVoice
\layout {
\context { \MyStaff }
\context { \MyVoice }
}
}
MyVoice = \context {
\MyVoice
\consists "Beam_engraver"
}
\score {
\topVoice
\layout {
\context { \MyStaff }
\context { \MyVoice }
}
}
MyVoice = \context {
\MyVoice
\consists "Phrasing_slur_engraver"
\consists "Slur_engraver"
\consists "Script_engraver"
}
\score {
\topVoice
\layout {
\context { \MyStaff }
\context { \MyVoice }
}
}
MyStaff = \context {
\MyStaff
\consists "Bar_engraver"
\consists "Time_signature_engraver"
}
\score {
\topVoice
\layout {
\context { \MyStaff }
\context { \MyVoice }
}
}
MyStaff = \context {
\MyStaff
\consists "Accidental_engraver"
\consists "Key_engraver"
}
\score {
\topVoice
\layout {
\context { \MyStaff }
\context { \MyVoice }
}
}
|
Disposición Mensurstriche (líneas divisorias entre pentagramas)
La disposición «mensurstriche» en que las líneas divisorias no
están dibujadas sobre los pentagramas, sino entre ellos, se puede
conseguir con un StaffGroup en vez de un ChoirStaff.
La línea divisoria sobre los pentagramas se borra usando \hide.
| | global = {
\hide Staff.BarLine
s1 s
% the final bar line is not interrupted
\undo \hide Staff.BarLine
\bar "|."
}
\new StaffGroup \relative c'' {
<<
\new Staff { << \global { c1 c } >> }
\new Staff { << \global { c c } >> }
>>
}
|
Anidado de grupos de pentagramas
Se puede utilizar la propiedad
systemStartDelimiterHierarchy para crear grupos de
pentagramas anidados de forma más compleja. La instrucción
\set StaffGroup.systemStartDelimiterHierarchy toma una
lista alfabética del número de pentagramas producidos. Se puede
proporcionar antes de cada pentagrama un delimitador de comienzo
de sistema. Se debe encerrar entre corchetes y admite tantos
pentagramas como encierren las llaves. Se pueden omitir los
elementos de la lista, pero el primer corchete siempre abarca
todos los pentagramas. Las posibilidades son
SystemStartBar, SystemStartBracket,
SystemStartBrace y SystemStartSquare.
| | \new StaffGroup
\relative c'' <<
\override StaffGroup.SystemStartSquare.collapse-height = #4
\set StaffGroup.systemStartDelimiterHierarchy
= #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a
(SystemStartSquare b) ) c ) d)
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
>>
|
Numerar grupos de compases
Este fragmento de código muestra el uso del grabador
Measure_counter_engraver para numerar grupos de compases
sucesivos. Se puede numerar cualquier período de compases tanto si
tiene repeticiones como si no.
Se debe añadir el grabador al contexto adecuado. Aquí se usa un
contexto Staff; otra posibilidad sería un contexto
Dynamics.
El contador se inicia con \startMeasureCount y finaliza con
\stopMeasureCount. La numeración comienza con 1, de
forma predeterminada, pero se puede modificar este comportamiento
sobreescribiendo la propiedad count-from.
Cuando un compás se extiende más allá de un salto de línea, el número
aparece dos veces, la segunda vez entre paréntesis.
| | \layout {
\context {
\Staff
\consists #Measure_counter_engraver
}
}
\new Staff {
\startMeasureCount
\repeat unfold 7 {
c'4 d' e' f'
}
\stopMeasureCount
\bar "||"
g'4 f' e' d'
\override Staff.MeasureCounter.count-from = #2
\startMeasureCount
\repeat unfold 5 {
g'4 f' e' d'
}
g'4 f'
\bar ""
\break
e'4 d'
\repeat unfold 7 {
g'4 f' e' d'
}
\stopMeasureCount
}
|
Suprimir los números de compás de toda la partitura
Se pueden eliminar completamente los números de compás quitando el
grabador Bar_number_engraver del contexto de Score.
| | \layout {
\context {
\Score
\omit BarNumber
% or:
%\remove "Bar_number_engraver"
}
}
\relative c'' {
c4 c c c \break
c4 c c c
}
|
Uso del corchete recto al comienzo de un grupo de pentagramas
Se puede usar el delimitador de comienzo de un sistema
SystemStartSquare estableciéndolo explícitamente dentro de
un contexto StaffGroup o ChoirStaffGroup.
| | \score {
\new StaffGroup { <<
\set StaffGroup.systemStartDelimiter = #'SystemStartSquare
\new Staff { c'4 d' e' f' }
\new Staff { c'4 d' e' f' }
>> }
}
|
Using marklines in a Frenched score
Using MarkLine contexts (such as in
LSR1010) in a
Frenched score can be problematic if all the staves between two
MarkLines are removed in one system. The
Keep_alive_together_engraver can be used within each
StaffGroup to keep the MarkLine alive only as long
as the other staves in the group stay alive.
| | bars = {
\tempo "Allegro" 4=120
s1*2
\repeat unfold 5 { \mark \default s1*2 }
\bar "||"
\tempo "Adagio" 4=40
s1*2
\repeat unfold 8 { \mark \default s1*2 }
\bar "|."
}
winds = \repeat unfold 120 { c''4 }
trumpet = { \repeat unfold 8 g'2 R1*16 \repeat unfold 4 g'2 R1*8 }
trombone = { \repeat unfold 4 c'1 R1*8 d'1 R1*17 }
strings = \repeat unfold 240 { c''8 }
#(set-global-staff-size 16)
\paper {
systems-per-page = 5
ragged-last-bottom = ##f
}
\layout {
indent = 15\mm
short-indent = 5\mm
\context {
\name MarkLine
\type Engraver_group
\consists Output_property_engraver
\consists Axis_group_engraver
\consists Mark_engraver
\consists Metronome_mark_engraver
\override VerticalAxisGroup.remove-empty = ##t
\override VerticalAxisGroup.remove-layer = #'any
\override VerticalAxisGroup.staff-affinity = #DOWN
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing.basic-distance = 1
keepAliveInterfaces = #'()
}
\context {
\Staff
\override VerticalAxisGroup.remove-empty = ##t
\override VerticalAxisGroup.remove-layer = ##f
}
\context {
\StaffGroup
\accepts MarkLine
\consists Keep_alive_together_engraver
}
\context {
\Score
\remove Mark_engraver
\remove Metronome_mark_engraver
}
}
\score {
<<
\new StaffGroup = "winds" \with {
instrumentName = "Winds"
shortInstrumentName = "Winds"
} <<
\new MarkLine \bars
\new Staff \winds
>>
\new StaffGroup = "brass" <<
\new MarkLine \bars
\new Staff = "trumpet" \with {
instrumentName = "Trumpet"
shortInstrumentName = "Tpt"
} \trumpet
\new Staff = "trombone" \with {
instrumentName = "Trombone"
shortInstrumentName = "Tbn"
} \trombone
>>
\new StaffGroup = "strings" \with {
instrumentName = "Strings"
shortInstrumentName = "Strings"
} <<
\new MarkLine \bars
\new Staff = "strings" { \strings }
>>
>>
}
|
Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas
Esta plantilla es, básicamente, la misma que la sencilla plantilla
“Conjunto vocal”, excepto que aquí todas las líneas de letra se
colocan utilizando alignAboveContext y
alignBelowContext.
| | global = {
\key c \major
\time 4/4
}
sopMusic = \relative c'' {
c4 c c8[( b)] c4
}
sopWords = \lyricmode {
hi hi hi hi
}
altoMusic = \relative c' {
e4 f d e
}
altoWords = \lyricmode {
ha ha ha ha
}
tenorMusic = \relative c' {
g4 a f g
}
tenorWords = \lyricmode {
hu hu hu hu
}
bassMusic = \relative c {
c4 c g c
}
bassWords = \lyricmode {
ho ho ho ho
}
\score {
\new ChoirStaff <<
\new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
\new Lyrics \with { alignAboveContext = #"women" }
\lyricsto "sopranos" \sopWords
\new Lyrics \with { alignBelowContext = #"women" }
\lyricsto "altos" \altoWords
% we could remove the line about this with the line below, since
% we want the alto lyrics to be below the alto Voice anyway.
% \new Lyrics \lyricsto "altos" \altoWords
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
\new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
>>
\new Lyrics \with { alignAboveContext = #"men" }
\lyricsto "tenors" \tenorWords
\new Lyrics \with { alignBelowContext = #"men" }
\lyricsto "basses" \bassWords
% again, we could replace the line above this with the line below.
% \new Lyrics \lyricsto "basses" \bassWords
>>
}
|
Estrofa para solista y estribillo a dos voces
Esta plantilla crea una partitura que comienza con una estrofa para
solista y continúa con un estribillo a dos voces. también muestra el
uso de silencios de separación dentro de la variable \global
para definir cambios de compás (y otros elementos que son comunes a
todas las partes) a lo largo de toda la partitura.
| | global = {
\key g \major
% verse
\time 3/4
s2.*2
\break
% refrain
\time 2/4
s2*2
\bar "|."
}
SoloNotes = \relative g' {
\clef "treble"
% verse
g4 g g |
b4 b b |
% refrain
R2*2 |
}
SoloLyrics = \lyricmode {
One two three |
four five six |
}
SopranoNotes = \relative c'' {
\clef "treble"
% verse
R2.*2 |
% refrain
c4 c |
g4 g |
}
SopranoLyrics = \lyricmode {
la la |
la la |
}
BassNotes = \relative c {
\clef "bass"
% verse
R2.*2 |
% refrain
c4 e |
d4 d |
}
BassLyrics = \lyricmode {
dum dum |
dum dum |
}
\score {
<<
\new Voice = "SoloVoice" << \global \SoloNotes >>
\new Lyrics \lyricsto "SoloVoice" \SoloLyrics
\new ChoirStaff <<
\new Voice = "SopranoVoice" << \global \SopranoNotes >>
\new Lyrics \lyricsto "SopranoVoice" \SopranoLyrics
\new Voice = "BassVoice" << \global \BassNotes >>
\new Lyrics \lyricsto "BassVoice" \BassLyrics
>>
>>
\layout {
ragged-right = ##t
\context { \Staff
% these lines prevent empty staves from being printed
\RemoveEmptyStaves
\override VerticalAxisGroup.remove-first = ##t
}
}
}
|
Tweaks and overrides
Changing defaults
Tweaking output
Añadir una indicación de octava alta a una sola voz
Si tiene más de una voz en el mismo pentagrama, el cambio de
octavación de una voz transportará la posición de las notas en todas
las voces mientras dure el corchete de octava. Si la octavación se
quiere aplicar a una voz solamente, se deben ajustar explícitamente la
middleCPosition y el corchete de octava. En este fragmento de código,
el valor de middleCPosition para la clave de Fa es normalmente 6, seis
posiciones por encima de la línea del Do central, de manera que en la
porción de 8va el valor de middleCPosition es aún 7 posiciones (una
octava) más alta.
| | {
\clef bass
<< { <g d'>1~ q2 <c' e'> }
\\
{
r2.
\set Staff.ottavation = #"8vb"
\once \override Staff.OttavaBracket.direction = #DOWN
\set Voice.middleCPosition = #(+ 6 7)
<b,,, b,,>4 ~ |
q2
\unset Staff.ottavation
\unset Voice.middleCPosition
<c e>2
}
>>
}
|
Añadir enlaces a los objetos
Para añadir un enlace al sello de un objeto gráfico, podemos usar
add-link tal y como se define aquí. FUnciona con
\override y con \tweak. Inconveniente:
point-and-click (apuntar y pulsar) quedará obstacuilzado por
los objetos gráficos enlazados.
Limitación: funciona solamente para PDF.
Los objetos enlazados se colorean con una instrucción aparte.
| | #(define (add-link url-strg)
(lambda (grob)
(let* ((stil (ly:grob-property grob 'stencil)))
(if (ly:stencil? stil)
(begin
(let* (
(x-ext (ly:stencil-extent stil X))
(y-ext (ly:stencil-extent stil Y))
(url-expr `(url-link url-strg ,x-ext ,y-ext))
(new-stil (ly:stencil-add
(ly:make-stencil url-expr x-ext y-ext) stil)))
(ly:grob-set-property! grob 'stencil new-stil)))
#f))))
%%%% test
urlI =
"https://lilypond.org/doc/v2.14/Documentation/notation/writing-pitches"
urlII =
"https://lilypond.org/doc/v2.14/Documentation/notation/rhythms"
urlIII =
"https://lilypond.org/doc/v2.14/Documentation/notation/note-heads"
urlIV =
"https://lilypond.org/doc/v2.14/Documentation/notation/beams"
urlV =
"https://lilypond.org/doc/v2.14/Documentation/notation/note-head-styles"
\relative c' {
\key cis \minor
\once \override Staff.Clef.color = #green
\once \override Staff.Clef.after-line-breaking =
#(add-link urlI)
\once \override Staff.TimeSignature.color = #green
\once \override Staff.TimeSignature.after-line-breaking =
#(add-link urlII)
\once \override NoteHead.color = #green
\once \override NoteHead.after-line-breaking =
#(add-link urlIII)
cis'1
\once \override Beam.color = #green
\once \override Beam.after-line-breaking =
#(add-link urlIV)
cis8 dis e fis gis2
<gis,
% With 2.17.9 you could use the command below to address the Accidental.
% \tweak Accidental.before-line-breaking #(add-link url)
\tweak color #green
\tweak after-line-breaking #(add-link urlV)
\tweak style #'harmonic
bis
dis
fis
>1
<cis, cis' e>
}
|
Adding markups in a tablature
By default markups does not show in a tablature. To make them appear,
simply use the command \revert TabStaff.TextScript.stencil
| | %% http://lsr.di.unimi.it/LSR/Item?id=919
% by P.P.Schneider on June 2014
high = { r4 r8 <g c'> q r8 r4 }
low = { c4 r4 c8 r8 g,8 b, }
pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" }
\score {
\new TabStaff {
\repeat unfold 2 << \high \\ \low \\ \pulse >>
}
\layout {
\context {
\TabStaff
\clef moderntab
\revert TextScript.stencil
\override TextScript.font-series = #'bold
\override TextScript.font-size = #-2
\override TextScript.color = #red
}
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1/8)
}
}
}
|
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 |
}
|
Ajuste del espaciado de las notas de adorno
Se puede ajustar la separación entre las notas de adorno utilizando la
propiedad spacing-increment de Score.GraceSpacing.
| | graceNotes = {
\grace { c4 c8 c16 c32 }
c8
}
\relative c'' {
c8
\graceNotes
\override Score.GraceSpacing.spacing-increment = #2.0
\graceNotes
\revert Score.GraceSpacing.spacing-increment
\graceNotes
}
|
Ajuste del especiado vertical de la letra
Este fragmento de código muestra cómo situar la línea de base de la
letra más cerca del pentagrama.
| | % Default layout:
<<
\new Staff \new Voice = melody \relative c' {
c4 d e f
g4 f e d
c1
}
\new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa }
\new Staff {
\new Voice = melody \relative c' {
c4 d e f
g4 f e d
c1
}
}
% Reducing the minimum space below the staff and above the lyrics:
\new Lyrics \with {
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
#'((basic-distance . 1))
}
\lyricsto melody { aa aa aa aa aa aa aa aa aa }
>>
|
Alterar la longitud de las plicas unidas por una barra
Se puede variar la longitud de las plicas de las figuras unidas por
una barra mediante la sobreescritura de la propiedad
beamed-lengths de los detalles (details) del objeto
Stem. Si se utiliza un solo valor como argumento, la longitud
se aplica a todas las plicas. Si se usan varios argumentos, el
primero se aplica a las corcheas, el sgundo a las semicorcheas y así
sucesivamente. El último argumento también se aplica a todas las
figuras que son mmás cortas que la longitud de la figura del último
argumento. También se pueden usar argumentos no enteros.
| | \relative c'' {
\override Stem.details.beamed-lengths = #'(2)
a8[ a] a16[ a] a32[ a]
\override Stem.details.beamed-lengths = #'(8 10 12)
a8[ a] a16[ a] a32[ a] r8
\override Stem.details.beamed-lengths = #'(8)
a8[ a]
\override Stem.details.beamed-lengths = #'(8.5)
a8[ a]
\revert Stem.details
a8[ a] a16[ a] a32[ a] r16
}
|
Numeración de compases alternativa
Se pueden seleccionar dos métodos alternativos para la numeración de
compases, especiales para cuando hay repeticiones.
| | \relative c'{
\set Score.alternativeNumberingStyle = #'numbers
\repeat volta 3 { c4 d e f | }
\alternative {
{ c4 d e f | c2 d \break }
{ f4 g a b | f4 g a b | f2 a | \break }
{ c4 d e f | c2 d }
}
c1 \break
\set Score.alternativeNumberingStyle = #'numbers-with-letters
\repeat volta 3 { c,4 d e f | }
\alternative {
{ c4 d e f | c2 d \break }
{ f4 g a b | f4 g a b | f2 a | \break }
{ c4 d e f | c2 d }
}
c1
}
|
Corchetes de análisis encima del pentagrama
De forma predeterminada se añaden corchetes de análisis sencillos
debajo del pentagrama. El ejemplo siguiente muestra una manera de
colocarlos por encima.
| | \layout {
\context {
\Voice
\consists "Horizontal_bracket_engraver"
}
}
\relative c'' {
\once \override HorizontalBracket.direction = #UP
c2\startGroup
d2\stopGroup
}
|
Analysis brackets with labels
Text may be added to analysis brackets through the text property
of the HorizontalBracketText grob. Adding different texts to
brackets beginning at the same time requires the \tweak command.
Bracket text will be parenthesized after a line break.
| | \layout {
\context {
\Voice
\consists "Horizontal_bracket_engraver"
\override HorizontalBracket.direction = #UP
}
}
{
\once\override HorizontalBracketText.text = "a"
c''\startGroup d''\stopGroup
\once\override HorizontalBracketText.text = "a'"
e''\startGroup d''\stopGroup
c''
-\tweak HorizontalBracketText.text \markup \bold \huge "b" \startGroup
-\tweak HorizontalBracketText.text "a" \startGroup
d''\stopGroup
e''-\tweak HorizontalBracketText.text "a'" \startGroup
d''\stopGroup\stopGroup
c''-\tweak HorizontalBracketText.text foo \startGroup d'' e'' f''
\break
g'' a'' b'' c'''\stopGroup
}
|
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
}
|
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 "|."
}
|
Modificar el tamaño de una nota suelta de un acorde
Se pueden modificar notas individuales de un acorde con la instrucción
\tweak, alterando la propiedad font-size.
Dentro de un acorde (entre ángulos simples < >), antes de la
nota que queremos alterar, situamos la instrucción \tweak
seguida por font-size y definimos el tamaño adecuado como
#-2 (una cabeza pequeña).
| | \relative c' {
<\tweak font-size #+2 c e g c
\tweak font-size #-2 e>1
^\markup { A tiny e }_\markup { A big c }
}
|
Changing beam thickness and spacing
To make beams thicker or thinner alter the Beam.beam-thickness
property. To adjust the spacing between beams alter the
Beam.length-fraction property.
| | \relative f' {
\time 1/8
\override Beam.beam-thickness = #0.4
\override Beam.length-fraction = #0.8
c32 c c c
\revert Beam.beam-thickness % 0.48 is default thickness
\revert Beam.length-fraction % 1.0 is default spacing
c32 c c c
\override Beam.beam-thickness = #0.6
\override Beam.length-fraction = #1.3
c32 c c c
}
|
Cambiar la forma de los silencios multicompás
Si hay diez compases de silencio o menos, se imprime en el pentagrama
una serie de silencios de breve y longa (conocidos en alemán como
“Kirchenpausen”, «silencios eclesiásticos»); en caso contrario se
muestra una barra normal. Este número predeterminado de diez se
puede cambiar sobreescribiendo la propiedad expand-limit:
| | \relative c'' {
\compressMMRests {
R1*2 | R1*5 | R1*9
\override MultiMeasureRest.expand-limit = #3
R1*2 | R1*5 | R1*9
}
}
|
Modificación de propiedades para objetos gráficos individuales
La instrucción \applyOutput hace posible el ajuste fino de
cualquier objeto de presentación, en cualquier contexto. Requiere una
función de Scheme contres argumentos.
| | #(define (mc-squared grob grob-origin context)
(let ((sp (ly:grob-property grob 'staff-position)))
(ly:grob-set-property!
grob 'stencil
(grob-interpret-markup grob
#{ \markup \lower #0.5
#(case sp
((-5) "m")
((-3) "c ")
((-2) #{ \markup \teeny \bold 2 #})
(else "bla")) #}))))
\relative c' {
<d f g b>2
\applyOutput Voice.NoteHead #mc-squared
<d f g b>2
}
|
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
}
|
Cambiar la familia de tipografía predeterminada para el texto
Las familias de fuente tipográfica para el texto se pueden
sobreescribir con make-pango-font-tree.
| | \paper {
% change for other default global staff size.
myStaffSize = #20
%{
run
lilypond -dshow-available-fonts
to show all fonts available in the process log.
%}
#(define fonts
(make-pango-font-tree "Times New Roman"
"Nimbus Sans,Nimbus Sans L"
"Luxi Mono"
;; "Helvetica"
;; "Courier"
(/ myStaffSize 20)))
}
\relative c'' {
c4^\markup {
roman: foo \bold bla \italic bar \italic \bold baz
}
c'4_\markup {
\override #'(font-family . sans)
{
sans: foo \bold bla \italic bar \italic \bold baz
}
}
c'2^\markup {
\override #'(font-family . typewriter)
{
mono: foo \bold bla \italic bar \italic \bold baz
}
}
}
|
Modificar el tamaño de la pauta
Aunque la manera más sencilla de redimensionar los pentagramas es usar
#(set-global-staff-size xx), el tamaño de una pauta individual
se puede cambiar escalando las propiedades de 'staff-space y de
fontSize.
| | <<
\new Staff {
\relative c'' {
\dynamicDown
c8\ff c c c c c c c
}
}
\new Staff \with {
fontSize = #-3
\override StaffSymbol.staff-space = #(magstep -3)
} {
\clef bass
c8 c c c c\f c c c
}
>>
|
Cambiar el tempo sin indicación metronómica
Para cambiar el tempo en la salida MIDI sin
imprimir nada, hacemos invisible la indicación metronómica:
| | \score {
\new Staff \relative c' {
\tempo 4 = 160
c4 e g b
c4 b d c
\set Score.tempoHideNote = ##t
\tempo 4 = 96
d,4 fis a cis
d4 cis e d
}
\layout { }
\midi { }
}
|
Modificar el texto de las indicaciones de pedal
Se puede usar Staff.pedalSustainStrings para fijar el texto de
las indicaciones de pisar pedal y levantar pedal. Observe que las
únicas cadenas válidas son las que están en la lista de glifos de
pedal: los valores que aparecen en este fragmento de código son una
relación exhaustiva.
| | sustainNotes = { c4\sustainOn d e\sustainOff\sustainOn f\sustainOff }
\relative c' {
\sustainNotes
\set Staff.pedalSustainStrings = #'("P" "P-" "-")
\sustainNotes
\set Staff.pedalSustainStrings = #'("d" "de" "e")
\sustainNotes
\set Staff.pedalSustainStrings = #'("M" "M-" "-")
\sustainNotes
\set Staff.pedalSustainStrings = #'("Ped" "*Ped" "*")
\sustainNotes
}
|
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
}
|
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 }
}
|
Controlar la visibilidad de los corchetes de grupo especial
El comportamiento predeterminado de la visibilidad de los corchetes de
grupo de valoración especial es imprimir el corchete a no ser que haya
una barra de la misma longitud que el grupo especial. Para controlar
la visibilidad de los corchetes de grupo, establezca la propiedad
'bracket-visibility a #t (imprimir el corchete siempre),
#'if-no-beam (imprimir el corchete solamente si no hay barra,
el comportamiento predeterminado), o #f (no imprimir nunca el
corchete). Este último equivale de hecho a omitir el objeto
TupletBracket de la salida impresa.
| | music = \relative c'' {
\tuplet 3/2 { c16[ d e } f8]
\tuplet 3/2 { c8 d e }
\tuplet 3/2 { c4 d e }
}
\new Voice {
\relative c' {
<< \music s4^"default" >>
\override TupletBracket.bracket-visibility = #'if-no-beam
<< \music s4^"'if-no-beam" >>
\override TupletBracket.bracket-visibility = ##t
<< \music s4^"#t" >>
\override TupletBracket.bracket-visibility = ##f
<< \music s4^"#f" >>
\omit TupletBracket
<< \music s4^"omit" >>
}
}
|
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'' {
c2*2/3 ( s2*1/3\turn d4) r
<<
{ c4.( d8) }
{ s4 s\turn }
>>
\transpose c d \relative c'' <<
{ c4.( d8) }
{
s4
\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
\single \hideNotes
b8-\turn \noBeam
s8
}
>>
}
|
Creating custom key signatures
LilyPond supports custom key signatures. In this example, print for D
minor with an extended range of printed flats.
| | \new Staff \with {
\override StaffSymbol.line-count = #8
\override KeySignature.flat-positions = #'((-7 . 6))
\override KeyCancellation.flat-positions = #'((-7 . 6))
% presumably sharps are also printed in both octaves
\override KeySignature.sharp-positions = #'((-6 . 7))
\override KeyCancellation.sharp-positions = #'((-6 . 7))
\override Clef.stencil = #
(lambda (grob)(grob-interpret-markup grob
#{ \markup\combine
\musicglyph "clefs.C"
\translate #'(-3 . -2)
\musicglyph "clefs.F"
#}))
clefPosition = #3
middleCPosition = #3
middleCClefPosition = #3
}
{
\key d\minor
f bes, f bes,
}
|
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
}
|
Creación de marcas de ensayo simultáneas
A diferencia de las inscripciones de texto, las lestras de ensayo
no se pueden apilar en un punto concreto de la partitura: sólo se
crea un objeto RehearsalMark. Utilizando un compás y línea
divisoria invisibles se puede crear una nueva marca de ensayo,
dando la apariencia de dos marcas en la misma columna.
Este método también puede resultar útil para colocar marcas de
ensayo tanto al final de un sistema como al comienzo del sistema
siguiente.
| | {
\key a \major
\set Score.markFormatter = #format-mark-box-letters
\once \override Score.RehearsalMark.outside-staff-priority = #5000
\once \override Score.RehearsalMark.self-alignment-X = #LEFT
\once \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
\mark \markup { \bold { Senza denti } }
% the hidden measure and bar line
% \cadenzaOn turns off automatic calculation of bar numbers
\cadenzaOn
\once \override Score.TimeSignature.stencil = ##f
\time 1/16
s16 \bar ""
\cadenzaOff
\time 4/4
\once \override Score.RehearsalMark.self-alignment-X = #LEFT
\mark \markup { \box \bold Intro }
d'1
\mark \default
d'1
}
|
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
}
|
Cross-staff chords - beaming problems workaround
Sometimes it is better to use stems from the upper staff for creating
cross-staff chords, because no problems with automatic beam collision
avoidance then arise. If the stems from the lower staff were used in
the following example, it would be necessary to change the automatic
beam collision avoidance settings so that it doesn’t detect collisions
between staves using \override Staff.Beam.collision-voice-only =
##t
| | \new PianoStaff <<
\new Staff = up
\relative c' {
<<
{ r4
\override Stem.cross-staff = ##t
\override Stem.length = #19 % this is in half-spaces,
% so it makes stems 9.5 staffspaces long
\override Stem.Y-offset = #-6 % stems are normally lengthened
% upwards, so here we must lower the stem by the amount
% equal to the lengthening - in this case (19 - 7) / 2
% (7 is default stem length)
e e e }
{ s4
\change Staff = "bottom"
\override NoteColumn.ignore-collision = ##t
c, c c
}
>>
}
\new Staff = bottom
\relative c' {
\clef bass
\voiceOne
g8 a g a g a g a
}
>>
|
Plicas de pentagrama cruzado
Este fragmento de código muestra el uso del grabador
Span_stem_engraver y de \crossStaff para conectar
automáticamente plicas de un pentagrama a otro. No es necesario
especificar la longitud de la plica porque la distancia variable entre
las cabezas de las notas y los pentagramas se calcula automáticamente.
| | \layout {
\context {
\PianoStaff
\consists #Span_stem_engraver
}
}
{
\new PianoStaff <<
\new Staff {
<b d'>4 r d'16\> e'8. g8 r\!
e'8 f' g'4 e'2
}
\new Staff {
\clef bass
\voiceOne
\autoBeamOff
\crossStaff { <e g>4 e, g16 a8. c8} d
\autoBeamOn
g8 f g4 c2
}
>>
}
|
Custos
Se pueden tipografiar «custos» en diferentes estilos.
| | \layout { ragged-right = ##t }
\new Staff \with { \consists "Custos_engraver" } \relative c' {
\override Staff.Custos.neutral-position = #4
\override Staff.Custos.style = #'hufnagel
c1^"hufnagel" \break
<d a' f'>1
\override Staff.Custos.style = #'medicaea
c1^"medicaea" \break
<d a' f'>1
\override Staff.Custos.style = #'vaticana
c1^"vaticana" \break
<d a' f'>1
\override Staff.Custos.style = #'mensural
c1^"mensural" \break
<d a' f'>1
}
|
Personalizar los diagramas de posiciones
Se pueden establecer las propiedades de los diagramas de
posiciones de acordes por medio de 'fret-diagram-details.
Para los diagramas de posiciones de FretBoard, se aplican los
overrides (sobreescrituras) al objeto FretBoards.FretBoard.
Como Voice, FretBoards es un contexto del nivel
inferior, y por tanto se puede omitir su nombre en la
sobreescritura de propiedades.
| | \include "predefined-guitar-fretboards.ly"
\storePredefinedDiagram #default-fret-table \chordmode { c' }
#guitar-tuning
#"x;1-1-(;3-2;3-3;3-4;1-1-);"
<<
\new ChordNames {
\chordmode { c1 | c | c | d }
}
\new FretBoards {
% Set global properties of fret diagram
\override FretBoards.FretBoard.size = #'1.2
\override FretBoard.fret-diagram-details.finger-code = #'in-dot
\override FretBoard.fret-diagram-details.dot-color = #'white
\chordmode {
c
\once \override FretBoard.size = #'1.0
\once \override FretBoard.fret-diagram-details.barre-type = #'straight
\once \override FretBoard.fret-diagram-details.dot-color = #'black
\once \override FretBoard.fret-diagram-details.finger-code = #'below-string
c'
\once \override FretBoard.fret-diagram-details.barre-type = #'none
\once \override FretBoard.fret-diagram-details.number-type = #'arabic
\once \override FretBoard.fret-diagram-details.orientation = #'landscape
\once \override FretBoard.fret-diagram-details.mute-string = #"M"
\once \override FretBoard.fret-diagram-details.label-dir = #LEFT
\once \override FretBoard.fret-diagram-details.dot-color = #'black
c'
\once \override FretBoard.fret-diagram-details.finger-code = #'below-string
\once \override FretBoard.fret-diagram-details.dot-radius = #0.35
\once \override FretBoard.fret-diagram-details.dot-position = #0.5
\once \override FretBoard.fret-diagram-details.fret-count = #3
d
}
}
\new Voice {
c'1 | c' | c' | d'
}
>>
|
Personalizar diagramas de posiciones de marcado
Se pueden establecer las propiedades de los diagramas de
posiciones a través de 'fret-diagram-details. Para los
diagramas de posiciones de marcado, se pueden aplicar overrides
(sobreescrituras) al objeto Voice.TextScript o directamente al elemento de marcado.
| | <<
\chords { c1 | c | c | d }
\new Voice = "mel" {
\textLengthOn
% Set global properties of fret diagram
\override TextScript.size = #'1.2
\override TextScript.fret-diagram-details.finger-code = #'in-dot
\override TextScript.fret-diagram-details.dot-color = #'white
%% C major for guitar, no barre, using defaults
% terse style
c'1^\markup { \fret-diagram-terse "x;3-3;2-2;o;1-1;o;" }
%% C major for guitar, barred on third fret
% verbose style
% size 1.0
% roman fret label, finger labels below string, straight barre
c'1^\markup {
% standard size
\override #'(size . 1.0) {
\override #'(fret-diagram-details . (
(number-type . roman-lower)
(finger-code . in-dot)
(barre-type . straight))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
}
%% C major for guitar, barred on third fret
% verbose style
% landscape orientation, arabic numbers, M for mute string
% no barre, fret label down or left, small mute label font
c'1^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(number-type . arabic)
(label-dir . -1)
(mute-string . "M")
(orientation . landscape)
(barre-type . none)
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
%% simple D chord
% terse style
% larger dots, centered dots, fewer frets
% label below string
d'1^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
}
>>
|
Mostrar corchete o llave en grupos de un solo pentagrama
Si hay un solo pentagrama en un de los tipos de sistema
ChoirStaff o StaffGroup, el comportamiento
predeterminado es que no se imprima el corchete en la barra inicial.
Esto se puede cambiar sobreescribiendo collapse-height para
fijar su valor de manera que sea menor que el número de líneas en la
pauta.
Observe que en contextos como PianoStaff y
GrandStaff en que los sistemas empiezan con una llave en
lugar de un corchete, se debe establecer el valor de una propiedad
distinta, como se ve en el segundo sistema del ejemplo.
| | \score {
\new StaffGroup <<
% Must be lower than the actual number of staff lines
\override StaffGroup.SystemStartBracket.collapse-height = #4
\override Score.SystemStartBar.collapse-height = #4
\new Staff {
c'1
}
>>
}
\score {
\new PianoStaff <<
\override PianoStaff.SystemStartBrace.collapse-height = #4
\override Score.SystemStartBar.collapse-height = #4
\new Staff {
c'1
}
>>
}
|
Imprimir el árbol genealógico de un grob
Al trabajar con los callbacks de un grob, puede ser de mucha ayuda
entender el árbol genealógico de un grob. La mayor parte de los
grobs tienen padres que influyen en el posicionamiento del grob.
los padres X e Y influyen en las posiciones horizontal y vertical del
grob, respectivamente. Además, cada pade puede tener padres a su vez.
Por desgracia, existen varios aspectos de la genealogía de un grob que
pueden llevar a confusión:
* Los tipos de padre que tiene un grob pueden depender del
contexto.
* Para ciertos grobs, los padres X e Y son el mismo.
* Un "ancestro" concreto puede estar relacionado con un grob de
más de una manera.
* El concepto de "generaciones" es engañoso.
Por ejemplo, el grob System puede ser tanto un padre (sobre el
lado Y) como un abuelo (dos veces en el lado X) de un grob
VerticalAlignment.
Este macro imprime, en la consola, una representación textual de la
genealogía de un grob.
Cuando se llama de esta forma:
{ \once \override NoteHead.before-line-breaking =
#display-ancestry c }
Se genera la siguiente salida:
NoteHead X,Y: NoteColumn
X: PaperColumn
X,Y: System
Y: VerticalAxisGroup
X: NonMusicalPaperColumn
X,Y: System
Y: VerticalAlignment
X: NonMusicalPaperColumn
X,Y: System
Y: System
| | %% http://lsr.di.unimi.it/LSR/Item?id=622
%% see also http://www.lilypond.org/doc/v2.18/Documentation/snippets/tweaks-and-overrides#tweaks-and-overrides-displaying-grob-ancestry
%% Remark:
%% grob::name is in the source since 2.19.x could be deleted during next LSR-upgrade
#(define (grob::name grob)
(assq-ref (ly:grob-property grob 'meta) 'name))
#(define (get-ancestry grob)
(if (not (null? (ly:grob-parent grob X)))
(list (grob::name grob)
(get-ancestry (ly:grob-parent grob X))
(get-ancestry (ly:grob-parent grob Y)))
(grob::name grob)))
#(define (format-ancestry lst padding)
(string-append
(symbol->string (car lst))
"\n"
(let ((X-ancestry
(if (list? (cadr lst))
(format-ancestry (cadr lst) (+ padding 3))
(symbol->string (cadr lst))))
(Y-ancestry
(if (list? (caddr lst))
(format-ancestry (caddr lst) (+ padding 3))
(symbol->string (caddr lst)))))
(if (equal? X-ancestry Y-ancestry)
(string-append
(format #f "~&")
(make-string padding #\space)
"X,Y: "
(if (list? (cadr lst))
(format-ancestry (cadr lst) (+ padding 5))
(symbol->string (cadr lst))))
(string-append
(format #f "~&")
(make-string padding #\space)
"X: " X-ancestry
"\n"
(make-string padding #\space)
"Y: " Y-ancestry
(format #f "~&"))))
(format #f "~&")))
#(define (display-ancestry grob)
(format (current-error-port)
"~3&~a~2%~a~&"
(make-string 36 #\-)
(if (ly:grob? grob)
(format-ancestry (get-ancestry grob) 0)
(format #f "~a is not a grob" grob))))
\relative c' {
\once \override NoteHead.before-line-breaking = #display-ancestry
f4
\once \override Accidental.before-line-breaking = #display-ancestry
\once \override Arpeggio.before-line-breaking = #display-ancestry
<f as c>4\arpeggio
}
|
Armónicos con puntillo
Los armónicos artificiales que usan la instrucción \harmonic
no tienen puntillo. Para sobreescribir este comportamiento, fije la
propiedad de contexto harmonicDots.
| | \relative c''' {
\time 3/4
\key f \major
\set harmonicDots = ##t
<bes f'\harmonic>2. ~
<bes f'\harmonic>4. <a e'\harmonic>8( <gis dis'\harmonic> <g d'\harmonic>)
<fis cis'\harmonic>2.
<bes f'\harmonic>2.
}
|
Rodear los objetos gráficos con rectángulos
Se puede sobreescribir la función print-function para trazar un
rectángulo alrededor de un objeto gráfico arbitrario.
| | \relative c'' {
\override TextScript.stencil =
#(make-stencil-boxer 0.1 0.3 ly:text-interface::print)
c'4^"foo"
\override Stem.stencil =
#(make-stencil-boxer 0.05 0.25 ly:stem::print)
\override Score.RehearsalMark.stencil =
#(make-stencil-boxer 0.15 0.3 ly:text-interface::print)
b8
\revert Stem.stencil
\revert Flag.stencil
c4. c4
\mark "F"
c1
}
|
Rodear diversos objetos con una circunferencia
La instrucción de marcado \circle traza circunferencias
alrededor de varios objetos, por ejemplo las indicaciones de
digitación. Para otros objetos pueden requerirse trucos específicos:
este ejemplo muestra dos estrategias para las letras de ensayo y los
números de compás.
| | \relative c' {
c1
\set Score.markFormatter =
#(lambda (mark context)
(make-circle-markup (format-mark-numbers mark context)))
\mark \default
c2 d^\markup {
\override #'(thickness . 3) {
\circle \finger 2
}
}
\override Score.BarNumber.break-visibility = #all-visible
\override Score.BarNumber.stencil =
#(make-stencil-circler 0.1 0.25 ly:text-interface::print)
}
|
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
}
|
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\!
}
|
Extending a TrillSpanner
For TrillSpanner, the minimum-length property becomes
effective only if the set-spacing-rods procedure is called
explicitly. To do this, the springs-and-rods property should be
set to ly:spanner::set-spacing-rods.
| | \relative c' {
\key c\minor
\time 2/4
c16( as') c,-. des-.
\once\override TrillSpanner.minimum-length = #15
\once\override TrillSpanner.springs-and-rods = #ly:spanner::set-spacing-rods
\afterGrace es4
\startTrillSpan { d16[( \stopTrillSpan es)] }
c( c' g es c g' es d
\hideNotes
c8)
}
|
Extender glissandos sobre repeticiones
Se puede simular un glissando que se extiende hasta el interior de
varios bloques \alternative de primera y segunda vez mediante
la adición de una nota de adorno oculta con un glissando al comienzo
de cada bloque \alternative. La nota de adorno debe estar a la
misma altura que la nota que da inicio al primer glissando. Esto se
implementa aquí con una función musical que toma como argumento la
altura de la nota de adorno.
Observe que en música polifónica la nota de adorno debe coincidir con
las notas de adorno correspondientes en todas las otras voces.
| | repeatGliss = #(define-music-function (grace)
(ly:pitch?)
#{
% the next two lines ensure the glissando is long enough
% to be visible
\once \override Glissando.springs-and-rods
= #ly:spanner::set-spacing-rods
\once \override Glissando.minimum-length = #3.5
\once \hideNotes
\grace $grace \glissando
#})
\score {
\relative c'' {
\repeat volta 3 { c4 d e f\glissando }
\alternative {
{ g2 d }
{ \repeatGliss f g2 e }
{ \repeatGliss f e2 d }
}
}
}
music = \relative c' {
\voiceOne
\repeat volta 2 {
g a b c\glissando
}
\alternative {
{ d1 }
{ \repeatGliss c \once \omit StringNumber e1\2 }
}
}
\score {
\new StaffGroup <<
\new Staff <<
\context Voice { \clef "G_8" \music }
>>
\new TabStaff <<
\context TabVoice { \clef "moderntab" \music }
>>
>>
}
|
Ajuste fino de las líneas de pedal
Se puede alterar el aspecto de las líneas de pedal de varias formas.
| | \paper { ragged-right = ##f }
\relative c'' {
c2\sostenutoOn c
c2\sostenutoOff c
\once \override Staff.PianoPedalBracket.shorten-pair = #'(-7 . -2)
c2\sostenutoOn c
c2\sostenutoOff c
\once \override Staff.PianoPedalBracket.edge-height = #'(0 . 3)
c2\sostenutoOn c
c2\sostenutoOff c
}
|
Flat Ties
The function takes the default Tie.stencil as an argument,
calculating the result relying on the extents of this default. Further
tweaking is possible by overriding Tie.details.height-limit or
with \shape. It’s also possible to change the custom-definition
on the fly.
| | %% http://lsr.di.unimi.it/LSR/Item?id=1031
#(define ((flared-tie coords) grob)
(define (pair-to-list pair)
(list (car pair) (cdr pair)))
(define (normalize-coords goods x y dir)
(map
(lambda (coord)
;(coord-scale coord (cons x (* y dir)))
(cons (* x (car coord)) (* y dir (cdr coord))))
goods))
(define (my-c-p-s points thick)
(make-connected-path-stencil
points
thick
1.0
1.0
#f
#f))
;; outer let to trigger suicide
(let ((sten (ly:tie::print grob)))
(if (grob::is-live? grob)
(let* ((layout (ly:grob-layout grob))
(line-thickness (ly:output-def-lookup layout 'line-thickness))
(thickness (ly:grob-property grob 'thickness 0.1))
(used-thick (* line-thickness thickness))
(dir (ly:grob-property grob 'direction))
(xex (ly:stencil-extent sten X))
(yex (ly:stencil-extent sten Y))
(lenx (interval-length xex))
(leny (interval-length yex))
(xtrans (car xex))
(ytrans (if (> dir 0)(car yex) (cdr yex)))
(uplist
(map pair-to-list
(normalize-coords coords lenx (* leny 2) dir))))
(ly:stencil-translate
(my-c-p-s uplist used-thick)
(cons xtrans ytrans)))
'())))
#(define flare-tie
(flared-tie '((0 . 0)(0.1 . 0.2) (0.9 . 0.2) (1.0 . 0.0))))
\layout {
\context {
\Voice
\override Tie.stencil = #flare-tie
}
}
\paper { ragged-right = ##f }
\relative c' {
a4~a
\override Tie.height-limit = 4
a'4~a
a'4~a
<a,, c e a c e a c e>~ q
\break
a'4~a
\once \override Tie.details.height-limit = 14
a4~a
\break
a4~a
\once \override Tie.details.height-limit = 0.5
a4~a
\break
a4~a
\shape #'((0 . 0) (0 . 0.4) (0 . 0.4) (0 . 0)) Tie
a4~a
\break
a4~a
\once \override Tie.stencil =
#(flared-tie '((0 . 0)(0.1 . 0.4) (0.9 . 0.4) (1.0 . 0.0)))
a4~a
a4~a
\once \override Tie.stencil =
#(flared-tie '((0 . 0)(0.06 . 0.1) (0.94 . 0.1) (1.0 . 0.0)))
a4~a
}
|
Force a cancellation natural before accidentals
The following example shows how to force a natural sign before an
accidental.
| | \relative c' {
\key es \major
bes c des
\tweak Accidental.restore-first ##t
eis
}
|
Forzar el desplazamiento horizontal de las notas
Cuando el motor de tipografiado no es capaz de todo, se puede usar la
sintaxis siguiente para sobreescribir las decisiones de tipografía.
Las unidades de medida que se usan aquí son espacios de pentagrama.
| | \relative c' <<
{
<d g>2 <d g>
}
\\
{
<b f'>2
\once \override NoteColumn.force-hshift = #1.7
<b f'>2
}
>>
|
Diagramas de posiciones de acorde, explicados y desarrollados
Eeste fragmento de código presenta muchas posibilidades para obtener
diagramas de posiciones de acorde y cómo trucarlos.
| | <<
\chords {
a2 a
\repeat unfold 3 {
c c c d d
}
}
\new Voice = "mel" {
\textLengthOn
% Set global properties of fret diagram
\override TextScript.size = #1.2
\override TextScript.fret-diagram-details.finger-code = #'below-string
\override TextScript.fret-diagram-details.dot-color = #'black
%% A chord for ukulele
a'2^\markup {
\override #'(fret-diagram-details . (
(string-count . 4)
(dot-color . white)
(finger-code . in-dot))) {
\fret-diagram "4-2-2;3-1-1;2-o;1-o;"
}
}
%% A chord for ukulele, with formatting defined in definition string
% 1.2 * size, 4 strings, 4 frets, fingerings below string
% dot radius .35 of fret spacing, dot position 0.55 of fret spacing
a'2^\markup {
\override #'(fret-diagram-details . (
(dot-color . white)
(open-string . "o"))) {
\fret-diagram "s:1.2;w:4;h:3;f:2;d:0.35;p:0.55;4-2-2;3-1-1;2-o;1-o;"
}
}
%% These chords will be in normal orientation
%% C major for guitar, barred on third fret
% verbose style
% roman fret label, finger labels below string, straight barre
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-lower)
(finger-code . below-string)
(barre-type . straight))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
}
%% C major for guitar, barred on third fret
%% Double barre used to test barre function
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . arabic)
(dot-label-font-mag . 0.9)
(finger-code . in-dot)
(fret-label-font-mag . 0.6)
(fret-label-vertical-offset . 0)
(label-dir . -1)
(mute-string . "M")
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 4 2 5)
(barre 5 1 3))
}
}
}
%% C major for guitar, with capo on third fret
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-upper)
(dot-label-font-mag . 0.9)
(finger-code . none)
(fret-label-vertical-offset . 0.5)
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(capo 3)
(open 5)
(place-fret 4 5 1)
(place-fret 3 5 2)
(place-fret 2 5 3)
(open 1))
}
}
}
%% simple D chord
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(string-thickness-factor . 0.3)
(dot-position . 0.5)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
%% simple D chord, large top fret thickness
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(top-fret-thickness . 7)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
% These chords will be in landscape orientation
\override TextScript.fret-diagram-details.orientation = #'landscape
%% C major for guitar, barred on third fret
% verbose style
% roman fret label, finger labels below string, straight barre
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-lower)
(finger-code . below-string)
(barre-type . straight))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
}
%% C major for guitar, barred on third fret
%% Double barre used to test barre function
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . arabic)
(dot-label-font-mag . 0.9)
(finger-code . in-dot)
(fret-label-font-mag . 0.6)
(fret-label-vertical-offset . 0)
(label-dir . -1)
(mute-string . "M")
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 4 2 5)
(barre 5 1 3))
}
}
}
%% C major for guitar, with capo on third fret
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-upper)
(dot-label-font-mag . 0.9)
(finger-code . none)
(fret-label-vertical-offset . 0.5)
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(capo 3)
(open 5)
(place-fret 4 5 1)
(place-fret 3 5 2)
(place-fret 2 5 3)
(open 1))
}
}
}
%% simple D chord
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
%% simple D chord, large top fret thickness
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(top-fret-thickness . 7)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
% These chords will be in opposing-landscape orientation
\override TextScript.fret-diagram-details.orientation = #'opposing-landscape
%% C major for guitar, barred on third fret
% verbose style
% roman fret label, finger labels below string, straight barre
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-lower)
(finger-code . below-string)
(barre-type . straight))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))
}
}
}
%% C major for guitar, barred on third fret
%% Double barre used to test barre function
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . arabic)
(dot-label-font-mag . 0.9)
(finger-code . in-dot)
(fret-label-font-mag . 0.6)
(fret-label-vertical-offset . 0)
(label-dir . -1)
(mute-string . "M")
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
(place-fret 4 5 2)
(place-fret 3 5 3)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 4 2 5)
(barre 5 1 3))
}
}
}
%% C major for guitar, with capo on third fret
% verbose style
c'2^\markup {
% 110% of default size
\override #'(size . 1.1) {
\override #'(fret-diagram-details . (
(number-type . roman-upper)
(dot-label-font-mag . 0.9)
(finger-code . none)
(fret-label-vertical-offset . 0.5)
(xo-font-magnification . 0.4)
(xo-padding . 0.3))) {
\fret-diagram-verbose #'((mute 6)
(capo 3)
(open 5)
(place-fret 4 5 1)
(place-fret 3 5 2)
(place-fret 2 5 3)
(open 1))
}
}
}
%% simple D chord
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
%% simple D chord, large top fret thickness
d'2^\markup {
\override #'(fret-diagram-details . (
(finger-code . below-string)
(dot-radius . 0.35)
(dot-position . 0.5)
(top-fret-thickness . 7)
(fret-count . 3))) {
\fret-diagram-terse "x;x;o;2-1;3-2;2-3;"
}
}
}
>>
|
Generar corchetes personalizados
La propiedad stencil del grob Flag (el objeto gráfico corchete)
se puede fijar a una función de Scheme personalizada que genere el
glifo del corchete.
| | #(define-public (weight-flag grob)
(let* ((stem-grob (ly:grob-parent grob X))
(log (- (ly:grob-property stem-grob 'duration-log) 2))
(is-up? (eqv? (ly:grob-property stem-grob 'direction) UP))
(yext (if is-up? (cons (* log -0.8) 0) (cons 0 (* log 0.8))))
(flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext))
(stroke-style (ly:grob-property grob 'stroke-style))
(stroke-stencil (if (equal? stroke-style "grace")
(make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4)
empty-stencil)))
(ly:stencil-add flag-stencil stroke-stencil)))
% Create a flag stencil by looking up the glyph from the font
#(define (inverted-flag grob)
(let* ((stem-grob (ly:grob-parent grob X))
(dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u"))
(flag (retrieve-glyph-flag "" dir "" grob))
(line-thickness (ly:staff-symbol-line-thickness grob))
(stem-thickness (ly:grob-property stem-grob 'thickness))
(stem-width (* line-thickness stem-thickness))
(stroke-style (ly:grob-property grob 'stroke-style))
(stencil (if (null? stroke-style)
flag
(add-stroke-glyph flag stem-grob dir stroke-style "")))
(rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0)))
(ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0))))
snippetexamplenotes =
{
\autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64
}
{
\override Score.RehearsalMark.self-alignment-X = #LEFT
\time 1/4
\mark "Normal flags"
\snippetexamplenotes
\mark "Custom flag: inverted"
\override Flag.stencil = #inverted-flag
\snippetexamplenotes
\mark "Custom flag: weight"
\override Flag.stencil = #weight-flag
\snippetexamplenotes
\mark "Revert to normal"
\revert Flag.stencil
\snippetexamplenotes
}
|
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,
}
|
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\!
}
|
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 }
|
Cómo cambiar la posicion de un diagrama de posiciones
Si queremos mover un diagrama de posiciones de acorde, por ejemplo,
para evitar la colisión, o situarlo entre dos notas, tenemos varias
posibilidades:
1) modificar los valores de relleno #’padding o del desplazamiento
adicional #’extra-offset (como se muestra en el primer ejemplo)
2) podemos añadir una voz invisible y adjuntar los diagramas de
posiciones a las notas invisibles de esa voz (como se ve en el segundo
ejemplo).
Si tenemos que mover el diagrama según una posición rítmica dentro
del compás (en el ejemplo, la tercera parte del compás) es mejor el
segundo ejemplo, porque el diagrama se alinea con el tercer pulso por
sí solo.
| | harmonies = \chordmode
{
a8:13
% THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME
\once \override ChordNames.ChordName.extra-offset = #'(10 . 0)
b8:13 s2.
% THIS LINE IS THE SECOND METHOD
s4 s4 b4:13
}
\score
{
<<
\new ChordNames \harmonies
\new Staff
{a8^\markup { \fret-diagram "6-x;5-0;4-2;3-0;2-0;1-2;" }
% THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM
\once \override TextScript.extra-offset = #'(10 . 0)
b4.~^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break
% HERE IS THE SECOND METHOD
<<
{ a8 b4.~ b4. a8}
{ s4 s4 s4^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" }
}
>>
}
>>
}
|
Cómo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 1)
Este método imprime dos letras de ensayo, una encima de la otra,
desplaza la marca inferior a una posición debajo del pentagrama y
después añade un relleno sobre ella de forma que la marca superior se
sitúe encima del pentagrama.
Ajustando los valores de extra-offset y de baseline-skip podemos
aumentar o disminuir el espacio total entre la marca de ensayo y el
pentagrama.
Debido a que puede hacrse que prácticamente cualquier tipo de glifo o
cadena de caracteres se comporte como una marca de ensayo, es posible
centrarlas encima y debajo de una barra de compás.
Añadiendo la propiedad ’break visibility’ (visibilidad en caso de
salto) adecuada como se muestra en el ejemplo número 1, podemos
también posicionar las dos marcas al final de una línea.
Nota: el método 1 es menos complejo que el método 2 pero realmente no
permite un ajuste fino de la colocación de una de las marcas de ensayo
sin afectar a la otra. También puede dar algunos problemas con el
espaciado vertical, porque el uso de extra-offset no cambia la
caja circundante de la letra de ensayo desde su valor original.
| | \relative c'{
c d e f |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \circle 1 \box A }
g f e d |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\mark \markup \center-column { \flat { \bold \small \italic Fine. } }
g f e d |
\once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
\once \override Score.RehearsalMark.baseline-skip = #9
\override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
\mark \markup \center-column { \fermata \box z }
}
|
Cömo imprimir dos letras de ensayo encima y debajo de la misma línea divisoria (método 2)
Este método imprime dos ’letras de ensayo’: una sobre el pentagrama y
otra debajo, creando dos voces, añadiendo el grabador Rehearsal Mark a
cada unad e las voces (sin esto no se imprime ninguna marca de ensayo)
y después poniendo cada marca de ensayo en las posiciones UP y DOWN en
cada voz respectivamente.
Este método (a diferencia del método 1) es más complejo, pero permite
más flexibilidad y sería necesario para trucar cada letra de ensayo
independientemente de las demás.
| | \score {
\relative c'
<<
\new Staff {
<<
\new Voice \with {
\consists Mark_engraver
\consists "Staff_collecting_engraver"
}
{ c4 d e f
\mark \markup { \box A }
c4 d e f
}
\new Voice \with {
\consists Mark_engraver
\consists "Staff_collecting_engraver"
\override RehearsalMark.direction = #DOWN
}
{ s4 s s s
\mark \markup { \circle 1 }
s4 s s s
}
>>
}
>>
\layout {
\context {
\Score
\remove "Mark_engraver"
\remove "Staff_collecting_engraver"
}
}
}
|
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
}
|
Mantener el tamaño del símbolo en los cambios de clave
Cuando se produce un cambio de clave, el símbolo de clave se imprime a
un tamaño menor que la clave inicial. Esto se puede ajustar con
full-size-change.
| | \relative c' {
\clef "treble"
c1
\clef "bass"
c1
\clef "treble"
c1
\override Staff.Clef.full-size-change = ##t
\clef "bass"
c1
\clef "treble"
c1
\revert Staff.Clef.full-size-change
\clef "bass"
c1
\clef "treble"
c1
}
|
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
}
|
Hacer invisible un objeto con la propiedad ’transparent
Si se ajusta la propiedad transparent de un objeto, se imprime
en “tinta invisible”: el objeto no se imprime pero se retienen
todos sus otros comportamientos. El objeto aún ocupa espacio,
participa en las colisiones y se le pueden unir ligaduras de
expresión, ligaduras de unión y barras de corchea.
Este fragmento de código muestra cómo conectar diferentes voces usando
ligaduras de unión. Normalmente las ligaduras de unión solamente
conectan dos notas que estén en la misma voz. Mediante la
introducción de una ligadura en una voz distinta y pintando de color
blanco la primera plica hacia arriba dentro de esa voz, la ligadura
parece cruzar de una voz a otra.
| | \relative {
\time 2/4
<<
{
\once \hide Stem
\once \override Stem.length = #8
b'8 ~ 8\noBeam
\once \hide Stem
\once \override Stem.length = #8
g8 ~ 8\noBeam
}
\\
{
b8 g g e
}
>>
}
|
Hacer que los glissandos se puedan dividir en el salto de línea
Si se ajusta la propiedad breakable al valor #t en
combinación con after-line-breaking, podemos hacer que un
glissando se divida en el salto de línea:
| | glissandoSkipOn = {
\override NoteColumn.glissando-skip = ##t
\hide NoteHead
\override NoteHead.no-ledgers = ##t
}
\relative c'' {
\override Glissando.breakable = ##t
\override Glissando.after-line-breaking = ##t
f1\glissando |
\break
a4 r2. |
f1\glissando
\once \glissandoSkipOn
\break
a2 a4 r4 |
}
|
Controlar manualmente las posiciones de las barras
Se pueden controlar manualmente las posiciones de las barras de
corchea, sobreescribiendo el valor del parámetro positions del
objeto gráfico Beam.
| | \relative c' {
\time 2/4
% from upper staff-line (position 2) to center (position 0)
\override Beam.positions = #'(2 . 0)
c8 c
% from center to one above center (position 1)
\override Beam.positions = #'(0 . 1)
c8 c
}
|
Disposición Mensurstriche (líneas divisorias entre pentagramas)
La disposición «mensurstriche» en que las líneas divisorias no
están dibujadas sobre los pentagramas, sino entre ellos, se puede
conseguir con un StaffGroup en vez de un ChoirStaff.
La línea divisoria sobre los pentagramas se borra usando \hide.
| | global = {
\hide Staff.BarLine
s1 s
% the final bar line is not interrupted
\undo \hide Staff.BarLine
\bar "|."
}
\new StaffGroup \relative c'' {
<<
\new Staff { << \global { c1 c } >> }
\new Staff { << \global { c c } >> }
>>
}
|
Modifying the Ottava spanner slope
It is possible to change the slope of the Ottava spanner.
| | \relative c'' {
\override Staff.OttavaBracket.stencil = #ly:line-spanner::print
\override Staff.OttavaBracket.bound-details =
#`((left . ((Y . 0) ; Change the integer here
(attach-dir . ,LEFT)
(padding . 0)
(stencil-align-dir-y . ,CENTER)))
(right . ((Y . 5) ; Change the integer here
(padding . 0)
(attach-dir . ,RIGHT)
(text . ,(make-draw-dashed-line-markup (cons 0 -1.2))))))
\override Staff.OttavaBracket.left-bound-info =
#ly:line-spanner::calc-left-bound-info-and-text
\override Staff.OttavaBracket.right-bound-info =
#ly:line-spanner::calc-right-bound-info
\ottava #1
c1
c'''1
}
|
Desplazar las notas con puntillo en polifonía
Cuando se puede una nota en la voz superior para evitar la colisión
con una nota de otra voz, el comportamiento predeterminado es
desplazar la nota superior a la derecha. Se puede cambiar usando la
propiedad prefer-dotted-right de NoteCollision.
| | \new Staff \relative c' <<
{
f2. f4
\override Staff.NoteCollision.prefer-dotted-right = ##f
f2. f4
\override Staff.NoteCollision.prefer-dotted-right = ##t
f2. f4
}
\\
{ e4 e e e e e e e e e e e }
>>
|
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)
}
|
Anidado de grupos de pentagramas
Se puede utilizar la propiedad
systemStartDelimiterHierarchy para crear grupos de
pentagramas anidados de forma más compleja. La instrucción
\set StaffGroup.systemStartDelimiterHierarchy toma una
lista alfabética del número de pentagramas producidos. Se puede
proporcionar antes de cada pentagrama un delimitador de comienzo
de sistema. Se debe encerrar entre corchetes y admite tantos
pentagramas como encierren las llaves. Se pueden omitir los
elementos de la lista, pero el primer corchete siempre abarca
todos los pentagramas. Las posibilidades son
SystemStartBar, SystemStartBracket,
SystemStartBrace y SystemStartSquare.
| | \new StaffGroup
\relative c'' <<
\override StaffGroup.SystemStartSquare.collapse-height = #4
\set StaffGroup.systemStartDelimiterHierarchy
= #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a
(SystemStartSquare b) ) c ) d)
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
\new Staff { c1 }
>>
|
Modificación de articulaciones de diversos tipos
A veces queremos modificar un solo timpo de articulación. Aunque
siempre es posible usar la instrucción \tweak, podría hacerse
tedioso hacerlo para todos y cada uno de los símbolos de una partitura
completa. El ejemplo muestra cómo trucar articulaciones con una lista
de ajustes personalizados. Un caso sería la creación de una hoja de
estilos.
Con 2.16.2 it es posible introducir la función propuesta,
\customScripts, en un bloque \layout.
| | % Code by David Nalesnik and Thomas Morley
#(define (custom-script-tweaks ls)
(lambda (grob)
(let* ((type (ly:prob-property
(ly:grob-property grob 'cause)
'articulation-type))
(tweaks (assoc-ref ls type)))
(if tweaks
(for-each
(lambda (x) (ly:grob-set-property! grob (car x) (cdr x)))
tweaks)))))
customScripts =
#(define-music-function (settings)(list?)
#{
\override Script.before-line-breaking =
#(custom-script-tweaks settings)
#})
revertCustomScripts = { \revert Script.before-line-breaking }
%%%%%%%%%%%%%
% Example:
%%%%%%%%%%%%%
% Predefine a list of desired tweaks.
#(define my-settings-1
'(
("staccato" . ((color . (1 0 0))(padding . 0.5)))
("accent" . ((font-size . 0)(color . (1 0 0))))
("tenuto" . ((rotation . (45 0 0)) (padding . 2)(font-size . 10)))
("staccatissimo" . ((padding . 1) (color . (1 0 0))))
("segno" . ((font-size . 0)(color . (1 0 0))))
))
#(define my-settings-2
'(
("staccato" . ((color . (0 1 0))))
("accent" . ((font-size . 4)(color . (0 1 0))(padding . 1.5)))
("tenuto" . ((font-size . 10)))
("staccatissimo" . ((padding . 2) (color . (0 1 0))))
("coda" . ((color . (0 1 0)) (padding . 1)))
))
one =
\relative c'' {
f1--
\customScripts #my-settings-1
f-. f-! f-> f-- f-!\segno
\revertCustomScripts
f-> f-.
}
two =
\relative c' {
f1--
\customScripts #my-settings-2
f-. f-! f-> f---> f-!
f-> f-.\coda
}
\new Staff <<
\new Voice { \voiceOne \one }
\new Voice { \voiceTwo \two }
>>
|
Visibilidad del contador de repeticiones de tipo porcentaje
Se pueden mostrar los contadores de las repeticiones del tipo
porcentaje a intervalos regulares mediante el establecimiento de
la propiedad de contexto repeatCountVisibility.
| | \relative c'' {
\set countPercentRepeats = ##t
\set repeatCountVisibility = #(every-nth-repeat-count-visible 5)
\repeat percent 10 { c1 } \break
\set repeatCountVisibility = #(every-nth-repeat-count-visible 2)
\repeat percent 6 { c1 d1 }
}
|
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
}
|
Posicionar los silencios multicompás
A diferencia de los silencios normales, no existe una instrucción
predefinida para modificar la posición predeterminada de un
símbolo de silencio multicompás sobre el pentagrama, adjuntándolo
a una nota, independientemente de cuál sea su forma. Sin embargo,
en la música polifónica los silencios multicompás de las voces de
numeración par e impar están separados verticalmente. La
colocación de los silencios multicompás se puede controlar como se
ve a continuación:
| | \relative c'' {
% Multi-measure rests by default are set under the fourth line
R1
% They can be moved using an override
\override MultiMeasureRest.staff-position = #-2
R1
\override MultiMeasureRest.staff-position = #0
R1
\override MultiMeasureRest.staff-position = #2
R1
\override MultiMeasureRest.staff-position = #3
R1
\override MultiMeasureRest.staff-position = #6
R1
\revert MultiMeasureRest.staff-position
\break
% In two Voices, odd-numbered voices are under the top line
<< { R1 } \\ { a1 } >>
% Even-numbered voices are under the bottom line
<< { a1 } \\ { R1 } >>
% Multi-measure rests in both voices remain separate
<< { R1 } \\ { R1 } >>
% Separating multi-measure rests in more than two voices
% requires an override
<< { R1 } \\ { R1 } \\
\once \override MultiMeasureRest.staff-position = #0
{ R1 }
>>
% Using compressed bars in multiple voices requires another override
% in all voices to avoid multiple instances being printed
\compressMMRests
<<
\revert MultiMeasureRest.direction
{ R1*3 }
\\
\revert MultiMeasureRest.direction
{ R1*3 }
>>
}
|
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
}
|
Imprimir números de compás dentro de rectángulos o circunferencias
Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
| | \relative c' {
% Prevent bar numbers at the end of a line and permit them elsewhere
\override Score.BarNumber.break-visibility = #end-of-line-invisible
\set Score.barNumberVisibility = #(every-nth-bar-number-visible 4)
% Increase the size of the bar number by 2
\override Score.BarNumber.font-size = #2
% Draw a box round the following bar number(s)
\override Score.BarNumber.stencil
= #(make-stencil-boxer 0.1 0.25 ly:text-interface::print)
\repeat unfold 5 { c1 }
% Draw a circle round the following bar number(s)
\override Score.BarNumber.stencil
= #(make-stencil-circler 0.1 0.25 ly:text-interface::print)
\repeat unfold 4 { c1 } \bar "|."
}
|
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
}
|
Impresión de los nombres de las notas con o sin indicación de la octava
Se puede usar el contexto NoteNames para imprimir el valor
textual de las notas. La propiedad printOctaveNames activa o
desactiva la representación de la octava de las notas.
| | scale = \relative c' {
a4 b c d
e4 f g a
}
\new Staff {
<<
\scale
\context NoteNames {
\set printOctaveNames = ##f
\scale
}
>>
R1
<<
\scale
\context NoteNames {
\set printOctaveNames = ##t
\scale
}
>>
}
|
Espaciado de las notas estrictamente proporcional
Si está establecido strict-note-spacing, el espaciado de las
notas no queda influido por los compases o claves que pueda haber
dentro de un sistema. En lugar de ello, se colocan justo antes de la
nota que tiene lugar en el mismo momento temporal. Esto puede producir
colisiones.
| | \relative c'' <<
\override Score.SpacingSpanner.strict-note-spacing = ##t
\set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\new Staff {
c8[ c \clef alto c c \grace { d16 } c8 c] c4
c2 \grace { c16[ c16] } c2
}
\new Staff {
c2 \tuplet 3/2 { c8 \clef bass cis,, c } c4
c1
}
>>
|
Removing brace on first line of piano score
This snippet removes the first brace from a PianoStaff or a
GrandStaff. It may be useful when cutting and pasting the
engraved image into existing music.
It uses \alterBroken.
| | someMusic = {
\once \override Staff.Clef.stencil = ##f
\once \override Staff.TimeSignature.stencil = ##f
\repeat unfold 3 c1 \break
\repeat unfold 5 c1 \break
\repeat unfold 5 c1
}
\score {
\new PianoStaff
<<
\new Staff = "right" \relative c'' \someMusic
\new Staff = "left" \relative c' { \clef F \someMusic }
>>
\layout {
indent=75
\context {
\PianoStaff
\alterBroken transparent #'(#t) SystemStartBrace
}
}
}
|
Quitar las barras de compás entre los pentagramas de un StaffGroup PianoStaff o GrandStaff
De forma predeterminada, las líneas divisorias en los grupos
StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas.
Se puede alterar este comportamiento pentagrama a pentagrama.
| | \relative c' {
\new StaffGroup <<
\new Staff {
e1 | e
\once \override Staff.BarLine.allow-span-bar = ##f
e1 | e | e
}
\new Staff {
c1 | c | c
\once \override Staff.BarLine.allow-span-bar = ##f
c1 | c
}
\new Staff {
a1 | a | a | a | a
}
>>
}
|
Quitar la primera línea vacía
El primer pentagrama vacío también se puede suprimir de la
partitura estableciendo la propiedad remove-first de
VerticalAxisGroup. Esto se puede hacer globalmente dentro
del bloque \layout, o localmente dentro del pentagrama
concreto que se quiere suprimir. En este último caso, tenemos que
especificar el contexto (Staff se aplica sólo al pentagrama
actual) delante de la propiedad.
El pentagrama inferior del segundo grupo no se elimina, porque el
ajuste sólo se aplica al pentagrama concreto dentro del que se
escribe.
| | \layout {
\context {
\Staff \RemoveEmptyStaves
% To use the setting globally, uncomment the following line:
% \override VerticalAxisGroup.remove-first = ##t
}
}
\new StaffGroup <<
\new Staff \relative c' {
e4 f g a \break
c1
}
\new Staff {
% To use the setting globally, comment this line,
% uncomment the line in the \layout block above
\override Staff.VerticalAxisGroup.remove-first = ##t
R1 \break
R
}
>>
\new StaffGroup <<
\new Staff \relative c' {
e4 f g a \break
c1
}
\new Staff {
R1 \break
R
}
>>
|
Estilos de silencios
Los silencios se pueden imprimir en distintos estilos.
| | \new Staff \relative c {
\omit Score.TimeSignature
\cadenzaOn
\override Staff.Rest.style = #'mensural
r\maxima^\markup \typewriter { mensural }
r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
\bar ""
\break
\override Staff.Rest.style = #'neomensural
r\maxima^\markup \typewriter { neomensural }
r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s128
\bar ""
\break
\override Staff.Rest.style = #'classical
r\maxima^\markup \typewriter { classical }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
\bar ""
\break
\override Staff.Rest.style = #'z
r\maxima^\markup \typewriter { z-style }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
\bar ""
\break
\override Staff.Rest.style = #'default
r\maxima^\markup \typewriter { default }
r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 s128
}
|
Barras rítmicas
En las hojas guía de acordes o lead-sheets “sencillas”, a veces no
se imprime realmente ninguna nota, y en su lugar se hace una notación
que tiene solamente “patrones rítmicos” y acordes encima de los
compases, dando la estructura de la canción song. Tal funcionalidad es
útil, por ejemplo, al crear o transcribir la estructura de una canción
y también si se quieren compartir las hojas guía con guitarristas o
músicos de jazz. La forma estándar en que está contemplada esta
funcionalidad empleando \repeat percent no es adecuada aquí
porque el primer compás tendría que ser una nota o silencio normales.
Este ejemplo muestra dos soluciones al problema, redefiniendo los
silencios normales para que se impriman como barras inclinadas (si la
duración de cada pulso no es una negra, sustituiremos el r4 que
aparece en las definiciones con un silencio de la duración adecuada).
| | % Macro to print single slash
rs = {
\once \override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
\once \override Rest.thickness = #0.48
\once \override Rest.slope = #1.7
r4
}
% Function to print a specified number of slashes
comp = #(define-music-function (count) (integer?)
#{
\override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
\override Rest.thickness = #0.48
\override Rest.slope = #1.7
\repeat unfold $count { r4 }
\revert Rest.stencil
#}
)
\score {
\relative c' {
c4 d e f |
\rs \rs \rs \rs |
\comp #4 |
}
}
|
Separar las cancelaciones de tonalidad de los cambios de armadura
De forma predeterminada, las alteraciones accidentales que se usan
para las cancelaciones en las armaduras se colocan adyacentes a las
que se usan para los cambios de tonalidad. Este comportamiento se
puede cambiar sobreescribiendo la propiedad 'break-align-orders
del objeto gráfico BreakAlignment.
El valor de 'break-align-orders es un vector de longitud 3, con
listas entrecomilladas cuyos elementos con objets que se pueden
dividir en un salto. Este ejemplo solo modifica la segunda lista,
moviendo key-cancellation antes de staff-bar;
modificando la segunda lista, el comportamiento de alineación de los
saltos solo cambia en la mitad de un sistema, no al principio ni al
final.
| | \new Staff {
\override Score.BreakAlignment.break-align-orders =
##((left-edge ambitus breathing-sign clef staff-bar
key-cancellation key-signature time-signature custos)
(left-edge ambitus breathing-sign clef key-cancellation
staff-bar key-signature time-signature custos)
(left-edge ambitus breathing-sign clef key-cancellation
key-signature staff-bar time-signature custos))
\key des \major
c'1
\bar "||"
\key bes \major
c'1
}
|
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\!
}
|
Fijar un separador entre los sistemas
Se pueden insertar separadores sistema entre los sistemas de una
página. Se puede usar cualquier elemento de marcado, pero
\slashSeparator está disponible como una elección
predeterminada adecuada.
| | \paper {
system-separator-markup = \slashSeparator
line-width = 120
}
notes = \relative c' {
c1 | c \break
c1 | c \break
c1 | c
}
\book {
\score {
\new GrandStaff <<
\new Staff \notes
\new Staff \notes
>>
}
}
|
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>
| | % The same as \flageolet, just a little smaller
smallFlageolet = \tweak font-size #-2 \flageolet
\relative c' {
s4^"Wrong:"
c4_\fermata^\fermata % The second fermata is ignored!
<e d'>4^\smallFlageolet_\smallFlageolet
s4^"Works if written inside a chord:"
<e_\smallFlageolet d'^\smallFlageolet>4
<e_\flageolet d'^\flageolet>4
<e_\smallFlageolet^\smallFlageolet>4
<e_\fermata^\fermata>4
}
|
Líneas de extensión para números de cuerda
Hacemos una línea extensora para las indicaciones de número de cuerda,
motrando que una serie de notas se han de tocar sobre la misma cuerda.
| | stringNumberSpanner =
#(define-music-function (StringNumber) (string?)
#{
\override TextSpanner.style = #'solid
\override TextSpanner.font-size = #-5
\override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
\override TextSpanner.bound-details.left.text =
\markup { \circle \number $StringNumber }
#})
\relative c {
\clef "treble_8"
\stringNumberSpanner "5"
\textSpannerDown
a8\startTextSpan
b c d e f\stopTextSpan
\stringNumberSpanner "4"
g\startTextSpan a
bes4 a g2\stopTextSpan
}
|
Evitar las advertencias sobre columnas de notas que chocan
Si se colocan sobre la misma posición notas de dos voces distintas con
las plicas en la misma dirección, y ninguna de las voces tiene un
desplazamiento o ambas tienen el mismo desplazamiento, aparece el
mensaje de error ‘advertencia: demasiadas columnas de notas en
colisión; se ignora’ aparece al compilar el archivo de LilyPond. Este
mensaje se puede evitar fijando la propiedad 'ignore-collision
del objero NoteColumn al valor #t. Observe que esto no
elimina solamente las advertencias, sino que hace que LilyPond deje de
intentar resolver las colisiones en absoluto, por lo que pueden
obtenerse resultados distintos de los esperados si no se usa con
prudencia.
| | ignore = \override NoteColumn.ignore-collision = ##t
\relative c' {
\new Staff <<
\new Voice { \ignore \stemDown f2 g }
\new Voice { c2 \stemDown c, }
>>
}
|
Indicación de compás entre paréntesis: método número 3
Otra forma de poner la indicación de compás entre paréntesis.
| | \relative c'' {
\override Staff.TimeSignature.stencil = #(lambda (grob)
(parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1 ))
\time 2/4
a4 b8 c
}
|
Compás entre paréntesis
La indicación de compás puede encerrarse entre paréntesis.
| | \relative c'' {
\override Staff.TimeSignature.stencil = #(lambda (grob)
(bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
\time 2/4
a4 b8 c
}
|
Indicación de compás imprimiendo sólo el numerador (en lugar de la fracción)
A veces, la indicación de compás no debe imprimir la fracción completa
(p.ej. 7/4), sino sólo el numerador (7 en este caso). Esto se puede
hacer fácilmente utilizando \override Staff.TimeSignature.style
= #'single-digit para cambiar el estilo permanentemente. Usando
\revert Staff.TimeSignature.style, se puede revertir el
cambio. Para aplicar el estilo de un dígito único a una sola
indicación de compás, utilice la instrucción \override y
anteponga la instrucción \once.
| | \relative c'' {
\time 3/4
c4 c c
% Change the style permanently
\override Staff.TimeSignature.style = #'single-digit
\time 2/4
c4 c
\time 3/4
c4 c c
% Revert to default style:
\revert Staff.TimeSignature.style
\time 2/4
c4 c
% single-digit style only for the next time signature
\once \override Staff.TimeSignature.style = #'single-digit
\time 5/4
c4 c c c c
\time 2/4
c4 c
}
|
Tuplet bracket and change staff
This snippet shows how to set a tuplet starting in a lower staff and
finishing in the upper one.
| | aigues = \relative c' {
\time 6/8
s4.
\stemDown
c16[ bes' e]
\stemUp
g c e
\stemDown
g8
}
basses = \relative c {
\time 3/4
\clef F
\tweak positions #'(4.5 . 9.5)
\tweak edge-height #'(1 . -1)
\tuplet 7/6 {
c16[ bes' e]
\change Staff = md
\stemUp
g[ c e g]
}
s4.s8
}
\new PianoStaff
\with { \omit TimeSignature }
<<
\new Staff = md \aigues
\new Staff = mg \basses
>>
|
Trucaje de las propiedades de clave
La modificación del glifo de la clave, su posición o su octavación, no
cambian ’per se’ la posición de las siguientes notas del pentagrama.
Para conseguir armaduras de tonalidad sobre las líneas del pentagrama
adecuadas, también debe especificarse middleCClefPosition, con
valores positivos o negativos que mueven el Do central hacia
arriba o hacia abajo, respectivamente, en relación con la línea
central del pentagrama (usualmente la tercera).
Por ejemplo, la instrucción \clef "treble_8" equivale a un
ajuste de clefGlyph, clefPosition (que controla la
posición vertical de la clave sobre el pentagrama),
middleCPosition y clefTransposition. Se imprime una
clave cada vez que se modifica cualquiera de las propiedades excepto
middleCPosition.
Los siguientes ejemplos muestran las posibilidades cuando se ajustan
estas propiedades manualmente. En la primera línea, los cambios
manuales preservan el posicionamiento relativo estándar de las claves
y las notas, pero no lo hacen en la segunda línea.
| | {
% The default treble clef
\key f \major
c'1
% The standard bass clef
\set Staff.clefGlyph = #"clefs.F"
\set Staff.clefPosition = #2
\set Staff.middleCPosition = #6
\set Staff.middleCClefPosition = #6
\key g \major
c'1
% The baritone clef
\set Staff.clefGlyph = #"clefs.C"
\set Staff.clefPosition = #4
\set Staff.middleCPosition = #4
\set Staff.middleCClefPosition = #4
\key f \major
c'1
% The standard choral tenor clef
\set Staff.clefGlyph = #"clefs.G"
\set Staff.clefPosition = #-2
\set Staff.clefTransposition = #-7
\set Staff.middleCPosition = #1
\set Staff.middleCClefPosition = #1
\key f \major
c'1
% A non-standard clef
\set Staff.clefPosition = #0
\set Staff.clefTransposition = #0
\set Staff.middleCPosition = #-4
\set Staff.middleCClefPosition = #-4
\key g \major
c'1 \break
% The following clef changes do not preserve
% the normal relationship between notes, key signatures
% and clefs:
\set Staff.clefGlyph = #"clefs.F"
\set Staff.clefPosition = #2
c'1
\set Staff.clefGlyph = #"clefs.G"
c'1
\set Staff.clefGlyph = #"clefs.C"
c'1
\set Staff.clefTransposition = #7
c'1
\set Staff.clefTransposition = #0
\set Staff.clefPosition = #0
c'1
% Return to the normal clef:
\set Staff.middleCPosition = #0
c'1
}
|
Trucar la disposición de las notas de adorno dentro de la música
La disposición de las expresiones de adorno se puede cambiar a lo
largo de toda la música usando las funciones
add-grace-property y remove-grace-property. El
ejemplo siguiente borra la definición de la dirección de la plica
para esta nota de adorno, de manera que las plicas no siemmpre
apuntan hacia arriba, y cambia la forma predeterminada de las
cabezas a aspas.
| | \relative c'' {
\new Staff {
$(remove-grace-property 'Voice 'Stem 'direction)
$(add-grace-property 'Voice 'NoteHead 'style 'cross)
\new Voice {
\acciaccatura { f16 } g4
\grace { d16 e } f4
\appoggiatura { f,32 g a } e2
}
}
}
|
Uso de estilos alternativos para los corchetes
Se pueden imprimir estilos alternativos del corchete o gancho de las
corcheas y figuras menores, mediante la sobreescritura de la propiedad
stencil del objeto Flag. Son valores válidos
modern-straight-flag y old-straight-flag y
flat-flag.
| | testnotes = {
\autoBeamOff
c8 d16 c32 d64 \acciaccatura { c8 } d64 r4
}
\score {
\relative c' {
\time 2/4
\testnotes
\override Flag.stencil = #modern-straight-flag
\testnotes
\override Flag.stencil = #old-straight-flag
\testnotes
\override Flag.stencil = #flat-flag
\testnotes
\revert Flag.stencil
\testnotes
}
\layout {
indent = 0
\context {
\Score
\override NonMusicalPaperColumn.line-break-permission = ##f
}
}
}
|
Utilizar ly:grob-object para acceder a los grobs con \tweak
Se puede acceder "lateralmente" a algunos grobs desde dentro de la
función de callback de otro grob. Éstos se encuentran relacionados
normalmente como "layout objects" (objetos de presentación) en la
sección "Internal properties" (propiedades internas) de un
interface de grob. Se usa la función ly:grob-object para
acceder a estos grobs.
Se presentan más abajo como ejemplo algunas formas de addecer a grobs
desde dentro de una función de callback de NoteHead, pero la técnica
no se limita a las cabezas de nota. Sin embargo, la función de
callback de NoteHead es especialmente importante, porque es la función
de callback implícita que utiliza la instrucción \tweak.
La función de ejemplo que se define abajo ("display-grobs") no es
probablemente tan útil, pero muestra que se está accediendo
efectivamente a los grobs.
Salida de ejemplo de la consola:
--------------------
#-Grob Accidental -
#-Grob Arpeggio -
#-Grob Stem -
| | #(define (notehead-get-accidental notehead)
;; notehead is grob
(ly:grob-object notehead 'accidental-grob))
#(define (notehead-get-arpeggio notehead)
;; notehead is grob
(let ((notecolumn (notehead-get-notecolumn notehead)))
(ly:grob-object notecolumn 'arpeggio)))
#(define (notehead-get-notecolumn notehead)
;; notehead is grob
(ly:grob-parent notehead X))
#(define (notehead-get-stem notehead)
;; notehead is grob
(let ((notecolumn (notehead-get-notecolumn notehead)))
(ly:grob-object notecolumn 'stem)))
#(define (display-grobs notehead)
;; notehead is grob
(let ((accidental (notehead-get-accidental notehead))
(arpeggio (notehead-get-arpeggio notehead))
(stem (notehead-get-stem notehead)))
(format (current-error-port) "~2&~a\n" (make-string 20 #\-))
(for-each
(lambda (x) (format (current-error-port) "~a\n" x))
(list accidental arpeggio stem))))
\relative c' {
%% display grobs for each note head:
%\override NoteHead.before-line-breaking = #display-grobs
<c
%% or just for one:
\tweak before-line-breaking #display-grobs
es
g>1\arpeggio
}
|
Uso del lenguaje PostScript para generar cabezas de nota de formas especiales
Cuando la cabeza de una nota con una forma especial no se puede
generar fácilmente mediante elementos de marcado gráfico, puede
emplearse código de PostScript para generar la forma. Este ejemplo
muestra cómo se genera una cabeza en forma de paralelogramo.
| | parallelogram =
#(ly:make-stencil (list 'embedded-ps
"gsave
currentpoint translate
newpath
0 0.25 moveto
1.3125 0.75 lineto
1.3125 -0.25 lineto
0 -0.75 lineto
closepath
fill
grestore" )
(cons 0 1.3125)
(cons -.75 .75))
myNoteHeads = \override NoteHead.stencil = \parallelogram
normalNoteHeads = \revert NoteHead.stencil
\relative c'' {
\myNoteHeads
g4 d'
\normalNoteHeads
<f, \tweak stencil \parallelogram b e>4 d
}
|
Uso de la instrucción \tweak para retocar objetos gráficos individuales
Con la instrucción de trucar \tweak todos los objetos gráficos
se pueden retocar directamente. Aquí presentamos ejemplos de los
tipos de retoque disponibles.
| | \relative c' {
\time 2/4
\set fingeringOrientations = #'(right)
<
\tweak font-size #3 c
\tweak color #red d-\tweak font-size #8 -4
\tweak style #'cross g
\tweak duration-log #2 a
>2
}
|
Indicaciones dinámicas y textuales alineadas verticalmente
Todos los objetos DynamicLineSpanner (reguladores e
indicaciones dinámicas de texto) se sitúan con su línea de referencia a
una distancia de al menos 'staff-padding del pentagrama, a no
ser que otros elementos de notación los fuerce a colocarse a más
distancia. Si se ajusta 'staff-padding a un valor
suficientemente grande, las indicaciones dinámicas quedarán alineadas.
Se usa una idea similar junto a \textLengthOn para alinear las
inscripciones de texto a lo largo de su línea de base.
| | music = \relative c' {
a'2\p b\f
e4\p f\f\> g, b\p
c2^\markup { \huge gorgeous } c^\markup { \huge fantastic }
}
{
\music
\break
\override DynamicLineSpanner.staff-padding = #3
\textLengthOn
\override TextScript.staff-padding = #1
\music
}
|
Alineación vertical de la letra y los compases de ossia
Este fragmento de código muestra el uso de las propiedades de
contexto alignBelowContext y alignAboveContext para
controlar la posición de la letra y los compases de ossia.
| | \paper {
ragged-right = ##t
}
\relative c' <<
\new Staff = "1" { c4 c s2 }
\new Staff = "2" { c4 c s2 }
\new Staff = "3" { c4 c s2 }
{ \skip 2
<<
\lyrics {
\set alignBelowContext = #"1"
lyrics4 below
}
\new Staff \with {
alignAboveContext = #"3"
fontSize = #-2
\override StaffSymbol.staff-space = #(magstep -2)
\remove "Time_signature_engraver"
} {
\tuplet 6/4 {
\override TextScript.padding = #3
c8[^"ossia above" d e d e f]
}
}
>>
}
>>
|
Centrado vertical de las líneas de bajo cifrado emparejadas
Allí donde se utilicen líneas extensoras para el bajo cifrado mediante
el establecimiento de useBassFigureExtenders al valor
verdadero, las parejas de líneas extensoras congruentes se centran
verticalmente si el valor de figuredBassCenterContinuations
tiene el valor verdadero.
| | <<
\relative c' {
c8 c b b a a c16 c b b
c8 c b b a a c16 c b b
c8 c b b a a c c b b
}
\figures {
\set useBassFigureExtenders = ##t
<6+ 4 3>4 <6 4 3>8 r
<6+ 4 3>4 <6 4 3>8 <4 3+>16 r
\set figuredBassCenterContinuations = ##t
<6+ 4 3>4 <6 4 3>8 r
<6+ 4 3>4 <6 4 3>8 <4 3+>16 r
\set figuredBassCenterContinuations = ##f
<6+ 4 3>4 <6 4 3>8 r
<6+ 4 3>4 <6 4 3>8 <4 3+>8
}
>>
|
Paper and layout
Spacing issues
Alinear y centrar los nombres de instrumento
La alineación horizontal de los nombres de instrumento se puede
trucar modificando la propiedad Staff.InstrumentName
#'self-alignment-X. Las variables de \layout
indent y short-indent definen el espacio en que se
alinean los nombres de instrumento antes del primer sistema y de
los siguientes, respectivamente.
| | \paper { left-margin = 3\cm }
\score {
\new StaffGroup <<
\new Staff \with {
\override InstrumentName.self-alignment-X = #LEFT
instrumentName = \markup \left-column {
"Left aligned"
"instrument name"
}
shortInstrumentName = "Left"
}
{ c''1 \break c''1 }
\new Staff \with {
\override InstrumentName.self-alignment-X = #CENTER
instrumentName = \markup \center-column {
Centered
"instrument name"
}
shortInstrumentName = "Centered"
}
{ g'1 g'1}
\new Staff \with {
\override InstrumentName.self-alignment-X = #RIGHT
instrumentName = \markup \right-column {
"Right aligned"
"instrument name"
}
shortInstrumentName = "Right"
}
{ e'1 e'1 }
>>
\layout {
ragged-right = ##t
indent = 4\cm
short-indent = 2\cm
}
}
|
Arranging separate lyrics on a single line
Sometimes you may want to put lyrics for different performers on a
single line: where there is rapidly alternating text, for example.
This snippet shows how this can be done with \override
VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = ##f.
| | \layout {
\context {
\Lyrics
\override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = ##f
}
}
aliceSings = \markup { \smallCaps "Alice" }
eveSings = \markup { \smallCaps "Eve" }
<<
\new Staff <<
\new Voice = "alice" {
f'4^\aliceSings g' r2 |
s1 |
f'4^\aliceSings g' r2 |
s1 | \break
% ...
\voiceOne
s2 a'8^\aliceSings a' b'4 |
\oneVoice
g'1
}
\new Voice = "eve" {
s1 |
a'2^\eveSings g' |
s1 |
a'2^\eveSings g'
% ...
\voiceTwo
f'4^\eveSings a'8 g' f'4 e' |
\oneVoice
s1
}
>>
\new Lyrics \lyricsto "alice" {
may -- be
sec -- ond
% ...
Shut up, you fool!
}
\new Lyrics \lyricsto "eve" {
that the
words are
% ...
…and then I was like–
}
>>
|
Partes de libro
Se puede usar \bookpart para dividir un libro en varias
partes. La última página de cada parte vùede quedar afectada por el
valor de ragged-last-bottom. Los elementos de marcado de
encabezamiento y pie de página pueden detectar que están en la última
página de una parte, y presentar diferencias con la última página del
libro.
| | #(set-default-paper-size "a6")
\book {
%% book paper, which is inherited by all children bookparts
\paper {
ragged-last-bottom = ##t
%% Page footer: add a different part-tagline at part last page
oddFooterMarkup = \markup {
\column {
\fill-line {
%% Copyright header field only on book first page.
\on-the-fly #first-page \fromproperty #'header:copyright
}
\fill-line {
%% Part tagline header field only on each part last page.
\on-the-fly #part-last-page \fromproperty #'header:parttagline
}
\fill-line {
%% Tagline header field only on book last page.
\on-the-fly #last-page \fromproperty #'header:tagline
}
}
}
}
%% book header, which is inherited by the first bookpart
\header {
title = "Book title"
copyright = "Copyright line on book first page"
parttagline = "Part tagline"
tagline = "Book tagline"
}
\bookpart {
%% a different page breaking function may be used on each part
\paper { page-breaking = #ly:minimal-breaking }
\header { subtitle = "First part" }
\markup { The first book part }
\markup { a page break }
\pageBreak
\markup { first part last page }
\markup \wordwrap { with ragged-last-bottom (see the space below this text) }
}
\bookpart {
\header { subtitle = "Second part" }
{ c'4 }
}
}
|
Modificar el tamaño de la pauta
Aunque la manera más sencilla de redimensionar los pentagramas es usar
#(set-global-staff-size xx), el tamaño de una pauta individual
se puede cambiar escalando las propiedades de 'staff-space y de
fontSize.
| | <<
\new Staff {
\relative c'' {
\dynamicDown
c8\ff c c c c c c c
}
}
\new Staff \with {
fontSize = #-3
\override StaffSymbol.staff-space = #(magstep -3)
} {
\clef bass
c8 c c c c\f c c c
}
>>
|
Recorte de sistemas
Este código muestra cómo recortar (extraer) fragmentos a partir de una
partitura completa.
Este archivo tiene que procesarse de forma separada con la opción
‘-dclip-systems’; la página de fragmentos de código podría no
mostrar el resultado adecuadamente.
La salida consiste en archivos con los nombres
‘base-from-inicio-to-final[-número].eps’.
Si se incluyen los comienzos y finales de los sistemas, incluyen las
dimensiones del grob del sistema, por ejemplo los nombres de
instrumento.
Las notas de adorno en el punto final de la región no se incluyen.
Las regiones pueden abarcar varios sistemas. En este caso, se generan
varios archivos EPS.
| | #(ly:set-option 'clip-systems)
#(define output-suffix "1")
origScore = \score {
\relative c' {
\new Staff \with { instrumentName = "Instrument" }
c1
d1
\grace c16 e1
\key d \major
f1 \break
\clef bass
g,1
fis1
}
}
\book {
\score {
\origScore
\layout {
% Each clip-region is a (START . END) pair
% where both are rhythmic-locations.
% (make-rhythmic-locations BAR-NUMBER NUM DEN)
% means NUM/DEN whole-notes into bar numbered BAR-NUMBER
clip-regions = #(list
(cons
(make-rhythmic-location 2 0 1)
(make-rhythmic-location 4 0 1))
(cons
(make-rhythmic-location 0 0 1)
(make-rhythmic-location 4 0 1))
(cons
(make-rhythmic-location 0 0 1)
(make-rhythmic-location 6 0 1))
)
}
}
}
#(ly:set-option 'clip-systems #f)
#(define output-suffix #f)
\book {
\score { \origScore }
\markup { \bold \fontsize #6 clips }
\score {
\lyrics {
\markup { from-2.0.1-to-4.0.1-clip.eps }
\markup {
\epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps"
(ly:parser-output-name)) }
}
}
}
|
Crear pentagramas en blanco
Para crear pentagramas en blanco, genere compases vacíos y después
elimine el grabador de números de compás Bar_number_engraver
del contexto Score, y los grabadores de la indicación de compás
Time_signature_engraver, de la clave Clef_engraver y de
los compases Bar_engraver del contexto de Staff.
| | #(set-global-staff-size 20)
\score {
{
\repeat unfold 12 { s1 \break }
}
\layout {
indent = 0\in
\context {
\Staff
\remove "Time_signature_engraver"
\remove "Clef_engraver"
\remove "Bar_engraver"
}
\context {
\Score
\remove "Bar_number_engraver"
}
}
}
% uncomment these lines for "letter" size
%{
\paper {
#(set-paper-size "letter")
ragged-last-bottom = ##f
line-width = 7.5\in
left-margin = 0.5\in
bottom-margin = 0.25\in
top-margin = 0.25\in
}
%}
% uncomment these lines for "A4" size
%{
\paper {
#(set-paper-size "a4")
ragged-last-bottom = ##f
line-width = 180
left-margin = 15
bottom-margin = 10
top-margin = 10
}
%}
|
Muestra de cada uno de los encabezamientos posibles
Muestra de todos los tipos de encabezamiento.
| | \header {
copyright = "copyright"
title = "title"
subtitle = "subtitle"
composer = "composer"
arranger = "arranger"
instrument = "instrument"
metre = "metre"
opus = "opus"
piece = "piece"
poet = "poet"
texidoc = "All header fields with special meanings."
copyright = "public domain"
enteredby = "jcn"
source = "urtext"
}
\layout {
ragged-right = ##f
}
\score {
\relative c'' { c1 | c | c | c }
}
\score {
\relative c'' { c1 | c | c | c }
\header {
title = "localtitle"
subtitle = "localsubtitle"
composer = "localcomposer"
arranger = "localarranger"
instrument = "localinstrument"
metre = "localmetre"
opus = "localopus"
piece = "localpiece"
poet = "localpoet"
copyright = "localcopyright"
}
}
|
Fijar un separador entre los sistemas
Se pueden insertar separadores sistema entre los sistemas de una
página. Se puede usar cualquier elemento de marcado, pero
\slashSeparator está disponible como una elección
predeterminada adecuada.
| | \paper {
system-separator-markup = \slashSeparator
line-width = 120
}
notes = \relative c' {
c1 | c \break
c1 | c \break
c1 | c
}
\book {
\score {
\new GrandStaff <<
\new Staff \notes
\new Staff \notes
>>
}
}
|
Índice general (tabla de contenidos)
Se puede incluir un índice general (tabla de contenidos) mediante el
uso de \markuplist \table-of-contents. Los elementos de la
TDC se añaden con la instrucción \tocItem.
| | #(set-default-paper-size "a6")
\book {
\markuplist \table-of-contents
\pageBreak
\tocItem \markup { The first score }
\score {
{
c'1 \pageBreak
\mark "A" \tocItem \markup { Mark A }
d'1
}
}
\pageBreak
\tocItem \markup { The second score }
\score {
{ e'1 }
\header { piece = "Second score" }
}
}
|
Grupos de pentagramas alineados verticalmente sin una barra SystemStartBar que los interconecte
Este fragmento de código muestra cómo obtener grupos de pentagramas
StaffGroups alineados verticalmente con una barra de inicio de sistema
SystemStartBar por cada StaffGroup, pero sin conectarlos entre sí.
| | % by Thomas Morley
#(set-global-staff-size 18)
\paper {
indent = 0
ragged-right = ##f
print-all-headers = ##t
}
\layout {
\context {
\Staff
\consists "Mark_engraver"
\override RehearsalMark.self-alignment-X = #LEFT
}
\context {
\StaffGroup
systemStartDelimiterHierarchy =
#'(SystemStartBrace (SystemStartBracket a b))
}
\context {
\Score
\override SystemStartBrace.style = #'bar-line
\omit SystemStartBar
\override SystemStartBrace.padding = #-0.1
\override SystemStartBrace.thickness = #1.6
\remove "Mark_engraver"
\override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15
}
}
%%%% EXAMPLE
txt =
\lyricmode {
Wer4 nur den lie -- ben Gott läßt wal2 -- ten4
und4 hof -- fet auf ihn al -- le Zeit2.
}
% First StaffGroup "exercise"
eI =
\relative c' {
\mark \markup {
\bold Teacher:
This is a simple setting of the choral. Please improve it.
}
\key a \minor
\time 4/4
\voiceOne
\partial 4
e4
a b c b
a b gis2
e4\fermata g! g f
e a a gis
a2.\fermata
\bar ":|."
}
eII =
\relative c' {
\key a \minor
\time 4/4
\voiceTwo
\partial 4
c4
e e e gis
a f e2
b4 b d d
c c d d
c2.
\bar ":|."
}
eIII =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceOne
\partial 4
a4
c b a b
c d b2
gis4 g g b
c a f e
e2.
}
eIV =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceTwo
\partial 4
a,4
a' gis a e
a, d e2
e,4\fermata e' b g
c f d e
a,2.\fermata
\bar ":|."
}
exercise =
\new StaffGroup = "exercise"
<<
\new Staff
<<
\new Voice \eI
\new Voice \eII
>>
\new Lyrics \txt
\new Staff
<<
\new Voice \eIII
\new Voice \eIV
>>
>>
% Second StaffGRoup "simple Bach"
sbI =
\relative c' {
\mark \markup { \bold" Pupil:" Here's my version! }
\key a \minor
\time 4/4
\voiceOne
\partial 4
e4
a b c b
a b gis2
e4\fermata g! g f
e a a gis
a2.\fermata
\bar ":|."
}
sbII =
\relative c' {
\key a \minor
\time 4/4
\voiceTwo
\partial 4
c8 d
e4 e e8 f g4
f f e2
b4 b8 c d4 d
e8 d c4 b8 c d4
c2.
\bar ":|."
}
sbIII =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceOne
\partial 4
a8 b
c4 b a b8 c
d4 d8 c b2
gis4 g g8 a b4
b a8 g f4 e
e2.
}
sbIV =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceTwo
\partial 4
a,4
a' gis a e
f8 e d4 e2
e,4\fermata e' b a8 g
c4 f8 e d4 e
a,2.\fermata
\bar ":|."
}
simpleBach =
\new StaffGroup = "simple Bach"
<<
\new Staff
<<
\new Voice \sbI
\new Voice \sbII
>>
\new Lyrics \txt
\new Staff
<<
\new Voice \sbIII
\new Voice \sbIV
>>
>>
% Third StaffGroup "chromatic Bach"
cbI =
\relative c' {
\mark \markup {
\bold "Teacher:"
\column {
"Well, you simply copied and transposed a version of J.S.Bach."
"Do you know this one?"
}
}
\key a \minor
\time 4/4
\voiceOne
\partial 4
e4
a b c b
a b gis4. fis8
e4\fermata g! g f
e a a8 b gis4
a2.\fermata
\bar ":|."
}
cbII =
\relative c' {
\key a \minor
\time 4/4
\voiceTwo
\partial 4
c8 d
e4 e e8 fis gis4
a8 g! f!4 e2
b4 e e d
d8[ cis] d dis e fis e4
e2.
\bar ":|."
}
cbIII =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceOne
\partial 4
a8 b
c[ b] a gis8 a4 d,
e8[ e'] d c b4. a8
gis4 b c d8 c
b[ a] a b c b b c16 d
c2.
}
cbIV =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceTwo
\partial 4
a4
c, e a, b
c d e2
e4\fermata e a b8 c
gis[ g] fis f e dis e4
a,2.\fermata
\bar ":|."
}
chromaticBach =
\new StaffGroup = "chromatic Bach"
<<
\new Staff
<<
\new Voice \cbI
\new Voice \cbII
>>
\new Lyrics \txt
\new Staff
<<
\new Voice \cbIII
\new Voice \cbIV
>>
>>
% Score
\score {
<<
\exercise
\simpleBach
\chromaticBach
>>
\header {
title = \markup
\column {
\combine \null \vspace #1
"Exercise: Improve the given choral"
" "
}
}
\layout {
\context {
\Lyrics
\override LyricText.X-offset = #-1
}
}
}
|
Titles
Titles and headers
Añadir la fecha actual a una partitura
Con algo de código de Scheme, se puede añadir fácilmente la fecha
actual a una partitura.
| | % first, define a variable to hold the formatted date:
date = #(strftime "%d-%m-%Y" (localtime (current-time)))
% use it in the title block:
\header {
title = "Including the date!"
subtitle = \date
}
\score {
\relative c'' {
c4 c c c
}
}
% and use it in a \markup block:
\markup {
\date
}
|
Alinear y centrar los nombres de instrumento
La alineación horizontal de los nombres de instrumento se puede
trucar modificando la propiedad Staff.InstrumentName
#'self-alignment-X. Las variables de \layout
indent y short-indent definen el espacio en que se
alinean los nombres de instrumento antes del primer sistema y de
los siguientes, respectivamente.
| | \paper { left-margin = 3\cm }
\score {
\new StaffGroup <<
\new Staff \with {
\override InstrumentName.self-alignment-X = #LEFT
instrumentName = \markup \left-column {
"Left aligned"
"instrument name"
}
shortInstrumentName = "Left"
}
{ c''1 \break c''1 }
\new Staff \with {
\override InstrumentName.self-alignment-X = #CENTER
instrumentName = \markup \center-column {
Centered
"instrument name"
}
shortInstrumentName = "Centered"
}
{ g'1 g'1}
\new Staff \with {
\override InstrumentName.self-alignment-X = #RIGHT
instrumentName = \markup \right-column {
"Right aligned"
"instrument name"
}
shortInstrumentName = "Right"
}
{ e'1 e'1 }
>>
\layout {
ragged-right = ##t
indent = 4\cm
short-indent = 2\cm
}
}
|
Muestra de cada uno de los encabezamientos posibles
Muestra de todos los tipos de encabezamiento.
| | \header {
copyright = "copyright"
title = "title"
subtitle = "subtitle"
composer = "composer"
arranger = "arranger"
instrument = "instrument"
metre = "metre"
opus = "opus"
piece = "piece"
poet = "poet"
texidoc = "All header fields with special meanings."
copyright = "public domain"
enteredby = "jcn"
source = "urtext"
}
\layout {
ragged-right = ##f
}
\score {
\relative c'' { c1 | c | c | c }
}
\score {
\relative c'' { c1 | c | c | c }
\header {
title = "localtitle"
subtitle = "localsubtitle"
composer = "localcomposer"
arranger = "localarranger"
instrument = "localinstrument"
metre = "localmetre"
opus = "localopus"
piece = "localpiece"
poet = "localpoet"
copyright = "localcopyright"
}
}
|
Imprimir el número de versión
Introduciendo la salida de lilypond-version en la letra de una
canción, es posible imprimir el número de versión de LilyPond dentro
de una partitura, o en un documento generado con lilypond-book.
Otra posibillidad es añadir el número de versión al final de la
doc-string, de esta forma:
| | \score {
\new Lyrics {
\override Score.RehearsalMark.self-alignment-X = #LEFT
\mark #(string-append "Processed with LilyPond version " (lilypond-version))
s2
}
}
|
Spacing
Spacing issues
Ajuste del especiado vertical de la letra
Este fragmento de código muestra cómo situar la línea de base de la
letra más cerca del pentagrama.
| | % Default layout:
<<
\new Staff \new Voice = melody \relative c' {
c4 d e f
g4 f e d
c1
}
\new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa }
\new Staff {
\new Voice = melody \relative c' {
c4 d e f
g4 f e d
c1
}
}
% Reducing the minimum space below the staff and above the lyrics:
\new Lyrics \with {
\override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
#'((basic-distance . 1))
}
\lyricsto melody { aa aa aa aa aa aa aa aa aa }
>>
|
Permitir que las digitaciones se impriman dentro del pentagrama
Las cifras de digitación orientadas verticalmente se colocan de forma
predeterminada fuera del pentagrama. Sin embargo, este comportamiento
se puede cancelar. Hay que prestar atención en situaciones en las que
las digitaciones y las plicas están en la misma dirección: por
defecto, las digitaciones solo evitan la colisión con plicas unidas
por una barra. Se puede cambiar este ajuste para no evitar ninguna
plica o evitarlas todas; el ejemplo siguiente muestra las dos
copciones, así como la manera de volver al comportamiento
predeteminado.
| | \relative c' {
<c-1 e-2 g-3 b-5>2
\override Fingering.staff-padding = #'()
<c-1 e-2 g-3 b-5>4 g'-0
a8[-1 b]-2 g-0 r
\override Fingering.add-stem-support = ##f
a[-1 b]-2 g-0 r
\override Fingering.add-stem-support = ##t
a[-1 b]-2 g-0 r
\override Fingering.add-stem-support = #only-if-beamed
a[-1 b]-2 g-0 r
}
|
Etiqueta de página
Se pueden situar etiquetas de página dentro de la música o en el nivel
superior, y ser referenciadas desde otros elementos de marcado.
| | #(set-default-paper-size "a6")
#(define-markup-command (toc-line layout props label text)
(symbol? markup?)
(interpret-markup layout props
(markup #:fill-line (text #:page-ref label "8" "?"))))
\book {
\markup \huge \fill-line { \null Title Page \null }
\pageBreak
\label #'toc
\markup \column {
\large \fill-line { \null Table of contents \null }
\toc-line #'toc "Table of contents"
\toc-line #'firstScore "First Score"
\toc-line #'markA "Mark A"
\toc-line #'markB "Mark B"
\toc-line #'markC "Mark C"
\toc-line #'unknown "Unknown label"
}
\pageBreak
\label #'firstScore
\score {
\new Staff \relative c' {
c2 c
\mark \markup {
A (page \concat { \page-ref #'markA "0" "?" ) }
} \label #'markA
c2 c
\pageBreak
\mark "B" \label #'markB
d2 d
d2 d
\once \override Score.RehearsalMark.break-visibility =
#begin-of-line-invisible
\mark "C" \label #'markC
}
\header { piece = "First score" }
}
}
|
Espaciado de las notas estrictamente proporcional
Si está establecido strict-note-spacing, el espaciado de las
notas no queda influido por los compases o claves que pueda haber
dentro de un sistema. En lugar de ello, se colocan justo antes de la
nota que tiene lugar en el mismo momento temporal. Esto puede producir
colisiones.
| | \relative c'' <<
\override Score.SpacingSpanner.strict-note-spacing = ##t
\set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\new Staff {
c8[ c \clef alto c c \grace { d16 } c8 c] c4
c2 \grace { c16[ c16] } c2
}
\new Staff {
c2 \tuplet 3/2 { c8 \clef bass cis,, c } c4
c1
}
>>
|
Indicaciones dinámicas y textuales alineadas verticalmente
Todos los objetos DynamicLineSpanner (reguladores e
indicaciones dinámicas de texto) se sitúan con su línea de referencia a
una distancia de al menos 'staff-padding del pentagrama, a no
ser que otros elementos de notación los fuerce a colocarse a más
distancia. Si se ajusta 'staff-padding a un valor
suficientemente grande, las indicaciones dinámicas quedarán alineadas.
Se usa una idea similar junto a \textLengthOn para alinear las
inscripciones de texto a lo largo de su línea de base.
| | music = \relative c' {
a'2\p b\f
e4\p f\f\> g, b\p
c2^\markup { \huge gorgeous } c^\markup { \huge fantastic }
}
{
\music
\break
\override DynamicLineSpanner.staff-padding = #3
\textLengthOn
\override TextScript.staff-padding = #1
\music
}
|
Alineación vertical de la letra y los compases de ossia
Este fragmento de código muestra el uso de las propiedades de
contexto alignBelowContext y alignAboveContext para
controlar la posición de la letra y los compases de ossia.
| | \paper {
ragged-right = ##t
}
\relative c' <<
\new Staff = "1" { c4 c s2 }
\new Staff = "2" { c4 c s2 }
\new Staff = "3" { c4 c s2 }
{ \skip 2
<<
\lyrics {
\set alignBelowContext = #"1"
lyrics4 below
}
\new Staff \with {
alignAboveContext = #"3"
fontSize = #-2
\override StaffSymbol.staff-space = #(magstep -2)
\remove "Time_signature_engraver"
} {
\tuplet 6/4 {
\override TextScript.padding = #3
c8[^"ossia above" d e d e f]
}
}
>>
}
>>
|
MIDI
Creating MIDI output
Modificar la salida MIDI para que tenga un canal por cada voz
Al producir una salida MIDI, el comportamiento predeterminado es que
cada pentagrama representa un canal MIDI, con todas las voces de dicho
pentagrama mezcladas. Esto reduce al mínimo el riesgo de que se agote
el número de canales MIDI disponibles, pues existe un máximo de 16
canales por cada puerto MIDI, y la mayoría de los dispositivos sólo
tiene un puerto.
Sin embargo, cuando se traslada el interpretador
Staff_performer al contexto Voice, cada voz de un
pentagrama puede tener su propio canal MIDI, como se muestra en el
siguiente ejemplo: a pesar de estar sobre el mismo pentagrama, se
crean dos canales MIDI, cada uno con un midiInstrument
distinto.
| | \score {
\new Staff <<
\new Voice \relative c''' {
\set midiInstrument = #"flute"
\voiceOne
\key g \major
\time 2/2
r2 g-"Flute" ~
g fis ~
fis4 g8 fis e2 ~
e4 d8 cis d2
}
\new Voice \relative c'' {
\set midiInstrument = #"clarinet"
\voiceTwo
b1-"Clarinet"
a2. b8 a
g2. fis8 e
fis2 r
}
>>
\layout { }
\midi {
\context {
\Staff
\remove "Staff_performer"
}
\context {
\Voice
\consists "Staff_performer"
}
\tempo 2 = 72
}
}
|
Cambiar el tempo sin indicación metronómica
Para cambiar el tempo en la salida MIDI sin
imprimir nada, hacemos invisible la indicación metronómica:
| | \score {
\new Staff \relative c' {
\tempo 4 = 160
c4 e g b
c4 b d c
\set Score.tempoHideNote = ##t
\tempo 4 = 96
d,4 fis a cis
d4 cis e d
}
\layout { }
\midi { }
}
|
Creating custom dynamics in MIDI output
The following example shows how to create a dynamic marking, not
included in the default list, and assign it a specific value so that it
can be used to affect MIDI output.
The dynamic mark \rfz is assigned a value of 0.9.
| | #(define (myDynamics dynamic)
(if (equal? dynamic "rfz")
0.9
(default-dynamic-absolute-volume dynamic)))
\score {
\new Staff {
\set Staff.midiInstrument = #"cello"
\set Score.dynamicAbsoluteVolumeFunction = #myDynamics
\new Voice {
\relative {
a'4\pp b c-\rfz
}
}
}
\layout {}
\midi {}
}
|
Customized drum notation in printed and MIDI output
Customized drum “pitch” names (suitable for a custom drum style, for
example) may be used both in printed and MIDI output by defining such
variables as drumPitchNames, drumStyleTable and
midiDrumPitches, as demonstrated here. In short, this snippet:
* defines some "pitch" names * defines how they will be rendered *
tell LilyPond to use them for layout * assigns pitches to the names *
tell LilyPond to use them for MIDI output
| | %% This snippet tries to amend
%% NR 2.5.1 Common notation for percussion - Custom percussion staves
%% http://lilypond.org/doc/v2.18/Documentation/notation/common-notation-for-percussion#custom-percussion-staves
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% To use custom drum-pitch-names for your score and midi you need to follow
%% this route:
%%
%%%%%%%%%%%%
%% LAYOUT:
%%%%%%%%%%%%
%%
%% (1) Define a name and put it in `drumPitchNames'
%% This can be done at toplevel with
%% drumPitchNames.my-name = #'my-name
%% It's possible to add an alias as well.
%% (2) Define how it should be printed
%% Therefore put them into a toplevel-list, where each entry should look:
%% (my-name
%% note-head-style-or-default
%% articulation-string-or-#f
%% staff-position)
%% Example:
%% #(define my-style
%% '(
%% (my-name default "tenuto" -1)
%% ; ...
%% ))
%% (3) Tell LilyPond to use this custom-definitions, with
%% drumStyleTable = #(alist->hash-table my-style)
%% in a \layout or \with
%%
%% Now we're done for layout, here a short, but complete example:
%% \new DrumStaff
%% \with { drumStyleTable = #(alist->hash-table my-style) }
%% \drummode { my-name }
%%
%%%%%%%%%%%%
%% MIDI:
%%%%%%%%%%%%
%%
%% (1) Again at toplvel, assign a pitch to your custom-note-name
%% midiDrumPitches.my-name = ges
%% Note that you have to use the name, which is in drumPitchNames, no alias
%% (2) Tell LilyPond to use this pitch(es), with
%% drumPitchTable = #(alist->hash-table midiDrumPitches)
%%
%% Example:
%% \score {
%% \new DrumStaff
%% \with {
%% drumStyleTable = #(alist->hash-table my-style)
%% drumPitchTable = #(alist->hash-table midiDrumPitches)
%% }
%% \drummode { my-name4 }
%% \layout {}
%% \midi {}
%% }
%%
%%%%%%%%%%%%
%% TESTING
%%%%%%%%%%%%
%%
%% To test whether all is fine, run the following sequence in terminal:
%% lilypond my-file.ly
%% midi2ly my-file.midi
%% gedit my-file-midi.ly
%%
%% Which will do:
%% 1. create pdf and midi
%% 2. transform the midi back to a .ly-file
%% (note: midi2ly is not always good in correctly identifying enharmonic pitches)
%% 3. open this file in gedit (or use another editor)
%% Now watch what you've got.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% FULL EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
drumPitchNames.dbass = #'dbass
drumPitchNames.dba = #'dbass % 'db is in use already
drumPitchNames.dbassmute = #'dbassmute
drumPitchNames.dbm = #'dbassmute
drumPitchNames.do = #'dopen
drumPitchNames.dopenmute = #'dopenmute
drumPitchNames.dom = #'dopenmute
drumPitchNames.dslap = #'dslap
drumPitchNames.ds = #'dslap
drumPitchNames.dslapmute = #'dslapmute
drumPitchNames.dsm = #'dslapmute
#(define djembe
'((dbass default #f -2)
(dbassmute default "stopped" -2)
(dopen default #f 0)
(dopenmute default "stopped" 0)
(dslap default #f 2)
(dslapmute default "stopped" 2)))
midiDrumPitches.dbass = g
midiDrumPitches.dbassmute = fis
midiDrumPitches.dopen = a
midiDrumPitches.dopenmute = gis
midiDrumPitches.dslap = b
midiDrumPitches.dslapmute = ais
one = \drummode { r4 dba4 do ds r dbm dom dsm }
\score {
\new DrumStaff
\with {
\override StaffSymbol.line-count = #3
instrumentName = #"Djembe "
drumStyleTable = #(alist->hash-table djembe)
drumPitchTable = #(alist->hash-table midiDrumPitches)
}
\one
\layout {}
\midi {}
}
|
Demo de MidiInstruments
Problema: ¿cómo saber qué instrumento MIDI midiInstrument viene
mejor para nuestra composición? Solución: un archivo de demostración
de LilyPond.
| | \header {
title = "Demo of all midi sounds"
arranger = "Myself "
}
baseMelody = \relative c' {
c4.\mf g c16 b' c d
e16 d e f g4 g'4 r
R1
}
melody = {
\tempo 4 = 150
\baseMelody
}
\score {
\new Staff <<
\new Voice \melody
>>
\layout { }
}
\score {
\new Staff <<
\new Voice {
r\mf
\set Staff.midiInstrument = #"acoustic grand" \melody
\set Staff.midiInstrument = #"bright acoustic" \melody
\set Staff.midiInstrument = #"electric grand" \melody
\set Staff.midiInstrument = #"honky-tonk" \melody
\set Staff.midiInstrument = #"electric piano 1" \melody
\set Staff.midiInstrument = #"electric piano 2" \melody
\set Staff.midiInstrument = #"harpsichord" \melody
\set Staff.midiInstrument = #"clav" \melody
\set Staff.midiInstrument = #"celesta" \melody
\set Staff.midiInstrument = #"glockenspiel" \melody
\set Staff.midiInstrument = #"music box" \melody
\set Staff.midiInstrument = #"vibraphone" \melody
\set Staff.midiInstrument = #"marimba" \melody
\set Staff.midiInstrument = #"xylophone" \melody
\set Staff.midiInstrument = #"tubular bells" \melody
\set Staff.midiInstrument = #"dulcimer" \melody
\set Staff.midiInstrument = #"drawbar organ" \melody
\set Staff.midiInstrument = #"percussive organ" \melody
\set Staff.midiInstrument = #"rock organ" \melody
\set Staff.midiInstrument = #"church organ" \melody
\set Staff.midiInstrument = #"reed organ" \melody
\set Staff.midiInstrument = #"accordion" \melody
\set Staff.midiInstrument = #"harmonica" \melody
\set Staff.midiInstrument = #"concertina" \melody
\set Staff.midiInstrument = #"acoustic guitar (nylon)" \melody
\set Staff.midiInstrument = #"acoustic guitar (steel)" \melody
\set Staff.midiInstrument = #"electric guitar (jazz)" \melody
\set Staff.midiInstrument = #"electric guitar (clean)" \melody
\set Staff.midiInstrument = #"electric guitar (muted)" \melody
\set Staff.midiInstrument = #"overdriven guitar" \melody
\set Staff.midiInstrument = #"distorted guitar" \melody
\set Staff.midiInstrument = #"acoustic bass" \melody
\set Staff.midiInstrument = #"electric bass (finger)" \melody
\set Staff.midiInstrument = #"electric bass (pick)" \melody
\set Staff.midiInstrument = #"fretless bass" \melody
\set Staff.midiInstrument = #"slap bass 1" \melody
\set Staff.midiInstrument = #"slap bass 2" \melody
\set Staff.midiInstrument = #"synth bass 1" \melody
\set Staff.midiInstrument = #"synth bass 2" \melody
\set Staff.midiInstrument = #"violin" \melody
\set Staff.midiInstrument = #"viola" \melody
\set Staff.midiInstrument = #"cello" \melody
\set Staff.midiInstrument = #"contrabass" \melody
\set Staff.midiInstrument = #"tremolo strings" \melody
\set Staff.midiInstrument = #"pizzicato strings" \melody
\set Staff.midiInstrument = #"orchestral harp" \melody
\set Staff.midiInstrument = #"timpani" \melody
\set Staff.midiInstrument = #"string ensemble 1" \melody
\set Staff.midiInstrument = #"string ensemble 2" \melody
\set Staff.midiInstrument = #"synthstrings 1" \melody
\set Staff.midiInstrument = #"synthstrings 2" \melody
\set Staff.midiInstrument = #"choir aahs" \melody
\set Staff.midiInstrument = #"voice oohs" \melody
\set Staff.midiInstrument = #"synth voice" \melody
\set Staff.midiInstrument = #"orchestra hit" \melody
\set Staff.midiInstrument = #"trumpet" \melody
\set Staff.midiInstrument = #"trombone" \melody
\set Staff.midiInstrument = #"tuba" \melody
\set Staff.midiInstrument = #"muted trumpet" \melody
\set Staff.midiInstrument = #"french horn" \melody
\set Staff.midiInstrument = #"brass section" \melody
\set Staff.midiInstrument = #"synthbrass 1" \melody
\set Staff.midiInstrument = #"synthbrass 2" \melody
\set Staff.midiInstrument = #"soprano sax" \melody
\set Staff.midiInstrument = #"alto sax" \melody
\set Staff.midiInstrument = #"tenor sax" \melody
\set Staff.midiInstrument = #"baritone sax" \melody
\set Staff.midiInstrument = #"oboe" \melody
\set Staff.midiInstrument = #"english horn" \melody
\set Staff.midiInstrument = #"bassoon" \melody
\set Staff.midiInstrument = #"clarinet" \melody
\set Staff.midiInstrument = #"piccolo" \melody
\set Staff.midiInstrument = #"flute" \melody
\set Staff.midiInstrument = #"recorder" \melody
\set Staff.midiInstrument = #"pan flute" \melody
\set Staff.midiInstrument = #"blown bottle" \melody
\set Staff.midiInstrument = #"shakuhachi" \melody
\set Staff.midiInstrument = #"whistle" \melody
\set Staff.midiInstrument = #"ocarina" \melody
\set Staff.midiInstrument = #"lead 1 (square)" \melody
\set Staff.midiInstrument = #"lead 2 (sawtooth)" \melody
\set Staff.midiInstrument = #"lead 3 (calliope)" \melody
\set Staff.midiInstrument = #"lead 4 (chiff)" \melody
\set Staff.midiInstrument = #"lead 5 (charang)" \melody
\set Staff.midiInstrument = #"lead 6 (voice)" \melody
\set Staff.midiInstrument = #"lead 7 (fifths)" \melody
\set Staff.midiInstrument = #"lead 8 (bass+lead)" \melody
\set Staff.midiInstrument = #"pad 1 (new age)" \melody
\set Staff.midiInstrument = #"pad 2 (warm)" \melody
\set Staff.midiInstrument = #"pad 3 (polysynth)" \melody
\set Staff.midiInstrument = #"pad 4 (choir)" \melody
\set Staff.midiInstrument = #"pad 5 (bowed)" \melody
\set Staff.midiInstrument = #"pad 6 (metallic)" \melody
\set Staff.midiInstrument = #"pad 7 (halo)" \melody
\set Staff.midiInstrument = #"pad 8 (sweep)" \melody
\set Staff.midiInstrument = #"fx 1 (rain)" \melody
\set Staff.midiInstrument = #"fx 2 (soundtrack)" \melody
\set Staff.midiInstrument = #"fx 3 (crystal)" \melody
\set Staff.midiInstrument = #"fx 4 (atmosphere)" \melody
\set Staff.midiInstrument = #"fx 5 (brightness)" \melody
\set Staff.midiInstrument = #"fx 6 (goblins)" \melody
\set Staff.midiInstrument = #"fx 7 (echoes)" \melody
\set Staff.midiInstrument = #"fx 8 (sci-fi)" \melody
\set Staff.midiInstrument = #"sitar" \melody
\set Staff.midiInstrument = #"banjo" \melody
\set Staff.midiInstrument = #"shamisen" \melody
\set Staff.midiInstrument = #"koto" \melody
\set Staff.midiInstrument = #"kalimba" \melody
\set Staff.midiInstrument = #"bagpipe" \melody
\set Staff.midiInstrument = #"fiddle" \melody
\set Staff.midiInstrument = #"shanai" \melody
\set Staff.midiInstrument = #"tinkle bell" \melody
\set Staff.midiInstrument = #"agogo" \melody
\set Staff.midiInstrument = #"steel drums" \melody
\set Staff.midiInstrument = #"woodblock" \melody
\set Staff.midiInstrument = #"taiko drum" \melody
\set Staff.midiInstrument = #"melodic tom" \melody
\set Staff.midiInstrument = #"synth drum" \melody
\set Staff.midiInstrument = #"reverse cymbal" \melody
\set Staff.midiInstrument = #"guitar fret noise" \melody
\set Staff.midiInstrument = #"breath noise" \melody
\set Staff.midiInstrument = #"seashore" \melody
\set Staff.midiInstrument = #"bird tweet" \melody
\set Staff.midiInstrument = #"telephone ring" \melody
\set Staff.midiInstrument = #"helicopter" \melody
\set Staff.midiInstrument = #"applause" \melody
\set Staff.midiInstrument = #"gunshot" \melody
}
>>
\midi { }
}
|
Replacing default MIDI instrument equalization
The default MIDI instrument equalizer can be replaced by
setting the instrumentEqualizer property in the Score
context to a user-defined Scheme procedure that uses a MIDI instrument
name as its argument along with a pair of fractions indicating the
minimum and maximum volumes respectively to be applied to that
specific instrument.
The following example sets the minimum and maximum volumes for flute
and clarinet respectively.
| | #(define my-instrument-equalizer-alist '())
#(set! my-instrument-equalizer-alist
(append
'(
("flute" . (0.7 . 0.9))
("clarinet" . (0.3 . 0.6)))
my-instrument-equalizer-alist))
#(define (my-instrument-equalizer s)
(let ((entry (assoc s my-instrument-equalizer-alist)))
(if entry
(cdr entry))))
\score {
<<
\new Staff {
\key g \major
\time 2/2
\set Score.instrumentEqualizer = #my-instrument-equalizer
\set Staff.midiInstrument = "flute"
\new Voice \relative {
r2 g''\mp g fis~
4 g8 fis e2~
4 d8 cis d2
}
}
\new Staff {
\key g \major
\set Staff.midiInstrument = "clarinet"
\new Voice \relative {
b'1\p a2. b8 a
g2. fis8 e
fis2 r
}
}
>>
\layout { }
\midi { }
}
|
Templates
Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)
Este ejemplo muestra cómo hacer una transcripción moderna de canto
gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza
solamente cabezas de nota de blanca y de negra, y unas marcas
especiales que indican silencios de distintas longitudes.
| | \include "gregorian.ly"
chant = \relative c' {
\set Score.timing = ##f
f4 a2 \divisioMinima
g4 b a2 f2 \divisioMaior
g4( f) f( g) a2 \finalis
}
verba = \lyricmode {
Lo -- rem ip -- sum do -- lor sit a -- met
}
\score {
\new Staff <<
\new Voice = "melody" \chant
\new Lyrics = "one" \lyricsto melody \verba
>>
\layout {
\context {
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
\hide Stem
}
\context {
\Voice
\override Stem.length = #0
}
\context {
\Score
barAlways = ##t
}
}
}
|
Plantilla de salmo del canto anglicano
Esta plantilla muestra una forma de preparar un cántico salmódico
anglicano. También muestra cómo se pueden añadir estrofas adicionales
como texto independiente por debajo de la música. Las dos estrofas se
codifican en estilos diferentes para ilustrar más posibilidades.
| | SopranoMusic = \relative g' {
g1 | c2 b | a1 | \bar "||"
a1 | d2 c | c b | c1 | \bar "||"
}
AltoMusic = \relative c' {
e1 | g2 g | f1 |
f1 | f2 e | d d | e1 |
}
TenorMusic = \relative a {
c1 | c2 c | c1 |
d1 | g,2 g | g g | g1 |
}
BassMusic = \relative c {
c1 | e2 e | f1 |
d1 | b2 c | g' g | c,1 |
}
global = {
\time 2/2
}
dot = \markup {
\raise #0.7 \musicglyph "dots.dot"
}
tick = \markup {
\raise #1 \fontsize #-5 \musicglyph "scripts.rvarcomma"
}
% Use markup to center the chant on the page
\markup {
\fill-line {
\score { % centered
<<
\new ChoirStaff <<
\new Staff <<
\global
\clef "treble"
\new Voice = "Soprano" <<
\voiceOne
\SopranoMusic
>>
\new Voice = "Alto" <<
\voiceTwo
\AltoMusic
>>
>>
\new Staff <<
\clef "bass"
\global
\new Voice = "Tenor" <<
\voiceOne
\TenorMusic
>>
\new Voice = "Bass" <<
\voiceTwo
\BassMusic
>>
>>
>>
>>
\layout {
\context {
\Score
\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
}
\context {
\Staff
\remove "Time_signature_engraver"
}
}
} % End score
}
} % End markup
\markup {
\fill-line {
\column {
\left-align {
\null \null \null
\line {
\fontsize #5 O
\fontsize #3 come
let us \bold sing | unto \dot the | Lord : let
}
\line {
us heartily
\concat { re \bold joice }
in the | strength of | our
}
\line {
sal | vation.
}
\null
\line {
\hspace #2.5 8. Today if ye will hear his voice *
}
\line {
\concat { \bold hard en }
\tick not your \tick hearts : as in the pro-
}
\line {
vocation * and as in the \bold day of tempt- \tick
}
\line {
-ation \tick in the \tick wilderness.
}
}
}
}
}
|
Plantilla para himnos
Este fragmento de código muestra una forma de preparar un himno cuando
cada línea comienza con un compás parcial. También muestra cómo
añadir los versos como texto independiente debajo de la música.
| | Timeline = {
\time 4/4
\tempo 4=96
\partial 2
s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||" \break
s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||"
}
SopranoMusic = \relative g' {
g4 g | g g g g | g g g g | g g g g | g2
g4 g | g g g g | g g g g | g g g g | g2
}
AltoMusic = \relative c' {
d4 d | d d d d | d d d d | d d d d | d2
d4 d | d d d d | d d d d | d d d d | d2
}
TenorMusic = \relative a {
b4 b | b b b b | b b b b | b b b b | b2
b4 b | b b b b | b b b b | b b b b | b2
}
BassMusic = \relative g {
g4 g | g g g g | g g g g | g g g g | g2
g4 g | g g g g | g g g g | g g g g | g2
}
global = {
\key g \major
}
\score { % Start score
<<
\new PianoStaff << % Start pianostaff
\new Staff << % Start Staff = RH
\global
\clef "treble"
\new Voice = "Soprano" << % Start Voice = "Soprano"
\Timeline
\voiceOne
\SopranoMusic
>> % End Voice = "Soprano"
\new Voice = "Alto" << % Start Voice = "Alto"
\Timeline
\voiceTwo
\AltoMusic
>> % End Voice = "Alto"
>> % End Staff = RH
\new Staff << % Start Staff = LH
\global
\clef "bass"
\new Voice = "Tenor" << % Start Voice = "Tenor"
\Timeline
\voiceOne
\TenorMusic
>> % End Voice = "Tenor"
\new Voice = "Bass" << % Start Voice = "Bass"
\Timeline
\voiceTwo
\BassMusic
>> % End Voice = "Bass"
>> % End Staff = LH
>> % End pianostaff
>>
} % End score
\markup {
\fill-line {
""
{
\column {
\left-align {
"This is line one of the first verse"
"This is line two of the same"
"And here's line three of the first verse"
"And the last line of the same"
}
}
}
""
}
}
\paper { % Start paper block
indent = 0 % don't indent first system
line-width = 130 % shorten line length to suit music
} % End paper block
|
Plantilla para combo de jazz
Ésta es una plantilla bastante avanzada, para un conjunto de
jazz. Observe que la notación de todos los instrumentos está en
\key c \major (Do mayor). Esto se refiere al tono de
concierto; la armadura se transporta automáticamente si la música está
dentro de una sección \transpose.
| | \header {
title = "Song"
subtitle = "(tune)"
composer = "Me"
meter = "moderato"
piece = "Swing"
tagline = \markup {
\column {
"LilyPond example file by Amelie Zapf,"
"Berlin 07/07/2003"
}
}
}
% To make the example display in the documentation
\paper {
paper-width = 130
}
%#(set-global-staff-size 16)
\include "english.ly"
%%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%%
sl = {
\override NoteHead.style = #'slash
\hide Stem
}
nsl = {
\revert NoteHead.style
\undo \hide Stem
}
crOn = \override NoteHead.style = #'cross
crOff = \revert NoteHead.style
%% insert chord name style stuff here.
jazzChords = { }
%%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%%
global = { \time 4/4 }
Key = { \key c \major }
% ############ Horns ############
% ------ Trumpet ------
trpt = \transpose c d \relative c'' {
\Key
c1 | c | c |
}
trpHarmony = \transpose c' d {
\jazzChords
}
trumpet = {
\global
\clef treble
<<
\trpt
>>
}
% ------ Alto Saxophone ------
alto = \transpose c a \relative c' {
\Key
c1 | c | c |
}
altoHarmony = \transpose c' a {
\jazzChords
}
altoSax = {
\global
\clef treble
<<
\alto
>>
}
% ------ Baritone Saxophone ------
bari = \transpose c a' \relative c {
\Key
c1
c1
\sl
d4^"Solo" d d d
\nsl
}
bariHarmony = \transpose c' a \chordmode {
\jazzChords s1 s d2:maj e:m7
}
bariSax = {
\global
\clef treble
<<
\bari
>>
}
% ------ Trombone ------
tbone = \relative c {
\Key
c1 | c | c
}
tboneHarmony = \chordmode {
\jazzChords
}
trombone = {
\global
\clef bass
<<
\tbone
>>
}
% ############ Rhythm Section #############
% ------ Guitar ------
gtr = \relative c'' {
\Key
c1
\sl
b4 b b b
\nsl
c1
}
gtrHarmony = \chordmode {
\jazzChords
s1 c2:min7+ d2:maj9
}
guitar = {
\global
\clef treble
<<
\gtr
>>
}
%% ------ Piano ------
rhUpper = \relative c'' {
\voiceOne
\Key
c1 | c | c
}
rhLower = \relative c' {
\voiceTwo
\Key
e1 | e | e
}
lhUpper = \relative c' {
\voiceOne
\Key
g1 | g | g
}
lhLower = \relative c {
\voiceTwo
\Key
c1 | c | c
}
PianoRH = {
\clef treble
\global
<<
\new Voice = "one" \rhUpper
\new Voice = "two" \rhLower
>>
}
PianoLH = {
\clef bass
\global
<<
\new Voice = "one" \lhUpper
\new Voice = "two" \lhLower
>>
}
piano = {
<<
\new Staff = "upper" \PianoRH
\new Staff = "lower" \PianoLH
>>
}
% ------ Bass Guitar ------
Bass = \relative c {
\Key
c1 | c | c
}
bass = {
\global
\clef bass
<<
\Bass
>>
}
% ------ Drums ------
up = \drummode {
\voiceOne
hh4 <hh sn> hh <hh sn>
hh4 <hh sn> hh <hh sn>
hh4 <hh sn> hh <hh sn>
}
down = \drummode {
\voiceTwo
bd4 s bd s
bd4 s bd s
bd4 s bd s
}
drumContents = {
\global
<<
\new DrumVoice \up
\new DrumVoice \down
>>
}
%%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%
\score {
<<
\new StaffGroup = "horns" <<
\new Staff = "trumpet" \with { instrumentName = "Trumpet" }
\trumpet
\new Staff = "altosax" \with { instrumentName = "Alto Sax" }
\altoSax
\new ChordNames = "barichords" \with { instrumentName = "Trumpet" }
\bariHarmony
\new Staff = "barisax" \with { instrumentName = "Bari Sax" }
\bariSax
\new Staff = "trombone" \with { instrumentName = "Trombone" }
\trombone
>>
\new StaffGroup = "rhythm" <<
\new ChordNames = "chords" \gtrHarmony
\new Staff = "guitar" \with { instrumentName = "Guitar" }
\guitar
\new PianoStaff = "piano" \with {
instrumentName = "Piano"
midiInstrument = "acoustic grand"
}
\piano
\new Staff = "bass" \with { instrumentName = "Bass" }
\bass
\new DrumStaff \with { instrumentName = "Drums" }
\drumContents
>>
>>
\layout {
\context { \Staff \RemoveEmptyStaves }
\context {
\Score
\override BarNumber.padding = #3
\override RehearsalMark.padding = #2
skipBars = ##t
}
}
\midi { }
}
|
Plantilla de orquesta con coro y piano
Esta plantilla muestra el uso de contextos StaffGroup y
GrandStaff anidados para sub-agrupar instrumentos del mismo
tipo, y una forma de usar \transpose de manera que unas
variables contengan la música para instrumentos transpositores en
afinación de concierto.
| | #(set-global-staff-size 17)
\paper {
indent = 3.0\cm % add space for instrumentName
short-indent = 1.5\cm % add less space for shortInstrumentName
}
fluteMusic = \relative c' { \key g \major g'1 b }
% Pitches as written on a manuscript for Clarinet in A
% are transposed to concert pitch.
clarinetMusic = \transpose c' a
\relative c'' { \key bes \major bes1 d }
trumpetMusic = \relative c { \key g \major g''1 b }
% Key signature is often omitted for horns
hornMusic = \transpose c' f
\relative c { d'1 fis }
percussionMusic = \relative c { \key g \major g1 b }
sopranoMusic = \relative c'' { \key g \major g'1 b }
sopranoLyrics = \lyricmode { Lyr -- ics }
altoIMusic = \relative c' { \key g \major g'1 b }
altoIIMusic = \relative c' { \key g \major g'1 b }
altoILyrics = \sopranoLyrics
altoIILyrics = \lyricmode { Ah -- ah }
tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b }
tenorLyrics = \sopranoLyrics
pianoRHMusic = \relative c { \key g \major g''1 b }
pianoLHMusic = \relative c { \clef bass \key g \major g1 b }
violinIMusic = \relative c' { \key g \major g'1 b }
violinIIMusic = \relative c' { \key g \major g'1 b }
violaMusic = \relative c { \clef alto \key g \major g'1 b }
celloMusic = \relative c { \clef bass \key g \major g1 b }
bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b }
\score {
<<
\new StaffGroup = "StaffGroup_woodwinds" <<
\new Staff = "Staff_flute" \with { instrumentName = "Flute" }
\fluteMusic
\new Staff = "Staff_clarinet" \with {
instrumentName = \markup { \concat { "Clarinet in B" \flat } }
}
% Declare that written Middle C in the music
% to follow sounds a concert B flat, for
% output using sounded pitches such as MIDI.
%\transposition bes
% Print music for a B-flat clarinet
\transpose bes c' \clarinetMusic
>>
\new StaffGroup = "StaffGroup_brass" <<
\new Staff = "Staff_hornI" \with { instrumentName = "Horn in F" }
% \transposition f
\transpose f c' \hornMusic
\new Staff = "Staff_trumpet" \with { instrumentName = "Trumpet in C" }
\trumpetMusic
>>
\new RhythmicStaff = "RhythmicStaff_percussion"
\with { instrumentName = "Percussion" }
<<
\percussionMusic
>>
\new PianoStaff \with { instrumentName = "Piano" }
<<
\new Staff { \pianoRHMusic }
\new Staff { \pianoLHMusic }
>>
\new ChoirStaff = "ChoirStaff_choir" <<
\new Staff = "Staff_soprano" \with { instrumentName = "Soprano" }
\new Voice = "soprano"
\sopranoMusic
\new Lyrics \lyricsto "soprano" { \sopranoLyrics }
\new GrandStaff = "GrandStaff_altos"
\with { \accepts Lyrics } <<
\new Staff = "Staff_altoI" \with { instrumentName = "Alto I" }
\new Voice = "altoI"
\altoIMusic
\new Lyrics \lyricsto "altoI" { \altoILyrics }
\new Staff = "Staff_altoII" \with { instrumentName = "Alto II" }
\new Voice = "altoII"
\altoIIMusic
\new Lyrics \lyricsto "altoII" { \altoIILyrics }
>>
\new Staff = "Staff_tenor" \with { instrumentName = "Tenor" }
\new Voice = "tenor"
\tenorMusic
\new Lyrics \lyricsto "tenor" { \tenorLyrics }
>>
\new StaffGroup = "StaffGroup_strings" <<
\new GrandStaff = "GrandStaff_violins" <<
\new Staff = "Staff_violinI" \with { instrumentName = "Violin I" }
\violinIMusic
\new Staff = "Staff_violinII" \with { instrumentName = "Violin II" }
\violinIIMusic
>>
\new Staff = "Staff_viola" \with { instrumentName = "Viola" }
\violaMusic
\new Staff = "Staff_cello" \with { instrumentName = "Cello" }
\celloMusic
\new Staff = "Staff_bass" \with { instrumentName = "Double Bass" }
\bassMusic
>>
>>
\layout { }
}
|
Plantilla de piano (sencilla)
Presentamos a continuación una plantilla de piano sencilla con algunas
notas.
| | upper = \relative c'' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
lower = \relative c {
\clef bass
\key c \major
\time 4/4
a2 c
}
\score {
\new PianoStaff \with { instrumentName = "Piano" }
<<
\new Staff = "upper" \upper
\new Staff = "lower" \lower
>>
\layout { }
\midi { }
}
|
Plantilla de piano con letra centrada
En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta
se puede centrar entre los pentagramas de un sistema de piano.
| | upper = \relative c'' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
lower = \relative c {
\clef bass
\key c \major
\time 4/4
a2 c
}
text = \lyricmode {
Aaa Bee Cee Dee
}
\score {
\new PianoStaff <<
\new Staff = upper { \new Voice = "singer" \upper }
\new Lyrics \lyricsto "singer" \text
\new Staff = lower { \lower }
>>
\layout { }
\midi { }
}
|
Plantilla de piano con melodía y letra
He aquí el típico formato dde una canción: un pentagrama con la
melodía y la letra, y el acompañamiento de piano por debajo.
| | melody = \relative c'' {
\clef treble
\key c \major
\time 4/4
a b c d
}
text = \lyricmode {
Aaa Bee Cee Dee
}
upper = \relative c'' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
lower = \relative c {
\clef bass
\key c \major
\time 4/4
a2 c
}
\score {
<<
\new Voice = "mel" { \autoBeamOff \melody }
\new Lyrics \lyricsto mel \text
\new PianoStaff <<
\new Staff = "upper" \upper
\new Staff = "lower" \lower
>>
>>
\layout {
\context { \Staff \RemoveEmptyStaves }
}
\midi { }
}
|
Plantilla de coro SATB, a cuatro pentagramas
Plantilla de coro SATB (en cuatro pentagramas)
| | global = {
\key c \major
\time 4/4
\dynamicUp
}
sopranonotes = \relative c'' {
c2 \p \< d c d \f
}
sopranowords = \lyricmode { do do do do }
altonotes = \relative c'' {
c2\p d c d
}
altowords = \lyricmode { re re re re }
tenornotes = {
\clef "G_8"
c2\mp d c d
}
tenorwords = \lyricmode { mi mi mi mi }
bassnotes = {
\clef bass
c2\mf d c d
}
basswords = \lyricmode { mi mi mi mi }
\score {
\new ChoirStaff <<
\new Staff <<
\new Voice = "soprano" <<
\global
\sopranonotes
>>
\new Lyrics \lyricsto "soprano" \sopranowords
>>
\new Staff <<
\new Voice = "alto" <<
\global
\altonotes
>>
\new Lyrics \lyricsto "alto" \altowords
>>
\new Staff <<
\new Voice = "tenor" <<
\global
\tenornotes
>>
\new Lyrics \lyricsto "tenor" \tenorwords
>>
\new Staff <<
\new Voice = "bass" <<
\global
\bassnotes
>>
\new Lyrics \lyricsto "bass" \basswords
>>
>>
}
|
Partitura para acordeón diatónico
Plantilla para escribir una partitura para acordeón diatónico.
- Hay una pauta horizontal que indica si el acordeón se debe cerrar
(línea gruesa) o abrir (línea delgada).
- Hay una pauta rítmica pequeña con letra que describe los botones que
hay que pulsar en el bajo. Las barras de compás están hechas a partir
de líneas de rejilla.
- La pauta del tabulador para acordeones diatónicos muestra la
posición geográfica de los botones y no (como en otros instrumentos)
la altura de las notas; las llaves sobre el lado de la melodía del
acordeón se ponen en tres columnas y unas doce filas.
En la notación de pauta del tabulador, la columna más externa se
describe con notas entre líneas, la columnas más interna se describe
con notas entre líneas y unas aspas como alteración accidental, y la
columna central se describe con notas sobre una línea, mientras que la
fila del medio se representa sobre la línea central del pentagrama.
A continuación algunas notas sobre la forma de transcribir notas de
piano a acordeón diatónico:
1. Todo acordeón diatónico está construido para un cierto conjunto de
tonalidades solamente (por ejemplo, para las tonalidades de Do mayor y
Fa mayor), por lo que es importante transportar una melodía de piano
que corresponda exactamente a una de esas tonalidades. Transporte el
código fuente, no solamente la salida porque este código se necesita
después para traducirlo de nuevo a la pauta del tabulador. Esto se
puede hacer con la instrucción displayLilyMusic.
2. Tenemos que alternar las direcciones de abrir y de cerrar el fuelle
de forma regular. Si el intérprete tiene un período de abrir el
fuelle excesivamente largo, el acordeón puede romperse. Por otro
lado, algunas armonías solamente están disponibles en una dirección.
Teniendo esto en cuenta, debemos decidir qué partes de la melodía son
las partes de cerrar y cuáles las de abrir.
3. Para cada una de las partes de abrir o cerrar, transcriba las notas
del piano a la representación de tablatura correspondiente.
| | verse = \lyricmode { Wie gross bist du! Wie gross bist du! }
harmonies = \new ChordNames \chordmode {
\germanChords
\set chordChanges = ##t
bes8 bes8 bes8
es2 f
bes1
}
NoStem = { \hide Stem }
NoNoteHead = \hide NoteHead
ZeroBeam = \override Beam.positions = #'(0 . 0)
staffTabLine = \new Staff \with {
\remove "Time_signature_engraver"
\remove "Clef_engraver"
} {
\override Staff.StaffSymbol.line-positions = #'(0)
% Shows one horizontal line. The vertical line
% (simulating a bar-line) is simulated with a gridline
\set Staff.midiInstrument = #"choir aahs"
\key c \major
\relative c''
{
% disable the following line to see the noteheads while writing the song
\NoNoteHead
\override NoteHead.no-ledgers = ##t
% The beam between 8th-notes is used to draw the push-line
%How to fast write the push-lines:
% 1. write repeatedly 'c c c c c c c c |' for the whole length of the song
% 2. uncomment the line \NoNoteHead
% 3. compile
% 4. Mark the positions on which push/pull changes.
% In the score-picture click on the position
% the push- or pull-part starts
% (on the noteHead, the cursor will change to a hand-icon).
% The cursor in the source code will jump just at this position.
% a) If a push-part starts there, replace the 'c' by an 'e['
% b) If a pull-part starts there, replace the 'c' by an 's'
% 5. Switch into 'overwrite-mode' by pressing the 'ins' key.
% 6. For the pull-parts overwrite the 'c' with 's'
% 7. For every push-part replace the last 'c' with 'e]'
% 8. Switch into 'insert-mode' again
% 9. At last it should look like e.g.
% (s s e[ c | c c c c c c c c | c c c c c c e] s s)
% 10. re-enable the line \NoNoteHead
\autoBeamOff
\ZeroBeam
s8 s s e[ c c c c c c e] | s s s s s
}
}
% Accordion melody in tabulator score
% 1. Place a copy of the piano melody below
% 2. Separate piano melody into pull- and push-parts
% according to the staffTabLine you've already made
% 3. For each line: Double the line. Remark the 1st one
% (Keeps unchanged as reference) and then change the second
% line using the transformation paper
% or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh'
% Tips:
% - In jEdit Search & Replace mark the Option 'Keep Dialog'
AccordionTabTwoCBesDur = {
% pull 1
%<f' bes'>8 <f' a'>8 <d' bes'>8 |
<g'' a''>8 <g'' b''>8 <e'' a''>8 |
% push 2
%<g' c''>4 <f' d''> <g' ees''> <f' a'> |
<g'' a''>4 <d'' eisis''> <g'' bisis''> <d'' f''> |
% pull 3
% <f' bes'>2 r8 }
<g'' a''>2 r8 }
AccordionTab= { \dynamicUp
% 1. Place a copy of the piano melody above
% 2. Separate piano melody into pull- and push-parts
% according to the staffTabLine you've already made
% 3. For each line: Double the line. Remark the 1st one
% (Keeps unchanged as reference) and then
% change the second line using the transformation paper
% Tips:
% - In jEdit Search & Replace mark the Option 'Keep Dialog'
% -
\AccordionTabTwoCBesDur
}
\layout {
\context {
\Score
% The vertical line (simulating a bar-line) in
% the staffBassRhytm is a gridline
\consists "Grid_line_span_engraver"
}
\context {
\Staff
\consists "Grid_point_engraver"
gridInterval = #(ly:make-moment 4/4) % 4/4 - tact. How many beats per bar
% The following line has to be adjusted O-F-T-E-N.
\override GridPoint.Y-extent = #'(-2 . -21)
}
\context {
\ChoirStaff
\remove "System_start_delimiter_engraver"
}
}
staffVoice = \new Staff = astaffvoice {
\time 4/4
\set Staff.instrumentName = "Voice"
\set Staff.midiInstrument = "voice oohs"
\key bes \major
\partial 8*3
\clef treble
{
\context Voice = "melodyVoi"
{
<f' bes'>8 <f' a'>8 <d' bes'>8 |
<g' c''>4 <f' d''> <g' es''> <f' a'> |
<f' bes'>2 r8
}
\bar "|."
}
}
staffAccordionMel =
\new Staff \with { \remove "Clef_engraver" } {
\accidentalStyle forget %Set the accidentals (Vorzeichen) for each note,
%do not remember them for the rest of the measure.
\time 4/4
\set Staff.instrumentName="Accordion"
\set Staff.midiInstrument="voice oohs"
\key c \major
\clef treble
{ \AccordionTab \bar "|." }
}
AltOn =
#(define-music-function (mag) (number?)
#{ \override Stem.length = #(* 7.0 mag)
\override NoteHead.font-size =
#(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #})
AltOff = {
\revert Stem.length
\revert NoteHead.font-size
}
BassRhytm = {s4 s8 | c2 c2 | c2 s8 }
LyricBassRhythmI= \lyricmode { c b | c }
staffBassRhytm =
\new Staff = staffbass \with { \remove "Clef_engraver" } {
% This is not a RhythmicStaff because it must be possible to append lyrics.
\override Score.GridLine.extra-offset = #'( 13.0 . 0.0 ) % x.y
\override Staff.StaffSymbol.line-positions = #'( 0 )
% Shows one horizontal line. The vertical line
% (simulating a bar-line) is simulated by a grid
% Search for 'grid' in this page to find all related functions
\time 4/4
{
\context Voice = "VoiceBassRhytm"
\stemDown \AltOn #0.6
\relative c''
{
\BassRhytm
}
\AltOff
\bar "|."
}
}
\score {
\new ChoirStaff <<
\harmonies
\staffVoice
\context Lyrics = "lmelodyVoi"
\with { alignBelowContext = astaffvoice }
\lyricsto melodyVoi \verse
\staffAccordionMel
\staffTabLine
\staffBassRhytm
\context Lyrics = "lBassRhytmAboveI"
\with { alignAboveContext = staffbass }
\lyricsto VoiceBassRhytm \LyricBassRhythmI
>>
}
|
Plantilla de pentagrama único con música, letra y acordes
Esta plantilla facilita la preparación de una canción con melodía,
letra y acordes.
| | melody = \relative c' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
text = \lyricmode {
Aaa Bee Cee Dee
}
harmonies = \chordmode {
a2 c
}
\score {
<<
\new ChordNames {
\set chordChanges = ##t
\harmonies
}
\new Voice = "one" { \autoBeamOff \melody }
\new Lyrics \lyricsto "one" \text
>>
\layout { }
\midi { }
}
|
Plantilla para un pentagrama único con música, letra, acordes y trastes
Presentamos a continuación un ejemplo de plantilla para una hoja
guía de acordes con melodía, letra, acordes y diagramas de
trastes.
| | verseI = \lyricmode {
\set stanza = #"1."
This is the first verse
}
verseII = \lyricmode {
\set stanza = #"2."
This is the second verse.
}
theChords = \chordmode {
% insert chords for chordnames and fretboards here
c2 g4 c
}
staffMelody = \relative c' {
\key c \major
\clef treble
% Type notes for melody here
c4 d8 e f4 g
\bar "|."
}
\score {
<<
\context ChordNames { \theChords }
\context FretBoards { \theChords }
\new Staff {
\context Voice = "voiceMelody" { \staffMelody }
}
\new Lyrics = "lyricsI" {
\lyricsto "voiceMelody" \verseI
}
\new Lyrics = "lyricsII" {
\lyricsto "voiceMelody" \verseII
}
>>
\layout { }
\midi { }
}
|
Plantilla de pentagrama único con música y acordes
¿Quiere preparar una hoja guía de acordes (o «lead sheet») con
melodía y acordes? ¡No busque más!
| | melody = \relative c' {
\clef treble
\key c \major
\time 4/4
f4 e8[ c] d4 g
a2 ~ a
}
harmonies = \chordmode {
c4:m f:min7 g:maj c:aug
d2:dim b4:5 e:sus
}
\score {
<<
\new ChordNames {
\set chordChanges = ##t
\harmonies
}
\new Staff \melody
>>
\layout{ }
\midi { }
}
|
Plantilla de pentagrama único don notas y letra
Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela
y péguela, escriba las notas y luego la letra. Este ejemplo desactiva
el barrado automático, que es lo más frecuente en las partes vocales
antiguas. Para usar el barrado automático modifique o marque como un
comentario la línea correspondiente.
| | melody = \relative c' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
text = \lyricmode {
Aaa Bee Cee Dee
}
\score{
<<
\new Voice = "one" {
\autoBeamOff
\melody
}
\new Lyrics \lyricsto "one" \text
>>
\layout { }
\midi { }
}
|
Plantilla de un solo pentagrama, con notas únicamente
Esta plantilla simple prepara un pentagrama con notas, adecuado para
un instrumento solista o un fragmento melódico. Córtelo y péguelo en
un archivo, escriba las notas y ¡ya está!
| | melody = \relative c' {
\clef treble
\key c \major
\time 4/4
a4 b c d
}
\score {
\new Staff \melody
\layout { }
\midi { }
}
|
Plantilla de cuarteto de cuerda (sencilla)
Esta plantilla muestra un cuarteto de cuerda normal. También utiliza
una sección \global para el compás y la armadura
| | global= {
\time 4/4
\key c \major
}
violinOne = \new Voice \relative c'' {
c2 d
e1
\bar "|."
}
violinTwo = \new Voice \relative c'' {
g2 f
e1
\bar "|."
}
viola = \new Voice \relative c' {
\clef alto
e2 d
c1
\bar "|."
}
cello = \new Voice \relative c' {
\clef bass
c2 b
a1
\bar "|."
}
\score {
\new StaffGroup <<
\new Staff \with { instrumentName = "Violin 1" }
<< \global \violinOne >>
\new Staff \with { instrumentName = "Violin 2" }
<< \global \violinTwo >>
\new Staff \with { instrumentName = "Viola" }
<< \global \viola >>
\new Staff \with { instrumentName = "Cello" }
<< \global \cello >>
>>
\layout { }
\midi { }
}
|
Plantilla de cuarteto de cuerda con particellas independientes
El fragmento de código “Plantilla de cuarteto de cuerda” produce un
resultado satisfactorio para el cuarteto, pero ¿y si tenemos que
imprimir las particellas? Esta nueva plantilla muestra cómo usar la
funcionalidad \tag (etiqueta) para dividir fácilmente una
pieza en particellas indicviduales.
Tenemos que dividir esta plantilla en archivos independientes; los
nombres de archivo están dentro de los comentarios al principio de
cada archivo. ‘piece.ly’ contiene todas las definiciones de
música. Los otros archivos (‘score.ly’, ‘vn1.ly’,
‘vn2.ly’, ‘vla.ly’ y ‘vlc.ly’) producen la particella
correspondiente.
¡No olvide quitar los comentarios que hemos especificado cuando use
los archivos independientes!
| | %%%%% piece.ly
%%%%% (This is the global definitions file)
global= {
\time 4/4
\key c \major
}
Violinone = \new Voice {
\relative c'' {
c2 d e1
\bar "|."
}
}
Violintwo = \new Voice {
\relative c'' {
g2 f e1
\bar "|."
}
}
Viola = \new Voice {
\relative c' {
\clef alto
e2 d c1
\bar "|."
}
}
Cello = \new Voice {
\relative c' {
\clef bass
c2 b a1
\bar "|."
}
}
music = {
<<
\tag #'score \tag #'vn1
\new Staff \with { instrumentName = "Violin 1" }
<< \global \Violinone >>
\tag #'score \tag #'vn2
\new Staff \with { instrumentName = "Violin 2" }
<< \global \Violintwo>>
\tag #'score \tag #'vla
\new Staff \with { instrumentName = "Viola" }
<< \global \Viola>>
\tag #'score \tag #'vlc
\new Staff \with { instrumentName = "Cello" }
<< \global \Cello >>
>>
}
% These are the other files you need to save on your computer
% score.ly
% (This is the main file)
% uncomment the line below when using a separate file
%\include "piece.ly"
#(set-global-staff-size 14)
\score {
\new StaffGroup \keepWithTag #'score \music
\layout { }
\midi { }
}
%{ Uncomment this block when using separate files
% vn1.ly
% (This is the Violin 1 part file)
\include "piece.ly"
\score {
\keepWithTag #'vn1 \music
\layout { }
}
% vn2.ly
% (This is the Violin 2 part file)
\include "piece.ly"
\score {
\keepWithTag #'vn2 \music
\layout { }
}
% vla.ly
% (This is the Viola part file)
\include "piece.ly"
\score {
\keepWithTag #'vla \music
\layout { }
}
% vlc.ly
% (This is the Cello part file)
\include "piece.ly"
\score {
\keepWithTag #'vlc \music
\layout { }
}
%}
|
Plantilla de conjunto vocal con reducción de piano automática
Esta plantilla añade una reducción de piano automática a la partitura
vocal SATB estándar que se mostró en la “Plantilla de conjunto
vocal”. Esto presenta uno de los puntos fuertes de LilyPond: podemos
usar una definición de música más de una vez. Si se hace cualquier
cambio en las notas de la parte vocal (digamos tenorMusic),
entonces los cambios se aplicarán también a la reducción de piano.
| | \paper {
top-system-spacing.basic-distance = #10
score-system-spacing.basic-distance = #20
system-system-spacing.basic-distance = #20
last-bottom-spacing.basic-distance = #10
}
global = {
\key c \major
\time 4/4
}
sopMusic = \relative {
c''4 c c8[( b)] c4
}
sopWords = \lyricmode {
hi hi hi hi
}
altoMusic = \relative {
e'4 f d e
}
altoWords =\lyricmode {
ha ha ha ha
}
tenorMusic = \relative {
g4 a f g
}
tenorWords = \lyricmode {
hu hu hu hu
}
bassMusic = \relative {
c4 c g c
}
bassWords = \lyricmode {
ho ho ho ho
}
\score {
<<
\new ChoirStaff <<
\new Lyrics = "sopranos" \with {
% This is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
\new Lyrics = "altos"
\new Lyrics = "tenors" \with {
% This is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
\new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
>>
\new Lyrics = "basses"
\context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
\context Lyrics = "altos" \lyricsto "altos" \altoWords
\context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
\context Lyrics = "basses" \lyricsto "basses" \bassWords
>>
\new PianoStaff <<
\new Staff <<
\set Staff.printPartCombineTexts = ##f
\partCombine
<< \global \sopMusic >>
<< \global \altoMusic >>
>>
\new Staff <<
\clef bass
\set Staff.printPartCombineTexts = ##f
\partCombine
<< \global \tenorMusic >>
<< \global \bassMusic >>
>>
>>
>>
}
|
Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas
Esta plantilla es, básicamente, la misma que la sencilla plantilla
“Conjunto vocal”, excepto que aquí todas las líneas de letra se
colocan utilizando alignAboveContext y
alignBelowContext.
| | global = {
\key c \major
\time 4/4
}
sopMusic = \relative c'' {
c4 c c8[( b)] c4
}
sopWords = \lyricmode {
hi hi hi hi
}
altoMusic = \relative c' {
e4 f d e
}
altoWords = \lyricmode {
ha ha ha ha
}
tenorMusic = \relative c' {
g4 a f g
}
tenorWords = \lyricmode {
hu hu hu hu
}
bassMusic = \relative c {
c4 c g c
}
bassWords = \lyricmode {
ho ho ho ho
}
\score {
\new ChoirStaff <<
\new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
\new Lyrics \with { alignAboveContext = #"women" }
\lyricsto "sopranos" \sopWords
\new Lyrics \with { alignBelowContext = #"women" }
\lyricsto "altos" \altoWords
% we could remove the line about this with the line below, since
% we want the alto lyrics to be below the alto Voice anyway.
% \new Lyrics \lyricsto "altos" \altoWords
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
\new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
>>
\new Lyrics \with { alignAboveContext = #"men" }
\lyricsto "tenors" \tenorWords
\new Lyrics \with { alignBelowContext = #"men" }
\lyricsto "basses" \bassWords
% again, we could replace the line above this with the line below.
% \new Lyrics \lyricsto "basses" \bassWords
>>
}
|
Estrofa para solista y estribillo a dos voces
Esta plantilla crea una partitura que comienza con una estrofa para
solista y continúa con un estribillo a dos voces. también muestra el
uso de silencios de separación dentro de la variable \global
para definir cambios de compás (y otros elementos que son comunes a
todas las partes) a lo largo de toda la partitura.
| | global = {
\key g \major
% verse
\time 3/4
s2.*2
\break
% refrain
\time 2/4
s2*2
\bar "|."
}
SoloNotes = \relative g' {
\clef "treble"
% verse
g4 g g |
b4 b b |
% refrain
R2*2 |
}
SoloLyrics = \lyricmode {
One two three |
four five six |
}
SopranoNotes = \relative c'' {
\clef "treble"
% verse
R2.*2 |
% refrain
c4 c |
g4 g |
}
SopranoLyrics = \lyricmode {
la la |
la la |
}
BassNotes = \relative c {
\clef "bass"
% verse
R2.*2 |
% refrain
c4 e |
d4 d |
}
BassLyrics = \lyricmode {
dum dum |
dum dum |
}
\score {
<<
\new Voice = "SoloVoice" << \global \SoloNotes >>
\new Lyrics \lyricsto "SoloVoice" \SoloLyrics
\new ChoirStaff <<
\new Voice = "SopranoVoice" << \global \SopranoNotes >>
\new Lyrics \lyricsto "SopranoVoice" \SopranoLyrics
\new Voice = "BassVoice" << \global \BassNotes >>
\new Lyrics \lyricsto "BassVoice" \BassLyrics
>>
>>
\layout {
ragged-right = ##t
\context { \Staff
% these lines prevent empty staves from being printed
\RemoveEmptyStaves
\override VerticalAxisGroup.remove-first = ##t
}
}
}
|
Plantilla de conjunto vocal
He aquí una partitura vocal estándar para cuatro voces SATB. Con
grupos mayores, suele ser útil incluir una sección que aparezca en
todas las partes. Por ejemplo, el compás y la armadura casi siempre
son los mismos para todas. Como en la plantilla “Himno”, las cuatro
voces se reagrupan en sólo dos pentagramas.
| | \paper {
top-system-spacing.basic-distance = #10
score-system-spacing.basic-distance = #20
system-system-spacing.basic-distance = #20
last-bottom-spacing.basic-distance = #10
}
global = {
\key c \major
\time 4/4
}
sopMusic = \relative {
c''4 c c8[( b)] c4
}
sopWords = \lyricmode {
hi hi hi hi
}
altoMusic = \relative {
e'4 f d e
}
altoWords = \lyricmode {
ha ha ha ha
}
tenorMusic = \relative {
g4 a f g
}
tenorWords = \lyricmode {
hu hu hu hu
}
bassMusic = \relative {
c4 c g c
}
bassWords = \lyricmode {
ho ho ho ho
}
\score {
\new ChoirStaff <<
\new Lyrics = "sopranos" \with {
% this is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "women" <<
\new Voice = "sopranos" {
\voiceOne
<< \global \sopMusic >>
}
\new Voice = "altos" {
\voiceTwo
<< \global \altoMusic >>
}
>>
\new Lyrics = "altos"
\new Lyrics = "tenors" \with {
% this is needed for lyrics above a staff
\override VerticalAxisGroup.staff-affinity = #DOWN
}
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" {
\voiceOne
<< \global \tenorMusic >>
}
\new Voice = "basses" {
\voiceTwo << \global \bassMusic >>
}
>>
\new Lyrics = "basses"
\context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
\context Lyrics = "altos" \lyricsto "altos" \altoWords
\context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
\context Lyrics = "basses" \lyricsto "basses" \bassWords
>>
}
|
Índice General