Feature Explanations

EXPLANATION OF THIS SECTION

This section describes all of the features that jSymbolic extracts. It was originally drawn largely from Chapter 4 of Cory McKay's dissertation, although many improvements and clarifications have been made since then, and many new features have been added.

Note that, although many of the feature descriptions below use MIDI-specific terminology, they are all compatible with alternative formats that jSymbolic can extract features from, such as MEI. Part of what jSybmolic does when encountering MEI files is to convert them to MIDI data in a very rich way, such that all the MIDI-related features can be extracted from them. MEI data that cannot be encoded as MIDI is maintained in a separate data pipeline, and features can be extracted from this pipeline as well (see the section below on MEI-specific features).

If a feature cannot be calculated for whatever reason for a given piece of music, the default behavior is to save a value of -1 for one-dimensional features, and null for multi-dimensional features.

FEATURES BASED ON OVERALL PITCH STATISTICS

The majority of traditional analytical systems place a particular emphasis on information related to pitch and, as one would expect, this type of information certainly has important value with respect to symbolic features as well. This first set of pitch-related features focuses on overall statistics on the pitches present in a piece, without regard to the temporal location of notes in relation to one another (features that do, in contrast, account for the context of notes and their pitches are presented in other sections below).

One particularly useful approach to calculating statistical features is to construct histograms, which consist of a set of bins each indicating some measurable quantity (e.g. how often each possible pitch occurs in a piece), and where the magnitude (or "frequency") of each bin indicates how often that quantity occurs in the piece. The jSymbolic feature catalogue uses modified versions of the three pitch histograms implemented by Tzanetakis and his colleagues (Tzanetakis and Cook 2002; Tzanetakis, Ermolinskyi and Cook 2002; Tzanetakis 2002).

The first type of histogram is a basic pitch histogram. It consists of 128 bins, one for each MIDI pitch. The magnitude of each bin is first set to the number of Note On messages in the piece with the corresponding pitch, and the histogram is normalized after all Note On messages have been accounted for. This type of histogram gives particular insights into the range and variety of pitches used in a piece.

To provide practical examples, the first figure below shows the basic pitch histogram for a Duke Ellington jazz piece, and the second shows the histogram for a Dr. Dre rap song. A number of genre-typical differences are immediately apparent from even a rough visual comparison of these two histograms, such as the fact that the rap song uses far fewer pitches than the jazz piece, for example.

The second type of histogram is called a pitch class histogram. It has one bin for each of the twelve pitch classes, which means that it is essentially a version of the basic pitch histogram where octaves are collapsed for each of the pitch classes. The magnitude of each bin is set to the number of Note On messages with a MIDI pitch that can be wrapped to this pitch class, with enharmonic equivalents assigned to the same pitch class number. The histogram is normalized, and the bins are translated so that the first bin corresponds to the pitch class with the highest magnitude, with the successive bins ordered chromatically in semitone increments. This type of histogram provides insights into areas such as the types of scales used and the amount of transposition that is present, for example.

The third type of histogram is called a folded fifths pitch class histogram, and is derived directly from the pitch class histogram. This histogram is calculated by reordering the bins of the original unordered pitch class histogram such that adjacent bins are separated by perfect fifths rather than semitones. This is done using the following equation:

B = (7a)mod(12)

where B is the folded fifths pitch histogram bin and a is the corresponding pitch class histogram bin. The number seven is used because this is the number of semitones in a perfect fifth, and the number twelve is used because there are twelve pitch classes in total. This histogram is useful for measuring dominant-tonic relationships and for looking at types of transpositions.

The utility of the folded fifths pitch histogram can be seen by comparing the first figure below, which shows the folded fifths pitch histogram for a Baroque Vivaldi concerto, with the second figure below, which shows the folded fifths pitch histogram for an atonal Schoenberg piano miniature. The Vivaldi piece never or rarely uses five of the twelve pitch classes, and the pitch classes that are used are clustered around one section of the circle of fifths. These are characteristics that one would typically expect of basic tonal music without many tonally distant modulations or significant use of chromaticism. In contrast, all of the pitch classes are used to a significant degree in the Schoenberg piece, and the most frequently used pitch classes are not clustered together on the circle of fifths, both of which are characteristics that one would expect of such an atonal piece.

All three of these histogram types are included directly as features in the jSymbolic feature catalogue, and are also used to calculate a number of other features.

Part of the challenge of histogram-related features is that one must find a way to represent the information embedded in them as useful features. Although histograms like the three described above certainly can be used directly as feature vectors (and they certainly can be with jSymbolic), experience has shown that machine learning algorithms can sometimes have trouble learning to extract useful information from them in this raw form if they are too large. Feature histograms are, however, very useful in providing an intermediate data structure from which other features can be extracted. Experience has shown informally that the two highest peaks of histograms tend to be of particular importance in extracting such information, and they are used as the basis for a number of features.

It should be noted that most of the jSymbolic features represent pitch as MIDI does, with 128 pitches (numbered 0 to 127), and with middle C set at note 60. A disadvantage with this approach, of course, is that enharmonic equivalents are assigned the same pitch number. Although this is not ideal, as it involves the loss of some potentially useful information, it is unavoidable given the need to be able to parse MIDI files and compare features extracted from MIDI files with features extracted from files in formats such as MEI. Fortunately, most of the jSymbolic features are not impacted by this loss of information. If one wishes to exclusively extract features from formats such as MEI that do distinguish between enharmonic equivalents, then jSymbolic can certainly still be used, although one will need to implement MEI-specific features (see below) that take advantage of jSymbolic's existing pipeline of MEI-specific data.

It should also be mentioned that all notes occurring on MIDI channel ten are ignored for all of the features described in this section. This is because the "pitch" values on channel ten correspond to (mostly unpitched) percussion instruments, not to pitches.

Some of the features in this section are based on MIDI Pitch Bends. Although the use of Pitch Bends is somewhat variable from MIDI encoder to MIDI encoder, and therefore not entirely dependant on the music itself, features relating to Pitch Bends can nonetheless have a high discriminating power, so they are included here. Efforts were made to use features with as limited a sensitivity to non-musical factors as possible.

The jSymbolic feature catalogue includes the following features related to overall pitch statistics:

FEATURES BASED ON MELODIC INTERVALS

Although features based on overall pitch statistics are often meaningful and useful, they do not reflect information relating to the order in which pitches occur. Melody is a very important part of how many humans hear and think about music, so features based on such sequential information are needed to complement features based on overall pitch statistics. Fortunately, ample theoretical work has been done that can be taken advantage of when designing melodic features, ranging from compositional resources like manuals on writing Baroque counterpoint, to more analytically formulated ideas like melodic contour.

Unfortunately, the tasks of detecting and partitioning musical phrases and melodies, and of determining which notes belong to which phrases, are not trivial. Although expert humans can perform such tasks relatively easily, automatic systems for performing them have still achieved only limited general success, particularly in cases where the notes in a phrases are shared across voices. So, although a phrase detection pre-processing system would make many potentially useful melodic features accessible, such a system is not currently available.

What one can do fairly easily, however, is collect basic statistics about melodic intervals and melodic motion. Although such statistics may be relatively rudimentary compared to expert melodic analyses, they can still potentially be very effective in performing classifications. One can also extract somewhat more sophisticated features related to melodic contour by making a few naive but often effective basic assumptions, such as the assumptions that all notes belonging to a phrase will be on the same MIDI channel and that phrases will each follow the overall shape of a basic concave or converse arc. Although such assumptions are clearly false, and certainly not acceptable for any wide-ranging analytical framework, they do make it possible to extract some potentially discriminating higher-level melodic features without a sophisticated phrase detection system.

A melodic interval histogram is proposed here as a way of facilitating the extraction of certain basic features relating to melodic intervals. Each bin of this histogram represents a different melodic interval, and is labeled with an index indicating the number of semitones in the interval. The magnitude of each bin is set to the number of Note On messages in the piece that have a pitch interval from the preceding Note On message on the same MIDI channel corresponding to the bin label. The direction of the interval (i.e., up or down in pitch) is ignored in this histogram. The histogram is then normalized, so that the magnitude of each bin indicates the fraction of all melodic intervals that correspond to the melodic interval of the given bin.

This histogram clearly has a few limitations. It treats all voices equally, for example, even though the highest line of a piece often carries the most significant melodic information. It is also problematic for polyphonic instruments such as pianos that can play harmonies or multiple melodies simultaneously. It is, however, a quick and easy approach that has been found experimentally to often be helpful in discriminating between classes.

Another intermediate data structure is also used to help calculate some of the features listed below. This consists of a list of MIDI channels, where each entry of the list contains an array. Each array entry corresponds to a MIDI channel, and each entry in the array consists of a list of all melodic intervals, in semitones, for the associated channel. The numbers representing the intervals in this second intermediate data structure are set to negative for downward motion and to positive for upward motion.

Once again, all notes occurring on MIDI channel ten are ignored for all of the features described in this section. This is because the “pitch” values on channel ten correspond to percussion instruments, not to pitches.

The jSymbolic feature catalogue includes the following features related to melody and melodic intervals:

FEATURES BASED ON CHORDS AND VERTICAL INTERVALS

Chords in general, and tonal harmony in particular, are the areas that have typically received the most attention in traditional Western analytical systems. It is essential to point out that the existing theoretical frameworks based on tonal harmony do not apply to many kinds of music, as they were developed primarily with respect to Western classical music. As a consequence, most of the chord-based features proposed as part of the jSymbolic feature library are not based on harmonic function, and emphasize instead basic statistical information about the vertical intervals between pitches that sound simultaneously. Having recognized this, it is once again important to recall that features are useful simply if they help to differentiate between classes statistically, even if they are inspired by theoretical assumptions that do not apply to some of the music under consideration. There are therefore certain features in the jSymbolic catalogue that make use of certain basic concepts that are specific to Western harmonic theory.

Two new histograms are proposed as intermediate data structures for calculating chord-based structures. The first, called a vertical interval histogram, consists of bins associated with different vertical intervals and labeled with the number of semitones in the corresponding interval. The magnitude of each bin is found by going through a recoding MIDI tick by MIDI tick and noting all vertical intervals that are sounding at each tick, as well as the MIDI velocities of the pair of notes involved in each vertical interval. This is done exhaustively, so that multiple vertical intervals will be noted per tick if there are more than two pitches sounding simultaneously. The histogram is then normalized. The end result is a histogram that indicates which vertical intervals are present, and how significant these vertical intervals are relative to one another, with a weighting based on both MIDI velocity and the aggragated durations with which each interval is held throughout the piece. This is reasonable, since long notes often have greater harmonic significance than short notes, and stressed notes tend to be more harmonically important than notes played more softly. This histogram does not incorporate any tonal assumptions, although it does require quantization into the twelve standard Western pitches (i.e. microtones are not considered). Another histogram, the wrapped vertical interval histogram, is also found: it simply consists of the vertical interval histogram wrapped by octave, such that there are 12 bins.

It is also potentially useful to have a histogram that can be used to extract features more directly related to tonal harmony, since many music classification projects do involve music based on the basic chord ontologies of Western music. A chord type histogram is generated with this need in mind. This is a normalized histogram that has bins labeled with types of chords (in the following order and with the indicated identifying codes): partial chords consisting of just two pitch classes [0], minor triads [1], major triads [2], diminished triads [3], augmented triads [4], other triads [5], minor seventh chords [6], dominant seventh chords [7], major seventh chords [8], other chords consisting of four pitch classes [9], and complex chords with more than four pitch classes [10]. The bin magnitudes are calculated by going through MIDI ticks one by one and incrementing the counter for the bin that corresponds to the chord, if any, that is present during each given tick; the result is that the chords in this histogram are weighted by the duration with which each chord is played. All inversions are treated as equivalent and octave doubling is ignored in the calculation of this histogram.

None of these histograms provide any information about arpeggiation, unfortunately, but some information related to this is collected during the melodic feature extraction. A more sophisticated system in the future could integrate vertical statistics with arpeggios, and could also collect information about inversions as well as chord transitions in order to obtain more sophisticated and accurate features.

Once again, all notes occurring on MIDI channel ten are ignored for all of the features described in this section. This is because the "pitch" values on channel ten correspond to percussion instruments, not to pitches.

The jSymbolic feature catalogue includes the following features related to chords and vertical intervals:

FEATURES BASED ON RHYTHM

Before delving into the details of the rhythm related features, it should be noted that they are annotated using a numbering system that divides them into two groups. The "R" group features are not influenced by tempo or note dynamics, and the "RT" group features are influenced by tempo and, sometimes, by dynamics. This division is adopted because, depending on the particular research application, it is sometimes useful to have features that take information related to such performance information into account (e.g. if the corpus from which features are to be extracted is meticulously encoded in a way that consistently makes use of this information), and it is sometimes useful to omit this information (e.g. if the corpus holds music drawn from different sources that encoded the music differently, and where the encodings themselves could therefore bias feature values). Sometimes it might be useful to use just the R features, sometimes just the RT features and sometimes both; the decision is left to the user based on the particular research project the user is interested in.

The two elementary pieces of information from which most rhythmic features can be calculated are the times at which notes begin ("note onsets") relative to one another, and the durations of individual notes. Note onsets can be extracted relatively reliably from audio data, at least in cases where note density is not too high, but durations can be more difficult to extract reliably. In the case of symbolic data, however, both note onsets and durations are easily and precisely available. As one might expect, several of the rhythmic features that are based on note onsets in the jSymbolic catalogue are similar to features that are often used in audio feature extraction systems. Duration-based features, in contrast, are very rarely currently used by audio feature extraction software, but are included in the jSymbolic feature catalogue.

Before proceeding to discuss the details of the jSymbolic rhythmic feature catalogue, it is important to emphasize certain details of how MIDI files encode rhythmic information; these must be considered when designing rhythmic features, whether for jSymbolic or for some other MIDI-compatible software. Time is measured in MIDI files using regular pulses called "ticks." The duration of each quantized quarter note is assigned a set number of ticks, referred to as "Pulses Per Quarter Note" or "PPQ." The time rate at which ticks go by is set by MIDI tempo meta-events, which in effect control the time duration of each tick (the default MIDI tempo is 120 BPM, if no tempo meta-events specify it explicitly). MIDI tempo is specified in terms of "beats per minute" or "BPM," where each beat in MIDI is considered to be a quarter note (regardless of the time signature). These tempo meta-events can occur at any point in a MIDI sequence, which means that the tempo can be different at different points in the same MIDI sequence. The PPQ setting, in contrast, is constant throughout each sequence. So, the number of ticks associated with a quarter note never changes within a given MIDI sequence, but the time duration of a quarter note will change if a tempo meta-event changes the time duration of these ticks at some point in the sequence.

One can determine the time duration of a note by counting the number of ticks that go by between a MIDI Note On and its associated Note Off, and combining this with the duration of these ticks as set by the tempo. One can also determine the rhythmic value (e.g. half note, eighth note, etc.) of a note by counting the ticks between a Note On and the corresponding Note Off, and then combining this with the PPQ setting.

One disadvantage of symbolic data is that some important rhythmic features are related to performance characteristics that are not always available in symbolic data, or available in only a very coarse sense. For example, musical scores may indicate that a piece should be played rubato or with a swing rhythm. There is a great deal of variety in the ways in which these rhythmic performance styles can be interpreted, something that can be of essential importance for tasks such as performer identification. Although certain symbolic formats (including MIDI) can represent relatively precise note start and end timings, and many recorded MIDI performances do indeed take advantage of this, MIDI files generated using score editing software are often strictly quantized rhythmically, which means that performance timing information is not always consistently available. Conversely, sometimes one might prefer for music theoretical reasons that performance interpretation be taken out of the equation, in which case non-quantized rhythms must be quantized in order to be interpreted consistently.

Happily, jSymbolic processing allows features associated with both quantized and non-quantized rhythms to be extracted, as suits a given musical task's needs. Related to this, several of the rhythm features described below are based on various histograms. These histograms are used partly done to statistically smooth over inconsistencies due to rhythm encoding style, and partly simply because such histograms can yield useful features in general.

The first rhythm-related histogram generated by jSymbolic, which focuses on note durations rather than note onsets, is called the rhythmic value histogram. It is is a normalized histogram where the value of each bin specifies the fraction of all notes in the piece with a quantized rhythmic value corresponding to that of the given bin. The bins are numbered as follows: thirty second notes (or less)s [0], sixteenth notes [1], eighth notes [2], dotted eighth notes [3], quarter notes [4], dotted quarter notes [5], half notes [6], dotted half notes [7], whole notes [8], dotted whole notes [9], double whole notes [10] and dotted double whole notes (or more ) [11].

Both pitched and unpitched notes are included in this histogram. Tempo is, of course, not relevant to this histogram. Notes with durations not precisely matching one of these rhythmic note values are mapped to the closest note value (to filter out the effects of rubato or uneven human rhythmic performances, for example). This histogram is calculated without regard to the dynamics, voice or instrument of any given note.

jSymbolic also generates two additional histograms based on quantized rhythmic values: the rhythmic value median run lengths histogram and the rhythmic value variability in run lengths histogram. These each have twelve bins matching the same rhythmic values associated by the rhythmic value histogram, but instead of being based on the fraction of these rhythmic values overall, they are concerned with how long same-voice runs of notes with the same rhythmic value are.

An entirely different type of rhythm-related histogram generated by jSymbolic is the beat histogram, which focuses on note onsets rather than durations (unlike the rhymic value histogram, which looks at durations). Beat histograms are an approach that was first applied to MIR research by Brown (1993), and was later publicized and used for automatic genre classification by Tzanetakis and his colleagues in a number of papers (Tzanetakis, Essl & Cook 2001; Tzanetakis & Cook 2002; Tzanetakis 2002).

It is necessary to have some understanding of how autocorrelation works in order to understand how beat histograms are constructed. Autocorrelation essentially involves comparing a signal with versions of itself delayed by successive intervals. This technique is often used to find repeating patterns in signals of any kind, as it yields the relative strengths of different periodicities within a signal. In terms of musical data, autocorrelation allows one to find the relative strengths of different rhythmic pulses. jSymbolic constructs its rhythmic histograms by processing sequences of MIDI Note On events, with MIDI ticks comprising the time scale. The value is calculated to be proportional to the velocity of Note Ons in order to ensure that beats are weighted based on the strength with which notes are played. The values of lag correspond to both rhythmic periodicities as well as, after processing, the bin labels of the beat histogram, and the autocorrelation values provide the magnitude value for each bin. Calculations use the overall average tempo of the piece, in order to emphasize the metrical notation of the recording, and do thus do not take into account tempo variations in the piece due to the potential presence of multiple tempo MIDI meta-events.

Once the histogram is populated using all permissible values of lag for a given MIDI sequence, jSymbolic then downsamples and transforms it so that each bin corresponds to a rhythmic periodicity with units of beats per minute. The histogram is then normalized so that different MIDI sequences can be compared. The end result is a histogram whose bins correspond to rhythmic pulses with units of beats per minute and whose bin magnitudes indicate the relative strength of each such rhythmic pulse. In effect, a beat histogram portrays the relative strength of different beats and sub-beats within a piece.

Consider, for example, the beat histograms extracted from MIDI representations of I Wanna Be Sedated, by the punk band The Ramones, and ’Round Midnight, by the jazz performer and composer Thelonious Monk, as shown below. It is clear that I Wanna Be Sedated has significant rhythmic looseness, as demonstrated by the spread around each peak, each of which represents a strong beat periodicity. I Wanna Be Sedated also has several clear strong beats, including ones centered at 55, 66, 82, 111 (the actual tempo of the song) and 164 beats per minute, the latter two of which are harmonics of 55 and 82 beats per minute. ’Round Midnight, in contrast, has one very strong beat at 76 beats per minute, the actual tempo of the piece, and a wide range of much lower-level beat strengths. This indicates that, as might be expected, ’Round Midnight is more rhythmically complex and is also performed more tightly.

This type of information can be very representative of different musical classes, such as genre. Techno, for example, often has very clearly defined beats, without any surrounding spread, because the beats are precisely generated electronically. Much modern Classical music, to provide a contrasting example, often has much less clearly defined beats.

The jSymbolic feature catalogue includes the following rhythm-related features that are not influenced by tempo, and that are also (unless noted) not influenced by note dynamics:

The jSymbolic feature catalogue also includes the following rhythm-related features that are influenced by tempo and (sometimes) note dynamics. Note that, for all these features, if no tempo is explicitly specified, then the default MIDI tempo of 120 BPM is used in the calculation of these features when necessary:

FEATURES BASED ON INSTRUMENTATION

Although there is a significant amount of literature on instrumentation with respect to composing and arranging, very few music analytical systems take instrumentation into consideration. This is a shame, as information on instrumentation can in fact be very helpful in discriminating between certain types of musical classes.

As was the case with the feature types presented above, histograms are also useful both as feature vectors and as intermediate data structures for calculating other features. Five instrumentation histograms in particular are used: the Pitched Instruments Present, Unpitched Instruments Present, Note Prevalence of Pitched Instruments, Note Prevalence of Unpitched Instruments and Time Prevalence of Pitched Instruments histograms. Each of these is described below.

The jSymbolic software capitalizes on the fact that the General MIDI (level 1) specification allows MIDI files to include 128 different pitched-instrument patches, and the MIDI Percussion Key Map permits a further 47 percussion instruments. Although these MIDI instruments are certainly much fewer in number than the full range of extant instruments, particularly with respect to non-Western musics, they are nonetheless diverse enough for a reasonable variety of musical types.

MIDI instrumentation notation can be somewhat sensitive to encoding inconsistencies between different MIDI authors in some cases. In a few fortunately rare cases, authors fail to specify patch numbers, with the result that all notes are played using a piano patch by default. Another problem is the inconsistency in the choice of patches that are used to represent sung lines, since there is no good General MIDI patch for solo vocal lines. Similarly, there are some inconsistencies in MEI with respect to how various instruments are specified.

Despite these occasional problems, however, features based on instrumentation can still be highly characteristic of various musical categories, and the complementary use of other types of features can help to counterbalance inconsistencies in individual authors’ choices of patches.

The jSymbolic feature catalogue includes the following instrumentation-related features:

FEATURES BASED ON MUSICAL TEXTURE

Although the term "texture" is associated with several different musical meanings, the features falling into this category of the jSymbolic catalogue relate specifically to the number of independent voices in a piece and how these voices relate to one another.

jSymbolic takes advantage of the fact that MIDI notes can be assigned to different channels, thus making it possible to segregate the notes belonging to different voices. Although it might seem natural to use MIDI tracks instead of channels to distinguish between voices, since only a maximum of sixteen MIDI channels are available, this is an ineffective approach in practice. Using MIDI tracks would mean that it would be impossible to extract texture-based features from all Type 0 MIDI files, since this format only allow permits a single track to be represented. Even in the case of Type 1 files, which do allow tracks to be specified, it is still not unusual to find all MIDI data saved on a single track in practice. Almost all MIDI files do use different channels for different voices, however, and it is possible to take advantage of Program Change messages to multiplex multiple voices onto a single channel in order to avoid being restricted to only sixteen voices. It was therefore decided to use MIDI channels in order to distinguish between voices rather than MIDI tracks.

This approach is not perfect, as it is possible to use a single channel to hold multiple voices even without regular program change messages. A piano could be used to play a four-voice chorale, for example, with all notes occurring on one MIDI channel. This problem is unavoidable with respect to MIDI data, unfortunately, unless one implements a sophisticated voice partitioning pre-processing module to automatically segregate voices prior to feature extraction, something that is beyond the current scope of this work. Fortunately, this problem does not occur often in MIDI files.

An astute reader will also note that some of the features below pay special attention to the loudest voice, which is to say to voice with the highest average MIDI velocity. This is an imperfect but often effective method for guessing which voice carries the melody, or is in some other way the most important voice.

The jSymbolic feature catalogue includes the following texture-related features:

FEATURES BASED ON DYNAMICS

The ways in which musical dynamics are used in a piece can also be characteristic of different types of musical classes. Once again, however, this information is only rarely used in traditional analytical systems, and is generally notated only very coarsely in musical scores. Fortunately, MIDI velocity values make it possible to annotate dynamics much more precisely, even though MIDI encodings generated by score editing software admittedly generally fail to take full advantage of this.

One important point to consider with respect to MIDI dynamics is that, while MIDI velocities are generally used to indicate the strength with which notes are sounded, this is not the only way in which loudness is controlled. MIDI channel volume can also be changed independently. jSymbolic takes this into account by using the following formula to find loudness values used to calculate the features described in this sub-section:

loudness = note velocity x (channel volume / 127)

It should also be noted that all of the jSymbolic features related to dynamics use relative measures of loudness rather than absolute measures because the default volume and velocity values set by sequencers can vary.

The jSymbolic feature catalogue includes the following features related to dynamics:

MEI-SPECIFIC FEATURES

There is certain information that cannot be encoded in MIDI files, due to limitations of the MIDI format. jSymbolic provides access to this data through a separate data pipeline, which can be accessed by MEI-specific features, such as the sample features listed below.

MEI-specific features rely on information that is available in MEI files, but cannot be encoded in MIDI files. These features should only be used when extracting features from a musical collection consisting exclusively of MEI files, as a feature set extracted from a mixture of MIDI and MEI files would be inconsistent if MEI-specific features are made available for MEI instances but not for MIDI instances.

The jSymbolic feature catalogue includes the following MEI-specific features:

-top of page-