MKcomposer is still in the development stage. Although the vast majority of code is complete, and nearly all of the intended functionality has been added, it all still needs much refinement before it will be ready to start churning out music by the bucketfull. That aside, MKComposer has been composing small chunks at a time, and although the music it writes is not perfect, the results are quite encouraging. This page is meant to outline the nonperfect results thusfar.

MKComposer writes music by simply guessing what notes to write. If MKComposer has not been trained, and is in a state of tabula rasa, then its guesses are completely random. Here is a cantus firmus that MKComposer wrote in such a state (the rhythm was constrained to whole notes to keep it from getting too ugly):

Although this melody perhaps has a sort of recherche' artistic appeal, it is basically gobbeldygook, insofar as it does not adhere to any known compositional rules. When MKComposer is given music to read, its guesses become much less random through trial and error. For this example, MKComposer was shown several similar figures from the Gradus ad Parnassum, including this one. (Figure 82):

Then, when asked to compose, it wrote the following:

and again, without being retrained, it wrote this:

Although these examples both break many of the rules of counterpoint that are implicit in the training data, they also adhere to many of the rules. They are certainly much closer stylistically to the training data than was the first, random example. This turns out to be largely the result of insufficient training data. It turns out that there is not nearly as many examples in the Gradus as I had remembered, and the data that is there is inconsistent.

A much larger and more consistent set of data may be found in the "Bach 371 Harmonized Chorale Melodies". For the next round of testing, several similar chorales were selected: they were all in 4/4 time, and all in major keys, and for the training, they were all transposed to C. Although MKComposer is theoretically capable of understanding data presented in different keys, it would require a much larger body of training data (12 times as large) to produce the same results, and that did not seem appropriate for such an early round of testing. So when shown several examples including this one (shown here in its original key)

MKComposer went on to write the following (the very first thing it wrote after training):

The results are not perfect: in all of the training examples, all of the voices enter together on beat 4 of the first measure, so MKComposer should have not written such strange enterences here. Also, there are a few strange harmonies and examples of 'bad' voice leading not present in the traing data. Nonetheless, the voices are well separated in register, and there are also many examples of 'good' voice-leading and 'correct' harmonic progressions.

It should be noted that MKComposer does not know when or how to end a piece. Currently, it must be told how many measures to write, and it just writes those measures without doing anything special at the end. In the above example, MKComposer actually wrote more measures than are shown, and I later truncated the composition for sake of the example. Although the 'perfect authentic' cadence and it's voice leading are perfect, which is very impressive for a robot, MKComposer did not concieve this as the end of the piece.

Here is the second piece MKComposer wrote after being trained with the Bach. In this example, the end has not been modified: MKComposer was asked to write 10 measures, and it did so with no pomp at the end:

Again, many problems, but very encouraging results. Check back in coming months for breaking news on this front.

:/ root#