LilyPond snippets: Pitches

# Pitches

Pitches

## 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
      }
    >>

## Ajout d’une indication d’octave pour une seule voix

Lorsque plusieurs voix cohabitent sur une même portée, déterminer l’octaviation d’une voix affecte la position des notes de toutes les voix, jusqu’à la fin du crochet d’octaviation. Si l’octaviation ne doit s’appliquer qu’à une seule voix, le `Ottava_spanner_engraver` devrait être déplacé dans le contexte `Voice`.

    \layout {
      \context {
        \Staff
        \remove Ottava_spanner_engraver
      }
      \context {
        \Voice
        \consists Ottava_spanner_engraver
      }
    }

    {
      \clef bass
      << { <g d'>1~ q2 <c' e'> }
      \\
        {
          r2.
          \ottava -1
          <b,,, b,,>4 ~ |
          q2
          \ottava 0
          <c e>2
        }
      >>
    }

## Variante fine des notes profilées Aiken

Les notes profilées Aiken, lorsqu’elles sont blanches, deviennent difficile à distinguer avec des tailles de portée réduites, notamment en présence de ligne supplémentaire. Perdant du blanc sur leur intérieur les fait alors ressembler à des noires.

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

## Modification de la hauteur de hampes ligaturées

La hauteur de hampe des notes ligaturées est gérée par la sous-propriété `beamed-lengths` des `details` de l’objet `Stem`. Lorsqu’elle ne comporte qu’une seule valeur, cette hauteur s’appliquera à toutes les hampes. En présence de plusieurs arguments, le premier affectera les croches, le second les doubles croches, et ainsi de suite. Le dernier argument s’appliquera aussi aux notes de plus courte durée. Les arguments peuvent être des valeurs décimales.

    \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.beamed-lengths
      a8[ a] a16[ a] a32[ a] r16
    }

## Ambitus

Un ambitus indique la tessiture, autrement dit les hauteurs extrêmes d’une voix.

Seules seront affichées les altérations non comprises dans l’armure. Les objets `AmbitusNoteHead` peuvent avoir des lignes supplémentaires.

    \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'
        }
      }
    >>

## 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
    }

## Ambitus sur plusieurs voix

Si plusieurs voix se trouvent sur une même portée, on peut attribuer le graveur `Ambitus_engraver` au contexte `Staff` afin d’obtenir l’ambitus sur toutes les voix cumulées, non d’une seule des voix actives.

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

## Profilage des notes selon leur degré dans la gamme

La propriété `shapeNoteStyles` permet d’affecter un profil particulier à chaque degré de la gamme – à partir de l’armure ou de la propriété `tonic`. Ses valeurs sont constituées d’une liste de symboles, qu’il s’agisse de formes géométriques (`triangle`, `cross` ou `xcircle`) ou basés sur la tradition des graveurs américains (avec quelques noms de note latins).

LilyPond dispose de deux raccourcis, `\aikenHeads` et `\sacredHarpHeads`, permettant de reproduire d’anciens recueils de chansons américaines.

L’exemple suivant montre plusieurs manières de profiler les têtes de note, ainsi que la capacité de transposer tout en respectant la fonction harmonique de chaque note dans la gamme.

    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
      }
    }

## Changement automatique de l’orientation de hampe de la note médiane selon la mélodie

Afin de suivre la ligne mélodique, LilyPond peut inverser l’orientation de hampe de la note médiane, dès lors qu’aura été ajouté au contexte de voix le graveur `Melody_engraver`.

La propriété de contexte `suspendMelodyDecisions` permet, si besoin, de désactiver temporairement ce comportement.

    \relative c'' {
      \time 3/4
      a8 b g f b g |
      \set suspendMelodyDecisions = ##t
      a  b g f b g |
      \unset suspendMelodyDecisions
      c  b d c b c |
    }

    \layout {
      \context {
        \Voice
        \consists "Melody_engraver"
        \autoBeamOff
      }
    }

## Modification du texte des marques d’octaviation

En interne, la fonction `\ottava` détermine les propriétés `ottavation` (par ex. en `"8va"` ou `"8vb"`) et `middleCPosition`. Vous pouvez modifier le texte d’une marque d’octaviation en définissant `ottavation` après avoir fait appel à `ottava`.

Un texte bref est particulièrement utile lorsque l’octaviation est courte.

    {
      c'2
      \ottava #1
      \set Staff.ottavation = #"8"
      c''2
      \ottava #0
      c'1
      \ottava #1
      \set Staff.ottavation = #"Text"
      c''1
    }

## Réglage de l’affichage d’un ambitus

L’affichage d’un ambitus peut s’affiner pour répondre à vos préférences en matière d’esthétique.

    \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''
    }

## Modification de l’intervalle des lignes de la portée

`staffLineLayoutFunction` permet de changer le positionnement des notes. Dans cet exemple, la valeur qui lui est attribuée – `ly:pitch-semitones` – génère une gamme chromatique où l’écart entre chaque ligne et interligne de la portée est ramené au demi ton.

    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
        }
      >>
    }

## Transposition arbitraire d’une clef

Les clefs peuvent être transposées d’un intervalle différent de l’octave.

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

## Coloration des notes selon leur hauteur

Les têtes de note peuvent adopter une couleur différente selon leur hauteur ou leur nom ; la fonction utilisée ici fait même la distinction entre enharmoniques.

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

## Création d’une séquence de notes de même hauteur

Lorsque la musique comporte à de nombreuses reprises une même séquence sur des hauteurs différentes, la fonction musicale ci-dessous peut s’avérer fort utile. Elle considère une note dont seule la hauteur est utilisée.

Cet exemple reproduit le rythme utilisé tout au long de « Mars », l’une des pièces de l’œuvre de Gustav Holst « Les planètes ».

    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
    }

## 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,
    }

## Orientation de la tête d’un « fa » profilé en cas de fusion

Grâce à la propriété `NoteCollision.fa-merge-direction`, l’orientation de la tête des notes profilées « fa » (`fa`, `faThin`, etc.) peut se gérer indépendamment de la direction des hampes lorsque deux voix ayant la même hauteur et des directions de hampes différentes sont fusionnées. Lorsque cette propriété n’est pas activée sera utilisée la variante « descendante ».

    {
      \clef bass

      << { \aikenHeads
           f2
           \override Staff.NoteCollision.fa-merge-direction = #UP
           f2 }
      \\ { \aikenHeads
           f2
           f2 }
      >>
    }

## Impression forcée d’un bécarre avant une accidentelle

L’exemple suivant indique comment forcer l’impression d’un bécarre avant un changement d’altération.

    \relative c' {
      \key es \major
      bes c des
      \tweak Accidental.restore-first ##t
      eis
    }

## Impression forcée de la clef

Lorsqu’une clef a déjà été imprimée et qu’aucun changement n’est intervenu, LilyPond ignore toute répétition de la commande `\clef` puisque le signe est le même. Il est cependant possible de rappeler la clef à s’imprimer à l’aide de l’instruction `\set Staff.forceClef = ##t`.

    \relative c' {
      \clef treble
      c1
      \clef treble
      c1
      \set Staff.forceClef = ##t
      c1
      \clef treble
      c1
    }

## Génération de notes aléatoires

Le fragment de code Scheme ci-dessous génère aléatoirement 24 notes (ou autant que nécessaire), à partir de l’heure courante (ou un nombre quelconque donné en argument, afin d’obtenir toujours les mêmes notes aléatoires). Pour obtenir une autre série de notes, il suffit de changer ce nombre.

    \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))))
      }
    }

## Non répétition de l’altération après saut de ligne sur liaison de prolongation

Cet exemple illustre comment, lorsqu’une note affublée d’une altération accidentelle est prolongée, ne pas répéter cette altération après un saut de ligne.

    \relative c'' {
      \override Accidental.hide-tied-accidental-after-break = ##t
      cis1~ cis~
      \break
      cis
    }

## Conservation de la taille lors d’un changement de clef

Lorsqu’un changement de clef intervient, le nouveau signe s’imprime dans une taille inférieure. On peut y déroger avec `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
    }

## Exemple de musique « Makam »

Le « makam » est une forme de mélodie turque qui utilise des altérations d’un neuvième de ton.

Consultez le fichier d’initialisation ‘`ly/makam.ly`’ pour plus de détails sur les hauteurs et altérations utilisées (voir le chapitre 5.7.4 - Autres sources d’information du manuel d’initiation pour le localiser).

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

## 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
    }

## 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 |
    }

## Easy play – chiffres en lieu et place des lettres

En mode « easy play », les têtes de note utilisent la propriété `note-names` attachée à l’objet `NoteHead` pour déterminer ce qui apparaîtra dans la tête. Intervenir sur cette propriété permet d’imprimer un chiffre correspondant au degré dans la gamme.

La création d’un graveur dédié permet de traiter toutes les notes.

    #(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
    }

## 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 { }
    }

## Suppression des bécarres superflus

En accord avec les règles traditionnelles de l’écriture musicale, on grave un bécarre avant un dièse ou un bémol si la note était auparavant affublée d’un double-dièse ou double-bémol. Pour adopter un comportement plus contemporain, la propriété `extraNatural` du contexte `Staff` doit se voir attribuer la valeur `##f` (faux).

    \relative c'' {
      aeses4 aes ais a
      \set Staff.extraNatural = ##f
      aeses4 aes ais a
    }

## Suppression des bécarres superflus lors d’un changement de tonalité

Après un changement de tonalité, un bécarre est imprimé pour annuler toute altération précédente. Ce comportement s’annule en désactivant la propriété `printKeyCancellation` du contexte `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
    }

## 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" >>
    }

## Séparation entre altérations annulées et nouvelle armure

Les altérations supprimées lors d’un changement de tonalité sont par défaut accolées à la nouvelle armure. Ce comportement peut s’adapter grâce à la propriété `break-align-orders` de l’objet `BreakAlignment`.

La valeur de `break-align-orders` est constituée d’un vecteur à trois composantes listant l’ordre des éléments à l’occasion d’une rupture. Seule la deuxième liste est ici modifiée, `key-cancellation` étant déplacé avant `staff-bar`. En ne modifiant que la deuxième liste, cette modification dans l’ordre d’apparition des éléments sera effective seulement en cours de système, et non en début ou fin de ligne.

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

## Transposition et réduction du nombre d’altérations accidentelles

Cet exemple, grâce à un peu de code Scheme, donne la priorité aux enharmoniques afin de limiter le nombre d’altérations supplémentaires. La règle applicable est :

- Les altérations doubles sont supprimées
- Si dièse -> Do
- Mi dièse -> Fa
- Do bémol -> Si
- Fa bémol -> Mi

Cette façon de procéder aboutit à plus d’enharmoniques naturelles.

    #(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 { }
    }

## Exemple de makam turc

Ce canevas utilise le début d’un saz semai turc bien connu du répertoire aux fins d’illustrer certains éléments de la notation musicale turque.

    \paper { tagline = ##f }

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

## 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
    }

## 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
        }
      >>
    }

#### LilyPond — Morceaux choisis v2.24.4 (branche stable).