Customising MEI for lute tablature

Customising MEI for lute tablature

The Goldsmiths Computing team of Transforming Musicology holds a good deal of collected wisdom—and data—on encoding tablature sources for the lute. The ECOLM project (An Electronic Corpus of Lute Music) has so far enjoyed three phases of development during which an encoding method for lute tablature, TabCode, has been devised, a large corpus of sources has been encoded, and experiments have been carried out using optical music recognition and crowd-sourced corrections.

For Transforming Musicology's early music research strand we're interested in encoding mixed lute tablature/mensural/common practice notation documents. During the second phase of ECOLM, Frans Wiering (who is now our international co-investigator) did some work on an XML version of TabCode which we've taken as a starting point for customising the Music Encoding Initiative (MEI) guidelines to allow encoding lute tablature. As MEI already includes an extensive element vocabulary for common practice notation, and provisions for mensural notation, using it as a base and adding some elements specific to lute tablature seems a good approach to take.

David Lewis and I worked closely together on this. We took a few short excerpts of TabCode and began trying to re-encode them using just the vocabulary in the MEI guidelines. While MEI does make provision for guitar chord tablature (those little diagrams of the fret board that indicate which strings should be stopped at which frets), it doesn't provide anything suitable for lute tablature. Lute tablature is written on stave lines where each line represents a course on the instrument. Onto the lines are notated symbols indicated at which fret the course should be stopped. In some notations, those symbols are numbers (common in Italian sources) and in other notations they are letters (common in French sources). Above the stave, rhythmic symbols are notated which indicate the rhythm of the group of vertically aligned fret symbols below them. The image shows an example of some Italian tablature (from Gagliarda Prima printed in Primo Libro d'Intavolatura de balli by Giovanni Maria Radino in 1592):

Some Italian lute tablature


And here's an excerpt of the MEI we used to encode this:

<tabChord xml:id="c-8378ca3a-daa3-11e3-bc12-0021ccd2abe3">
  <rhythmSign xml:id="rs-99bad9b4-daa3-11e3-a9d4-0021ccd2abe3" symbol="H" />
<tabChord xml:id="c-8542877a-daa3-11e3-a2c8-0021ccd2abe3">
  <rhythmSign xml:id="rs-9b9882ea-daa3-11e3-b7eb-0021ccd2abe3" symbol="Q" />
  <tabNote xml:id="tn-59384700-daa3-11e3-a2fa-0021ccd2abe3" course="1">2</tabNote>
  <tabNote xml:id="tn-5b7ac272-daa3-11e3-985a-0021ccd2abe3" course="2">3</tabNote>
  <tabNote xml:id="tn-5bcdb84c-daa3-11e3-ba4e-0021ccd2abe3" course="3">3</tabNote>
  <tabNote xml:id="tn-5c00ebfe-daa3-11e3-970e-0021ccd2abe3" course="4">0</tabNote>
<barLine xml:id="bl-45f80d0a-daa9-11e3-a7de-0021ccd2abe3" rend="single" />

As you can see, we've added a few elements for tablature:

This represents a collection of vertically aligned, and simultaneously sounded pitches.
This encodes the durarion of a <tabChord>. When a chord has no indicated duration in lute tablature, it's duration is taken to be that of the previously notated rhythm sign.
This encodes a single note. The @course attribute gives the course, by number, to be played. The element then allows either text content for the actual symbol found in the source, or the symbol may be encoded in a @symbol attribute. <tabNote> also allows a @fret attribute for cases where the symbol/fret relationship is not obvious.

As well as these core elements, there are a variety of other markings commonly found in lute tablatures which we've included in our vocabulary, including: <tabBarre>, <ensembleLine>, <connectingLine>, and <separee>.

Along with the details of tablature notation, we also wanted to be able to encode information about different tunings that were commonly used. MEI's existing metadata provisions don't have anything as detailed as this so we created a second set of customisations which allow for detailed instrument descriptions (beyond just providing a name using <instrVoice>) and also allow describing the configuration of an instrument for a particular score. <instrDesc> may be a child of <instrVoice> and may include child elements including <instrName>. We've also made <instrDesc> a member of the @att.pointing class so that, instead of encoding the details of an instrument in the MEI document, you could link out to an external description, perhaps using some published Linked Data on musical instruments. Our instruments module also adds <instrConfig> as a child of <instrVoice> intended to describe the particular configuration of an instrument, for example, how it should be tuned.

In the lute tablature module we then added a couple of elements to be used in the <instrConfig> element to describe lute tuning:

This element lists the tuning of each course of the instrument
This element represents a course and is in the @att.pitched class so that the pitch of the course can be specified
Each <course> can optionally be made up of multiple <string>s which are also @att.pitched.
Describes the pitch of the bass course.

Here's an example:

<instrVoice solo="true" xml:id="instr-a6fc9c84-daa3-11e3-a44c-0021ccd2abe3" code="lute">
  <instrConfig label="baroque">
      <course n="1" pname="d" oct="5">
        <string pname="d" oct="5"/>
        <string pname="d" oct="4"/>
      <course n="2" pname="a" oct="5" />
      <course n="3" pname="f" oct="4" />
      <course n="4" pname="d" oct="4" />
      <course n="5" pname="a" oct="4" />
      <course n="6" pname="f" oct="3" />
      <course n="7" pname="e" oct="3" />
      <course n="8" pname="d" oct="3" />
      <course n="9" pname="c" oct="3" />
      <course n="10" pname="b" accid="b" oct="3" />
      <course n="11" pname="a" oct="3" />
    <bassTuning pname="c" mode="major"/>

The final feature we covered in this customisation is playing technique markings. While things like <tabBarre> and <separee> are arguably examples of notational elements which tell the performer how to play something, the much clearer example we've dealt with is fingering markings. We decided to put the <fingering> element in the instruments module as it's obviously applicable to more instruments than just lute. It includes the attributes @playingHand and @playingFinger to encode the meaning of the marking.

Thanks to recent work by Raffaele Viglianti, it's now possible to customise MEI using TEI ODD schema files. For this work, we produced two ODDs: one for the instruments module and one for the lute tablature module (which itself depends on the instruments module). The process of writing ODD schemata which make alterations to elements defined in other new schemata turned out to be under-specified. And during the course of working it out, we identified a bug in the TEI toolchain for processing schema files. The new schemata and the examples are now on github along with a quick description of the build process.

This is all still in draft, but any comments would be very welcome.