Musica Mensurabilis Early Modern Music

Contrapuntal diagrams in Lilypond

Milsomgrams

Over the past decade or so, John Milsom has developed an idiosyncratic presentation of contrapuntal analysis of music in Josquin’s generation and beyond1, 2, 3, 4, 5. Figure 1 below demonstrates how the beginning of the famous Absalon motet is rendered under such a diagram 6

Figure 1: Crop of example 1 from Surface, Structure and ‘Style’, page 263

Figure 1: Crop of example 1 from Surface, Structure and ‘Style’, page 263

Figure 2 below shows the beginning from Josquin’s famous Ave maria… virgo serena 7:

Figure 2: Crop of example 1 from The T-Mass: quis scrutatur?, page 322

Figure 2: Crop of example 1 from The T-Mass: quis scrutatur?, page 322

These diagrams provides a uncluttered way of visualising the counterpoint inside each point of imitation. The relationships between pairs of voices are easily visible, because only the thematic melodies are included, and the different noteheads help to differentiate between the voices. It can also be aligned in score with the original music for comparison.

Since these diagrams are clearly quite useful, I would like to reproduce them and write examples of my own. The features of these diagrams seem simple enough: beamed quavers with either void or filled noteheads which present the melodic contour of the imitation subjects while non essential notes (and time sigatures, barlines, key) are omitted and the rest of the staff is blank. What’s more, the results should look professional, and be done using free software if possible. Fortunately there is one software which is perfectly suited for this job: the incredible lilypond musical engraving software. Since it engraves from source code, both the code and output can be embedded in this blog entry as well, and its vast customisability make it eminently suitable for custom diagrams like this 8.

Since the lilypond manual contains some of the most comprehensive guide in any software, if you need help typesetting some basic multipart music, I would point you to its excellent tutorial. Consequently there will be no handholding in this post: I would mainly be pointing out some non obvious pitfalls that I encountered while trying to replicating the look of John Milsom’s diagrams.

First some housekeeping, where we set the default layout values and some useful functions in the header file. Since lilypond outputs to A4 by default, the following is necessary when we want to embed score fragments in a blog. The the is tangled the to header.ly in the working directory and include it in all the subsequent code snippets.

\version "2.19"
\paper{
  indent=0\mm
  oddFooterMarkup=##f
  oddHeaderMarkup=##f
  bookTitleMarkup=##f
  scoreTitleMarkup=##f
}
#(ly:set-option 'resolution #'300)
timeSigSymb =
#(define-music-function
     (parser location glyph)
     (markup?)
   #{
  \once \override Staff.TimeSignature.stencil = #ly:text-interface::print
  \once \override Staff.TimeSignature.text = #glyph
  #})
Code Snippet 1: Boilerplate code

Code attempt

The beginning of Josquin’s Ave Maria is one of the most recognisable and famous moments in all Renaissance music, so it’s natural that we shall start by by trying to replicate this example. First, we will typeset the section in modern scoring:

\include "header.ly"
     global = {
       \key c \major
       \time 4/2
       \timeSigSymb \markup {\musicglyph #"timesig.C22" }
       \override NoteHead.style = #'baroque
       \set Timing.defaultBarType = "'"
     }

     sopranonotes = \relative c'' {
       g1 c\breve  c1 d e c\breve r r
     }
     sopranowords = \lyricmode {
       A -- ve Ma -- ri -- _ a
     }

     altonotes = \relative c' {
       \clef "G_8"
       r\breve r\breve g1 c\breve c1 d e c\breve
     }
     altowords = \lyricmode {
       A -- ve Ma -- ri -- _ a
     }

     \score {
       \new ChoirStaff <<

         \new Staff <<
           \new Voice = "soprano" <<
             \global
             \sopranonotes
           >>
           \new Lyrics \lyricsto "soprano" \sopranowords
         >>

         \new Staff <<
           \new Voice = "alto" <<
             \global
             \altonotes
           >>
           \new Lyrics \lyricsto "alto" \altowords
         >>
       >>
     }
Figure 3: The opening of Ave Maria in modern score

Figure 3: The opening of Ave Maria in modern score

Then, we apply some initial simplification to arrive at the following

\include "header.ly"
<<
\relative c'' {
  \time 2/2
  \cadenzaOn
  g8[ c c c d e c c]
}
\\
\relative c' {
  \time 2/2
  \cadenzaOn
  s2
  g8[ c c c d e c c]
}
>>

Figure 4: The same section, reduced to untimed, beamed quavers

Figure 4: The same section, reduced to untimed, beamed quavers

In figure 4 we have already reproduced most of the features of the Milsom diagram, here’s what some of it means:

  1. To create two voices in a single staff, we can use the shortcut

    << ... \\ ... >>
    

    where the elipses indicate the music expressions for each voice

  2. We use s2 in the beginning of the lower voice to skip the duration of a minim, since we do not want any rests to appear

  3. \cadenzaOn removes bar lines and beaming, which we add back by beaming manually using square brackets [...]

Now it remains to change the notehead colour and remove the intervening stems and time signature. The notes are also a bit too close together, so we would need to increase their duration to make it easier to read and also match up with the original music in the core later on.

\include "header.ly"
\scaleDurations 8/1 {
<<
  \relative c'' {
    \omit Staff.TimeSignature
    \cadenzaOn
    \override Voice.NoteHead.stencil = #ly:text-interface::print
    \override Voice.NoteHead.text = \markup {\musicglyph #"noteheads.s1" }
    g8[ \hide Stem c c c d e c \undo \hide Stem c]
  }
  \\
  \relative c' {
    \time 2/2
    \cadenzaOn
    s2
    g8[ \hide Stem c c c d e c \undo \hide Stem c]
  }
>>
}

Figure 5: The same section, now with different noteheads and no stems on the middle notes

Figure 5: The same section, now with different noteheads and no stems on the middle notes

Looking good! Figure 5 has essentially replicated everything in Milsom’s contrapuntal diagrams. A few words for explanation:

  1. Hiding the stem is straightforward with the \hide command, it is reversed by the \undo command. They are still typeset, but not visible. In contrast the \omit command removes the time signature altogether, and consequently the gap between the first note and the clef is noticeably smaller.

  2. Changing the noteheads is a bit more awkward, we need to have the note values as quavers because we want the beam, which is automatically provided by lilypond. This means that we need to change the note heads separately. The method of changing to stencil to print text

    \override Voice.NoteHead.stencil = #ly:text-interface::print
    

    and then specifying what text to print in

    \override Voice.NoteHead.text = \markup {\musicglyph #"noteheads.s1" }
    

    seems convoluted, but is the more versatile and powerful option, since one can substitute any markup object as the notehead.

  3. \scaleDurations take an argument of a fraction and would not change the note values (though it would change the spacing), if you want to change the note values, then \shiftDurations is what you would use

We can even align the diagram with the original score if we wish

\include "header.ly"
global = {
  \key c \major
  \time 4/2
  \timeSigSymb \markup {\musicglyph #"timesig.C22" }
  \override NoteHead.style = #'baroque
  \set Timing.defaultBarType = "'"
}

sopranonotes = \relative c'' {
  g1 c\breve  c1 d e c\breve r\breve r\breve
}

sopranowords = \lyricmode {
  A -- ve Ma -- ri -- _ a
}

altonotes = \relative c' {
  \clef "G_8"
  r\breve r\breve g1 c\breve c1 d e c\breve
}
altowords = \lyricmode {
  A -- ve Ma -- ri -- _ a
}

\score {
  \new ChoirStaff <<

    \scaleDurations 8/1 {
      \new Staff <<
        \relative c'' {
          \omit Staff.TimeSignature
          \cadenzaOn
          \override Voice.NoteHead.stencil = #ly:text-interface::print
          \override Voice.NoteHead.text = \markup {\musicglyph #"noteheads.s1" }
          g8[ \hide Stem c c c d e c \undo \hide Stem c]
        }
        \\
        \relative c' {
          \time 2/2
          \cadenzaOn
          s2
          g8[ \hide Stem c c c d e c \undo \hide Stem c]
        }
      >>
    }

    \new Staff <<
      \new Voice = "soprano" <<
        \global
        \sopranonotes
      >>
      \new Lyrics \lyricsto "soprano" \sopranowords
    >>

    \new Staff <<
      \new Voice = "alto" <<
        \global
        \altonotes
      >>
      \new Lyrics \lyricsto "alto" \altowords
    >>
  >>
  \layout {
    \context {
      \Score
      \remove "Timing_translator"
      \remove "Default_bar_line_engraver"
    }
    \context {
      \Staff
      \consists "Timing_translator"
      \consists "Default_bar_line_engraver"
      \consists "Bar_number_engraver"
    }
  }
}
Figure 6: Lilypond typeset version of Example 1 in T-Mass: qis scrutatur?, page 322

Figure 6: Lilypond typeset version of Example 1 in T-Mass: qis scrutatur?, page 322

Using the diagram above we can description unambiguously the imitation in the opening of Josquin’s Ave Maria. In short, the subject makes counterpoint with itself. Since the second voice enters before the first voice has finished stating the subject, the two overlaps and the technical term for this type of overlapping entries is stretto fuga. The leader is answered at the lower octave after four units (L8/4u in Milsom’s notation), this makes good counterpoint for the four units which the two voices overlap (though not the only way to make good counterpoint with this subject, as we shall see).

Another example

So the diagrams can be done, if with a little effort, in lilypond. We can now typeset another example for illustration purposes. Antoine de Fevin used Josquin’s motet as a starting point for his Missa Ave Maria. In the opening of the Kyrie he borrowed the melody of subject but used them in new combinations not found in Josquin’s opening gambit. The relationships are given in Ex. 4 from Milsom’s paper7, which we shall attempt to reproduce in diagram 7 below.

\include "header.ly"
\score {
  \scaleDurations 8/1 {
    <<
  \new StaffGroup <<
      \new Staff <<
        \new Voice
        \relative c'' {
          \omit Staff.TimeSignature
          \cadenzaOn
          \stemUp
          \override Voice.NoteHead.stencil = #ly:text-interface::print
          \override Voice.NoteHead.text = \markup {\musicglyph #"noteheads.s1" }
          s2 s8
          g8[^\markup {\circle P}
             \hide Stem c c c d e c \undo \hide Stem c]
        }
      >>

      \new Staff <<
        \new Voice
        \relative c' {
          \omit Staff.TimeSignature
          \clef "bass"
          \cadenzaOn
          \stemUp
          \override Voice.NoteHead.stencil = #ly:text-interface::print
          \override Voice.NoteHead.text = \markup {\musicglyph #"noteheads.s1" }
          g8[^\markup {\circle Q}
             \hide Stem c c c d e c \undo \hide Stem c]
        }
        \new Voice
        \relative c {
          \time 2/2
          \cadenzaOn
          \stemDown
          s8
          c8[_\markup {\circle R}
             \hide Stem f f f g a f \undo \hide Stem f]
          s2
        }
      >>
    >>

  \new StaffGroup <<
    \override StaffGroup.SystemStartBracket.collapse-height = #4
    \override Score.SystemStartBar.collapse-height = #4
      \new Staff <<
        \new Voice
        \relative c' {
          \omit Staff.TimeSignature
          \cadenzaOn
          \stemDown
          \override Voice.NoteHead.stencil = #ly:text-interface::print
          \override Voice.NoteHead.text = \markup {\musicglyph #"noteheads.s1" }
          s8
          c8[ \hide Stem f f f
              \once \override Voice.NoteHead.X-offset = #0.1
              g a f \undo \hide Stem f]
        }
        \new Voice
        \relative c'' {
          \time 2/2
          \cadenzaOn
          \stemUp
          s2 s8
          g8 [ \hide Stem c c c d e c \undo \hide Stem c]
        }
      >>
    >>
  >>
  }
  \layout {
    \context {
      \Score
      \remove "Timing_translator"
      \remove "Default_bar_line_engraver"
    }
    \context {
      \Staff
      \consists "Timing_translator"
      \consists "Default_bar_line_engraver"
      \consists "Bar_number_engraver"
    }
  }
}

Figure 7: Lilypond typeset version of Example 4 in T-Mass: qis scrutatur?, page 323

Figure 7: Lilypond typeset version of Example 4 in T-Mass: qis scrutatur?, page 323

Some comments about the additional tweaks in order to produce the score fragment to look exactly like it appears in Milsom’s paper

  1. The stem direction of each voice can be specified using the \stemUp and \stemDown commands

  2. In the last line the g (5th note) in the lower voice collides with g in the upper voice (1st note). Since lilypond automatically merges all notes with the same values, we need to shift it in the X direction so both notes are visible

    \once \override Voice.NoteHead.X-offset = #0.1
    
  3. By default, lilypond does not provide brackets to staffgroups with only one staff in them. In order to produce the bracket in the lower staff the following command is needed

    \override StaffGroup.SystemStartBracket.collapse-height = #4
    \override Score.SystemStartBar.collapse-height = #4
    

Figure 7 demonstrates the new interlock possibility of Josquin’s original subject in the opening of Fevin’s Kyrie. In other words, they demonstrate the other ways in which Josquin’s subject can overlap with itself and still make good counterpoint. Since it would be impossible (and even if it were feasible, undesirable) for most pieces to systematically explore all possible combinative potentials of a subject, it falls to works like Fevin’s Missa Ave Maria, which are based on pre-existing compositions and usually substantially longer than the originals, to explore the inherent possibilities of the materials in the original. Indeed, putting old wines in new bottles and shedding new light on familiar materials is the primary objective of most of these sixteenth century masses which are based on existing polyphonic models.

In this particular case, Fevin has brought four new relationships to the table. Entries P and Q form interlock B (at the upper octave, or U8/5u), and Entries Q and R form interlock C (at the lower fifth, L5/1u). When the three entries are presented simultaneously, as Fevin does in the middle of Kyrie I, we form a new interlock D between entry R and P (upper octave, U5/4u). Furthermore, the simultaneos unfolding of interlock C and B provides a three voice stretto which is also a new relationship.

Fevin’s contributions are just a link in the chain, for Senfl and Ludwig Daser also wrote compositions based on Josquin’s motet, and also took Fevin’s contributions in mind when they too added to the fresh perspective. In Dr Milsom’s words7:

Evidently each composer first deduced the lattices of interlocks, then converted them into polyphony for four or six voices. By silently pondering examples 1 to 8, we therefore come close to understanding the composers’ mentalities when making these polyphonic passages.

Conclusion

To summarise, the three most important steps needed to replicate the nice looking diagrams in Milsom’s papers using Lilypond are:

  1. Disable barring (\cadenzaOn) and time signature (\omit)
  2. Remove intervening stems using \hide
  3. Remove merging of unison note by modifying Voice.NoteHead.X-offset

  1. Milsom, John. Playing with Plainchant, Josquin and the Sublime, 2011, Pages 23-47 ↩︎

  2. Milsom, John. Crecquillon, Clemens, and Four-voice “Fuga”, Beyond Contemporary Fame, 2006, Pages 293-345 ↩︎

  3. Milsom, John. Absorbing Lassus, Early Music, Volume 33, Issue 1, Feb. 2005, Pages 99-114 ↩︎

  4. Milsom, John. Josquin and the Combinative Impulse, The motet around 1500, 2012, Pages 211-246 ↩︎

  5. Milsom, John. Making a motet: Josquin’s Ave Maria… virgo serena, The Cambridge History of Fifteenth-Century Music, 2015, Pages 183-199 ↩︎

  6. Milsom, John. Surface, Structure and ‘Style’ in /Absalon fili mi. Essays on Renaissance Music in Honour of David Fallows, 2011, Pages 261-271 ↩︎

  7. Milsom, John. The T-Mass: quis scrutatur?. Early Music, Volume 46, Issue 2, July 2018, Pages 319–331, https://doi.org/10.1093/em/cay019 ↩︎

  8. In fact, this is how all the score fragments on this blog are generated. ↩︎