The applet below gives a demonstration of software under development to derive a quasi-Schenkerian reduction from a musical score. This is the version existant at April 2007 and referred to in my ISMIR 2007 paper. The latest version can be found here.
A Java plug-in version 1.5 or greater is required to run this applet, and it must be registered as the default Java system for your browser. The applet will be replaced by updated versions as the project progresses, or removed, without notice.
Description of the project of which this forms a part, and a paper describing the theory and background, can be found here.
The software is not thoroughly tested and so probably contains errors. It is also currently extremely slow (the examples take several minutes to reduce). However, the time taken is not related exponentially to the length of the music to be reduced, so it is realistic to expect that reasonable speeding-up is possible. It is related exponentially to the number of simultaneous notes at each point, however, and a priority in further development is to avoid the proliferation of segments of notes which differ marginally but are functionally the same, and to avoid segments which unnecessarily contain more than a few notes. (The abbreviation already built into the system is evident from the much smaller number of segments in the final reductions compared to the many thousands sometimes found in the process of reduction.)
Several other deficiencies will also be a topic of further development. Currently duration and metre are not represented or considered in any way, and no assumptions are made about the assignment of notes to voices except that voice-crossing is avoided. (This will be a topic of future research, since voice-crossing does occasionally occur in actual pieces.) There is no concept of a bass voice, and the lowest notes at each point are currently handled in the same way as every other note. The treatment of harmony and tonality in reductions is currently rather loose. Some bizarre reductions are included among the possibilities derived by the software, but it is often to possible to see that these are indeed possible interpretations if one ignores rhythm, allows very complex elaborations, and considers the possibility of the music being analysed occurring as part of a wider context which might make this locally unlikely interpretation valid in the larger context.
The music must be represented as a sequence of 'segments' of simultaneous notes. Long notes which extend across a single segment must be split into several tied notes. Ties are indicated by an underscore ("_") before and/or after the pitch name. In reductions a sequence of passing notes can be represented as a single 'note'. In these cases the representation begins with "c" for a chromatic sequence, "p" for a diatonic one, and "a" for an arpeggio. This is followed by the pitch on which the sequence starts and the pitch towards which it passes. Pitches are represented internally in a 12-note scale. The 'spelling' used in the displays (e.g. C# or Db) is determined by the "Pitch-class spelling" buttons. When entering pitches, any valid combination of letter name (A-G), accidental (any sequence from "x#snfbd" or none), and octave number (ISO, i.e., "C4" = middle C) is acceptable. A rest is indicated by a segment with no notes in it.
Before a reduction is made, new segments may be inserted before or after the current segment by clicking one of the "New Segment" buttons. Pitches may then be entered into the "Notes" table. Clicking the "Redraw" button causes the display of the surface segments below to be updated. The pitches of existing segments may also be edited in the "Notes" table. The indices of the current segment are indicated in the "row" and "column" fields. The buttons "Back" and "Fwd" may be used to move from one segment to the other.
Alternatively, one of three examples may be loaded with the "Load Example" buttons. The three examples are extracted from Beethoven piano sonata op.27, no2, Mozart K.494, and Schumann's Erster Verlust from Clavierstükcke für die Jugend.
The software derives a matrix of segments which contains within it all the possible valid reductions of the music. Each cell of the reduction spans two or more of the 'surface' segments on row 0. Each cell contains a number of segments, each of which is a possible reduction at this point. These segments are derived by reducing each possible pair of segments below them. For example, the cell in row 1 columns 0-1 will contain all the segments which can validly arise from the reduction of segments 0 and 1 in row 0. The cell in row 2 columns 0-2 will contain the segments which arise from reducing row 0 column 0 with the segments in row 1 column 1-2, and also the segments which arise from reducing row 1 column 0-1 with row 0 column 2. The segments in row 3 column 0-3 will come from row 0 column 0 with row 2 column 1-3, row 1 column 0-1 with row 1 column 2-3, and row 2 column 0-2 with row 0 column 3. An actual reduction of the piece can be found by selecting a segment from those in the top row, then selecting a pair of segments from which this segment was derived, and recursively selecting the pairs from which those segments were derived, until the surface is reached.
Once a piece is reduced, the applet shows a representation of the matrix which gives the pitches in all segments in each cell, and the percentage of segments in the cell which contain that pitch. This same information is given in the table above, where the user may move from cell to cell using the "Up", "Down", "Back" and "Fwd" buttons. The table at the right gives the pitches in one of the possible segments of a cell. The user may move through the list of possible segments using the "Previous" and "Next" buttons. Other information for each segment is the 'score' of that segment (including the best score accumulated from its children; a lower score is better), pitch classes required to be harmony notes and notes of the scale, and the notes required to exist in an immediately preceding or following segment to provide a context for suspensions, passing notes, etc.
Scoring methods will be a major topic of the research project. Four possible methods are implemented in the software: a count of the total number of notes in a reduction; a score from the total number of elaborations in a reduction (very simple elaborations like repetition, delay or shortening have a score of 1, others a score of 2); a score from the number of elaborations per note in a segment; and a score based on how frequently the notes of a segment occur in possible segments at this point in the reduction. The scoring method may be selected from the drop-down list. The "Rescore" button allows scores to be recalculated after segments have been deleted from a reduction.
Segments may be deleted from the matrix of possibilities to derive a particular reduction. A single reduction is found when all the notes have percentages of 100, the top cell of the matrix contains just one segment, and no cell of the matrix contains more than one segment. The "Delete" button at the right deletes the current segment from the matrix, and the "Select" button deletes all segments at this point in the reduction except the current segment. These deletions are propagated through the matrrix so that segments which consequently have no children and those which have no parent are also deleted. The "Clear" button in the centre deletes all the segments at this point in the matrix, and the "Select" button here forces the reduction to include a segment from this point, so all overlapping segments which start or end within this span are deleted.
The "Best scoring" button at the top deletes all but the highest-scoring segment(s) at the top of the reduction and then selects the highest-scoring children. The "Full" button restores the full matrix of possible segments. The "All" button shows all possible segments, plus those which are derived in the reduction process but which do not have any parents and so cannot be part of a complete reduction.