LilyPond snippets: Percussion

# Percussion

Percussion

## Adding drum parts

Using the powerful pre-configured tools such as the `\drummode` function and the `DrumStaff` context, inputting drum parts is quite easy: drums are placed at their own staff positions (with a special clef symbol) and have note heads according to the drum. Attaching an extra symbol to the drum or restricting the number of lines is possible.

    drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh hhc8 hho hhc8 hh16 hh hhc4 r4 r2 }
    drl = \drummode { bd4 sn8 bd bd4 << bd ss >>  bd8 tommh tommh bd toml toml bd tomfh16 tomfh }
    timb = \drummode { timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb }

    \score {
      <<
        \new DrumStaff \with {
          drumStyleTable = #timbales-style
          \override StaffSymbol #'line-count = #2
          \override BarLine #'bar-extent = #'(-1 . 1)
        } <<
          \set Staff.instrumentName = #"timbales"
          \timb
        >>
        \new DrumStaff <<
          \set Staff.instrumentName = #"drums"
          \new DrumVoice { \stemUp \drh }
          \new DrumVoice { \stemDown \drl }
        >>
      >>
      \layout { }
      \midi {
        \context {
          \Score
          tempoWholesPerMinute = #(ly:make-moment 120 4)
        }
      }
    }

## Heavily customized polymetric time signatures

Though the polymetric time signature shown was not the most essential item here, it has been included to show the beat of this piece (which is the template of a real Balkan song!).

    #(define plus (markup #:vcenter "+"))
    #(define ((custom-time-signature one two three four five six
                                     seven eight nine ten eleven num) grob)
       (grob-interpret-markup grob
                              (markup #:override '(baseline-skip . 0) #:number
                                      (#:line ((#:column (one num)) plus
                                               (#:column (two num)) plus
                                               (#:column (three num)) plus
                                               (#:column (four num)) plus
                                               (#:column (five num)) plus
                                               (#:column (six num)) plus
                                               (#:column (seven num)) plus
                                               (#:column (eight num)) plus
                                               (#:column (nine num)) plus
                                               (#:column (ten num)) plus
                                               (#:column (eleven num)))))))
    melody = \relative c'' {
      \set Staff.instrumentName = #"Bb Sop."
      \key g \major
      #(set-time-signature 25 8 '(3 2 2 3 2 2 2 2 3 2 2))
      \override Staff.TimeSignature #'stencil =
        #(custom-time-signature "3" "2" "2" "3" "2" "2"
          "2" "2" "3" "2" "2" "8")
      c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break
      c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4
      c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
      c4. d4 c4 d4. c4 d c2 d4. e4-^ d4
      c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break
    }

    drum = \new DrumStaff \drummode {
      \bar "|:" bd4.^\markup { Drums } sn4 bd \bar ":" sn4.
      bd4 sn \bar ":" bd sn bd4. sn4 bd \bar ":|"
    }

    {
      \melody
      \drum
    }

## 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 { \Staff \RemoveEmptyStaves }
        \context {
          \Score
          \override BarNumber #'padding = #3
          \override RehearsalMark #'padding = #2
          skipBars = ##t
        }
      }
      \midi { }
    }

## Percussion beaters

Graphic symbols for percussion instruments are not natively supported; however it is possible to include such symbols, either as an external EPS file or as embedded PostScript code inside a markup, as demonstrated in this example.

    stick = \markup {
      \with-dimensions #'(0 . 5) #'(0 . 5)
      \postscript #"
        0 6 translate
        0.8 -0.8 scale
        0 0 0 setrgbcolor
        [] 0 setdash
        1 setlinewidth
        0 setlinejoin
        0 setlinecap
        gsave [1 0 0 1 0 0] concat
        gsave [1 0 0 1 -3.5406095 -199.29342] concat
        gsave
        0 0 0 setrgbcolor
        newpath
        7.1434065 200.94354 moveto
        7.2109628 200.90454 7.2785188 200.86554 7.3460747 200.82654 curveto
        8.2056347 202.31535 9.0651946 203.80414 9.9247546 205.29295 curveto
        9.8571989 205.33195 9.7896429 205.37095 9.7220864 205.40996 curveto
        8.8625264 203.92115 8.0029664 202.43233 7.1434065 200.94354 curveto
        closepath
        eofill
        grestore
        gsave
        0 0 0 setrgbcolor
        newpath
        4.9646672 203.10444 moveto
        5.0036707 203.03688 5.0426744 202.96933 5.0816777 202.90176 curveto
        6.5704792 203.76133 8.0592809 204.6209 9.5480824 205.48045 curveto
        9.5090791 205.54801 9.4700754 205.61556 9.4310717 205.68311 curveto
        7.94227 204.82356 6.4534687 203.96399 4.9646672 203.10444 curveto
        closepath
        eofill
        grestore
        gsave
        <<
        /ShadingType 3
        /ColorSpace /DeviceRGB
        /Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441]
        /Extend [true true]
        /Domain [0 1]
        /Function <<
        /FunctionType 3
        /Functions
        [
        <<
        /FunctionType 2
        /Domain [0 1]
        /C0 [1 1 1]
        /C1 [0.72941178 0.72941178 0.72941178]
        /N 1
        >>
        ]
        /Domain [0 1]
        /Bounds [ ]
        /Encode [ 0 1 ]
        >>
        >>
        newpath
        7.6422017 200.76488 moveto
        7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto
        6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto
        6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto
        7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto
        closepath
        clip
        gsave [0.052859054 0.063089841 -0.020912282 0.017521108 5.7334261 189.76443] concat
        shfill
        grestore
        grestore
        0 0 0 setrgbcolor
        [] 0 setdash
        0.027282091 setlinewidth
        0 setlinejoin
        0 setlinecap
        newpath
        7.6422017 200.76488 moveto
        7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto
        6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto
        6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto
        7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto
        closepath
        stroke
        gsave
        <<
        /ShadingType 3
        /ColorSpace /DeviceRGB
        /Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441]
        /Extend [true true]
        /Domain [0 1]
        /Function <<
        /FunctionType 3
        /Functions
        [
        <<
        /FunctionType 2
        /Domain [0 1]
        /C0 [1 1 1]
        /C1 [0.72941178 0.72941178 0.72941178]
        /N 1
        >>
        ]
        /Domain [0 1]
        /Bounds [ ]
        /Encode [ 0 1 ]
        >>
        >>
        newpath
        5.2721217 202.83181 moveto
        5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto
        4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto
        4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto
        5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto
        closepath
        clip
        gsave [0.052859054 0.063089841 -0.020912282 0.017521108 3.363346 191.83136] concat
        shfill
        grestore
        grestore
        0 0 0 setrgbcolor
        [] 0 setdash
        0.027282091 setlinewidth
        0 setlinejoin
        0 setlinecap
        newpath
        5.2721217 202.83181 moveto
        5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto
        4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto
        4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto
        5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto
        closepath
        stroke
        grestore
        grestore
      "
    }

    \score {
      b1^\stick
    }

## Printing music with different time signatures

In the following snippet, two parts have a completely different time signature, yet remain synchronized. The bar lines can no longer be printed at the `Score` level; to allow independent bar lines in each part, the `Default_barline_engraver` and `Timing_translator` are moved from the `Score` context to the `Staff` context.

If bar numbers are required, the `Bar_number_engraver` should also be moved, since it relies on properties set by the `Timing_translator`; a `\with` block can be used to add bar numbers to the relevant staff.

    \paper {
      indent = #0
      ragged-right = ##t
    }

    global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } }

    \layout {
      \context {
        \Score
        \remove "Timing_translator"
        \remove "Default_bar_line_engraver"
        \remove "Bar_number_engraver"
        \override SpacingSpanner #'uniform-stretching = ##t
        \override SpacingSpanner #'strict-note-spacing = ##t
        proportionalNotationDuration = #(ly:make-moment 1 64)
      }
      \context {
        \Staff
        \consists "Timing_translator"
        \consists "Default_bar_line_engraver"
      }
      \context {
        \Voice
        \remove "Forbid_line_break_engraver"
        tupletFullLength = ##t
      }
    }

    Bassklarinette = \new Staff \with {
      \consists "Bar_number_engraver"
      barNumberVisibility = #(every-nth-bar-number-visible 2)
      \override BarNumber #'break-visibility = #end-of-line-invisible
    } <<
      \global {
        \bar "|"
        \clef treble
        \time 3/8
        d''4.

        \bar "|"
        \time 3/4
        r8 des''2( c''8)

        \bar "|"
        \time 7/8
        r4. ees''2 ~

        \bar "|"
        \time 2/4
        \tupletUp
        \times 2/3 { ees''4 r4 d''4 ~ }

        \bar "|"
        \time 3/8
        \tupletUp
        \times 3/4 { d''4 r4 }

        \bar "|"
        \time 2/4
        e''2

        \bar "|"
        \time 3/8
        es''4.

        \bar "|"
        \time 3/4
        r8 d''2 r8
        \bar "|"
      }
    >>

    Perkussion = \new StaffGroup <<
      \new Staff <<
        \global {
          \bar "|"
          \clef percussion
          \time 3/4
          r4 c'2 ~

          \bar "|"
          c'2.

          \bar "|"
          R2.

          \bar "|"
          r2 g'4 ~

          \bar "|"
          g'2. ~

          \bar "|"
          g'2.
        }
      >>
      \new Staff <<
        \global {
          \bar "|"
          \clef percussion
          \time 3/4
          R2.

          \bar "|"
          g'2. ~

          \bar "|"
          g'2.

          \bar "|"
          r4 g'2 ~

          \bar "|"
          g'2 r4

          \bar "|"
          g'2.
        }
      >>
    >>

    \score {
      <<
        \Bassklarinette
        \Perkussion
      >>
    }

#### LilyPond — Snippets