[ << Simultaneous notes ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Top ] | [ > ] |
Staff notation
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < Staff notation ] | [Plus haut: Staff notation ] | [ > ] |
Un ambitus par voix
L’ambitus
peut être individualisé par voix. Il faut en pareil
cas éviter qu’ils se chevauchent.
\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 } >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Ajout d’une portée supplémentaire
Vous pouvez ajouter une nouvelle portée, éventuellement de manière temporaire, après le début d’un morceau.
\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 } } >> }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Ajout d’une portée supplémentaire après un saut de ligne
Lorsqu’une nouvelle portée vient s’ajouter après un saut de ligne,
LilyPond préserve un espace juste avant le saut de ligne – pour un
éventuel changement d’armure qui, quoi qu’il en soit, ne sera pas
imprimé. L’astuce consiste alors, comme indiqué dans l’exemple suivant,
à ajuster Staff.explicitKeySignatureVisibility
.
\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 } >> } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Ajout d’indicateurs à une portée dédoublée après un saut de ligne
Dans cet extrait sont définies les commandes \splitStaffBarLine
,
convUpStaffBarLine
et convDownStaffBarLine
. Ces commandes
ajoutent une double flèche après la dernière barre de mesure d’une portée,
indiquant par là que ses différentes voix disposeront de leur propre
portée à la ligne suivante.
#(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 } } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Indication de l’instrument cité dans l’accompagnement d’une partition pour chœur
Lorsque le nombre d’instruments cités dans la réduction pour piano se
multiplie, vous pourriez avoir intérêt à créer votre propre fonction
pour gérer ces repères. La fonction musicale \cueWhile
prend
quatre arguments : la musique d’où provient la citation, telle que
définie par \addQuote
, le nom qui sera mentionné en regard de
cette citation, son positionnement – UP
ou DOWN
selon
qu’il sera attribué à \voiceOne
et placé au-dessus ou
\voiceTwo
et placé en dessous – et enfin la musique du piano
qui interviendra en parallèle. Le nom de l’instrument en question
viendra s’aligner sur la gauche de la citation. Bien que vous puissiez
effectuer plusieurs citations, elle ne peuvent être simultanées.
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 } >> >> }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Ajout de marques temporelles à un long glissando
Lorsqu’un glissando s’étend dans la durée, on trouve parfois des indications temporelles, matérialisées par des hampes sans tête de note. De telles hampes permettent aussi d’indiquer des éléments intermédiaires.
L’alignement des hampes avec la ligne de glissando peut requérir quelques aménagements.
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 | }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Numérotation des mesures et alternatives
Deux méthodes alternatives vous permettent de gérer la numérotation des mesures en cas de reprises.
\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 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Ambitus après l’armure
L’ambitus se place par défaut à gauche de la clef. La fonction
\ambitusAfter
permet cependant de modifier ce positionnement ;
sa syntaxe est \ambitusAfter grob-interface
– voir
Graphical Object Interfaces pour une liste des valeurs de
grob-interface
possibles.
L’un des cas d’usage est d’insérer l’ambitus entre l’armure et la métrique.
\new Staff \with { \consists Ambitus_engraver } \relative { \ambitusAfter key-signature \key d \major es'8 g bes cis d2 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Numéros de mesure centrés
Les partitions pour grands ensembles disposent souvent de la
numérotation des mesures centrée en dessous du système. L’extrait
ci-dessous indique comment le Measure_counter_engraver
permet de
répondre à cette pratique. Le graveur est ici ajouté à un contexte
Dynamics
.
Il s’agit ici de code historique. Dès LilyPond 2.23.3, un simple
\set Score.centerBarNumbers = ##t
suffit.
\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 } >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Modification des barres de mesure par défaut
Les barres de mesure par défaut peuvent se modifier grâce à leur
redéfinition au sein d’un contexte Score
.
% http://lsr.di.unimi.it/LSR/Item?id=964 %%=> http://lists.gnu.org/archive/html/lilypond-user/2014-03/msg00126.html %%=> http://lilypond.1069038.n5.nabble.com/Changing-the-default-end-repeat-bracket-tc169357.html \layout { \context { \Score %% Changing the defaults from engraver-init.ly measureBarType = #"!" startRepeatBarType = #"[|:" endRepeatBarType = #":|]" doubleRepeatBarType = #":|][|:" } } %% 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 "|." }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Modification du nombre de lignes de la portée
Le nombre de lignes d’une portée se modifie par adaptation de la
propriété line-count
du 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 } >> }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Modification de la taille d’une portée
Bien que le meilleur moyen de définir la taille des portées consiste à
utiliser #(set-global-staff-size xx)
, une portée en particulier
peut se redimensionner en affectant d’un coefficient ses propriétés
staff-space
et 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 } >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Impression de papier à musique
Rien n’est plus simple, pour obtenir une feuille blanche avec des
portées, que de générer des mesures vides, de supprimer le
Bar_number_engraver
du contexte Score
, et les
Time_signature_engraver
, Clef_engraver
et
Bar_engraver
du contexte 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 } %}
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Création d’armures personnalisées
LilyPond accepte les armures personnalisées. Dans cet exemple, il s’agit d’une tonalité de ré mineur à laquelle on rajoute des bémols.
\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, }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Création de doigtés sur deux caractères
Il est tout à fait possible de noter un doigté supérieur à 5.
\relative c' { c1-10 c1-50 c1-36 c1-29 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Hampes interportées
L’exemple ci-dessous illustre l’utilisation du Span_stem_engraver
et de la commande \crossStaff
afin de connecter des hampes entre
les portées.
Nul n’est besoin de spécifier la taille des hampes ; le graveur calcule automatiquement la distance relative des têtes de note avec les portées.
\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 } >> }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Indicateur de regroupement et portée unique
Lorsque, dans des regroupements de type ChoirStaff
ou
StaffGroup
, une seule portée est active, aucune indication n’est
donnée en début de ligne. Affecter à la propriété collapse-height
un nombre de lignes inférieur à celui de la portée permet de modifier ce
comportement par défaut.
Notez bien que dans le cas des PianoStaff
et GrandStaff
,
pour lesquels le délimiteur de système est une accolade et non un
crochet, il ne s’agit pas de la même propriété – voir le deuxième
système de l’exemple.
\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 } >> }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Allongement d’une marque de trille (TrillSpanner
)
La propriété minimum-length
d’une extension de trille – objet
TrillSpanner
– n’est effective qu’après un appel explicite à la
procédure set-spacing-rods
.
Pour ce faire, la propriété set-spacing-rods
doit être définie à
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) }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Rappel du glissando à l’occasion d’une alternative
Un glissando qui se prolonge sur plusieurs sections \alternative
peut se rappeler à l’aide d’une note d’ornement supplémentaire et
masquée, à laquelle sera attaché le départ du glissando, ce dans chaque
bloc \alternative
. Cette note d’ornement devrait avoir la même
hauteur que la note où commençait le glissando originel. Ceci est géré
par une fonction musicale qui prendra en argument la hauteur de la note
d’ornement.
Dans le cadre d’une musique polyphonique, il ne faudra pas oublier d’ajouter une note d’ornement dans toutes les autres voix afin de préserver la synchronisation.
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 << \new Voice { \clef "G_8" \music } >> \new TabStaff << \new TabVoice { \clef "moderntab" \music } >> >> }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Liaison de prolongation aplatie
La fonction ici présentée prend en argument le Tie.stencil
par
défaut et en recalcule le résultat d’après les étendues de cette valeur
par défaut.
Des ajustements plus poussés sont possibles, en apportant des
dérogations à Tie.details.height-limit
ou à l’aide de la fonction
\shape
. La définition personnalisée peut aussi se modifier à la
volée.
%% 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 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Adaptation de la largeur de mesure selon le MetronomeMark
Par défaut, les indications métronomiques n’influencent en rien l’espacement horizontal.
Une simple dérogation, comme dans la deuxième partie de cet exemple, fournit la solution.
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 } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Glissando par dessus un objet graphique
Un glissando peut sauter un objet NoteColumn
.
\relative c' { a2 \glissando \once \override NoteColumn.glissando-skip = ##t f''4 d, }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Incipit
Dans le cadre de la transcription de musique mensurale, un « incipit » en début de pièce permet d’indiquer tonalité et tempo originaux. Si les musiciens sont aujourd’hui habitués aux barres de mesure qui mettent en évidence la structure rythmique, elles n’étaient pas courantes à l’époque – le mètre variait souvent après quelques notes. Dans une forme de compromis, les barres de mesures sont régulièrement imprimées entre les portées.
%% With 2.23. this throws: %% programming error: Loose column does not have right side to attach to. %% Likely "Hidden BarLine during note yields programming error" %% https://gitlab.com/lilypond/lilypond/-/issues/4084 %% --Harm %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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 } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Insertion d’un fragment dans un markup au-dessus de la portée
La commande \markup
est polyvalente. Dans cet exemple, elle
contient un bloc \score
plutôt que du texte ou une marque.
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 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Impression de la corde aiguë d’un TabStaff
en bas
Il est d’usage, en matière de tablature, d’imprimer la première corde en
haut. Il est toutefois possible de la positionner en bas grâce à une
modification de la propriété de contexte stringOneTopmost
.
Définir ce réglage au sein d’un bloc \layout
l’appliquera à
l’intégralité du contexte.
%\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 } >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Tablature en lettres
Une tablature peut comporter des lettres en lieu et place des chiffres.
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 } >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Saut de ligne et glissando
L’affectation de la valeur #t
à la propriété breakable
,
combinée à after-line-breaking
, permet la rupture d’une
indication de glissando lors d’un saut de ligne.
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 | }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Empâtement de certaines lignes d’une portée
Vous pourriez avoir envie, dans un but pédagogique, de rendre certaines
lignes d’une portée plus épaisses que les autres, comme la ligne médiane,
ou bien pour mettre en exergue la ligne portant la clef de sol. Il
suffit pour cela d’ajouter une ligne qui sera accolée à celle qui doit
être mise en évidence, grâce à la propriété line-positions
de
l’objet StaffSymbol
.
{ \override Staff.StaffSymbol.line-positions = #'(-4 -2 -0.2 0 0.2 2 4) d'4 e' f' g' }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Compteur de mesures
Le code ci-dessous permet, de façon détournée, d’afficher un compteur de mesures à l’aide d’une répétition en pourcent rendue transparente.
<< \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 } } >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Présentation à l’ancienne (barres de mesure entre les portées)
En musique mensurale, les barres de mesure ne traversent pas les
portées. Pour obtenir ce résultat il faudra définir
measureBarType
à "-span|"
et utiliser un regroupement de
portées permettant l’extension des barres entre les portées, tel un
StaffGroup
.
\layout { \context { \Staff measureBarType = "-span|" } } music = \fixed c'' { c1 d2 \section e2 f1 \fine } \new StaffGroup << \new Staff \music \new Staff \music >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Modification de la pente de l’extension d’octaviation
Il est possible d’adapter la pente d’une indication d’octaviation.
\relative c'' { \override Staff.OttavaBracket.stencil = #ly:line-spanner::print \override Staff.OttavaBracket.bound-details = #`((left . ((Y . 0) (attach-dir . ,LEFT) (padding . 0) (stencil-align-dir-y . ,CENTER))) (right . ((Y . 5.0) ; Change the number here (padding . 0) (attach-dir . ,RIGHT) (text . ,(make-draw-dashed-line-markup (cons 0 -1.2)))))) \override Staff.OttavaBracket.left-bound-info = #ly:horizontal-line-spanner::calc-left-bound-info-and-text \override Staff.OttavaBracket.right-bound-info = #ly:horizontal-line-spanner::calc-right-bound-info \ottava #1 c1 c'''1 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Imbrications de regroupements de portées
La propriété systemStartDelimiterHierarchy
permet de créer des
regroupements imbriqués complexes. La commande
\set StaffGroup.systemStartDelimiterHierarchy
prend en
argument la liste alphabétique des sous-groupes à hiérarchiser. Chaque
sous-groupe peut être affublé d’un délimiteur particulier. Chacun des
regroupements intermédiaires doit être borné par des parenthèses. Bien
que des éléments de la liste puissent être omis, le premier délimiteur
embrassera toujours l’intégralité des portées. Vous disposez des quatre
délimiteurs SystemStartBar
, SystemStartBracket
,
SystemStartBrace
et 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 } >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Armures inhabituelles
La commande \key
détermine la propriété keyAlterations
d’un
contexte Staff
.
Des armures inhabituelles peuvent être spécifiées en modifiant directement cette propriété. Il s’agit en l’occurrence de définir une liste :
\set Staff.keyAlterations = #`(((octave . pas) . altération) ((octave . pas) . altération) @dots{})
dans laquelle, et pour chaque élément, octave
spécifie l’octave
(0 pour celle allant du do médium au si supérieur), pas
la note
dans cette octave (0 pour do et 6 pour si), et altération
sera
,SHARP
ou ,FLAT
ou ,DOUBLE-SHARP
, etc. (attention à
la virgule en préfixe).
Une formulation abrégée – (pas . altération)
– signifie que
l’altération de l’élément en question sera valide quelle que soit
l’octave.
En ce qui concerne les gammes microtonales dans lesquelles un
« dièse » n’est pas d’un centième, altération
se réfère à un
deux-centième de ton entier.
\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 | }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Numérotation de groupes de mesures
Cet extrait illustre l’utilisation du Measure_counter_engraver
aux fins de numéroter un groupe de mesures successives. La section à
numéroter peut éventuellement comporter des reprises.
Le graveur doit être ajouté au contexte approprié. Il est ici attaché au
contexte Staff
, mais pourrait l’être à un contexte
Dynamics
.
Le compteur est lancé par \startMeasureCount
et arrêté par
\stopMeasureCount
. La numérotation commence à 1
par
défaut, comportement qui peut se modifier à l’aide de la propriété
count-from
.
Lorsqu’une mesure s’étend après un saut de ligne, le numéro y est alors répété, entre parenthèses.
\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 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Orchestre, chœur et piano
Ce canevas illustre l’utilisation de contextes StaffGroup
pour
regrouper les instruments selon leur famille, imbriqués dans un
GrandStaff
, ainsi que le recours à la fonction \transpose
pour les instruments transpositeurs. Dans tous les identificateurs, la
musique est stockée en ut. Les notes peuvent tout aussi bien être
saisies en ut ou dans la tonalité particulière de l’instrument avant
d’être transposées puis affectées à une variable.
#(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 { } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Print ChordNames with same root and different bass as slash and bass-note
To print subsequent ChordNames
only differing in its bass note
as slash and bass note use the here defined engraver. The behaviour may
be controlled in detail by the chordChanges
context property.
#(define Bass_changes_equal_root_engraver (lambda (ctx) "For sequential @code{ChordNames} with same root, but different bass, the root markup is dropped: D D/C D/B -> D /C /B The behaviour may be controlled by setting the @code{chordChanges} context-property." (let ((chord-pitches '()) (last-chord-pitches '()) (bass-pitch #f)) (make-engraver ((initialize this-engraver) (let ((chord-note-namer (ly:context-property ctx 'chordNoteNamer))) ;; Set 'chordNoteNamer, respect user setting if already done (ly:context-set-property! ctx 'chordNoteNamer (if (procedure? chord-note-namer) chord-note-namer note-name->markup)))) (listeners ((note-event this-engraver event) (let* ((pitch (ly:event-property event 'pitch)) (pitch-name (ly:pitch-notename pitch)) (pitch-alt (ly:pitch-alteration pitch)) (bass (ly:event-property event 'bass #f)) (inversion (ly:event-property event 'inversion #f))) ;; Collect notes of the chord ;; - to compare inversed chords we need to collect the bass note ;; as usual member of the chord, whereas an added bass must be ;; treated separate from the usual chord-notes ;; - notes are stored as pairs containing their ;; pitch-name (an integer), i.e. disregarding their octave and ;; their alteration (cond (bass (set! bass-pitch pitch)) (inversion (set! bass-pitch pitch) (set! chord-pitches (cons (cons pitch-name pitch-alt) chord-pitches))) (else (set! chord-pitches (cons (cons pitch-name pitch-alt) chord-pitches))))))) (acknowledgers ((chord-name-interface this-engraver grob source-engraver) (let ((chord-changes (ly:context-property ctx 'chordChanges #f))) ;; If subsequent chords are equal apart from their bass, ;; reset the 'text-property. ;; Equality is done by comparing the sorted lists of this chord's ;; elements and the previous chord. Sorting is needed because ;; inverted chords may have a different order of pitches. ;; `chord-changes' needs to be true (if (and bass-pitch chord-changes (equal? (sort chord-pitches car<) (sort last-chord-pitches car<))) (ly:grob-set-property! grob 'text (make-line-markup (list (ly:context-property ctx 'slashChordSeparator) ((ly:context-property ctx 'chordNoteNamer) bass-pitch (ly:context-property ctx 'chordNameLowercaseMinor)))))) (set! last-chord-pitches chord-pitches) (set! chord-pitches '()) (set! bass-pitch #f)))) ((finalize this-engraver) (set! last-chord-pitches '())))))) myChords = \chordmode { %\germanChords \set chordChanges = ##t d2:m d:m/cis d:m/c \set chordChanges = ##f d:m/b e1:7 \set chordChanges = ##t e \break \once \set chordChanges = ##f e1/f e2/gis e/+gis e e:m/f d:m d:m/cis d:m/c \set chordChanges = ##f d:m/b } << \new ChordNames \with { \consists #Bass_changes_equal_root_engraver } \myChords \new Staff \myChords >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Impression des paroles dans la portée
Des paroles peuvent venir s’inscrire dans la portée même. Ces paroles
sont décalées par la dérogation
\override LyricText.extra-offset = #'(0 . dimension)
; des
commandes similaires s’occuperont des extenseurs et des tirets.
Le décalage optimal ne peut s’obtenir qu’en procédant à tâtons.
<< \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 } >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Citation d’une autre voix
Les types d’événements pris en charge pour la citation sont déterminés
par la propriété quotedEventTypes
. Par défaut, sa valeur est
fixée à (note-event rest-event tie-event beam-event
tuplet-span-event)
, ce qui signifie que seuls les notes, silences,
liaisons, ligatures et n-olets seront mentionnés par
\quoteDuring
.
Dans l’exemple suivant, le quart de soupir n’est pas reproduit puisque
rest-event
n’est pas mentionné parmi les quotedEventTypes
.
Pour connaître la liste des types d’événements, reportez-vous à la rubrique Music classes de la référence des propriétés internes.
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. } } >> >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Citation d’une autre voix et transposition
Les citations tiennent compte de la transposition, aussi bien celle de
l’instrument d’origine que celle de la partie où elles interviennent.
Dans l’exemple suivant, tous les instruments sont en tonalité de concert
et seront repris par un instrument en fa. Le destinataire de la citation
peut à son tour transposer à l’aide de la commande \transpose
.
En pareil cas, toutes les hauteurs seront transposées, y compris celles
de la citation.
\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" >> }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Retrait de l’accolade à la première ligne d’une pièce pour piano
Dans cet extrait est supprimée la première accolade d’un
PianoStaff
ou d’un GrandStaff
.
Ceci peut s’avérer utile pour couper et coller l’image générée dans de la musique préexistante.
Est utilisée la fonction \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 } } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Masquage de la première ligne si elle est vide
Par défaut, le premier système comportera absolument toutes les portées.
Si vous préférez masquer les portées vides y compris pour le premier
système, vous devrez activer la propriété remove-first
du
VerticalAxisGroup
. Mentionnée dans un bloc \layout
, cette
commande agira de manière globale. Pour qu’elle ne soit effective que
pour une portée particulière, vous devrez également spécifier le
contexte (Staff
pour qu’il ne concerne que la portée en cours) en
préfixe de la propriété.
La première ligne inférieure du deuxième StaffGroup
est bien
présente, pour la simple raison que le réglage en question ne s’applique
qu’à la portée dans laquelle il a été inscrit.
\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 } >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Séparation visuelle entre les systèmes
La séparation entre deux systèmes consécutifs peut être mise en
évidence par n’importe quel markup. LilyPond dispose à cet effet
d’une double oblique inversée : \slashSeparator
.
\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 >> } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Barre de mesure en encoche
Lorsque les barres de mesure ne sont là que dans un but de coordination et non pour accentuer le rythme, il arrive souvent qu’elles se présentent sous la forme d’une simple encoche.
\relative c' { \set Score.measureBarType = #"'" c4 d e f g4 f e d c4 d e f g4 f e d \bar "|." }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Métrique entre parenthèses
Une métrique peut être mise entre parenthèses.
\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 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Métrique entre parenthèses – méthode 3
Autre manière de mettre la métrique entre parenthèses.
\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 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Affinage des propriétés d’une clef
Modifier le glyphe, la position de la clef ou son octaviation ne
changeront pas la position des notes ; il faut pour y parvenir modifier
aussi la position du do médium. La redéfinition préalable de
middleCClefPosition
permet de placer l’armure sur les bonnes
lignes. Le positionnement est relatif à la ligne médiane, un nombre
positif faisant monter, un nombre négatif abaissant.
Par exemple, la commande \clef "treble_8"
équivaut à définir
clefGlyph
, clefPosition
– qui contrôle la position
verticale de la clef – middleCPosition
et clefOctavation
.
Une nouvelle clef apparaîtra dès lors que l’une de ces propriétés, à
l’exception de middleCPosition
, aura été modifiée.
Les exemples qui suivent illustrent les différentes possibilités de définir ces propriétés manuellement. Sur la première ligne, la position relative des notes par rapport aux clefs est préservée, ce qui n’est pas le cas pour la deuxième ligne.
{ % 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 }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Deux \partCombine
sur une même portée
La fonction \partCombine
prend deux expressions musicales
contenant chacune une partie et les distribue dans quatre contextes
Voice
nommés « two », « one », « solo » et « chords » selon le
moment et la manière dont ces parties fusionnent en une voix commune.
Les voix issues de \partCombine
peuvent disposer de leurs
propres propriétés de mise en forme définies de manière habituelle. Sont
ici définies des extensions à \partCombine
de sorte à faciliter
le placement de quatre voix sur une seule portée.
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 ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Indication de regroupement de portées par un rectangle
Un regroupement de portées sera indiqué par un simple rectangle
– SystemStartSquare
– en début de ligne dès lors que vous le
mentionnerez explicitement au sein d’un contexte StaffGroup
ou
ChoirStaff
.
\score { \new StaffGroup { << \set StaffGroup.systemStartDelimiter = #'SystemStartSquare \new Staff { c'4 d' e' f' } \new Staff { c'4 d' e' f' } >> } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Utilisation d’autoChange
avec plus d’une voix
L’instruction \autoChange
est opérationnelle y compris en
présence de voix multiples.
\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 } >> }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Utilisation de lignes de repères dans une partition « à la française »
Le recours à des contextes MarkLine
(tel qu’indiqué dans le
LSR1010) dans une
partition « à la française » peut s’avérer problématique lorsque toutes
les portées entre deux contextes Markline
sont absentes d’un
système. La présence du Keep_alive_together_engraver
au sein de
chacun des StaffGroup
permet de maintenir actif le
MarkLine
uniquement lorsque les autres portées du regroupement
sont elles-mêmes actives.
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 \consists Staff_collecting_engraver \override VerticalAxisGroup.remove-empty = ##t \override VerticalAxisGroup.remove-layer = #'any \override VerticalAxisGroup.staff-affinity = #DOWN \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = 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 \remove Staff_collecting_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 } >> >> }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Alignement vertical de StaffGroup
s sans SystemStartBar
Cet extrait indique comment obtenir des regroupements StaffGroup
alignés verticalement, disposant chacun de leur indication de groupe
SystemStartBar
, sans qu’il ne soient connectés entre eux.
#(set-global-staff-size 18) \paper { indent = 0 ragged-right = ##f print-all-headers = ##t } \layout { \context { \StaffGroup \consists Text_mark_engraver \consists Staff_collecting_engraver systemStartDelimiterHierarchy = #'(SystemStartBrace (SystemStartBracket a b)) } \context { \Score \remove Text_mark_engraver \remove Staff_collecting_engraver \override SystemStartBrace.style = #'bar-line \omit SystemStartBar \override SystemStartBrace.padding = #-0.1 \override SystemStartBrace.thickness = #1.6 \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' { \textMark \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' { \textMark \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' { \textMark \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 } } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ > ] |
Crochet de reprise sous les chiffrages d’accord
L’ajout du Volta_engraver
à la bonne portée permet d’imprimer les
crochets de reprise entre les chiffrages et la portée.
\score { << \chords { c1 c1 } \new Staff \with { \consists "Volta_engraver" } { \repeat volta 2 { c'1 } \alternative { c' } } >> \layout { \context { \Score \remove "Volta_engraver" } } }
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ Editorial annotations > ] |
Volta multiportée
L’ajout du Volta_engraver
à la portée appropriée permet de
répéter les indications de reprise qui normalement n’apparaissent que
sur la portée supérieure de la partition.
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 >> >>
[ << Staff notation ] | [Racine][Table des matières] | [ Editorial annotations >> ] |
[ < ] | [Plus haut: Staff notation ] | [ Editorial annotations > ] |