Last night, gMSE was put to use for the first time. The engine did a fantastic job and far exceeded my expectations! I used it to analyze several drum loops similar to those that GGrewve used as training material. The engine was able to reproduce the loops exactly.
Reproducing the loops may not seem like a big deal - since the same result could be achieved with a program that simply records the input pattern and spits it back out. But it's actually a huge triumph, because that's not how gMSE works. It breaks the pattern into small grammatical fragments, contextually analyzes each piece, and then reconstructs the pattern in the context of the composition. This method allows great flexibility in modifying the reconstruction of fragments.
Even more exciting is the fact that the reconstruction function takes one paramater - called power - that can be used to affect how much contextual score influences the output. Setting the function to a high power, such as 5 or 6, causes the input pattern to be reconstructed with no variation. A low power, like 1, causes the pattern to be very loosely reconstructed - with lots of (tasteful) variations. Numbers in between, like 2.5 or 3, tend to give a nice output pattern that isn't a replica of the input pattern, but doesn't go too crazy with variations. In effect, the entire "tightness" of the engine can be controlled with a single variable!
gMSE is also fast. Very fast. It performs a whole lot faster than I would have thought, considering how intensive the underlying MSE analysis is. At first, the engine was taking 7-8 seconds to generate all parts for a composition. After doing some serious optimizing of several core components of the MSE and mGN library, however, I managed to get the average runtime down to about 300 milliseconds - an extremely impressive feat! This speed means that I will be able to add more complex analysis factors without bogging down the engine.
A month of work on MSE and gMSE has finally paid off!