LilyPond snippets: Keyboards

# Keyboards

These snippets illustrate the Notation Reference, section Keyboard and other multi-staff instruments.

## Accordion-discant symbols

Accordion discant-specific symbols are added using `\markup`. The vertical placement of the symbols can be tweaked by changing the `\raise` arguments.

    discant = \markup {
      \musicglyph #"accordion.accDiscant"
    }
    dot = \markup {
      \musicglyph #"accordion.accDot"
    }

    \layout { ragged-right = ##t }

    % 16 voets register
    accBasson = ^\markup {
      \combine
      \discant
      \raise #0.5 \dot
    }

    % een korig 8 en 16 voets register
    accBandon = ^\markup {
      \combine
        \discant
        \combine
          \raise #0.5 \dot
          \raise #1.5 \dot
    }

    accVCello = ^\markup {
      \combine
        \discant
        \combine
          \raise #0.5 \dot
          \combine
            \raise #1.5 \dot
            \translate #'(1 . 0) \raise #1.5 \dot
    }

    % 4-8-16 voets register
    accHarmon = ^\markup {
      \combine
        \discant
        \combine
          \raise #0.5 \dot
          \combine
            \raise #1.5 \dot
            \raise #2.5 \dot
    }

    accTrombon = ^\markup {
      \combine
        \discant
        \combine
          \raise #0.5 \dot
          \combine
            \raise #1.5 \dot
            \combine
              \translate #'(1 . 0) \raise #1.5 \dot
              \translate #'(-1 . 0) \raise #1.5 \dot
    }

    % eenkorig 4 en 16 voets register
    accOrgan = ^\markup {
      \combine
        \discant
        \combine
          \raise #0.5 \dot
          \raise #2.5 \dot
    }

    accMaster = ^\markup {
      \combine
        \discant
        \combine
          \raise #0.5 \dot
          \combine
            \raise #1.5 \dot
            \combine
              \translate #'(1 . 0) \raise #1.5 \dot
              \combine
                \translate #'(-1 . 0) \raise #1.5 \dot
                \raise #2.5 \dot
    }

    accAccord = ^\markup {
      \combine
        \discant
        \combine
          \raise #1.5 \dot
          \combine
            \translate #'(1 . 0) \raise #1.5 \dot
            \combine
              \translate #'(-1 . 0) \raise #1.5 \dot
              \raise #2.5 \dot
    }

    accMusette = ^\markup {
      \combine
        \discant
        \combine
          \raise #1.5 \dot
          \combine
            \translate #'(1 . 0) \raise #1.5 \dot
            \translate #'(-1 . 0) \raise #1.5 \dot
    }

    accCeleste = ^\markup {
      \combine
        \discant
        \combine
          \raise #1.5 \dot
          \translate #'(-1 . 0) \raise #1.5 \dot
    }

    accOboe = ^\markup {
      \combine
        \discant
        \combine
          \raise #1.5 \dot
          \raise #2.5 \dot
    }

    accClarin = ^\markup {
      \combine
        \discant
        \raise #1.5 \dot
    }

    accPiccolo = ^\markup {
        \combine
           \discant
           \raise #2.5 \dot
    }

    accViolin = ^\markup {
      \combine
        \discant
        \combine
          \raise #1.5 \dot
          \combine
            \translate #'(1 . 0) \raise #1.5 \dot
            \raise #2.5 \dot
    }

    \relative c'' {
      c4 d\accBasson e f
      c4 d\accBandon e f
      c4 d\accVCello e f
      c4 d\accHarmon e f
      c4 d\accTrombon e f
      \break
      c4 d\accOrgan e f
      c4 d\accMaster e f
      c4 d\accAccord e f
      c4 d\accMusette e f
      c4 d\accCeleste e f
      \break
      c4 d\accOboe e f
      c4 d\accClarin e f
      c4 d\accPiccolo e f
      c4 d\accViolin e f
    }

## Clusters

Clusters are a device to denote that a complete range of notes is to be played.

    fragment = \relative c' {
      c4 f <e d'>4
      <g a>8 <e a> a4 c2 <d b>4
      e2 c
    }

    <<
      \new Staff \fragment
      \new Staff \makeClusters \fragment
    >>

## Controlling the placement of chord fingerings

The placement of fingering numbers can be controlled precisely.

    \relative c' {
      \set fingeringOrientations = #'(left)
      <c-1 e-3 a-5>4
      \set fingeringOrientations = #'(down)
      <c-1 e-3 a-5>4
      \set fingeringOrientations = #'(down right up)
      <c-1 e-3 a-5>4
      \set fingeringOrientations = #'(up)
      <c-1 e-3 a-5>4
      \set fingeringOrientations = #'(left)
      <c-1>2
      \set fingeringOrientations = #'(down)
      <e-3>2
    }

## Creating slurs across voices

In some situations, it may be necessary to create slurs between notes from different voices.

The solution is to add invisible notes to one of the voices, using `\hideNotes`.

This example is measure 235 of the Ciaconna from Bach’s 2nd Partita for solo violin, BWV 1004.

    \relative c' {
      <<
        {
          d16( a') s a s a[ s a] s a[ s a]
        }
        \\
        {
          \slurUp
          bes,16[ s e](
          \hideNotes a)
          \unHideNotes f[(
          \hideNotes a)
          \unHideNotes fis](
          \hideNotes a)
          \unHideNotes g[(
          \hideNotes a)
          \unHideNotes gis](
          \hideNotes a)
        }
      >>
    }

## Fine-tuning pedal brackets

The appearance of pedal brackets may be altered in different ways.

    \paper { ragged-right = ##f }
    \relative c'' {
      c2\sostenutoOn c
      c2\sostenutoOff c
      \once \override Staff.PianoPedalBracket #'shorten-pair = #'(-7 . -2)
      c2\sostenutoOn c
      c2\sostenutoOff c
      \once \override Staff.PianoPedalBracket #'edge-height = #'(0 . 3)
      c2\sostenutoOn c
      c2\sostenutoOff c
    }

## Indicating cross-staff chords with arpeggio bracket

An arpeggio bracket can indicate that notes on two different staves are to be played with the same hand. In order to do this, the `PianoStaff` must be set to accept cross-staff arpeggios and the arpeggios must be set to the bracket shape in the `PianoStaff` context.

(Debussy, Les collines d’Anacapri, m. 65)

    \new PianoStaff <<
      \set PianoStaff.connectArpeggios = ##t
      \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket
      \new Staff {
        \relative c' {
          \key b \major
          \time 6/8
          b8-.(\arpeggio fis'-.\> cis-. e-. gis-. b-.)\!\fermata^\laissezVibrer
          \bar "||"
        }
      }
      \new Staff {
        \relative c' {
          \clef bass
          \key b \major
          <<
            {
              <a e cis>2.\arpeggio
            }
            \\
            {
              <a, e a,>2.
            }
          >>
        }
      }
    >>

## Jazz combo template

This is quite an advanced template, for a jazz ensemble. Note that all instruments are notated in `\key c \major`. This refers to the key in concert pitch; the key will be automatically transposed if the music is within a `\transpose` section.

    \header {
      title = "Song"
      subtitle = "(tune)"
      composer = "Me"
      meter = "moderato"
      piece = "Swing"
      tagline = \markup {
        \column {
          "LilyPond example file by Amelie Zapf,"
          "Berlin 07/07/2003"
        }
      }
    }

    %#(set-global-staff-size 16)
    \include "english.ly"

    %%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%%

    sl = {
      \override NoteHead #'style = #'slash
      \override Stem #'transparent = ##t
    }
    nsl = {
      \revert NoteHead #'style
      \revert Stem #'transparent
    }
    crOn = \override NoteHead #'style = #'cross
    crOff = \revert NoteHead #'style

    %% insert chord name style stuff here.

    jazzChords = { }

    %%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%%

    global = { \time 4/4 }

    Key = { \key c \major }

    % ############ Horns ############

    % ------ Trumpet ------
    trpt = \transpose c d \relative c'' {
      \Key
      c1 | c | c |
    }
    trpHarmony = \transpose c' d {
      \jazzChords
    }
    trumpet = {
      \global
      \set Staff.instrumentName = #"Trumpet"
      \clef treble
      <<
        \trpt
      >>
    }

    % ------ Alto Saxophone ------
    alto = \transpose c a \relative c' {
      \Key
      c1 | c | c |
    }
    altoHarmony = \transpose c' a {
      \jazzChords
    }
    altoSax = {
      \global
      \set Staff.instrumentName = #"Alto Sax"
      \clef treble
      <<
        \alto
      >>
    }

    % ------ Baritone Saxophone ------
    bari = \transpose c a' \relative c {
      \Key
      c1
      c1
      \sl
      d4^"Solo" d d d
      \nsl
    }
    bariHarmony = \transpose c' a \chordmode {
      \jazzChords s1 s d2:maj e:m7
    }
    bariSax = {
      \global
      \set Staff.instrumentName = #"Bari Sax"
      \clef treble
      <<
        \bari
      >>
    }

    % ------ Trombone ------
    tbone = \relative c {
      \Key
      c1 | c | c
    }
    tboneHarmony = \chordmode {
      \jazzChords
    }
    trombone = {
      \global
      \set Staff.instrumentName = #"Trombone"
      \clef bass
      <<
        \tbone
      >>
    }

    % ############ Rhythm Section #############

    % ------ Guitar ------
    gtr = \relative c'' {
      \Key
      c1
      \sl
      b4 b b b
      \nsl
      c1
    }
    gtrHarmony = \chordmode {
      \jazzChords
      s1 c2:min7+ d2:maj9
    }
    guitar = {
      \global
      \set Staff.instrumentName = #"Guitar"
      \clef treble
      <<
        \gtr
      >>
    }

    %% ------ Piano ------
    rhUpper = \relative c'' {
      \voiceOne
      \Key
      c1 | c | c
    }
    rhLower = \relative c' {
      \voiceTwo
      \Key
      e1 | e | e
    }

    lhUpper = \relative c' {
      \voiceOne
      \Key
      g1 | g | g
    }
    lhLower = \relative c {
      \voiceTwo
      \Key
      c1 | c | c
    }

    PianoRH = {
      \clef treble
      \global
      \set Staff.midiInstrument = #"acoustic grand"
      <<
        \new Voice = "one" \rhUpper
        \new Voice = "two" \rhLower
      >>
    }
    PianoLH = {
      \clef bass
      \global
      \set Staff.midiInstrument = "acoustic grand"
      <<
        \new Voice = "one" \lhUpper
        \new Voice = "two" \lhLower
      >>
    }

    piano = {
      <<
        \set PianoStaff.instrumentName = #"Piano"
        \new Staff = "upper" \PianoRH
        \new Staff = "lower" \PianoLH
      >>
    }

    % ------ Bass Guitar ------
    Bass = \relative c {
      \Key
      c1 | c | c
    }
    bass = {
      \global
      \set Staff.instrumentName = #"Bass"
      \clef bass
      <<
        \Bass
      >>
    }

    % ------ Drums ------
    up = \drummode {
      \voiceOne
      hh4 <hh sn> hh <hh sn>
      hh4 <hh sn> hh <hh sn>
      hh4 <hh sn> hh <hh sn>
    }
    down = \drummode {
      \voiceTwo
      bd4 s bd s
      bd4 s bd s
      bd4 s bd s
    }

    drumContents = {
      \global
      <<
        \set DrumStaff.instrumentName = #"Drums"
        \new DrumVoice \up
        \new DrumVoice \down
      >>
    }

    %%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%%

    \score {
      <<
        \new StaffGroup = "horns" <<
          \new Staff = "trumpet" \trumpet
          \new Staff = "altosax" \altoSax
          \new ChordNames = "barichords" \bariHarmony
          \new Staff = "barisax" \bariSax
          \new Staff = "trombone" \trombone
        >>

        \new StaffGroup = "rhythm" <<
          \new ChordNames = "chords" \gtrHarmony
          \new Staff = "guitar" \guitar
          \new PianoStaff = "piano" \piano
          \new Staff = "bass" \bass
          \new DrumStaff \drumContents
        >>
      >>

      \layout {
        \context { \RemoveEmptyStaffContext }
        \context {
          \Score
          \override BarNumber #'padding = #3
          \override RehearsalMark #'padding = #2
          skipBars = ##t
        }
      }

      \midi { }
    }

## Laissez vibrer ties

Laissez vibrer ties have a fixed size. Their formatting can be tuned using `'tie-configuration`.

    \relative c' {
      <c e g>4\laissezVibrer r <c f g>\laissezVibrer r
      <c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8

      <c d e f>4\laissezVibrer r
      \override LaissezVibrerTieColumn #'tie-configuration
         = #`((-7 . ,DOWN)
              (-5 . ,DOWN)
              (-3 . ,UP)
              (-1 . ,UP))
      <c d e f>4\laissezVibrer r
    }

## Piano template (simple)

Here is a simple piano staff with some notes.

    upper = \relative c'' {
      \clef treble
      \key c \major
      \time 4/4

      a4 b c d
    }

    lower = \relative c {
      \clef bass
      \key c \major
      \time 4/4

      a2 c
    }

    \score {
      \new PianoStaff <<
        \set PianoStaff.instrumentName = #"Piano  "
        \new Staff = "upper" \upper
        \new Staff = "lower" \lower
      >>
      \layout { }
      \midi { }
    }

## Piano template with centered dynamics

Many piano scores have the dynamics centered between the two staves. This requires a bit of tweaking to implement, but since the template is right here, you don’t have to do the tweaking yourself.

    global = {
      \key c \major
      \time 4/4
    }

    upper = \relative c'' {
      \clef treble
      a4 b c d
    }

    lower = \relative c {
      \clef bass
      a2 c
    }

    dynamics = {
      s2\fff\> s4 s\!\pp
    }

    pedal = {
      s2\sustainOn s\sustainOff
    }

    \score {
      \new PianoStaff = "PianoStaff_pf" <<
        \new Staff = "Staff_pfUpper" << \global \upper >>
        \new Dynamics = "Dynamics_pf" \dynamics
        \new Staff = "Staff_pfLower" << \global \lower >>
        \new Dynamics = "pedal" \pedal
      >>

      \layout {
        % define Dynamics context
        \context {
          \type "Engraver_group"
          \name Dynamics
          \alias Voice
          \consists "Output_property_engraver"
          \consists "Piano_pedal_engraver"
          \consists "Script_engraver"
          \consists "New_dynamic_engraver"
          \consists "Dynamic_align_engraver"
          \consists "Text_engraver"
          \consists "Skip_event_swallow_translator"
          \consists "Axis_group_engraver"

          pedalSustainStrings = #'("Ped." "*Ped." "*")
          pedalUnaCordaStrings = #'("una corda" "" "tre corde")
          \override DynamicLineSpanner #'Y-offset = #0
          \override TextScript #'font-size = #2
          \override TextScript #'font-shape = #'italic
          \override VerticalAxisGroup #'minimum-Y-extent = #'(-1 . 1)
        }
        % modify PianoStaff context to accept Dynamics context
        \context {
          \PianoStaff
          \accepts Dynamics
        }
      }
    }

    \score {
      \new PianoStaff = "PianoStaff_pf" <<
        \new Staff = "Staff_pfUpper" << \global \upper \dynamics \pedal >>
        \new Staff = "Staff_pfLower" << \global \lower \dynamics \pedal >>
      >>
      \midi { }
    }

## Piano template with centered lyrics

Instead of having a full staff for the melody and lyrics, lyrics can be centered between the staves of a piano staff.

    upper = \relative c'' {
      \clef treble
      \key c \major
      \time 4/4

      a4 b c d
    }

    lower = \relative c {
      \clef bass
      \key c \major
      \time 4/4

      a2 c
    }

    text = \lyricmode {
      Aaa Bee Cee Dee
    }

    \score {
      \new GrandStaff <<
        \new Staff = upper { \new Voice = "singer" \upper }
        \new Lyrics \lyricsto "singer" \text
        \new Staff = lower { \lower }
      >>
      \layout {
        \context {
          \GrandStaff
          \accepts "Lyrics"
        }
        \context {
          \Lyrics
          \consists "Bar_engraver"
        }
      }
      \midi { }
    }

## Piano template with melody and lyrics

Here is a typical song format: one staff with the melody and lyrics, with piano accompaniment underneath.

    melody = \relative c'' {
      \clef treble
      \key c \major
      \time 4/4

      a b c d
    }

    text = \lyricmode {
      Aaa Bee Cee Dee
    }

    upper = \relative c'' {
      \clef treble
      \key c \major
      \time 4/4

      a4 b c d
    }

    lower = \relative c {
      \clef bass
      \key c \major
      \time 4/4

      a2 c
    }

    \score {
      <<
        \new Voice = "mel" { \autoBeamOff \melody }
        \new Lyrics \lyricsto mel \text
        \new PianoStaff <<
          \new Staff = "upper" \upper
          \new Staff = "lower" \lower
        >>
      >>
      \layout {
        \context { \RemoveEmptyStaffContext }
      }
      \midi { }
    }

## Vocal ensemble template with automatic piano reduction

This template adds an automatic piano reduction to the standard SATB vocal score demonstrated in "Vocal ensemble template". This demonstrates one of the strengths of LilyPond – you can use a music definition more than once. If any changes are made to the vocal notes (say, `tenorMusic`), then the changes will also apply to the piano reduction.

    global = {
      \key c \major
      \time 4/4
    }

    sopMusic = \relative c'' {
      c4 c c8[( b)] c4
    }
    sopWords = \lyricmode {
      hi hi hi hi
    }

    altoMusic = \relative c' {
      e4 f d e
    }
    altoWords =\lyricmode {
      ha ha ha ha
    }

    tenorMusic = \relative c' {
      g4 a f g
    }
    tenorWords = \lyricmode {
      hu hu hu hu
    }

    bassMusic = \relative c {
      c4 c g c
    }
    bassWords = \lyricmode {
      ho ho ho ho
    }

    \score {
      <<
        \new ChoirStaff <<
          \new Lyrics = sopranos { s1 }
          \new Staff = women <<
            \new Voice = sopranos { \voiceOne << \global \sopMusic >> }
            \new Voice = altos { \voiceTwo << \global \altoMusic >> }
          >>
          \new Lyrics = altos { s1 }
          \new Lyrics = tenors { s1 }
          \new Staff = men <<
            \clef bass
            \new Voice = tenors { \voiceOne <<\global \tenorMusic >> }
            \new Voice = basses { \voiceTwo <<\global \bassMusic >> }
          >>
          \new Lyrics = basses { s1 }
          \context Lyrics = sopranos \lyricsto sopranos \sopWords
          \context Lyrics = altos \lyricsto altos \altoWords
          \context Lyrics = tenors \lyricsto tenors \tenorWords
          \context Lyrics = basses \lyricsto basses \bassWords
        >>
        \new PianoStaff <<
          \new Staff <<
            \set Staff.printPartCombineTexts = ##f
            \partcombine
            << \global \sopMusic >>
            << \global \altoMusic >>
          >>
          \new Staff <<
            \clef bass
            \set Staff.printPartCombineTexts = ##f
            \partcombine
            << \global \tenorMusic >>
            << \global \bassMusic >>
          >>
        >>
      >>
      \layout {
        \context {
          % a little smaller so lyrics
          % can be closer to the staff
          \Staff
          \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
        }
      }
    }

#### Snippets List